flexget.api.app module#

exception flexget.api.app.APIError(message=None, payload=None)[source]#

Bases: Exception

Parameters:

message (str | None)

Return type:

None

classmethod schema()[source]#
to_dict()[source]#
description = 'Server error'#
response_model = <flask_restx.model.SchemaModel object>#
status = 'Error'#
status_code = 500#
exception flexget.api.app.BadRequest(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'Bad request'#
status_code = 400#
exception flexget.api.app.Conflict(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'Conflict'#
status_code = 409#
exception flexget.api.app.NotFoundError(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'Not found'#
status_code = 404#
exception flexget.api.app.NotModified(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'not modified'#
status_code = 304#
exception flexget.api.app.PreconditionFailed(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'Precondition failed'#
status_code = 412#
exception flexget.api.app.Unauthorized(message=None, payload=None)[source]#

Bases: APIError

Parameters:

message (str | None)

Return type:

None

description = 'Unauthorized'#
status_code = 401#
exception flexget.api.app.ValidationError(validation_errors, message='validation error')[source]#

Bases: APIError

Parameters:
  • validation_errors (list[SchemaValidationError])

  • message (str)

Return type:

None

_verror_to_dict(error)[source]#
Parameters:

error (SchemaValidationError)

Return type:

Mapping[str, str | list]

description = 'Validation error'#
response_model = <flask_restx.model.SchemaModel object>#
status_code = 422#
verror_attrs = ('message', 'cause', 'validator', 'validator_value', 'path', 'schema_path', 'parent')#
class flexget.api.app.API(app=None, version='1.0', title=None, description=None, terms_url=None, license=None, license_url=None, contact=None, contact_url=None, contact_email=None, authorizations=None, security=None, doc='/', default_id=<function default_id>, default='default', default_label='Default namespace', validate=None, tags=None, prefix='', ordered=False, default_mediatype='application/json', decorators=None, catch_all_404s=False, serve_challenge_on_401=False, format_checker=None, url_scheme=None, default_swagger_filename='swagger.json', **kwargs)[source]#

Bases: Api

Subclass of RestxAPI.

Extend a flask restx flask_restx.Api with:

  • methods to make using json schemas easier

  • methods to auto document and handle ApiError responses

pagination_parser(parser=None, sort_choices=None, default=None, add_sort=None)[source]#

Return a standardized pagination parser, to be used for any endpoint that has pagination.

Parameters:
  • parser (RequestParser) – Can extend a given parser or create a new one

  • sort_choices (tuple) – A tuple of strings, to be used as server side attribute searches

  • default (str) – The default sort string, used sort_choices[0] if not given

  • add_sort (bool) – Add sort order choices without adding specific sort choices

Returns:

An api.parser() instance with pagination and sorting arguments.

Return type:

RequestParser

response(code_or_apierror, description='Success', model=None, **kwargs)[source]#

Extend flask_restx.Api.response() to allow passing an ApiError class instead of response code.

If an ApiError is used, the response code, and expected response model, is automatically documented.

Parameters:

description (str)

validate(model, schema_override=None, description=None)[source]#

When a method is decorated with this, json data submitted to the endpoint will be validated with the given model.

This also auto-documents the expected model, as well as the possible ValidationError response.

Parameters:
class flexget.api.app.APIClient[source]#

Bases: object

A client which can be used as a more pythonic interface to the rest api.

It skips http, and is only usable from within the running flexget process.

get_endpoint(url, data=None, method=None)[source]#
Parameters:
  • url (str)

  • method (str | None)

class flexget.api.app.APIEndpoint(endpoint, caller)[source]#

Bases: object

Parameters:
  • endpoint (str)

  • caller (Callable)

class flexget.api.app.APIResource(api, *args, **kwargs)[source]#

Bases: Resource

All api resources should subclass this class.

Parameters:

api (RestxAPI)

method_decorators = [<function with_session>, <function api_version>]#
flexget.api.app.api_errors(error)[source]#
Parameters:

error (APIError)

Return type:

tuple[dict, int]

flexget.api.app.api_version(f)[source]#

Add the ‘API-Version’ header to all responses.

Parameters:

f (Callable[..., Response])

flexget.api.app.etag(method=None, cache_age=0)[source]#

Add an ETag header to the response and check for the “If-Match” and “If-Not-Match” headers to return an appropriate response.

Parameters:
  • method (Callable | None) – A GET or HEAD flask method to wrap

  • cache_age (int) – max-age cache age for the content

Returns:

The method’s response with the ETag and Cache-Control headers, raises a 412 error or returns a 304 response

flexget.api.app.pagination_headers(total_pages, total_items, page_count, request)[source]#

Create the Link. ‘Count’ and ‘Total-Count’ headers, to be used for pagination traversing.

Parameters:
  • total_pages (int) – Total number of pages

  • total_items (int) – Total number of items in all the pages

  • page_count (int) – Item count for page (may differ from page size request)

  • request (Request) – The flask request used, required to build other reoccurring vars like url and such.

Returns:

Return type:

PaginationHeaders

flexget.api.app.success_response(message, status_code=200, status='success')[source]#
Parameters:
  • message (str)

  • status_code (int)

  • status (str)

Return type:

Response