summaryrefslogtreecommitdiff
path: root/scripts/make_errorcodes.py
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-09-05 20:09:07 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-09-05 20:26:19 +0100
commitc203d681c4503c4d554ce114fea66c4999e2f7a3 (patch)
tree127df7b8c1fe9ded5a228ab35fad53cc9ff457e1 /scripts/make_errorcodes.py
parent58c6a07e43b959b85ca4966b9f877801d502d51d (diff)
downloadpsycopg2-c203d681c4503c4d554ce114fea66c4999e2f7a3.tar.gz
Added duplicate values to errcodes module
Close #1133
Diffstat (limited to 'scripts/make_errorcodes.py')
-rwxr-xr-xscripts/make_errorcodes.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/scripts/make_errorcodes.py b/scripts/make_errorcodes.py
index 26269c7..118ff2f 100755
--- a/scripts/make_errorcodes.py
+++ b/scripts/make_errorcodes.py
@@ -36,6 +36,8 @@ def main():
classes, errors = fetch_errors(
['9.1', '9.2', '9.3', '9.4', '9.5', '9.6', '10', '11', '12'])
+ disambiguate(errors)
+
f = open(filename, "w")
for line in file_start:
print(line, file=f)
@@ -116,6 +118,18 @@ def fetch_errors(versions):
return classes, errors
+def disambiguate(errors):
+ """
+ Change name for exception defined more than once.
+
+ Change the first occurrence, because before introdcing the function
+ they were pretty much lost (see ticket #1133)
+ """
+ # Note: if some code is missing it will be caught downstream
+ for code in "01004 22004 2F002 2F003 2F004".split():
+ errors[code[:2]][code] += "_"
+
+
def generate_module_data(classes, errors):
yield ""
yield "# Error classes"
@@ -124,11 +138,16 @@ def generate_module_data(classes, errors):
.strip().replace(" ", "_").replace('/', "_").upper()
yield "CLASS_%s = %r" % (err, clscode)
+ seen = set()
+
for clscode, clslabel in sorted(classes.items()):
yield ""
yield "# %s" % clslabel
for errcode, errlabel in sorted(errors[clscode].items()):
+ if errlabel in seen:
+ raise Exception("error label already seen: %s" % errlabel)
+ seen.add(errlabel)
yield "%s = %r" % (errlabel, errcode)