pyechonext package¶
Subpackages¶
- pyechonext.apidoc_ui package
- pyechonext.auth package
- pyechonext.docsgen package
- pyechonext.logging package
- pyechonext.template_engine package
- pyechonext.utils package
- Submodules
- pyechonext.utils.exceptions module
- pyechonext.utils.patterns module
- pyechonext.utils.performance module
- pyechonext.utils.slugger module
- pyechonext.utils.stack module
- Module contents
Submodules¶
pyechonext.app module¶
- class pyechonext.app.ApplicationType(*values)[source]¶
Bases:
Enum
This enum class describes an application type.
- HTML = 'text/html'¶
- JSON = 'application/json'¶
- PLAINTEXT = 'text/plain'¶
- TEAPOT = 'server/teapot'¶
- class pyechonext.app.EchoNext(app_name: str, settings: Settings, middlewares: List[Type[BaseMiddleware]], urls: List[URL] | None = [], application_type: ApplicationType | None = ApplicationType.JSON, static_files: List[StaticFile] | None = [])[source]¶
Bases:
object
This class describes an EchoNext WSGI Application.
- __init__(app_name: str, settings: Settings, middlewares: List[Type[BaseMiddleware]], urls: List[URL] | None = [], application_type: ApplicationType | None = ApplicationType.JSON, static_files: List[StaticFile] | None = [])[source]¶
Initialize a WSGI
- Parameters:
app_name (str) – application name
settings (Settings) – settings of app middlewares (List[Type[BaseMiddleware]]): list of middlewares
urls (Optional[List[URL]], optional) – basic URLs list. Defaults to [].
application_type (Optional[ApplicationType], optional) – application type. Defaults to ApplicationType.JSON.
static_files (Optional[List[StaticFile]], optional) – static files list. Defaults to [].
- Raises:
TeapotError – Easter Egg
- add_route(page_path: str, handler: Callable | PageController, methods: List[str] | None = None, summary: str | None = None)[source]¶
Add page route without decorator
- Parameters:
page_path (str) – page path url
handler (Callable) – handler of route
methods (Optional[List[str]]) – supported methods of handler. Defaults to None.
summary (Optional[str], optional) – summary documentation. Defaults to None.
- app_name: str¶
- application_type: ApplicationType¶
- get_and_save_cache_item(key: str, value: Any) Any [source]¶
Set and save item to cache
- Parameters:
key (str) – key
value (Any) – value
- Returns:
item from cache
- Return type:
Any
- history: List[HistoryEntry]¶
- include_router(new_router: Router)[source]¶
Include new router to additional routers list
- Parameters:
new_router (Router) – new router object
- main_cache: InMemoryCache¶
- middlewares: List[Type[BaseMiddleware]]¶
- route_page(page_path: str, methods: List[str] | None = None, summary: str | None = None) Callable [source]¶
Route page decorator
- Parameters:
page_path (str) – page path url
methods (Optional[List[str]]) – supported methods of handler. Defaults to None.
summary (Optional[str], optional) – summary documentation. Defaults to None.
- Returns:
wrapper
- Return type:
Callable
- router: Router¶
- static_files: List[StaticFile]¶
- static_files_manager: StaticFilesManager¶
- class pyechonext.app.HistoryEntry(request: pyechonext.request.Request, response: pyechonext.response.Response)[source]¶
Bases:
object
- pyechonext.app.method()¶
recv(buffersize[, flags]) -> data
Receive up to buffersize bytes from the socket. For the optional flags argument, see the Unix manual. When no data is available, block until at least one byte is available or until the remote end is closed. When the remote end is closed and all data is read, return the empty string.
pyechonext.cache module¶
- class pyechonext.cache.CacheEntry(name: str, value: ~typing.Any, expiry: float, extra_params: dict = <factory>)[source]¶
Bases:
object
This class describes a cache entry.
- __init__(name: str, value: ~typing.Any, expiry: float, extra_params: dict = <factory>) None ¶
- expiry: float¶
- extra_params: dict¶
- name: str¶
- value: Any¶
- class pyechonext.cache.Cacheable(cache: InMemoryCache)[source]¶
Bases:
object
This class describes a Interface for caching.
- __init__(cache: InMemoryCache)[source]¶
Initialize Cachable Interace
Args:
cache (InMemoryCache): cache instance
- class pyechonext.cache.InMemoryCache(timeout: int = 300)[source]¶
Bases:
object
This class describes in memory cache.
- __init__(timeout: int = 300)[source]¶
Initialize InMemoryCace
Args:
timeout (int, optional): _description_. Defaults to 300.
pyechonext.config module¶
- class pyechonext.config.Settings(BASE_DIR: str, TEMPLATES_DIR: str, SECRET_KEY: str = '14486.16035.57675.50643.69546.16035.85036.32515.16035.72836', VERSION: str = '1.0.0', DESCRIPTION: str = 'Echonext webapp', LOCALE: str = 'DEFAULT', LOCALE_DIR: str = None, STATIC_DIR: str = 'static')[source]¶
Bases:
object
This class describes settings.
- BASE_DIR: str¶
- DESCRIPTION: str = 'Echonext webapp'¶
- LOCALE: str = 'DEFAULT'¶
- LOCALE_DIR: str = None¶
- SECRET_KEY: str = '14486.16035.57675.50643.69546.16035.85036.32515.16035.72836'¶
- STATIC_DIR: str = 'static'¶
- TEMPLATES_DIR: str¶
- VERSION: str = '1.0.0'¶
- __init__(BASE_DIR: str, TEMPLATES_DIR: str, SECRET_KEY: str = '14486.16035.57675.50643.69546.16035.85036.32515.16035.72836', VERSION: str = '1.0.0', DESCRIPTION: str = 'Echonext webapp', LOCALE: str = 'DEFAULT', LOCALE_DIR: str = None, STATIC_DIR: str = 'static') None ¶
- class pyechonext.config.SettingsConfigType(*values)[source]¶
Bases:
Enum
This class describes a settings configuration type.
- DOTENV = 'dotenv'¶
- INI = 'ini'¶
- JSON = 'json'¶
- PYMODULE = 'pymodule'¶
- TOML = 'toml'¶
- YAML = 'yaml'¶
- class pyechonext.config.SettingsLoader(config_type: SettingsConfigType, filename: str = None)[source]¶
Bases:
object
This class describes a settings loader.
- __init__(config_type: SettingsConfigType, filename: str = None)[source]¶
Initialize a basic settings info
- Parameters:
config_type (SettingsConfigType) – file config type
filename (str, optional) – config filename. Defaults to None.
- Raises:
FileNotFoundError – _description_
- config¶
- config_type: SettingsConfigType¶
- filename: Path¶
pyechonext.middleware module¶
- class pyechonext.middleware.BaseMiddleware[source]¶
Bases:
ABC
This abstract class describes a base middleware.
- abstractmethod process_exception(exception: Exception)[source]¶
Process exception with middleware
- Parameters:
exception (Exception) – exception class
- Raises:
exception – exception from arguments
- abstractmethod process_template(*args, **kwargs)[source]¶
Process template with middleware
- Raises:
NotImplementedError – abstract method
- class pyechonext.middleware.SessionMiddleware[source]¶
Bases:
BaseMiddleware
This class describes a session (cookie) middleware.
- process_exception(exception: Exception)[source]¶
Process exception with middleware
- Parameters:
exception (Exception) – exception class
- Raises:
exception – exception from arguments
- process_template(*args, **kwargs)[source]¶
Process template with middleware
- Raises:
NotImplementedError – abstract method
pyechonext.permissions module¶
- class pyechonext.permissions.AbstractController(permission_checker: PermissionChecker)[source]¶
Bases:
ABC
This class describes a abstract controller.
- abstractmethod __init__(permission_checker: PermissionChecker)[source]¶
Constructs a new instance
Args:
permission_checker (PermissionChecker): permission checker class
- abstractmethod check(current_user: User, resource: Type[Resource], permission: Permission) bool [source]¶
Check permissions for user
Args:
current_user (User): user object resource (Resource): resource object permission (Permission): permission object
Raises:
NotImplementedError: abstractmethod
Returns:
bool: true is valid, otherwise false
- class pyechonext.permissions.AbstractPermission[source]¶
Bases:
ABC
This class describes an abstract permission.
- class pyechonext.permissions.AbstractRole[source]¶
Bases:
ABC
This class describes an abstract role.
- abstractmethod get_name() str [source]¶
Get the role name
Raises:
NotImplementedError: abstract method
Returns:
str: role name
- abstractmethod get_permissions() Set[AbstractPermission] [source]¶
Get list of permissions
Raises:
NotImplementedError: abstract method
Returns:
Set[AbstractPermission]: set with abstract permissions
- abstractmethod has_permission(permission: Type[AbstractPermission]) bool [source]¶
Determines if permission
Args:
permission (AbstractPermission): permission object
Raises:
NotImplementedError: abstract method
Returns:
bool: true is has, false otherwise
- class pyechonext.permissions.AccessControlRule(role: Type[AbstractRole], permission: Type[AbstractPermission], resource: Type[Resource], allowed: bool)[source]¶
Bases:
object
This class describes an access control rule.
- __init__(role: Type[AbstractRole], permission: Type[AbstractPermission], resource: Type[Resource], allowed: bool)[source]¶
Constructs a new instance
Args:
role (Type[AbstractRole]): role object permission (Type[AbstractPermission]): permission object resource (Type[Resource]): resource object allowed (bool): allowed status
- applies_to(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Applies to user
Args:
user (User): user resource (Type[Resource]): resource permission (Type[AbstractPermission]): permissions
Returns:
bool: true if is applies, false otherwise
- class pyechonext.permissions.AgeRestrictionsABP(conditions: Dict[str, Any], rules: List[AccessControlRule])[source]¶
Bases:
Policy
This class describes an age restrictions abp.
- __init__(conditions: Dict[str, Any], rules: List[AccessControlRule])[source]¶
Initialize a Age Policy
Args:
conditions (Dict[str, Any]): conditions rules (List[AccessControlRule]): rules list
- evaluate(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Evaluate policy access
Args:
user (User): user object resource (Resource): resource object permission (AbstractPermission): permission object
Returns:
bool: evaluation status
- class pyechonext.permissions.AttributeBasedPolicy(conditions: Dict[str, Any])[source]¶
Bases:
Policy
This class describes an attribute based policy.
- __init__(conditions: Dict[str, Any])[source]¶
Constructs a new instance
Args:
conditions (Dict[str, Any]): conditions dictionary
- evaluate(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Evaluate policy access
Args:
user (User): user model resource (Resource): resource model permission (AbstractPermission): permission model
Returns:
bool: evaluation status
- class pyechonext.permissions.DefaultPermissionChecker(policy: Policy)[source]¶
Bases:
PermissionChecker
This class describes a default permission checker.
- check(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Check user permissions
Args:
user (User): user object resource (Resource): resource object permission (AbstractPermission): permissions object
Returns:
bool: true is valid, false otherwise
- class pyechonext.permissions.Permission(name: str)[source]¶
Bases:
AbstractPermission
This class describes a permission.
- class pyechonext.permissions.PermissionChecker[source]¶
Bases:
ABC
This class describes a permission checker.
- abstractmethod check(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Check permissions for user
Args:
user (User): user object resource (Resource): resource object permission (AbstractPermission): permission object
Raises:
NotImplementedError: abstract method
Returns:
bool: true is valid, false otherwise
- class pyechonext.permissions.Policy[source]¶
Bases:
object
This class describes a policy.
- add_rule(rule: AccessControlRule)[source]¶
Add a new rule
Args:
rule (AccessControlRule): new rule
- evaluate(user: User, resource: Type[Resource], permission: Type[AbstractPermission]) bool [source]¶
Evaluate policty access
Args:
user (User): user object resource (Resource): resource permission (AbstractPermission): permission
Returns:
bool: true is allowed, false otherwise
- class pyechonext.permissions.Resource(name: str)[source]¶
Bases:
object
This class describes a resource.
- class pyechonext.permissions.Role(name: str)[source]¶
Bases:
AbstractRole
This class describes a role.
- add_permission(permission: AbstractPermission)[source]¶
Add a permission
Args:
permission (AbstractPermission): permission object
- get_permissions() Set[AbstractPermission] [source]¶
Get list of permissions
Returns:
Set[AbstractPermission]: set with abstract permissions
- has_permission(permission: AbstractPermission) bool [source]¶
Determines if permission
Args:
permission (AbstractPermission): permission object
bool: true is has, false otherwise
- remove_permission(permission: AbstractPermission)[source]¶
Remove a permission
Args:
permission (AbstractPermission): permission object
- class pyechonext.permissions.User(username: str, attributes: Dict[str, Any] = {})[source]¶
Bases:
object
This class describes an user.
- __init__(username: str, attributes: Dict[str, Any] = {})[source]¶
Constructs a new instance
Args:
username (str): name of user attributes (Dict[str, Any], optional): attributes for user. Defaults to {}.
- add_role(role: AbstractRole)[source]¶
Adds a role
Args:
role (AbstractRole): role object
- get_roles() Set[AbstractRole] [source]¶
Get roles
Returns:
Set[AbstractRole]: roles set
- has_permission(permission: AbstractPermission) bool [source]¶
Determines if permission
Args:
permission (Type[AbstractPermission]): permission object
Returns:
bool: true is has, false otherwise
- remove_role(role: AbstractRole)[source]¶
Remove a role
Args:
role (Type[AbstractRole]): role object
- class pyechonext.permissions.UserController(permission_checker: PermissionChecker)[source]¶
Bases:
AbstractController
Controls the data flow into an user object and updates the view whenever data changes.
- __init__(permission_checker: PermissionChecker)[source]¶
Constructs a new instance
Args:
permission_checker (PermissionChecker): permission checker class
- check(current_user: User, resource: Type[Resource], permission: Permission) bool [source]¶
Check permissions for user
Args:
current_user (User): current user object resource (Resource): resource object permission (Permission): user permission
Returns:
bool: True is valid, false otherwise
pyechonext.request module¶
- class pyechonext.request.Request(environ: dict = {}, settings: Settings = None)[source]¶
Bases:
object
This class describes a request.
- GET: Dict[Any, Any]¶
- POST: Dict[Any, Any]¶
- __init__(environ: dict = {}, settings: Settings = None)[source]¶
Constructs a new request
Args:
environ (dict, optional): environ info. Defaults to {}. settings (Settings, optional): settings of app. Defaults to None.
- environ: Dict[str, Any]¶
- extra: Dict[Any, Any]¶
- method: str¶
- path: str¶
- user_agent: str¶
pyechonext.response module¶
- class pyechonext.response.Response(request: Request = None, status_code: int | None = 200, body: str | Dict | None = None, headers=None, content_type: str | None = None, charset: str | None = None)[source]¶
Bases:
object
This dataclass describes a response.
- __init__(request: Request = None, status_code: int | None = 200, body: str | Dict | None = None, headers=None, content_type: str | None = None, charset: str | None = None)[source]¶
Initialize new response
- Parameters:
request (Request, optional) – request object. Defaults to None.
use_i18n (bool, optional) – i18n using status. Defaults to False.
status_code (Optional[int], optional) – default status code. Defaults to 200.
body (Optional[str], optional) – response body. Defaults to None.
headers (Optional[Dict[str, str]], optional) – http headers. Defaults to {}.
content_type (Optional[str], optional) – content type. Defaults to None.
charset (Optional[str], optional) – charset. Defaults to None.
i18n_params (Optional[dict], optional) – params for i18n. Defaults to {}.
- add_headers(headers: List[Tuple[str, str]])[source]¶
Adds new headers
- Parameters:
headers (List[Tuple[str, str]]) – new headers
- body: str¶
- charset: str¶
- content_type: str¶
- default_body_encoding: str = 'UTF-8'¶
- default_charset: str = 'UTF-8'¶
- default_conditional_response: bool = False¶
- default_content_type: str = 'text/html'¶
- extra: Dict[Any, Any]¶
- headers¶
- property json: str | dict[Any, Any]¶
Get response body as JSON
- Returns:
_description_
- Return type:
dict
- status_code: str¶
- unicode_errors: str = 'strict'¶
- pyechonext.response.method()¶
recv(buffersize[, flags]) -> data
Receive up to buffersize bytes from the socket. For the optional flags argument, see the Unix manual. When no data is available, block until at least one byte is available or until the remote end is closed. When the remote end is closed and all data is read, return the empty string.
pyechonext.static module¶
- class pyechonext.static.StaticFile(settings: Settings, filename: str, update_timeout: int | None = 3600, precache: bool | None = False)[source]¶
Bases:
object
This class describes a static file.
- __init__(settings: Settings, filename: str, update_timeout: int | None = 3600, precache: bool | None = False)[source]¶
Constructs a Static File
- Parameters:
settings (Settings) – settings of webapp.
filename (str, optional) – static filename without static dir.
update_timeout (int, optional) – timeout to update inmemory-cache file content. Defaults to 3600.
precache (bool, optional) – preload a file content flag. Defaults to False.
- Raises:
StaticFileNotFoundError – static file at static dir not found
- class pyechonext.static.StaticFilesManager(static_files: List[StaticFile])[source]¶
Bases:
object
This class describes a static files manager.
- __init__(static_files: List[StaticFile])[source]¶
Initialize manager
- Parameters:
static_files (List[StaticFile]) – list of static files.
- get_file_size(url: str) int | None [source]¶
Get file size
- Parameters:
url (str) – url of static page
- Returns:
file size
- Return type:
int | None
pyechonext.urls module¶
- class pyechonext.urls.URL(path: str, controller: PageController | type, summary: str | None = None)[source]¶
Bases:
object
This dataclass describes an url.
- __init__(path: str, controller: PageController | type, summary: str | None = None) None ¶
- controller: PageController | type¶
- path: str¶
- summary: str | None = None¶
Module contents¶
EchoNext is a lightweight, fast and scalable web framework for Python Copyright (C) 2024 Alexeev Bronislav (C) 2024
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA