summaryrefslogtreecommitdiff
path: root/scripts/make_errors.py
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-10-23 00:31:57 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-10-23 00:31:57 +0100
commit1bb3d5cfe29677d6b24b5d04e7508688dbf4954b (patch)
treef34c97ec28c08aa120a166e4caad8d21caee6246 /scripts/make_errors.py
parentfae4284a643634c31830a130cf477b1b0f2cff7b (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-xscripts/make_errors.py28
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),