Skip to main content

Common library used alongside jsexton-portfolio chalice applications.

Project description

Pyocle

Socle - A plain low block or plinth serving as a support for a column, urn, statue, etc. or as the foundation of a wall.

Common library used alongside jsexton-portfolio chalice applications.

Responses

Portfolio APIs have a standard response structure they must follow. This library contains models and response builders to help remain consistent with these defined standards response models.

Models

Response Body

{
  "success": true,
  "meta": { },
  "data": { }
}

Response Meta Field

{
  "message": "Message depending on the type of response",
  "errorDetails": [],
  "schemas": {}
}

Building Responses

import pyocle

ok_response = pyocle.response.ok({'some': 'data'})
created_response = pyocle.response.created({'some': 'data'})

# In most cases, the error handler will handle these responses for you if you defined
# the pydantic models correctly and you are using form.resolve_form for all incoming data.
bad_response = pyocle.response.bad(error_details=[], schema={})

internal_error_response = pyocle.response.internal_error()

Serialization Helpers

Camel Case Property Naming Convention

It is a portfolio API standard that all field names should be camel case when serialized to the response body. Pyocle offers a mixin to assist in this conversion.

from pyocle.serialization import CamelCaseAttributesMixin

class MyResponse(CamelCaseAttributesMixin):
    def __init__(self):
        self.snake_case_attribute = 'snake_case_attribute'

When using jsonpickle or any built in pyocle response builders, the resulting json will contain camel cased attrbiute names.

Error Handling

Pyocle comes with an error_handler decorator that can be used to decorate all endpoints that require error handling.

from chalice import Chalice
import pyocle

app = Chalice(app_name='my-portfolio-service')

app.route('/')
@pyocle.error.error_handler
def some_portfolio_endpoint():
    pass

Resolving Forms

When resolving forms or incoming data with pyocle, use the resolve_form function. The function accepts the incoming data and a form object that inherits from pydantic's BaseModel to match against. If the incoming data complies with the specified form, the form object is returned. Make sure the form is a subclass of BaseModel, if not, an exception will be raised. Otherwise an exception is raised with information detailing what went wrong. These exceptions normally work very closely with pyocle's error_handler.

from chalice import Chalice
from pydantic import BaseModel
import pyocle

app = Chalice(app_name='my-portfolio-service')

class SomeForm(BaseModel):
    test_data: str

app.route('/')
@pyocle.error.error_handler
def some_portfolio_endpoint():
    incoming_data = app.current_request.raw_body
    form = pyocle.form.resolve_form(incoming_data, SomeForm)

    ...

Common Services

Pyocle comes with a few common services used through out portfolio services out of the box.

Key Management Service

The KeyManagementService is used to interface with AWS KMS for encrypting and decrypting information. Most common use case is decrypting connection strings for databases.

import pyocle

kms = pyocle.service.KeyManagementService()
kms_response = kms.decrypt('some cipher text')

Configuration

Environment Variables

In order to safely retrieve an environment variable, make use of the env_var() function. A default value can be given and will be used if the given environment variable could not be found.

import pyocle

environment_variable = pyocle.config.env_var('some_env_var_name', default='found')

Encrypted Environment Variables

Sometimes environment variables are encrypted. Use the encrypted_env_var() function to retrieve these values in their plain text forms.

import pyocle

decrypted_environment_variable = pyocle.config.encrypted_env_var('some_env_var_name')

By default the function makes use of a kms decrypter. To specify a custom decrypter simply pass the decryption function as a decrypter and any additional values that may be need to decrypt to attrs

import pyocle

additional_info = {
    'password': 'password123'
}

def my_decrypter(value, **kwargs) -> str:
    """decrypt and return"""

decrypted_environment_variable = pyocle.config.encrypted_env_var('some_env_var_name', decrypter=my_decrypter, attrs=additional_info)

Connection Strings

Connection strings should be encrypted with KMS and stored in the correct chalice stage environment variables as 'CONNECTION_STING'. When retrieving these values, make use of the connection_string() function. connection_string() will retrieve the environment connection string and decrypt using KMS while only returning the actual usable connection string.

import pyocle

connection_string = pyocle.config.connection_string()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyocle-0.3.2.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

pyocle-0.3.2-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file pyocle-0.3.2.tar.gz.

File metadata

  • Download URL: pyocle-0.3.2.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for pyocle-0.3.2.tar.gz
Algorithm Hash digest
SHA256 16142456addfb05336a2eb0ef61c64d4de361b9f598b9de32a829243d2091e65
MD5 93e98a698f4eeffeb58596090c9d9941
BLAKE2b-256 b5e37f427e2d06c17aaed82ba12bfeb6b893e05fbade66299a35f8e2fde1b87a

See more details on using hashes here.

File details

Details for the file pyocle-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pyocle-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for pyocle-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c1c9dfffc29af953b065f70c7d81d92211356cbba7b6f2d0923be3f6b51b4a8e
MD5 2201206c020409c4af78956cf8af5086
BLAKE2b-256 430799e66c4fe02686c116d587f249c5e08ae10e7740bb9c9137d69d620f0206

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page