{"id":35693993,"url":"https://alexeev-prog.github.io/pyEchoNext/","last_synced_at":"2026-01-11T20:00:30.789Z","repository":{"id":259708994,"uuid":"878892453","full_name":"alexeev-prog/pyEchoNext","owner":"alexeev-prog","description":"EchoNext is a lightweight, fast and scalable web framework for Python","archived":false,"fork":false,"pushed_at":"2025-08-11T19:33:40.000Z","size":3253,"stargazers_count":16,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-23T03:58:51.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://alexeev-prog.github.io/pyEchoNext/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexeev-prog.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-26T11:54:46.000Z","updated_at":"2025-08-18T17:24:40.000Z","dependencies_parsed_at":"2024-10-27T14:02:40.831Z","dependency_job_id":"8b23c644-227a-451e-9340-9e3c025626d6","html_url":"https://github.com/alexeev-prog/pyEchoNext","commit_stats":null,"previous_names":["alexeev-prog/pyechonext"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/alexeev-prog/pyEchoNext","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FpyEchoNext","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FpyEchoNext/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FpyEchoNext/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FpyEchoNext/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexeev-prog","download_url":"https://codeload.github.com/alexeev-prog/pyEchoNext/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FpyEchoNext/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28321259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-06T00:00:56.926Z","updated_at":"2026-01-11T20:00:30.772Z","avatar_url":"https://github.com/alexeev-prog.png","language":"Python","funding_links":[],"categories":["Project Categories"],"sub_categories":[],"readme":"# 🌟 **EchoNext: The Future of Web** 🚀\n\u003ca id=\"readme-top\"\u003e\u003c/a\u003e \n\n\u003cdiv align=\"center\"\u003e  \n  \u003cp align=\"center\"\u003e\n    EchoNext is a lightweight, fast and scalable web framework for Python\n    \u003cbr /\u003e\n    \u003ca href=\"https://alexeev-prog.github.io/pyEchoNext/\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"#-why-choose-pyechonext\"\u003eWhy Choose pyEchoNext\u003c/a\u003e\n    ·\n    \u003ca href=\"#-key-features\"\u003eKey Features\u003c/a\u003e\n    ·\n    \u003ca href=\"#-getting-started\"\u003eGetting Started\u003c/a\u003e\n    ·\n    \u003ca href=\"#-usage-examples\"\u003eBasic Usage\u003c/a\u003e\n    ·\n    \u003ca href=\"#-specifications\"\u003eSpecification\u003c/a\u003e\n    ·\n    \u003ca href=\"https://alexeev-prog.github.io/pyEchoNext/\"\u003eDocumentation\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/alexeev-prog/pyEchoNext/blob/main/LICENSE\"\u003eLicense\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/languages/top/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/languages/count/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/wheel/pyechonext?style=for-the-badge\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/coverage-73%25-73%25?style=for-the-badge\" alt=\"Coverage\"\u003e\n    \u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg alt=\"PyPI - Version\" src=\"https://img.shields.io/pypi/v/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/pyEchoNext?style=for-the-badge\"\u003e\n    \u003cimg alt=\"GitHub contributors\" src=\"https://img.shields.io/github/contributors/alexeev-prog/pyEchoNext?style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/alexeev-prog/pyEchoNext/refs/heads/main/docs/pallet-0.png\"\u003e\n\u003c/p\u003e\n\n**PyEchoNext** is a lightweight, high-performance web framework designed for building scalable Python web applications and APIs. With its modular architecture and focus on developer productivity, it combines Flask-like simplicity with FastAPI-inspired performance features. Built for modern web development challenges.\n\n \u003e [!NOTE]\n \u003e Python 3.12+\n\n\u003e [!CAUTION]\n\u003e PyEchoNext is currently in active alpha development. While core functionality is stable, some advanced features are still evolving. Production use requires thorough testing.\n\n\u003e [!NOTE]\n\u003e Versions below 0.7.14a are not recommended for use with gunicorn \u003c23.0 due to the fact that they used an older version of gunicorn (\u003c23.0), which was [vulnerable](https://deps.dev/advisory/osv/GHSA-hc5x-x2vx-497g).\n\n \u003e Next big update: 0.8.0 - Hybrid Performance Core: async + multithread + multiprocess\n\nYou want see hybrid core before release? See [DevGuide Specs for HybridCore](./devguide/hybrid_core.md).\n\n## Check Other My Projects\n\n + [SQLSymphony](https://github.com/alexeev-prog/SQLSymphony) - simple and fast ORM in sqlite (and you can add other DBMS)\n + [Burn-Build](https://github.com/alexeev-prog/burn-build) - simple and fast build system written in python for C/C++ and other projects. With multiprocessing, project creation and caches!\n + [OptiArch](https://github.com/alexeev-prog/optiarch) - shell script for fast optimization of Arch Linux\n + [libnumerixpp](https://github.com/alexeev-prog/libnumerixpp) - a Powerful C++ Library for High-Performance Numerical Computing\n + [pycolor-palette](https://github.com/alexeev-prog/pycolor-palette) - display beautiful log messages, logging, debugging.\n + [shegang](https://github.com/alexeev-prog/shegang) - powerful command interpreter (shell) for linux written in C\n\n## 🤔 Why Choose pyEchoNext?\n\n- **🔥 Featherweight Performance**: No bloat, just speed! Our framework is designed to optimize performance, making it a breeze to create and scale your applications without the overhead.\n  \n- **💼 Unmatched Scalability**: Handle thousands of connections effortlessly! Echonext is built for performance in high-demand environments, making it the perfect choice for startups or enterprise applications.\n\n- **🔧 Customizable Architecture**: Tailor your framework to suit your unique needs. Whether it’s middleware, routing, or authentication, make it yours with minimal effort!\n\n- **🌍 Cross-Platform Compatibility**: Echonext works beautifully on any OS. Whether you’re developing on Windows, macOS, or Linux, you’re covered!\n\n- **💡 User-Friendly Design**: Our intuitive API and comprehensive documentation make it easy for beginners and pros alike. Dive in and start coding right away!\n\n- **📦 Plug-and-Play Components**: Easily integrate with third-party libraries to enhance your application. Don’t reinvent the wheel—leverage existing solutions!\n\n- **🔒 Built-in Authentication**: Simplify your user authentication process with our built-in, easy-to-implement features.\n\n- **📊 Automatic API Documentation**: Create RESTful endpoints that are not just powerful but also well-documented, saving you time and effort.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## 📚 Key Features\n\n- Intuitive API: Pythonic, object-oriented interface for interacting with routes and views.\n- Performance Optimization: Lazy loading, eager loading, and other techniques for efficient web queries.\n- Comprehensive Documentation: Detailed usage examples and API reference to help you get started.\n- Modular Design: Clean, maintainable codebase that follows best software engineering practices.\n- Extensive Test Coverage: Robust test suite to ensure the library's reliability and stability.\n\n```mermaid\ngraph TD\n    A[Router] --\u003e B[Middleware]\n    B --\u003e C[Controllers]\n    C --\u003e D[Models]\n    C --\u003e E[Views]\n    D --\u003e F[Data]\n    E --\u003e G[Templates]\n    A --\u003e H[Static Files]\n```\n\n\n### Intelligent Routing System\n- **Trie-based URL dispatch** - O(m) lookup complexity\n- **Dynamic path parameters** - Type-annotated parameter handling\n- **Nested routers** - Modular application organization\n\n```python\n# Hierarchical routing example\nmain_router = Router()\nadmin_router = Router(prefix=\"/admin\")\n\n@admin_router.route_page(\"/dashboard\")\ndef admin_dashboard(request, response):\n    return render_template(\"admin.html\")\n\nmain_router.include_router(admin_router)\n```\n\n### Security Framework\n- **Multi-layer protection**:\n  - CSRF tokens with session binding\n  - XSS double-escaping (content + attributes)\n  - SQL injection pattern filtering\n  - Rate limiting (sliding window algorithm)\n- **Cryptographic modules**:\n  - PSPCAlgorithm for lightweight encryption\n  - SHA3/BLAKE3 hashing support\n  - Salted password handling\n\n```python\n# Security implementation example\ntoken = Security.generate_csrf_token(session_id)\nfiltered_query = Security.filter_sql_query(\"SELECT * FROM users; DROP TABLE users\")\n```\n\n### ⚡ Performance Optimization\n- **Multi-layer caching**:\n  - LRU in-memory cache\n  - Performance-optimized memoization\n  - Static file preloading\n- **JIT-friendly design**:\n  - Numba-compatible critical paths\n  - Zero-copy request processing\n  - Async-ready architecture (in development)\n\n```python\n# Performance-cached view\n@performance_cached(perf_cache)\ndef compute_intensive_view():\n    return calculate_fibonacci(1000)\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## ⚙️ Functionality\n\n + i18n/l10n localization with [hermes-langlib](https://github.com/alexeev-prog/hermes_langlib).\n + basic project documentation generator\n + request/response\n + middlewares (with basic session cookie middleware)\n + views and routes\n + settings and config loader\n + built-in template engine and Jinja2\n + basic security and hashing\n + static files management\n + cache response bodies\n + performance\n + slugger\n + permissions\n + pyEchoNext Schemas (`pyechonext.schemas`) and pydantic support for validating schemas\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## 🚀 Getting Started\n\npyEchoNext is available on [PyPI](https://pypi.org/project/pyechonext). Simply install the package into your project environment with PIP:\n\n```bash\npip install pyechonext\n```\n\nOnce installed, you can start using the library in your Python projects. Check out the [documentation](https://alexeev-prog.github.io/pyEchoNext) for detailed usage examples and API reference.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## ⚙️ Dependency Injection\npyEchoNext is universal, and you are free to use any Dependency-Injection framework. But we recommend using the specially developed [echonextdi](https://github.com/alexeev-prog/echonext_di). It is simple and fast to use.\n\nInstall:\n\n```bash\npip install echonextdi\n```\n\nExample code:\n\n```python\nfrom echonextdi.containers.container import Container\nfrom echonextdi.depends import Depends\nfrom echonextdi.providers.callable_provider import CallableProvider\n\n\ndef sqrt(a: int, b: int = 2):\n    return a**b\n\n\nclass SQRT_Dependency:\n    def __init__(self, sqrt):\n        self.sqrt = sqrt\n\n\ncontainer = Container()\ncontainer.register(\"sqrt\", CallableProvider(sqrt))\n\n\ndef calculate(number: int, depend: Depends = Depends(container, SQRT_Dependency)):\n    print(f\"{number} ^2 = {depend().sqrt(2)}\")\n\n\ncalculate(4) # Output: 16\n```\n\n## 💻 Usage Examples\nYou can view examples at [examples directory](./examples).\n\n### Prefix Tree (Trie)\nPrefix Tree data structure (this structure also used in pyechonext routing system)\n\n```python\nfrom pyechonext.utils.trie import  PrefixTree\n\nif __name__ == '__main__':\n    trie = PrefixTree()\n    trie.insert('apple')\n    trie.insert('app')\n    trie.insert('aposematic')\n    trie.insert('appreciate')\n    trie.insert('book')\n    trie.insert('bad')\n    trie.insert('bear')\n    trie.insert('bat')\n    print(trie.starts_with('app'))\n\n    router_tree = PrefixTree()\n    router_tree.insert('index')\n    router_tree.insert('users')\n    router_tree.insert('transactions')\n    router_tree.insert('wallets')\n    router_tree.insert('wallets/create')\n\n    print(router_tree.starts_with('wa'))\n\n```\n\n### i18n with hermes-langlib\nHermes LangLib - a fast and light python library for translating, localizing and internationalizing your applications. The library is aimed at high speed and stability; it can be used in highly loaded projects.\n\nDirectory tree:\n\n```\n├── example.toml\n└── locales\n    └── default.json\n```\n\nExample config-file `example.toml`:\n\n```toml\nlocale_directory=\"locales\"\ndefault_locale_file=\"default.json\"\ndefault_language=\"RU_RU\"\ntranslator=\"google\"\n```\n\nExample locale file `locales/default.json`:\n\n```json\n{\n  \"locales\": {\n    \"RU\": [\"RU_RU\"],\n    \"EN\": [\"EN_EN\", \"EN_US\"]\n  },\n  \"RU\": {\n    \"RU_RU\": {\n      \"title\": \"Библиотека для интернационализации\",\n      \"description\": \"Библиотека, которая позволит переводить ваши приложения\",\n      \"mails_message\": {\n        \"plural\": \"count\",\n        \"^0$\": \"У вас нет ни одного письма\",\n        \"11\": \"У вас есть {count} писем\",\n        \"1$|1$\": \"У вас есть {count} письмо\",\n        \"^(2|3|4)$|(2|3|4)$\": \"У вас есть {count} письма\",\n        \"other\": \"У вас есть {count} писем\"\n      }\n    }\n  },\n  \"EN\": {\n    \"EN_EN\": {\n      \"title\": \"Library for internationalization\",\n      \"description\": \"A library that will allow you to translate your applications\",\n      \"mails_message\": {\n        \"plural\": \"count\",\n        \"^0$\": \"You do not have any mail.\",\n        \"^1$\": \"You have a new mail.\",\n        \"other\": \"You have {count} new mails.\"\n      }\n    },\n    \"EN_US\": {\n      \"title\": \"Library for internationalization\",\n      \"description\": \"A library that will allow you to translate your applications\",\n      \"mails_message\": {\n        \"plural\": \"count\",\n        \"^0$\": \"You do not have any mail.\",\n        \"^1$\": \"You have a new mail.\",\n        \"other\": \"You have {count} new mails.\"\n      }\n    }\n  }\n}\n```\n\nExample usage:\n\n```python\nfrom hermes_langlib.locales import LocaleManager\nfrom hermes_langlib.storage import load_config\n\nconfig = load_config('example.toml')\n\nlocale_manager = LocaleManager(config)\nprint(locale_manager.get('title - {version}', 'default', 'RU_RU', version=\"0.1.0\"))\nprint(locale_manager.get('title - {version}', 'default', 'RU', version=\"0.1.0\"))\nprint(locale_manager.get('mails_message.', 'default', 'RU_RU', count=0))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=1))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=11))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=2))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=22))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=46))\nprint(locale_manager.get('mails_message', 'default', 'RU_RU', count=100000001))\nprint(locale_manager.translate(\"You have only three mails\", \"en\", 'ru'))\nprint(locale_manager.translate(\"У вас всего три письма\", \"ru\", 'en'))\n```\n\nYou can read [Hermes-Langlib Specification at this link](https://github.com/alexeev-prog/hermes_langlib/tree/main?tab=readme-ov-file#-specifications).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Basic With Depends Injection\n\n```python\nimport os\n\nfrom pyechonext.app import ApplicationType, EchoNext\nfrom pyechonext.config import Settings\nfrom pyechonext.middleware import middlewares\nfrom pyechonext.mvc.controllers import PageController\nfrom pyechonext.urls import URL\n\nfrom echonextdi.containers.container import Container\nfrom echonextdi.depends import Depends\nfrom echonextdi.providers.callable_provider import CallableProvider\n\n\nclass IndexController(PageController):\n    def get(self, request, response, **kwargs):\n        return \"Hello\"\n\n    def post(self, request, response, **kwargs):\n        return \"Hello\"\n\n\ndef say_hello(name: str, phrase: str = 'Hello'):\n    return f'{phrase} {name}'\n\n\nclass Hello_Dependency:\n    def __init__(self, say_hello):\n        self.say_hello = say_hello\n\n\ncontainer = Container()\ncontainer.register(\"say_hello\", CallableProvider(say_hello))\n\nurl_patterns = [URL(path=\"/\", controller=IndexController)]\nsettings = Settings(\n    BASE_DIR=os.path.dirname(os.path.abspath(__file__)), TEMPLATES_DIR=\"templates\"\n)\nechonext = EchoNext(\n    __name__,\n    settings,\n    middlewares,\n    urls=url_patterns,\n    application_type=ApplicationType.HTML,\n)\n\n\n@echonext.route_page(\"/hello/{name}\")\ndef hello(request, response, name: str = \"World\", depend: Depends = Depends(container, Hello_Dependency)):\n    response.body = depend().say_hello(name)\n\n```\n\n### Performance caching\n\n```python\nimport random\nfrom pyechonext.utils.performance import InMemoryPerformanceCache, SingletonPerformanceCache, performance_cached\n\nmemorycache = InMemoryPerformanceCache\nperf = SingletonPerformanceCache(memorycache)\n\n\n@performance_cached(perf)\ndef example_function(a: int = 10 ** 6):\n    inside_circle = 0\n\n    for _ in range(a):\n        x = random.uniform(-1, 1)\n        y = random.uniform(-1, 1)\n        if x ** 2 + y ** 2 \u003c= 1:\n            inside_circle += 1\n\n    return (inside_circle / a) * 4\n\n\nif __name__ == '__main__':\n    print('start')\n    print(f'{example_function()} - Caching')\n    print(f'{example_function()} - Cached')\n    print(f'{example_function(10 ** 7)} - Caching new')\n```\n\n### Permissions\n\n```python\nfrom pyechonext.permissions import (\n    Permission,\n    Role,\n    Resource,\n    AccessControlRule,\n    Policy,\n    AgeRestrictionsABP,\n    User,\n    DefaultPermissionChecker,\n    UserController,\n)\n\nview_users_perm = Permission(\"view_users\")\nedit_users_perm = Permission(\"edit_users\")\n\nadmin_role = Role(\"admin\")\nadmin_role.add_permission(view_users_perm)\nadmin_role.add_permission(edit_users_perm)\n\nuser_role = Role(\"user\")\nuser_role.add_permission(view_users_perm)\n\nuser_resource = Resource(\"UserResource\")\n\npolicy = Policy()\npolicy.add_rule(AccessControlRule(admin_role, view_users_perm, user_resource, True))\npolicy.add_rule(AccessControlRule(admin_role, edit_users_perm, user_resource, True))\npolicy.add_rule(AccessControlRule(user_role, view_users_perm, user_resource, True))\npolicy.add_rule(AccessControlRule(user_role, edit_users_perm, user_resource, False))\n\nage_policy = AgeRestrictionsABP(conditions={\"age\": 18}, rules=policy.rules)\nage_policy.add_rule(AccessControlRule(user_role, view_users_perm, user_resource, True))\n\nadmin_user = User(\"admin\", attributes={\"age\": 30})\nadmin_user.add_role(admin_role)\n\nyoung_user = User(\"john_doe\", attributes={\"age\": 17})\nyoung_user.add_role(user_role)\n\npermission_checker = DefaultPermissionChecker(policy)\nuser_controller = UserController(permission_checker)\n\n\ndef main():\n    assert user_controller.view_users(admin_user, user_resource) == (\n        \"200 OK\",\n        \"User edit form\",\n    )\n    assert user_controller.edit_users(admin_user, user_resource) == (\n        \"200 OK\",\n        \"User edit form\",\n    )\n    assert user_controller.edit_users(young_user, user_resource) == (\n        \"403 Forbidden\",\n        \"You do not have permission to edit users.\",\n    )\n\n    assert age_policy.evaluate(young_user, user_resource, view_users_perm) == False\n    assert age_policy.evaluate(admin_user, user_resource, view_users_perm) == True\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## 🔧 Specifications\n\n### Security\nA security module created for hash functions and crypto-algorithms.\n\n#### Crypts\nSimple crypto-algorithms.\n\n##### PSPCAlgorithm\nPoint Simple Password Crypt Algorithm.\n\n```\nBase: AngryPassword\nCrypted: 00778.87999.74379.363401.558001.558001.96058.06107.711601.87999.13309.07469.50075\nDecrypted: AngryPassword\n\nBase: S0mesd7623tds@\u00266^@_\nCrypted: 51338.82165.83428.85374.62333.82165.558001.00778.237101.72744.05834.85374.53284.00778.558001.77588.39559.69024.19727\nDecrypted: S0mesd7623tds@\u00266^@_\n\nBase: PassWord\nCrypted: 00778.87999.74379.99267.558001.558001.96058.06107\nDecrypted: PassWord\n\nBase: Pass\nCrypted: 558001.558001.96058.06107\nDecrypted: Pass\n```\n\nExample:\n\n```python\nfrom pyechonext.security.crypts import PSPCAlgorithm\n\n\npspc = PSPCAlgorithm()\n\npasswords = ['AngryPassword', 'S0mesd7623tds@\u00266^@_', 'PassWord', 'Pass']\n\nfor password in passwords:\n    print('Base:', password)\n    print('Crypted:', pspc.crypt(password))\n    print('Decrypted:', pspc.decrypt(pspc.crypt(password)))\n    print()\n```\n\n#### Hashing\n \n + Module: `pyechonext.security.hashing`\n\n##### HashAlgorithm\nEnum class with available hashing algorithms\n\n```python\nclass HashAlgorithm(Enum):\n    \"\"\"\n    This class describes a hash algorithms.\n    \"\"\"\n\n    SHA256 = auto()\n    SHA512 = auto()\n    MD5 = auto()\n    BLAKE2B = auto()\n    BLAKE2S = auto()\n```\n\n##### PlainHasher\nA simple class for hashing text. Has no 'salting'.\n\n```python\nhasher = PlainHasher(HashAlgorithm.BLAKE2S)\nold_hash = hasher.hash(\"TEXT\")\nnew_hash = hasher.hash(\"TEXT\")\n\nif hasher.verify(\"TEXT\", new_hash): # true\n    print('Yes!')\n\nif hasher.verify(\"TEXT2\", old_hash): # false\n    print('Yes!')\n\n# Output: one \"Yes!\"\n```\n\n##### SaltedHasher\nA simple class for hashing text. Has hash salt.\n\n```python\nhasher = SaltedHasher(HashAlgorithm.BLAKE2S, salt='bob')\nold_hash = hasher.hash(\"TEXT\")\nnew_hash = hasher.hash(\"TEXT\")\n\nif hasher.verify(\"TEXT\", new_hash): # true\n    print('Yes!')\n\nif hasher.verify(\"TEXT2\", old_hash): # false\n    print('Yes!')\n\n# Output: one \"Yes!\"\n```\n\n### View\nView is an abstract class, with abstract get and post methods (all descendants must create these methods).\n\n```python\nclass View(ABC):\n    \"\"\"\n    Page view\n    \"\"\"\n\n    @abstractmethod\n    def get(self, request: Request, response: Response, *args, **kwargs):\n        \"\"\"\n        Get\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def post(self, request: Request, response: Response, *args, **kwargs):\n        \"\"\"\n        Post\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        raise NotImplementedError\n```\n\nExample of view:\n\n```python\nclass IndexView(View):\n    def get(self, request: Request, response: Response, **kwargs):\n        \"\"\"\n        Get\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        return \"Hello World!\"\n\n    def post(self, request: Request, response: Response, **kwargs):\n        \"\"\"\n        Post\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        return \"Message has accepted!\"\n```\n\nOr you can return response:\n\n```python\nclass IndexView(View):\n    def get(self, request: Request, response: Response, **kwargs):\n        \"\"\"\n        Get\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        return Response(request, body=\"Hello World!\")\n\n    def post(self, request: Request, response: Response, **kwargs):\n        \"\"\"\n        Post\n\n        :param      request:   The request\n        :type       request:   Request\n        :param      response:  The response\n        :type       response:  Response\n        :param      args:      The arguments\n        :type       args:      list\n        :param      kwargs:    The keywords arguments\n        :type       kwargs:    dictionary\n        \"\"\"\n        return Response(request, body=\"Message has accepted!\")\n```\n\n## Tests coverage\nTo test the web framework, PyTest with the pytest-cov plugin is used. You can look at the tests in [tests directory](./tests)\n\n## Documentation 🌍\nThe main documentation is [here](https://alexeev-prog.github.io/pyEchoNext/).\n\n\u003cimg src=\"https://github.com/alexeev-prog/pyEchoNext/actions/workflows/docs.yml/badge.svg\"\u003e\n\n## 💬 Support\nIf you encounter any issues or have questions about pyEchoNext, please:\n\n- Check the [documentation](https://alexeev-prog.github.io/pyEchoNext) for answers\n- Open an [issue on GitHub](https://github.com/alexeev-prog/pyEchoNext/issues/new)\n- Reach out to the project maintainers via the [mailing list](mailto:alexeev.dev@mail.ru)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## 🤝 Contributing\nWe welcome contributions from the community! If you'd like to help improve pyEchoNext, please check out the [contributing guidelines](https://github.com/alexeev-prog/pyEchoNext/blob/main/CONTRIBUTING.md) to get started.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## 👥 Join the Community!\nIf you find Echonext valuable and want to support the project:\n\n- Star on GitHub ⭐\n- Share it with friends and colleagues!\n- Donate via cryptocurrency 🙌\n\nConnect with fellow Echonext users: [Join our Telegram Chat](https://t.me/pyEchoNext_Forum)\n\n## Roadmap \u0026 Future Development\n\n### Q2-Q3 2025\n- [x] **0.8.0**: Hybrid core: async + multithread + multiprocess\n- [ ] Database ORM integration\n- [ ] OpenAPI 3.1 schema generation\n- [ ] Built-in monitoring dashboard\n\n### Q3-Q4 2025\n- [ ] JWT authentication module\n- [ ] Websocket support\n- [ ] Distributed task queue\n- [ ] GRPC integration\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Contributor Guidelines\n\nWe welcome PRs addressing:\n- Security enhancements\n- Performance optimization\n- Documentation improvements\n- Test coverage expansion\n- ASGI migration path\n\n**Before contributing**:\n1. Review [docs](https://alexeev-prog.github.io/pyEchoNext/)\n2. Maintain 100% test coverage for new code\n3. Follow PEP8 and SOLID, DRY, KISS principles\n4. Include type annotations\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### License \u0026 Support\nThis project operates under **GNU LGPL 2.1** - see [LICENSE](https://github.com/alexeev-prog/pyEchoNext/blob/main/LICENSE). For enterprise support, contact [alexeev.dev@mail.ru](mailto:alexeev.dev@mail.ru).\n\n**PyEchoNext** - Build robust web applications with Pythonic elegance.  \n\n[Explore Documentation](https://alexeev-prog.github.io/pyEchoNext) | \n[Report Issue](https://github.com/alexeev-prog/pyEchoNext/issues) | \n[View Examples](/examples)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\nEchoNext is a lightweight, fast and scalable web framework for Python\nCopyright (C) 2024  Alexeev Bronislav (C) 2024\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this library; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301\nUSA\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/alexeev-prog.github.io%2FpyEchoNext%2F","html_url":"https://awesome.ecosyste.ms/projects/alexeev-prog.github.io%2FpyEchoNext%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/alexeev-prog.github.io%2FpyEchoNext%2F/lists"}