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 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 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.