diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-10-23 00:31:57 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-10-23 00:31:57 +0100 |
commit | 1bb3d5cfe29677d6b24b5d04e7508688dbf4954b (patch) | |
tree | f34c97ec28c08aa120a166e4caad8d21caee6246 /scripts/make_errors.py | |
parent | fae4284a643634c31830a130cf477b1b0f2cff7b (diff) |
Dropped duplicate classes in errors module
Also using a more compact class registration using a decorator
Diffstat (limited to 'scripts/make_errors.py')
-rwxr-xr-x | scripts/make_errors.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/scripts/make_errors.py b/scripts/make_errors.py index cdf299f6..6a59cf1a 100755 --- a/scripts/make_errors.py +++ b/scripts/make_errors.py @@ -114,11 +114,24 @@ def fetch_errors(versions): def generate_module_data(classes, errors): tmpl = """ +@for_sqlstate(%(errcode)r) class %(cls)s(%(base)s): - pass - -_by_sqlstate[%(errcode)r] = %(cls)s\ + pass\ """ + specific = { + '38002': 'ModifyingSqlDataNotPermittedExt', + '38003': 'ProhibitedSqlStatementAttemptedExt', + '38004': 'ReadingSqlDataNotPermittedExt', + '39004': 'NullValueNotAllowedExt', + 'XX000': 'InternalError_', + } + + seen = set(""" + Error Warning InterfaceError DataError DatabaseError ProgrammingError + IntegrityError InternalError NotSupportedError OperationalError + QueryCanceledError TransactionRollbackError + """.split()) + for clscode, clslabel in sorted(classes.items()): if clscode in ('00', '01'): # success and warning - never raised @@ -127,7 +140,14 @@ _by_sqlstate[%(errcode)r] = %(cls)s\ yield "\n\n# %s" % clslabel for errcode, errlabel in sorted(errors[clscode].items()): - clsname = errlabel.title().replace('_', '') + if errcode in specific: + clsname = specific[errcode] + else: + clsname = errlabel.title().replace('_', '') + if clsname in seen: + raise Exception("class already existing: %s" % clsname) + seen.add(clsname) + yield tmpl % { 'cls': clsname, 'base': get_base_class_name(errcode), |