Module tf.browser.ner.form
Machinery for request reading.
All form data comes as key value pairs where the values are strings. We need more streamlined values, in several data types and organizations. Also we need defaults for missing and / or empty values.
Classes
class Form (features,
defaults,
keysStr=[],
keysBool=[],
keysTri=[],
keysInt=[],
keysTup=[],
keysSetInt=[],
keysJson=[])-
Expand source code Browse git
class Form: def __init__( self, features, defaults, keysStr=[], keysBool=[], keysTri=[], keysInt=[], keysTup=[], keysSetInt=[], keysJson=[], ): """Remember the specification of data types and organization for form values. Parameters ---------- features: list The entity features in the tool; derives ultimately from `tf.ner.settings.Settings`, which reads the `ner/config.yaml` file. defaults: dict Provides default values for form keys with a missing or empty value. If the default should be a `None`, `False` or empty string value, nothing has to be specified. Only if the default is a specific meaningful value, it needs to be specified. keysStr,keysBool,keysTri,keysInt,keysTup,keysSetInt,keysJson: list See `tf.browser.ner.request.Request`. """ self.features = features self.defaults = defaults self.keysStr = keysStr self.keysBool = keysBool self.keysTri = keysTri self.keysInt = keysInt self.keysTup = keysTup self.keysSetInt = keysSetInt self.keysJson = keysJson def fgets(self, k): """Makes form value under key `k` or its default into an string.""" defaults = self.defaults return request.form.get(k, defaults.get(k, "")) def fget2(self, k): """Makes form value under key `k` or its default into an boolean.""" defaults = self.defaults return request.form.get(k, defaults.get(k, "x")) == "v" def fget3(self, k): """Makes form value under key `k` or its default into a 3-way boolean.""" formValue = self.fgets(k) return True if formValue == "v" else False if formValue == "x" else None def fgeti(self, k): """Makes form value under key `k` or its default into an integer.""" formValue = self.fgets(k) return int(formValue) if formValue and formValue.isdecimal() else None def fgettu(self, k): """Makes form value under key `k` or its default into a tuple. The values in the tuples are strings. The values are retrieved by splitting the original string value on `⊙` . """ formValue = self.fgets(k) return tuple(formValue.split("⊙")) if formValue else None def fgetsi(self, k): """Makes form value under key `k` or its default into a set. The values in the set are integers. The values are retrieved by splitting the original string value on `,` . Parts that do not form valid integers are skipped. """ formValue = self.fgets(k) return ( {int(i) for s in formValue.split(",") if (i := s.strip()).isdecimal()} if formValue else set() ) def fgetj(self, k): """Makes form value under key `k` or its default into a data structure. The data structure is retrieved by interpreting the original string as quoted JSON. """ formValue = self.fgets(k) return AttrDict() if formValue == "" else readJson(text=unquote(formValue)) def fill(self): """Fill a dictionary with interpreted form values. The input data is the request data from Flask, the output data are the logical values derived from them by the methods in this class. Returns ------- dict The filled in form. """ keysStr = self.keysStr keysBool = self.keysBool keysTri = self.keysTri keysInt = self.keysInt keysTup = self.keysTup keysSetInt = self.keysSetInt keysJson = self.keysJson form = AttrDict() for k in keysStr: form[k] = self.fgets(k) for k in keysBool: form[k] = self.fget2(k) for k in keysTri: form[k] = self.fget3(k) for k in keysInt: form[k] = self.fgeti(k) for k in keysTup: form[k] = self.fgettu(k) for k in keysSetInt: form[k] = self.fgetsi(k) for k in keysJson: form[k] = self.fgetj(k) return form
Remember the specification of data types and organization for form values.
Parameters
features
:list
- The entity features in the tool; derives ultimately from
Settings
, which reads thener/config.yaml
file. defaults
:dict
- Provides default values for form keys with a missing or empty value.
If the default should be a
None
,False
or empty string value, nothing has to be specified. Only if the default is a specific meaningful value, it needs to be specified.
keysStr,keysBool,keysTri,keysInt,keysTup,keysSetInt,keysJson: list See
Request
.Subclasses
Methods
def fget2(self, k)
-
Expand source code Browse git
def fget2(self, k): """Makes form value under key `k` or its default into an boolean.""" defaults = self.defaults return request.form.get(k, defaults.get(k, "x")) == "v"
Makes form value under key
k
or its default into an boolean. def fget3(self, k)
-
Expand source code Browse git
def fget3(self, k): """Makes form value under key `k` or its default into a 3-way boolean.""" formValue = self.fgets(k) return True if formValue == "v" else False if formValue == "x" else None
Makes form value under key
k
or its default into a 3-way boolean. def fgeti(self, k)
-
Expand source code Browse git
def fgeti(self, k): """Makes form value under key `k` or its default into an integer.""" formValue = self.fgets(k) return int(formValue) if formValue and formValue.isdecimal() else None
Makes form value under key
k
or its default into an integer. def fgetj(self, k)
-
Expand source code Browse git
def fgetj(self, k): """Makes form value under key `k` or its default into a data structure. The data structure is retrieved by interpreting the original string as quoted JSON. """ formValue = self.fgets(k) return AttrDict() if formValue == "" else readJson(text=unquote(formValue))
Makes form value under key
k
or its default into a data structure.The data structure is retrieved by interpreting the original string as quoted JSON.
def fgets(self, k)
-
Expand source code Browse git
def fgets(self, k): """Makes form value under key `k` or its default into an string.""" defaults = self.defaults return request.form.get(k, defaults.get(k, ""))
Makes form value under key
k
or its default into an string. def fgetsi(self, k)
-
Expand source code Browse git
def fgetsi(self, k): """Makes form value under key `k` or its default into a set. The values in the set are integers. The values are retrieved by splitting the original string value on `,` . Parts that do not form valid integers are skipped. """ formValue = self.fgets(k) return ( {int(i) for s in formValue.split(",") if (i := s.strip()).isdecimal()} if formValue else set() )
Makes form value under key
k
or its default into a set.The values in the set are integers. The values are retrieved by splitting the original string value on
,
. Parts that do not form valid integers are skipped. def fgettu(self, k)
-
Expand source code Browse git
def fgettu(self, k): """Makes form value under key `k` or its default into a tuple. The values in the tuples are strings. The values are retrieved by splitting the original string value on `⊙` . """ formValue = self.fgets(k) return tuple(formValue.split("⊙")) if formValue else None
Makes form value under key
k
or its default into a tuple.The values in the tuples are strings. The values are retrieved by splitting the original string value on
⊙
. def fill(self)
-
Expand source code Browse git
def fill(self): """Fill a dictionary with interpreted form values. The input data is the request data from Flask, the output data are the logical values derived from them by the methods in this class. Returns ------- dict The filled in form. """ keysStr = self.keysStr keysBool = self.keysBool keysTri = self.keysTri keysInt = self.keysInt keysTup = self.keysTup keysSetInt = self.keysSetInt keysJson = self.keysJson form = AttrDict() for k in keysStr: form[k] = self.fgets(k) for k in keysBool: form[k] = self.fget2(k) for k in keysTri: form[k] = self.fget3(k) for k in keysInt: form[k] = self.fgeti(k) for k in keysTup: form[k] = self.fgettu(k) for k in keysSetInt: form[k] = self.fgetsi(k) for k in keysJson: form[k] = self.fgetj(k) return form
Fill a dictionary with interpreted form values.
The input data is the request data from Flask, the output data are the logical values derived from them by the methods in this class.
Returns
dict
- The filled in form.