Modernize initial form value classes with attrs module
authorKarl O. Pinc <kop@karlpinc.com>
Fri, 22 Jan 2021 19:28:04 +0000 (13:28 -0600)
committerKarl O. Pinc <kop@karlpinc.com>
Fri, 22 Jan 2021 19:28:04 +0000 (13:28 -0600)
src/pgwui_core/core.py
tests/test_core.py

index d8d487c4c181542dca2cfa9c687c1d35f8704964..bf8f9fcb3c63113c933708fb18f086a160f8c0d6 100644 (file)
@@ -75,34 +75,34 @@ from pgwui_core.constants import (
 
 # Setup default values for forms.
 
+@attr.s
 class UserInitialPost():
-    def __init__(self, settings={}):
-        super().__init__()
+    db = attr.ib(default='')
+    user = attr.ib(default='')
+    password = attr.ib(default='')
+
+    def build(self, settings={}):
         self.db = settings['pgwui'].get('default_db', '')
-        self.user = ''
-        self.password = ''
+        return self
 
 
+@attr.s
 class UploadFileInitialPost(UserInitialPost):
-    def __init__(self, settings={}):
-        super().__init__(settings)
-        self.upload_fmt = CSV
-        self.trim_upload = True
-        self.literal_col_headings = False
-        self.datafile = ''
+    upload_fmt = attr.ib(default=CSV)
+    trim_upload = attr.ib(default=True)
+    literal_col_headings = attr.ib(default=False)
+    datafile = attr.ib(default='')
 
 
+@attr.s
 class UploadNullFileInitialPost(UploadFileInitialPost):
-    def __init__(self, settings={}):
-        super().__init__(settings)
-        self.upload_null = True
-        self.null_rep = ''
+    upload_null = attr.ib(default=True)
+    null_rep = attr.ib(default='')
 
 
+@attr.s
 class UploadTableInitialPost(UploadNullFileInitialPost):
-    def __init__(self, settings={}):
-        super().__init__(settings)
-        self.table = ''
+    table = attr.ib(default='')
 
 
 # The wtforms that suck data out of the html.
@@ -187,7 +187,7 @@ class LoadedForm(collections.abc.MutableMapping):
             store.update(kwargs)
         self._store = store
         self._fc = fc
-        self.ivals = fc.ivals(self.uh.request.registry.settings)
+        self.ivals = fc.ivals().build(self.uh.request.registry.settings)
 
     def __iter__(self):
         for item in self._store:
index e8d4a91db8c4265a72f5c9ee36ba5c98588ff4ef..1665b68ac818ac0890c26b2473d09b9a7d98d744 100644 (file)
@@ -27,7 +27,7 @@ from pgwui_core import core
 def test_userinitialpost_init():
     default_db = 'defaultdb'
     settings = {'pgwui': {'default_db': default_db}}
-    uip = core.UserInitialPost(settings)
+    uip = core.UserInitialPost().build(settings)
     assert uip.db == default_db
     assert uip.user == ''
     assert uip.password == ''