From ba43ad69e957d363f6cb168c4571d4b43f06d79d Mon Sep 17 00:00:00 2001 From: "Karl O. Pinc" Date: Thu, 21 Mar 2024 18:51:12 -0500 Subject: [PATCH] Use new attrs syntax --- src/pgwui_core/core.py | 113 ++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/src/pgwui_core/core.py b/src/pgwui_core/core.py index 7cc815e..96c1549 100644 --- a/src/pgwui_core/core.py +++ b/src/pgwui_core/core.py @@ -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. -- 2.34.1