magpie.utils¶
Attributes¶
Classes¶
Utility |
|
Enum that allows more permissive name cases for lookup. |
|
A metaclass that creates a Singleton base class when called. |
|
Mimics |
Functions¶
|
Search in order for matched value of |
|
Immediately sets the logger level to avoid duplicate log outputs from the root logger and this logger when |
|
Applies the provided logging configuration settings to the logger. |
|
Logs the requested message to the logger and optionally enforce printing to the console according to configuration |
|
Logs the provided message to the logger and raises the corresponding exception afterwards. |
|
Converts |
|
Evaluate if argument is a callable |
|
Evaluate an object for |
|
Evaluate an object for |
|
Returns a visual representation of a function signature with is arguments. |
|
Setup caching settings if not defined in configuration and enforce values if requested. |
|
Setup |
|
Tween that forces the database connection to be closed once the response is obtained from the request. |
|
Setup database |
|
Setup |
|
Logs debug information about request cookie. |
|
Obtains the user that corresponds to the authentication details found in the request. |
|
Retrieves the 'JSON' body of a response using the property/callable according to the response's implementation. |
|
Retrieves |
|
Converts a |
Obtains all required headers by 401 responses based on executed |
|
|
Retrieves a dictionary of cookie names and values from distinct implementations and container types. |
|
|
|
Retrieves the application |
|
Retrieve application settings from a supported container. |
|
Imports a target resource from a Python script as module. |
|
Escapes necessary regex pattern characters and applies start/end-of-line control characters. |
|
Updates potentially missing configuration settings for normal application execution. |
|
Obtains the configured Magpie URL entrypoint based on the various combinations of supported configuration settings. |
|
Obtains the configured Phoenix URL entrypoint based on the various combinations of supported configuration settings. |
|
Obtains the configured Twitcher URL entrypoint based on various combinations of supported configuration settings. |
|
Obtains the protected service URL behind Twitcher Proxy based on combination of supported configuration settings. |
|
Determines if the request path corresponds to any Magpie UI location. |
|
Obtains the |
|
|
|
Subscriber event that logs basic details about the incoming requests. |
|
Tween factory that logs any exception before re-raising it. |
|
|
|
Decompose a |
Module Contents¶
- magpie.utils.get_constant(constant_name: magpie.typedefs.Str, settings_container: magpie.typedefs.AnySettingsContainer | None = None, settings_name: magpie.typedefs.Str | None = None, default_value: magpie.typedefs.SettingValue | None = None, raise_not_set: bool = True, raise_missing: bool = True, print_missing: bool = False, empty_missing: bool = False) magpie.typedefs.SettingValue[source]¶
- Search in order for matched value of
constant_name: search in
MAGPIE_CONSTANTSsearch in settings if specified
search alternative setting names (see below)
search in
magpie.constantsdefinitionssearch in environment variables
Parameter
constant_nameis expected to have the formatMAGPIE_[VARIABLE_NAME]although any value can be passed to retrieve generic settings from all above-mentioned search locations.If
settings_nameis provided as alternative name, it is used as is to search for results ifconstant_namewas not found. Otherwise,magpie.[variable_name]is used for additional search when the formatMAGPIE_[VARIABLE_NAME]was used forconstant_name(i.e.:MAGPIE_ADMIN_USERwill also search formagpie.admin_userand so on for corresponding constants).- Parameters:
constant_name – key to search for a value
settings_container – WSGI application settings container (if not provided, uses found one in current thread)
settings_name – alternative name for settings if specified
default_value – default value to be returned if not found anywhere, and exception raises are disabled.
raise_not_set – raise an exception if the found key is
None, search until last case if others areNoneraise_missing – raise exception if key is not found anywhere
print_missing – print message if key is not found anywhere, return
Noneempty_missing – consider an empty value for an existing key as if it was missing (i.e.: as if not set).
- Returns:
found value or default_value
- Raises:
ValueError – if resulting value is invalid based on options (by default raise missing/empty/
Nonevalue)LookupError – if no appropriate value could be found from all search locations (according to options)
- Search in order for matched value of
- magpie.utils.get_logger(name: magpie.typedefs.Str, level: int | None = None, force_stdout: bool = None, message_format: magpie.typedefs.Str | None = None, datetime_format: magpie.typedefs.Str | None = None) logging.Logger[source]¶
Immediately sets the logger level to avoid duplicate log outputs from the root logger and this logger when level is
logging.NOTSET.
- magpie.utils.set_logger_config(logger: logging.Logger, force_stdout: bool = False, message_format: magpie.typedefs.Str | None = None, datetime_format: magpie.typedefs.Str | None = None, log_file: magpie.typedefs.Str | None = None) logging.Logger[source]¶
Applies the provided logging configuration settings to the logger.
- magpie.utils.print_log(msg: magpie.typedefs.Str, logger: logging.Logger | None = None, level: int = logging.INFO, **kwargs: Any) None[source]¶
Logs the requested message to the logger and optionally enforce printing to the console according to configuration value defined by
MAGPIE_LOG_PRINT.
- magpie.utils.raise_log(msg: magpie.typedefs.Str, exception: Type[Exception] = Exception, logger: logging.Logger | None = None, level: int = logging.ERROR) NoReturn[source]¶
Logs the provided message to the logger and raises the corresponding exception afterwards.
- Raises:
exception – whichever exception provided is raised systematically after logging.
- magpie.utils.bool2str(value: Any) magpie.typedefs.Str[source]¶
Converts
valueto explicit"true"or"false"strwith permissive variants comparison that can represent common falsy or truthy values.
- magpie.utils.islambda(func: Any) bool[source]¶
Evaluate if argument is a callable
lambdaexpression.
- magpie.utils.isclass(obj: Any) bool[source]¶
Evaluate an object for
classtype (ie: class definition, not an instance nor any other type).
- magpie.utils.ismethod(obj: Any) bool[source]¶
Evaluate an object for
methodtype (i.e.: class method reference.
- magpie.utils.signature_with_args(func: Callable[[Ellipsis], Any], *args: Any, **kwargs: Any) magpie.typedefs.Str[source]¶
Returns a visual representation of a function signature with is arguments.
def function(a, b, c=1): ... signature_with_args(function, 1, 2, c=3) # returns: <module.function(a=1, b=2, c=3)>
- magpie.utils.get_settings_from_config_ini(config_ini_path: magpie.typedefs.Str, ini_main_section_name: magpie.typedefs.Str = 'app:magpie_app') magpie.typedefs.SettingsType[source]¶
- magpie.utils.setup_cache_settings(settings: magpie.typedefs.SettingsType, force: bool = False, enabled: bool = False, expire: int = 0) None[source]¶
Setup caching settings if not defined in configuration and enforce values if requested.
Required caching regions that were missing from configuration are initiated with disabled caching by default. This ensures that any decorators or region references will not cause unknown key or region errors.
- Parameters:
settings – reference to application settings that will be updated in place.
force – enforce following parameters, otherwise only ensure that caching regions exist.
enabled – enable caching when enforced settings is requested.
expire – cache expiration delay if setting values are enforced and enabled.
- magpie.utils.setup_pyramid_config(config: pyramid.config.Configurator) None[source]¶
Setup
Pyramidutilities in the application configuration to define expected object references.
- magpie.utils.cleanup_session(handler: Callable[[pyramid.request.Request], pyramid.response.Response], _: pyramid.registry.Registry) Callable[[pyramid.request.Request], pyramid.response.Response][source]¶
Tween that forces the database connection to be closed once the response is obtained from the request.
- magpie.utils.setup_session_config(config: pyramid.config.Configurator) None[source]¶
Setup database
Sessiontransaction handlers andRequestproperties for active User.
- magpie.utils.setup_ziggurat_config(config: pyramid.config.Configurator) None[source]¶
Setup
ziggurat_foundationsconfiguration settings and extensions that are required by Magpie.Ensures that all needed extensions and parameter configuration values are defined as intended. Resolves any erroneous configuration or conflicts from the INI (backward compatible to when it was required to provide them explicitly) to guarantee that references are defined as needed for the application to behave correctly.
- Parameters:
config – configurator reference when loading the web application.
- magpie.utils.debug_cookie_identify(request)[source]¶
Logs debug information about request cookie.
Warning
This function is intended for debugging purposes only. It reveals sensible configuration information.
Re-implements basic functionality of
pyramid.AuthTktAuthenticationPolicy.cookie.identify()called viarequest.unauthenticated_userid()withinget_request_user()to provide additional logging.See also
pyramid.authentication.AuthTktCookieHelperpyramid.authentication.AuthTktAuthenticationPolicy
- magpie.utils.get_request_user(request: pyramid.request.Request) magpie.models.User | None[source]¶
Obtains the user that corresponds to the authentication details found in the request.
Prior to resolving the user matching the authenticated user ID, reattaches the detached session or closed transaction if commit occurred beforehand. This can happen for example when creating a user from a pending-user where the user must be committed to allow webhooks to refer to it immediately, although the request has not completed processing. Operations using the
request.userreference following that user creation could have a detached object state from the session. Ensure that any resolved user is also attached to the reestablished database session reference in the request.After reattaching to the session, following step is the original configuration setup similarly to typical methodology:
config.include("ziggurat_foundations.ext.pyramid.get_user")
- Parameters:
request – request to look for authenticated user.
- Returns:
authenticated user or none if unauthenticated.
- magpie.utils.get_json(request_or_response: magpie.typedefs.AnyRequestType | magpie.typedefs.AnyResponseType) magpie.typedefs.JSON[source]¶
Retrieves the ‘JSON’ body of a response using the property/callable according to the response’s implementation.
- magpie.utils.get_header(header_name: magpie.typedefs.Str, header_container: magpie.typedefs.AnyHeadersType, default: magpie.typedefs.Str | None, magpie.typedefs.Str | List[magpie.typedefs.Str] | None, bool = None, split: magpie.typedefs.Str | List[magpie.typedefs.Str] | None = None, multi: bool = False, pop: bool = False) magpie.typedefs.Str | List[magpie.typedefs.Str] | None[source]¶
Retrieves
header_nameby fuzzy match (independently of upper/lower-case and underscore/dash) from various framework implementations ofHeaders.If
splitis specified, the matchedheader_nameis first split with it and the first item is returned. This allows to parse complex headers (e.g.:text/plain; charset=UTF-8totext/plainwithsplit=';').- Parameters:
header_name – Header to find.
header_container – Where to look for header_name.
default – Value to returned if header_container is invalid or header_name could not be found.
split – Character(s) to use to split the found header_name.
multi – Return extracted header as array of multiple values or return a single value on fist match.
pop – Remove the header from the container if found.
- Returns:
Found header value(s) if applicable.
- magpie.utils.convert_response(response: magpie.typedefs.AnyResponseType) pyramid.response.Response[source]¶
Converts a
requests.Responseobject to an equivalentpyramid.response.Responseobject.Content of the
responseis expected to be JSON.- Parameters:
response – Response to be converted.
- Returns:
Converted response.
- magpie.utils.get_authenticate_headers(request: pyramid.request.Request, error_type: magpie.typedefs.Str = 'invalid_token') magpie.typedefs.HeadersType | None[source]¶
Obtains all required headers by 401 responses based on executed
request.- Parameters:
request – request that was sent to attempt authentication or access which must respond with Unauthorized.
error_type – Additional detail of the cause of error. Must be one of (invalid_request, invalid_token, insufficient_scope).
- magpie.utils.get_cookies(request_or_response: magpie.typedefs.AnyRequestType | magpie.typedefs.AnyResponseType) magpie.typedefs.CookiesType[source]¶
Retrieves a dictionary of cookie names and values from distinct implementations and container types.
- Parameters:
request_or_response – Object that potentially contains cookies, by literal property or corresponding headers.
- Returns:
Found cookies.
- magpie.utils.get_admin_cookies(container: magpie.typedefs.AnySettingsContainer, verify: bool = True, raise_message: magpie.typedefs.Str | None = None) magpie.typedefs.CookiesType[source]¶
- magpie.utils.get_registry(container: magpie.typedefs.AnyRegistryContainer | None = None, nothrow: bool = False) pyramid.registry.Registry | None[source]¶
Retrieves the application
registryfrom various containers referencing to it.
- magpie.utils.get_settings(container: magpie.typedefs.AnySettingsContainer | None, app: bool = False) magpie.typedefs.SettingsType[source]¶
Retrieve application settings from a supported container.
- Parameters:
container – supported container with a handle to application settings.
app – allow retrieving from current thread registry if no container was defined.
- Returns:
found application settings dictionary.
- Raises:
TypeError – when no application settings could be found or unsupported container.
- magpie.utils.import_target(target: magpie.typedefs.Str, default_root: magpie.typedefs.Str | None = None) Any | None[source]¶
Imports a target resource from a Python script as module.
The Python script does not need to be defined within a module directory (i.e.: with
__init__.py). Files can be imported from virtually anywhere. To avoid name conflicts in generated module references, each imported target employs its full escaped file path as module name.Format expected as follows:
"path/to/script.py:function"- Parameters:
target – Resource to be imported.
default_root – Root directory to employ if target is relative (default
magpie.constants.MAGPIE_ROOT).
- Returns:
Found and imported resource or None.
- magpie.utils.normalize_field_pattern(pattern: magpie.typedefs.Str, escape: bool = True) magpie.typedefs.Str[source]¶
Escapes necessary regex pattern characters and applies start/end-of-line control characters.
- magpie.utils.patch_magpie_url(container: magpie.typedefs.AnySettingsContainer) magpie.typedefs.SettingsType[source]¶
Updates potentially missing configuration settings for normal application execution.
- magpie.utils.get_magpie_url(container: magpie.typedefs.AnySettingsContainer | None = None) magpie.typedefs.Str[source]¶
Obtains the configured Magpie URL entrypoint based on the various combinations of supported configuration settings.
See also
Documentation section Application Settings for available setting combinations.
- Parameters:
container – container that provides access to application settings.
- Returns:
resolved Magpie URL
- magpie.utils.get_phoenix_url(container: magpie.typedefs.AnySettingsContainer | None = None) magpie.typedefs.Str[source]¶
Obtains the configured Phoenix URL entrypoint based on the various combinations of supported configuration settings.
See also
Documentation section Phoenix Settings for available setting combinations.
- Parameters:
container – container that provides access to application settings.
- Returns:
resolved Phoenix URL
- magpie.utils.get_twitcher_url(container: magpie.typedefs.AnySettingsContainer | None = None, hostname: magpie.typedefs.Str | None = None) magpie.typedefs.Str[source]¶
Obtains the configured Twitcher URL entrypoint based on various combinations of supported configuration settings.
See also
Documentation section Twitcher Settings for available setting combinations.
- Parameters:
container – container that provides access to application settings.
hostname – override literal hostname to generate the URL instead of resolving using settings.
- Returns:
resolved Twitcher URL
- magpie.utils.get_twitcher_protected_service_url(magpie_service_name: magpie.typedefs.Str, container: magpie.typedefs.AnySettingsContainer | None = None, hostname: magpie.typedefs.Str | None = None) magpie.typedefs.Str[source]¶
Obtains the protected service URL behind Twitcher Proxy based on combination of supported configuration settings.
See also
Documentation section Twitcher Settings for available setting combinations.
- Parameters:
magpie_service_name – name of the service to employ in order to form the URL path behind the proxy.
container – container that provides access to application settings.
hostname – override literal hostname to generate the URL instead of resolving using settings.
- Returns:
resolved Twitcher Proxy protected service URL
- magpie.utils.is_magpie_ui_path(request: pyramid.request.Request) bool[source]¶
Determines if the request path corresponds to any Magpie UI location.
- magpie.utils.fully_qualified_name(obj: Any | Type[Any]) str[source]¶
Obtains the
'<module>.<name>'full path definition of the object to allow finding and importing it.
- magpie.utils.log_request(event: pyramid.events.NewRequest) None[source]¶
Subscriber event that logs basic details about the incoming requests.
- magpie.utils.log_exception_tween(handler: Callable[[pyramid.request.Request], pyramid.response.Response], registry: pyramid.registry.Registry) Callable[[pyramid.request.Request], pyramid.response.Response][source]¶
Tween factory that logs any exception before re-raising it.
Application errors are marked as
ERRORwhile non-critical HTTP errors are marked asWARNING.
- class magpie.utils.ExtendedEnum[source]¶
Bases:
enum.EnumUtility
enum.Enummethods.Create an extended enum with these utilities as follows:
class CustomEnum(ExtendedEnum): ItemA = "A" ItemB = "B"
- classmethod names() List[magpie.typedefs.Str][source]¶
Returns the member names assigned to corresponding enum elements.
- classmethod values() List[magpie.typedefs.AnyKey][source]¶
Returns the literal values assigned to corresponding enum elements.
- classmethod get(key_or_value: magpie.typedefs.AnyKey, default: Any | None = None) _TC | None[source]¶
Finds an enum entry by defined name or its value.
Returns the entry directly if it is already a valid enum.
- class magpie.utils.FlexibleNameEnum[source]¶
Bases:
ExtendedEnumEnum that allows more permissive name cases for lookup.
- magpie.utils.decompose_enum_flags(enum_flags: enum.Enum) List[enum.Enum][source]¶
Decompose a
Flag-enabledEnuminto its individual parts.The operation is agnostic of the
Enumimplementation, whether from stdlibenumoraenum.
- class magpie.utils.SingletonMeta[source]¶
Bases:
typeA metaclass that creates a Singleton base class when called.
Create a class such that:
@six.add_metaclass(SingletonMeta) class A(object): pass @six.add_metaclass(SingletonMeta) class B(object): pass a1 = A() a2 = A() b1 = B() b2 = B() a1 is a2 # True b1 is b2 # True a1 is b1 # False
- class magpie.utils.classproperty[source]¶
Bases:
propertyMimics
propertydecorator, but applied ontoclassmethodin backward compatible way.Note
This decorator purposely only supports getter attribute to define unmodifiable class properties.
See also
Initialize self. See help(type(self)) for accurate signature.