Use new attrs syntax
authorKarl O. Pinc <kop@karlpinc.com>
Thu, 21 Mar 2024 23:51:12 +0000 (18:51 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Thu, 21 Mar 2024 23:51:12 +0000 (18:51 -0500)
src/pgwui_core/core.py

index 7cc815e051012d0000eb2fcb8442daaa2f31d537..96c1549c9fdf6b5c179703ee76916905f1b22074 100644 (file)
@@ -35,7 +35,6 @@ More general description of the module.
 from csv import reader as csv_reader
 import collections.abc
 import ast
-import attr
 import attrs
 import markupsafe
 import hashlib
@@ -71,37 +70,37 @@ from pgwui_core.constants import (
 
 # Setup default values for forms.
 
-@attr.s
+@attrs.define(slots=False)
 class UserInitialPost():
-    db = attr.ib(default='')
-    user = attr.ib(default='')
-    password = attr.ib(default='')
+    db = attrs.field(default='')
+    user = attrs.field(default='')
+    password = attrs.field(default='')
 
     def build(self, settings={}):
         self.db = settings['pgwui'].get('default_db', '')
         return self
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadFileInitialPost(UserInitialPost):
-    upload_fmt = attr.ib(default=CSV)
-    trim_upload = attr.ib(default=True)
-    literal_col_headings = attr.ib(default=False)
-    datafile = attr.ib(default='')
+    upload_fmt = attrs.field(default=CSV)
+    trim_upload = attrs.field(default=True)
+    literal_col_headings = attrs.field(default=False)
+    datafile = attrs.field(default='')
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadNullFileInitialPost(UploadFileInitialPost):
-    upload_null = attr.ib(default=True)
-    null_rep = attr.ib(default='')
+    upload_null = attrs.field(default=True)
+    null_rep = attrs.field(default='')
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadTableInitialPostMixin():
-    table = attr.ib(default='')
+    table = attrs.field(default='')
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadTableInitialPost(UploadNullFileInitialPost,
                              UploadTableInitialPostMixin):
     pass
@@ -153,7 +152,7 @@ class UploadTableWTForm(UploadNullFileWTForm):
     table = StringField('Table or View:')
 
 
-@attr.s
+@attrs.define(slots=False)
 class LoadedForm(collections.abc.MutableMapping):
     '''
     Abstract class representing an upload form.
@@ -170,13 +169,13 @@ class LoadedForm(collections.abc.MutableMapping):
       _form   Instantaiated html form object (WTForms)
       _fc     Class handling html form
     '''
-    fc_default = attr.ib(default=None)
-    ip_default = attr.ib(default=None)
-    uh = attr.ib(default=None)
-    _store = attr.ib(factory=dict)
-    _fc = attr.ib(default=None)
-    _form = attr.ib(default=None)
-    ivals = attr.ib(default=None)
+    fc_default = attrs.field(default=None)
+    ip_default = attrs.field(default=None)
+    uh = attrs.field(default=None)
+    _store = attrs.field(factory=dict)
+    _fc = attrs.field(default=None)
+    _form = attrs.field(default=None)
+    ivals = attrs.field(default=None)
 
     def build(self, uh, fc=None, ip=None, data={}, **kwargs):
         '''Form initialization
@@ -235,7 +234,7 @@ class LoadedForm(collections.abc.MutableMapping):
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class CredsLoadedForm(LoadedForm):
     '''
     Acts like a dict, but with extra methods.
@@ -249,11 +248,11 @@ class CredsLoadedForm(LoadedForm):
     Methods:
       read()  Load form from pyramid request object.
     '''
-    fc_default = attr.ib(default=UserWTForm)
-    ip_default = attr.ib(factory=UserInitialPost)
-    user = attr.ib(default=None)
-    password = attr.ib(default=None)
-    action = attr.ib(default=None)
+    fc_default = attrs.field(default=UserWTForm)
+    ip_default = attrs.field(factory=UserInitialPost)
+    user = attrs.field(default=None)
+    password = attrs.field(default=None)
+    action = attrs.field(default=None)
 
     def session_put(self, key, value):
         '''
@@ -330,7 +329,7 @@ class CredsLoadedForm(LoadedForm):
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class AuthLoadedForm(CredsLoadedForm):
     '''
     Acts like a dict, but with extra methods.
@@ -344,7 +343,7 @@ class AuthLoadedForm(CredsLoadedForm):
       _form   Instantaiated html form object (WXForms)
 
     '''
-    db = attr.ib(default=None)
+    db = attrs.field(default=None)
 
     def read(self):
         '''
@@ -366,7 +365,7 @@ class AuthLoadedForm(CredsLoadedForm):
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadFileForm(AuthLoadedForm):
     '''
     Acts like a dict, but with extra methods.
@@ -377,13 +376,13 @@ class UploadFileForm(AuthLoadedForm):
     Methods:
       read()  Load form from pyramid request object.
     '''
-    fc_default = attr.ib(default=UploadFileWTForm)
-    ip_default = attr.ib(factory=UploadFileInitialPost)
-    upload_fmt = attr.ib(default=None)
-    trim_upload = attr.ib(default=None)
-    literal_col_headings = attr.ib(default=None)
-    filename = attr.ib(default=None)
-    localfh = attr.ib(default=None)
+    fc_default = attrs.field(default=UploadFileWTForm)
+    ip_default = attrs.field(factory=UploadFileInitialPost)
+    upload_fmt = attrs.field(default=None)
+    trim_upload = attrs.field(default=None)
+    literal_col_headings = attrs.field(default=None)
+    filename = attrs.field(default=None)
+    localfh = attrs.field(default=None)
 
     def read(self):
         '''
@@ -449,7 +448,7 @@ class UploadFormBaseMixin():
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadDoubleFileFormMixin(UploadFormBaseMixin):
     '''
     Adds a last_key attribute to self, from POST
@@ -462,7 +461,7 @@ class UploadDoubleFileFormMixin(UploadFormBaseMixin):
     Methods:
       read()  Load form from pyramid request object.
     '''
-    last_key = attr.ib(default=None)
+    last_key = attrs.field(default=None)
 
     def read(self):
         '''
@@ -484,7 +483,7 @@ class UploadDoubleFileFormMixin(UploadFormBaseMixin):
         return super().write_response(response)
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadDoubleFileForm(UploadDoubleFileFormMixin, UploadFileForm):
     '''
     Acts like a dict, but with extra methods.
@@ -510,7 +509,7 @@ class UploadDoubleFileForm(UploadDoubleFileFormMixin, UploadFileForm):
         return super().write_response(response)
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadNullMixin(UploadFormBaseMixin):
     '''
     Acts like a dict, but with extra methods.
@@ -543,7 +542,7 @@ class UploadNullMixin(UploadFormBaseMixin):
         return super().write_response(response)
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadTableForm(UploadNullMixin, UploadFileForm):
     '''
     Acts like a dict, but with extra methods.
@@ -554,8 +553,8 @@ class UploadTableForm(UploadNullMixin, UploadFileForm):
     Methods:
       read()  Load form from pyramid request object.
     '''
-    fc_default = attr.ib(default=UploadTableWTForm)
-    ip_default = attr.ib(factory=UploadTableInitialPost)
+    fc_default = attrs.field(default=UploadTableWTForm)
+    ip_default = attrs.field(factory=UploadTableInitialPost)
 
     def read(self):
         '''
@@ -576,7 +575,7 @@ class UploadTableForm(UploadNullMixin, UploadFileForm):
         return super().write_response(response)
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadDoubleTableForm(UploadDoubleFileFormMixin, UploadTableForm):
     '''
     Acts like a dict, but with extra methods.
@@ -1007,7 +1006,7 @@ class UploadData(DBData):
         return seq + ['' for i in range(len(seq) + 1, self.cols)]
 
 
-@attr.s
+@attrs.define(slots=False)
 class ParameterExecutor():
     '''Execute a parameterized psycopg3 statement
     Must be mixed in with a DataLineProcessor.  Unless all parameters
@@ -1149,7 +1148,7 @@ class ExecuteSQL(DataLineProcessor):
         sqlc.execute(self.cur)
 
 
-@attr.s
+@attrs.define(slots=False)
 class DBHandler():
     '''
     Abstract class of a handler that modifies the db.
@@ -1182,9 +1181,9 @@ class DBHandler():
       uf            An UploadForm instance
       data          Something (beyond what's on the form) that goes into db
     '''
-    request = attr.ib()
-    uf = attr.ib(default=None)
-    data = attr.ib(default=None)
+    request = attrs.field()
+    uf = attrs.field(default=None)
+    data = attrs.field(default=None)
 
     def init(self):
         '''Initialize handler
@@ -1261,7 +1260,7 @@ class DBHandler():
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class SessionDBHandler(DBHandler):
     '''
     A DBHandler that supports sessions.
@@ -1270,7 +1269,7 @@ class SessionDBHandler(DBHandler):
       uf            An UploadForm instance
       session       A pyramid session instance
     '''
-    session = attr.ib(default=None)
+    session = attrs.field(default=None)
 
     def init(self):
         '''
@@ -1297,7 +1296,7 @@ class SessionDBHandler(DBHandler):
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class UploadHandler(SessionDBHandler):
     '''
     Handler for uploading a file.
@@ -1408,7 +1407,7 @@ class UploadHandler(SessionDBHandler):
         return response
 
 
-@attr.s
+@attrs.define(slots=False)
 class TabularFileUploadHandler(UploadHandler):
     '''
     Handler for uploading a file with rows and columns and column headings.