Module licenseware.app_builder.decrypt_namespace.decrypt_namespace

Notice we are using marshmallow_to_restx_model function to generate the swagger body required for the request. Notice also the separation of creating the resource and the given namespace.

Expand source code
"""

Notice we are using `marshmallow_to_restx_model` function to generate the swagger body required for the request. 
Notice also the separation of creating the resource and the given namespace. 

"""

from flask import request
from flask_restx import Namespace, Resource
from marshmallow import Schema, fields
from licenseware.common import marshmallow_to_restx_model
from licenseware.decorators import failsafe
from licenseware.decorators.auth_decorators import authorization_check
from licenseware.uploader_encryptor import UploaderEncryptor



class ExpectSchema(Schema):
    decrypt_password = fields.String()
    encrypted_values = fields.List(fields.String)


class DecryptedValuesSchema(Schema):
    encrypted_value = fields.String()
    decrypted_value = fields.String()


class ResponseSchema(Schema):
    decrypted_values = fields.List(fields.Nested(DecryptedValuesSchema))



def get_decrypt_namespace(ns: Namespace):

    expect_model = marshmallow_to_restx_model(ns, ExpectSchema)
    response_model = marshmallow_to_restx_model(ns, ResponseSchema)

    @ns.route("")
    class Decrypt(Resource):

        @failsafe(fail_code=500)
        @ns.doc(description='Decrypt provided list of encrypted values using the password provided')
        @ns.expect(expect_model, validate=True)
        @ns.response(200, "Decrypted values", response_model)
        @authorization_check
        def post(self):

            data = request.json
            ue = UploaderEncryptor()
            ue.set_password(data["decrypt_password"])

            decrypted_values = [
                {
                    "encrypted_value": encrypted_value,  
                    "decrypted_value": ue.decrypt(encrypted_value)
                }
                for encrypted_value in set(data["encrypted_values"])
            ]

            return decrypted_values


    return ns

Functions

def get_decrypt_namespace(ns: flask_restx.namespace.Namespace)
Expand source code
def get_decrypt_namespace(ns: Namespace):

    expect_model = marshmallow_to_restx_model(ns, ExpectSchema)
    response_model = marshmallow_to_restx_model(ns, ResponseSchema)

    @ns.route("")
    class Decrypt(Resource):

        @failsafe(fail_code=500)
        @ns.doc(description='Decrypt provided list of encrypted values using the password provided')
        @ns.expect(expect_model, validate=True)
        @ns.response(200, "Decrypted values", response_model)
        @authorization_check
        def post(self):

            data = request.json
            ue = UploaderEncryptor()
            ue.set_password(data["decrypt_password"])

            decrypted_values = [
                {
                    "encrypted_value": encrypted_value,  
                    "decrypted_value": ue.decrypt(encrypted_value)
                }
                for encrypted_value in set(data["encrypted_values"])
            ]

            return decrypted_values


    return ns

Classes

class DecryptedValuesSchema (*, only: Union[Sequence[str], Set[str], None] = None, exclude: Union[Sequence[str], Set[str]] = (), many: bool = False, context: Optional[Dict[~KT, ~VT]] = None, load_only: Union[Sequence[str], Set[str]] = (), dump_only: Union[Sequence[str], Set[str]] = (), partial: Union[bool, Sequence[str], Set[str]] = False, unknown: Optional[str] = None)

Base schema class with which to define custom schemas.

Example usage:

.. code-block:: python

import datetime as dt
from dataclasses import dataclass

from marshmallow import Schema, fields


@dataclass
class Album:
    title: str
    release_date: dt.date


class AlbumSchema(Schema):
    title = fields.Str()
    release_date = fields.Date()


album = Album("Beggars Banquet", dt.date(1968, 12, 6))
schema = AlbumSchema()
data = schema.dump(album)
data  # {'release_date': '1968-12-06', 'title': 'Beggars Banquet'}

:param only: Whitelist of the declared fields to select when instantiating the Schema. If None, all fields are used. Nested fields can be represented with dot delimiters. :param exclude: Blacklist of the declared fields to exclude when instantiating the Schema. If a field appears in both only and exclude, it is not used. Nested fields can be represented with dot delimiters. :param many: Should be set to True if obj is a collection so that the object will be serialized to a list. :param context: Optional context passed to :class:fields.Method and :class:fields.Function fields. :param load_only: Fields to skip during serialization (write-only fields) :param dump_only: Fields to skip during deserialization (read-only fields) :param partial: Whether to ignore missing fields and not require any fields declared. Propagates down to Nested fields as well. If its value is an iterable, only missing fields listed in that iterable will be ignored. Use dot delimiters to specify nested fields. :param unknown: Whether to exclude, include, or raise an error for unknown fields in the data. Use EXCLUDE, INCLUDE or RAISE.

Changed in version: 3.0.0

prefix parameter removed.

Changed in version: 2.0.0

__validators__, __preprocessors__, and __data_handlers__ are removed in favor of marshmallow.decorators.validates_schema, marshmallow.decorators.pre_load and marshmallow.decorators.post_dump. __accessor__ and __error_handler__ are deprecated. Implement the handle_error and get_attribute methods instead.

Expand source code
class DecryptedValuesSchema(Schema):
    encrypted_value = fields.String()
    decrypted_value = fields.String()

Ancestors

  • marshmallow.schema.Schema
  • marshmallow.base.SchemaABC

Class variables

var decrypted_value
var encrypted_value
var opts
class ExpectSchema (*, only: Union[Sequence[str], Set[str], None] = None, exclude: Union[Sequence[str], Set[str]] = (), many: bool = False, context: Optional[Dict[~KT, ~VT]] = None, load_only: Union[Sequence[str], Set[str]] = (), dump_only: Union[Sequence[str], Set[str]] = (), partial: Union[bool, Sequence[str], Set[str]] = False, unknown: Optional[str] = None)

Base schema class with which to define custom schemas.

Example usage:

.. code-block:: python

import datetime as dt
from dataclasses import dataclass

from marshmallow import Schema, fields


@dataclass
class Album:
    title: str
    release_date: dt.date


class AlbumSchema(Schema):
    title = fields.Str()
    release_date = fields.Date()


album = Album("Beggars Banquet", dt.date(1968, 12, 6))
schema = AlbumSchema()
data = schema.dump(album)
data  # {'release_date': '1968-12-06', 'title': 'Beggars Banquet'}

:param only: Whitelist of the declared fields to select when instantiating the Schema. If None, all fields are used. Nested fields can be represented with dot delimiters. :param exclude: Blacklist of the declared fields to exclude when instantiating the Schema. If a field appears in both only and exclude, it is not used. Nested fields can be represented with dot delimiters. :param many: Should be set to True if obj is a collection so that the object will be serialized to a list. :param context: Optional context passed to :class:fields.Method and :class:fields.Function fields. :param load_only: Fields to skip during serialization (write-only fields) :param dump_only: Fields to skip during deserialization (read-only fields) :param partial: Whether to ignore missing fields and not require any fields declared. Propagates down to Nested fields as well. If its value is an iterable, only missing fields listed in that iterable will be ignored. Use dot delimiters to specify nested fields. :param unknown: Whether to exclude, include, or raise an error for unknown fields in the data. Use EXCLUDE, INCLUDE or RAISE.

Changed in version: 3.0.0

prefix parameter removed.

Changed in version: 2.0.0

__validators__, __preprocessors__, and __data_handlers__ are removed in favor of marshmallow.decorators.validates_schema, marshmallow.decorators.pre_load and marshmallow.decorators.post_dump. __accessor__ and __error_handler__ are deprecated. Implement the handle_error and get_attribute methods instead.

Expand source code
class ExpectSchema(Schema):
    decrypt_password = fields.String()
    encrypted_values = fields.List(fields.String)

Ancestors

  • marshmallow.schema.Schema
  • marshmallow.base.SchemaABC

Class variables

var decrypt_password
var encrypted_values
var opts
class ResponseSchema (*, only: Union[Sequence[str], Set[str], None] = None, exclude: Union[Sequence[str], Set[str]] = (), many: bool = False, context: Optional[Dict[~KT, ~VT]] = None, load_only: Union[Sequence[str], Set[str]] = (), dump_only: Union[Sequence[str], Set[str]] = (), partial: Union[bool, Sequence[str], Set[str]] = False, unknown: Optional[str] = None)

Base schema class with which to define custom schemas.

Example usage:

.. code-block:: python

import datetime as dt
from dataclasses import dataclass

from marshmallow import Schema, fields


@dataclass
class Album:
    title: str
    release_date: dt.date


class AlbumSchema(Schema):
    title = fields.Str()
    release_date = fields.Date()


album = Album("Beggars Banquet", dt.date(1968, 12, 6))
schema = AlbumSchema()
data = schema.dump(album)
data  # {'release_date': '1968-12-06', 'title': 'Beggars Banquet'}

:param only: Whitelist of the declared fields to select when instantiating the Schema. If None, all fields are used. Nested fields can be represented with dot delimiters. :param exclude: Blacklist of the declared fields to exclude when instantiating the Schema. If a field appears in both only and exclude, it is not used. Nested fields can be represented with dot delimiters. :param many: Should be set to True if obj is a collection so that the object will be serialized to a list. :param context: Optional context passed to :class:fields.Method and :class:fields.Function fields. :param load_only: Fields to skip during serialization (write-only fields) :param dump_only: Fields to skip during deserialization (read-only fields) :param partial: Whether to ignore missing fields and not require any fields declared. Propagates down to Nested fields as well. If its value is an iterable, only missing fields listed in that iterable will be ignored. Use dot delimiters to specify nested fields. :param unknown: Whether to exclude, include, or raise an error for unknown fields in the data. Use EXCLUDE, INCLUDE or RAISE.

Changed in version: 3.0.0

prefix parameter removed.

Changed in version: 2.0.0

__validators__, __preprocessors__, and __data_handlers__ are removed in favor of marshmallow.decorators.validates_schema, marshmallow.decorators.pre_load and marshmallow.decorators.post_dump. __accessor__ and __error_handler__ are deprecated. Implement the handle_error and get_attribute methods instead.

Expand source code
class ResponseSchema(Schema):
    decrypted_values = fields.List(fields.Nested(DecryptedValuesSchema))

Ancestors

  • marshmallow.schema.Schema
  • marshmallow.base.SchemaABC

Class variables

var decrypted_values
var opts