[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "paste-framework" version = "2.0.1" description = "A production-ready lightweight Python framework with built-in RBAC, JWT, async tasks, Swagger, and modular utilities" readme = "README.md" requires-python = ">=3.11" license = {text = "MIT"} authors = [ {name = "Paste Contributors", email = "waynezwf@qq.com"}, ] keywords = ["framework", "tornado", "rbac", "jwt", "redis", "swagger"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server", "Topic :: Software Development :: Libraries :: Application Frameworks", ] dependencies = [ # --- Web 框架核心 --- "tornado>=6.4", # --- 数据库 / ORM --- "sqlalchemy>=2.0.49,<3.0", "PyMySQL>=1.1.0", "aiomysql>=0.2.0", # --- 安全 / JWT --- "PyJWT>=1.7.1", # --- Redis / 消息队列 --- "redis>=5.2.1", # --- 表单验证 --- "WTForms>=3.2.1", "tornado-wtforms>=0.0.1", # --- 文件处理(PDF / SVG / Excel)--- "weasyprint>=64.1", "svgwrite>=1.4.2", "pandas>=2.0.0", "xlsxwriter>=3.0", "openpyxl>=3.1.5", # --- 日期 / 时间 --- "python-dateutil>=2.8.0", # --- 工具 / 序列化 --- "PyYAML>=6.0.2", "aiofiles>=23.0.0", "psutil>=5.9.0", # --- 通用 --- "numpy>=1.24.0", ] [project.optional-dependencies] swagger = [ "tornado-swagger>=1.4.5", ] async = [ "aiohttp>=3.13.0", "aiosqlite>=0.21.0", "aioquic>=1.2.0", ] java = [ "javaobj-py3>=0.4.4", ] chart = [ "matplotlib>=3.10.1", "scipy>=1.14.0", "seaborn>=0.13.2", ] image = [ "pillow>=10.0.0", "opencv-python>=4.11.0.86", ] all = [ "paste-framework[swagger,async,java,chart,image]", ] test = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.0.0", "httpx>=0.25.0", "httpx-sse>=0.4.0", ] dev = [ "black>=24.0.0", "flake8>=7.0.0", "mypy>=1.0.0", "pre-commit>=3.0.0", ] [project.urls] Homepage = "https://github.com/wayne-zwf/paste" Documentation = "https://paste-framework.readthedocs.io" Repository = "https://github.com/wayne-zwf/paste" Changelog = "https://github.com/wayne-zwf/paste/blob/main/CHANGELOG.md" [tool.setuptools.packages.find] include = ["paste", "paste.*"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" addopts = [ "--verbose", "--cov=paste", "--cov-report=term-missing", "--cov-report=html", "--asyncio-mode=auto", ] [tool.black] line-length = 120 target-version = ["py311"] [tool.flake8] max-line-length = 120 extend-ignore = ["E203", "W503"] [project.scripts] paste-hello = "examples.01_hello_world.main:main" paste-task = "examples.04_tasks_service.task_service:start_service"