FlaskService¶
- class elg.FlaskService(name: str = 'My ELG Service', path: str = '/process')¶
Class to help the creation of an ELG compatible service from a python model. Extra dependencies need to be install to use the FlaskService class. Please run: pip install elg[flask].
- to_json(obj)¶
Hook that can be overridden by subclasses to customise JSON encoding.
FlaskService can convert the following types to JSON by default, in addition to the types handled natively by json.dump:
date, time, datetime (via .isoformat())
uuid.UUID (converted to str)
any pydantic.BaseModel including the ELG message types (via .dict(by_alias=True, exclude_none=True))
anything Iterable (as a list)
any dataclass (converted to a dict via dataclasses.asdict)
anything with a __json__ or for_json method (which is expected to return a serializable type)
To handle other types, or to change the standard behaviour for any of the above types, subclasses can override this method, which will be called whenever an object other than a string, number, bool, list or dict must be serialized and is expected to return a JSON-serializable object to be used in place of the original, or None to fall back to the default behaviour.
The default implementation of this method always returns None.
- Parameters
obj – the object to convert
- Returns
a substitute object suitable for JSON serialization, or None to use the default behaviour.
- run()¶
Method to start the flask app.
- url_param(name: str)¶
Method to get give access to url parameters
- process(**kwargs)¶
Main request processing logic - accepts a JSON request and returns a JSON response.
- process_request(request)¶
Method to process the request object. This method only calls the right process method regarding the type of the request.
- process_text(request: TextRequest)¶
Method to implement if the service takes text as input.
- Parameters
request (TextRequest) – TextRequest object.
- process_structured_text(request: StructuredTextRequest)¶
Method to implement if the service takes structured text as input.
- Parameters
request (StructuredTextRequest) – StructuredTextRequest object.
- process_audio(request: AudioRequest)¶
Method to implement if the service takes audio as input.
- Parameters
request (AudioRequest) – AudioRequest object.
- process_image(request: ImageRequest)¶
Method to implement if the service takes image as input.
- Parameters
request (ImageRequest) – ImageRequest object.
- classmethod create_requirements(requirements: List = [], path: Optional[str] = None)¶
Class method to create the correct requirements.txt file.
- Parameters
requirements (List, optional) – List of required pip packages. Defaults to [].
path (str, optional) – Path where to generate the file. Defaults to None.
- classmethod create_docker_files(required_files: List[str] = [], required_folders: List[str] = [], commands: List[str] = [], base_image: str = 'python:3.8-slim', path: Optional[str] = None, log_level: str = 'INFO', workers: int = 1, timeout: int = 30, worker_class: str = 'sync')¶
Class method to create the correct Dockerfile.
- Parameters
required_files (List[str], optional) – List of files needed for the service. Defaults to [].
required_folders (List[str], optional) – List of folders needed for the service. Defaults to [].
commands (List[str], optional) – List off additional commands to run in the Dockerfile. Defaults to [].
base_image (str, optional) – Name of the base Docker image used in the Dockerfile. Defaults to ‘python:3.8-slim’.
path (str, optional) – Path where to generate the file. Defaults to None.
log_level (str, optional) – The minimum severity level from which logged messages should be displayed. Defaults to ‘INFO’.
workers (int, optional) – Number of Gunicorn workers. Defaults to 1.
timeout (int, optional) – Timeout value for the Gunicorn worker. Defaults to 30.
worker_class (str, optional) – Worker class value for the Gunicorn worker. Defaults to ‘sync’.
- classmethod docker_build_image(tag: str, pull: bool = True, path: Optional[str] = None, **kwargs)¶
Class method to do docker build … in python.
- classmethod docker_push_image(repository: str, tag: str, username: Optional[str] = None, password: Optional[str] = None, **kwargs)¶
Class method to do docker push … in python.