Esempio n. 1
0
File: api.py Progetto: emosyne/crate
def json_get_toplevel_args(nlprp_request: JsonObjectType,
                           required: bool = True) -> JsonObjectType:
    """
    Returns the top-level arguments for a NLPRP request.

    Args:
        nlprp_request: the NLPRP request object
        required: are the args required?

    Returns:
        dict: the result

    Raises:
        :exc:`NlprpError` if the value is bad, or is missing and required.
    """
    value = nlprp_request.get(NlprpKeys.ARGS)
    if value is None:
        if required:
            raise key_missing_error(NlprpKeys.ARGS, is_args=True)
        else:
            return {}  # type: JsonArrayType
    if not isinstance(value, dict):
        mkerror(
            BAD_REQUEST,
            f"{NlprpKeys.ARGS!r} parameter not a JSON object (dictionary)")
    return value
Esempio n. 2
0
File: api.py Progetto: emosyne/crate
def json_get_value(x: JsonValueType,
                   key: str,
                   default: JsonValueType = None,
                   required: bool = False) -> JsonValueType:
    """
    Gets an JSON value (object, array, or literal) parameter from part of the
    JSON request.

    Args:
        x: a JSON object (dictionary)
        key: the name of the key
        default: the default value
        required: is the value required?

    Returns:
        the result, or the default

    Raises:
        :exc:`NlprpError` if the value is bad, or is missing and required.
    """
    value = x.get(key)
    if value is None:  # missing, or "null"
        if required:
            raise key_missing_error(key)
        else:
            return default
    if not isinstance(value, (dict, list, str, int, float, bool)):
        # None is covered above
        mkerror(BAD_REQUEST, f"{key!r} parameter not a JSON value")
    return value
Esempio n. 3
0
File: api.py Progetto: emosyne/crate
def json_get_object(x: JsonObjectType,
                    key: str,
                    required: bool = False) -> JsonObjectType:
    """
    Gets an object (dictionary) parameter from part of the JSON request.

    Args:
        x: a JSON object (dictionary)
        key: the name of the key
        required: is the object required?

    Returns:
        list: the result, or ``{}`` if the parameter is missing and
        ``required == False``.

    Raises:
        :exc:`NlprpError` if the value is bad, or is missing and required.
    """
    value = x.get(key)
    if value is None:  # missing, or "null"
        if required:
            raise key_missing_error(key)
        else:
            return {}  # type: JsonArrayType
    if not isinstance(value, dict):
        mkerror(BAD_REQUEST,
                f"{key!r} parameter not a JSON object (dictionary)")
    return value
Esempio n. 4
0
File: api.py Progetto: emosyne/crate
def json_get_array_of_str(x: JsonObjectType,
                          key: str,
                          required: bool = False) -> List[str]:
    """
    Gets an array of strings from part of the JSON request.

    Args:
        x: a JSON object (dictionary)
        key: the name of the key
        required: is the array required?

    Returns:
        list: the result, or ``[]`` if the parameter is missing and
        ``required == False``.

    Raises:
        :exc:`NlprpError` if the value is bad, or is missing and required.
    """
    value = x.get(key)
    if value is None:  # missing, or "null"
        if required:
            raise key_missing_error(key)
        else:
            return []  # type: JsonArrayType
    if not isinstance(value, list):
        mkerror(BAD_REQUEST, f"{key!r} parameter not a JSON array (list)")
    if not all(isinstance(x, str) for x in value):
        mkerror(BAD_REQUEST, f"Non-string value as part of {key!r}")
    return value
Esempio n. 5
0
File: api.py Progetto: emosyne/crate
def json_get_str(x: JsonObjectType,
                 key: str,
                 default: str = None,
                 required: bool = False) -> str:
    """
    Gets a string parameter from part of the JSON request.

    Args:
        x: a JSON object (dictionary)
        key: the name of the key
        default: the default value
        required: is it mandatory, or can it be missing or ``null``?

    Returns:
        str: the result, or the default

    Raises:
        :exc:`NlprpError` if the value is bad, or is missing and required.
    """
    value = x.get(key, default)
    if value is None:  # missing, or "null"
        if required:
            raise key_missing_error(key)
        else:
            return default
    if not isinstance(value, str):
        mkerror(BAD_REQUEST, f"{key!r} parameter not string")
    return value
Esempio n. 6
0
    def gen_text_metadatastr(self) -> Generator[Tuple[str, str], None, None]:
        """
        Generates text and metadata pairs from the request, with the metadata
        in string (serialized JSON) format.

        Yields:
            tuple: ``(text, metadata)``, as above
        """
        try:
            for document in self.content:
                text = json_get_str(document, NKeys.TEXT, required=True)
                metadata = json_get_value(document,
                                          NKeys.METADATA,
                                          default=None,
                                          required=False)
                metadata_str = json.dumps(metadata,
                                          separators=JSON_SEPARATORS_COMPACT)
                yield text, metadata_str
        except KeyError:
            raise key_missing_error(key=NKeys.TEXT)