├── .flake8 ├── fastapi_scheduler ├── locale │ └── zh_CN │ │ └── LC_MESSAGES │ │ ├── messages.mo │ │ └── messages.po ├── __init__.py └── admin.py ├── .pre-commit-config.yaml ├── pyproject.toml ├── .gitignore ├── README.md └── pdm.lock /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length = 130 3 | exclude = venv,.git,__pycache__,__init__.py,dev 4 | ignore = B008 -------------------------------------------------------------------------------- /fastapi_scheduler/locale/zh_CN/LC_MESSAGES/messages.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amisadmin/fastapi-scheduler/HEAD/fastapi_scheduler/locale/zh_CN/LC_MESSAGES/messages.mo -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/psf/black 3 | rev: 22.8.0 4 | hooks: 5 | - id: black 6 | 7 | - repo: https://github.com/PyCQA/flake8 8 | rev: 5.0.2 9 | hooks: 10 | - id: flake8 11 | additional_dependencies: 12 | - flake8-bugbear 13 | 14 | - repo: https://github.com/pycqa/isort 15 | rev: 5.10.1 16 | hooks: 17 | - id: isort 18 | -------------------------------------------------------------------------------- /fastapi_scheduler/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.0.15" 2 | __url__ = "https://github.com/amisadmin/fastapi_scheduler" 3 | 4 | import gettext 5 | import os 6 | 7 | from fastapi_amis_admin import i18n 8 | 9 | BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 10 | 11 | i18n.load_translations( 12 | { 13 | "zh_CN": gettext.translation( 14 | domain="messages", 15 | localedir=os.path.join(BASE_DIR, "locale"), 16 | languages=["zh_CN"], 17 | ) 18 | } 19 | ) 20 | 21 | from .admin import SchedulerAdmin 22 | 23 | __all__ = ["SchedulerAdmin"] 24 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["flit_core >=3.2,<4"] 3 | build-backend = "flit_core.buildapi" 4 | 5 | [project] 6 | name = "fastapi_scheduler" 7 | authors = [ 8 | { name = "Atomi", email = "1456417373@qq.com" }, 9 | ] 10 | maintainers = [ 11 | { name = "Atomi", email = "1456417373@qq.com" }, 12 | ] 13 | description = "FastAPI-Scheduler is a simple scheduled task management FastAPI extension based on APScheduler." 14 | readme = "README.md" 15 | requires-python = ">=3.7" 16 | dynamic = ["version"] 17 | keywords = [ 18 | "FastAPI-Amis-Admin", 19 | "FastAPI-APScheduler", 20 | "fastapi-scheduler", 21 | "APScheduler", 22 | ] 23 | classifiers = [ 24 | "Framework :: FastAPI", 25 | "Environment :: Web Environment", 26 | "Topic :: System :: Systems Administration", 27 | "License :: OSI Approved :: Apache Software License", 28 | "Operating System :: OS Independent", 29 | "Programming Language :: Python :: 3", 30 | "Programming Language :: Python :: 3.7", 31 | "Programming Language :: Python :: 3.8", 32 | "Programming Language :: Python :: 3.9", 33 | "Programming Language :: Python :: 3.10", 34 | ] 35 | dependencies = [ 36 | "fastapi-amis-admin>=0.6.0,<0.8.0", 37 | "APScheduler>=3.8.0", 38 | ] 39 | 40 | [project.urls] 41 | Source = "https://github.com/amisadmin/fastapi_scheduler" 42 | FastAPI-Amis-Admin = "https://github.com/amisadmin/fastapi_amis_admin" 43 | 44 | [project.optional-dependencies] 45 | test = [ 46 | "pytest >=6.2.4,<7.0.0", 47 | ] 48 | 49 | [tool.isort] 50 | profile = "black" 51 | atomic = true 52 | filter_files = true 53 | 54 | [tool.black] 55 | line-length = 130 56 | include = '\.pyi?$' 57 | 58 | [tool] 59 | [tool.pdm] 60 | [tool.pdm.dev-dependencies] 61 | dev = [ 62 | "pre-commit>=2.20.0", 63 | "isort>=5.10.1", 64 | "black>=22.8.0", 65 | ] 66 | [tool.pdm.scripts] 67 | lint = "pre-commit run --all-files" 68 | -------------------------------------------------------------------------------- /fastapi_scheduler/locale/zh_CN/LC_MESSAGES/messages.po: -------------------------------------------------------------------------------- 1 | # Chinese (Simplified, China) translations for PROJECT. 2 | # Copyright (C) 2022 ORGANIZATION 3 | # This file is distributed under the same license as the PROJECT project. 4 | # FIRST AUTHOR , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PROJECT VERSION\n" 9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 10 | "POT-Creation-Date: 2022-05-22 18:43+0800\n" 11 | "PO-Revision-Date: 2022-05-22 18:43+0800\n" 12 | "Last-Translator: FULL NAME \n" 13 | "Language: zh_Hans_CN\n" 14 | "Language-Team: zh_Hans_CN \n" 15 | "Plural-Forms: nplurals=1; plural=0;\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=utf-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Generated-By: Babel 2.10.1\n" 20 | 21 | #: admin.py:32 22 | msgid "APScheduler" 23 | msgstr "定时任务" 24 | 25 | #: admin.py:43 26 | msgid "Job ID" 27 | msgstr "任务ID" 28 | 29 | #: admin.py:44 30 | msgid "Job Name" 31 | msgstr "任务名称" 32 | 33 | #: admin.py:47 34 | msgid "Next Run Time" 35 | msgstr "下次运行时间" 36 | 37 | #: admin.py:50 38 | msgid "Trigger" 39 | msgstr "触发器" 40 | 41 | #: admin.py:51 42 | msgid "Function" 43 | msgstr "任务函数" 44 | 45 | #: admin.py:52 46 | msgid "Tuple Args" 47 | msgstr "元组参数" 48 | 49 | #: admin.py:53 50 | msgid "Keyword Args" 51 | msgstr "字典参数" 52 | 53 | #: admin.py:54 54 | msgid "Executor" 55 | msgstr "执行器" 56 | 57 | #: admin.py:55 58 | msgid "Max Instances" 59 | msgstr "最大并发数" 60 | 61 | #: admin.py:56 62 | msgid "Misfire Grace Time" 63 | msgstr "容错时间" 64 | 65 | #: admin.py:57 66 | msgid "Coalesce" 67 | msgstr "合并" 68 | 69 | #: admin.py:89 70 | msgid "SHOWING ${items|count} OF ${total} RESULT(S)" 71 | msgstr "显示${total}条结果中的${items|count}条" 72 | 73 | #: admin.py:154 admin.py:156 74 | msgid "Update" 75 | msgstr "更新" 76 | 77 | #: admin.py:168 78 | msgid "remove" 79 | msgstr "移除" 80 | 81 | #: admin.py:169 82 | msgid "pause" 83 | msgstr "暂停" 84 | 85 | #: admin.py:170 86 | msgid "resume" 87 | msgstr "恢复" 88 | 89 | #: admin.py:174 90 | #, python-format 91 | msgid "Bulk %s" 92 | msgstr "批量%s" 93 | 94 | #: admin.py:175 95 | #, python-format 96 | msgid "Are you sure you want to batch %s selected tasks?" 97 | msgstr "你确定要批量%s选中任务吗?" 98 | 99 | #: admin.py:180 100 | #, python-format 101 | msgid "Are you sure you want to %s the selected task?" 102 | msgstr "你确定要%s选中任务吗?" 103 | 104 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Python template 2 | # Byte-compiled / optimized / DLL files 3 | __pycache__/ 4 | *.py[cod] 5 | *$py.class 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | cover/ 54 | 55 | # Translations 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | 134 | # pytype static type analyzer 135 | .pytype/ 136 | 137 | # Cython debug symbols 138 | cython_debug/ 139 | 140 | # ide 141 | /dev/ 142 | /.idea/ 143 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | FastAPI-Scheduler 3 |

4 |

5 | 6 | Package version 7 | 8 | 9 | Downloads 10 | 11 | 12 | Chat on Gitter 13 | 14 | 15 | 229036692 16 | 17 |

18 | ## Project Introduction 19 | 20 | `FastAPI-Scheduler` is a simple scheduled task management `FastAPI` extension library based on `APScheduler`. 21 | 22 | ## Install 23 | 24 | ```bash 25 | pip install fastapi-scheduler 26 | ``` 27 | 28 | ## Simple example 29 | 30 | **main.py**: 31 | 32 | ```python 33 | from fastapi import FastAPI 34 | from fastapi_amis_admin.admin.settings import Settings 35 | from fastapi_amis_admin.admin.site import AdminSite 36 | from datetime import date 37 | from fastapi_scheduler import SchedulerAdmin 38 | 39 | # Create `FastAPI` application 40 | app = FastAPI() 41 | 42 | # Create `AdminSite` instance 43 | site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db')) 44 | 45 | # # Custom timed task scheduler 46 | # from apscheduler.schedulers.asyncio import AsyncIOScheduler 47 | # from apscheduler.jobstores.redis import RedisJobStore 48 | # # Use `RedisJobStore` to create a job store 49 | # scheduler = AsyncIOScheduler(jobstores={'default':RedisJobStore(db=2,host="127.0.0.1",port=6379,password="test")}) 50 | # scheduler = SchedulerAdmin.bind(site,scheduler=scheduler) 51 | 52 | # Create an instance of the scheduled task scheduler `SchedulerAdmin` 53 | scheduler = SchedulerAdmin.bind(site) 54 | 55 | 56 | # Add scheduled tasks, refer to the official documentation: https://apscheduler.readthedocs.io/en/master/ 57 | # use when you want to run the job at fixed intervals of time 58 | @scheduler.scheduled_job('interval', seconds=60) 59 | def interval_task_test(): 60 | print('interval task is run...') 61 | 62 | 63 | # use when you want to run the job periodically at certain time(s) of day 64 | @scheduler.scheduled_job('cron', hour=3, minute=30) 65 | def cron_task_test(): 66 | print('cron task is run...') 67 | 68 | 69 | # use when you want to run the job just once at a certain point of time 70 | @scheduler.scheduled_job('date', run_date=date(2022, 11, 11)) 71 | def date_task_test(): 72 | print('date task is run...') 73 | 74 | 75 | @app.on_event("startup") 76 | async def startup(): 77 | # Mount the background management system 78 | site.mount_app(app) 79 | # Start the scheduled task scheduler 80 | scheduler.start() 81 | 82 | 83 | if __name__ == '__main__': 84 | import uvicorn 85 | 86 | uvicorn.run(app, debug=True) 87 | ``` 88 | 89 | ## Interface/UI preview 90 | 91 | - Open `http://127.0.0.1:8000/admin/` in your browser: 92 | 93 | ![SchedulerAdmin](https://s2.loli.net/2022/05/10/QEtCLsWi1389BKH.png) 94 | 95 | ## Dependent projects 96 | 97 | - [FastAPI-Amis-Admin](https://docs.amis.work/) 98 | 99 | - [APScheduler](https://apscheduler.readthedocs.io/en/master/) 100 | 101 | ## agreement 102 | 103 | The project follows the Apache2.0 license agreement. -------------------------------------------------------------------------------- /fastapi_scheduler/admin.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from typing import Any, Dict, List, Optional, Union 3 | 4 | from apscheduler.job import Job 5 | from apscheduler.jobstores.memory import MemoryJobStore 6 | from apscheduler.schedulers.asyncio import AsyncIOScheduler 7 | from apscheduler.schedulers.base import BaseScheduler 8 | from fastapi import Body, Depends 9 | from fastapi_amis_admin import admin 10 | from fastapi_amis_admin.admin import AdminApp 11 | from fastapi_amis_admin.amis import ( 12 | Action, 13 | ActionType, 14 | Dialog, 15 | Form, 16 | FormItem, 17 | InputDatetime, 18 | Page, 19 | PageSchema, 20 | SchemaNode, 21 | SizeEnum, 22 | TableColumn, 23 | TableCRUD, 24 | ) 25 | from fastapi_amis_admin.crud.schema import ( 26 | BaseApiOut, 27 | CrudEnum, 28 | ItemListSchema, 29 | Paginator, 30 | ) 31 | from fastapi_amis_admin.crud.utils import ItemIdListDepend 32 | from fastapi_amis_admin.models.fields import Field 33 | from fastapi_amis_admin.utils.pydantic import ( 34 | ModelField, 35 | create_model_by_model, 36 | model_fields, 37 | ) 38 | from fastapi_amis_admin.utils.translation import i18n as _ 39 | from pydantic import BaseModel, validator 40 | from starlette.requests import Request 41 | from typing_extensions import Annotated, Literal 42 | 43 | 44 | class SchedulerAdmin(admin.PageAdmin): 45 | page_schema = PageSchema(label=_("APScheduler"), icon="fa fa-clock-o") 46 | page_path = "/" 47 | router_prefix = "/jobs" 48 | scheduler: BaseScheduler = AsyncIOScheduler( 49 | jobstores={"default": MemoryJobStore()}, 50 | timezone="Asia/Shanghai", 51 | ) 52 | 53 | class JobModel(BaseModel): 54 | id: str = Field(..., title=_("Job ID")) 55 | name: str = Field(..., title=_("Job Name")) 56 | next_run_time: Optional[datetime] = Field( 57 | None, 58 | title=_("Next Run Time"), 59 | amis_form_item=InputDatetime(format="YYYY-MM-DDTHH:mm:ss.SSSSSSZ"), 60 | ) 61 | trigger: Optional[str] = Field(None, title=_("Trigger")) # BaseTrigger 62 | func_ref: str = Field(..., title=_("Function")) 63 | args: List[Any] = Field([], title=_("Tuple Args"), amis_table_column="list") 64 | kwargs: Dict[str, Any] = Field( 65 | {}, 66 | title=_("Keyword Args"), 67 | amis_table_column="json", 68 | amis_form_item="json-editor", 69 | ) 70 | executor: str = Field("default", title=_("Executor")) 71 | max_instances: Optional[int] = Field(None, title=_("Max Instances")) 72 | misfire_grace_time: Optional[int] = Field(None, title=_("Misfire Grace Time")) 73 | coalesce: Optional[bool] = Field(None, title=_("Coalesce")) 74 | 75 | @validator("trigger", pre=True) 76 | def trigger_valid(cls, v): # sourcery skip: instance-method-first-arg-name 77 | return str(v) 78 | 79 | @classmethod 80 | def parse_job(cls, job: Job): 81 | return job and cls(**{k: getattr(job, k, None) for k in model_fields(cls)}) 82 | 83 | @classmethod 84 | def bind(cls, app: AdminApp, scheduler: BaseScheduler = None) -> BaseScheduler: 85 | cls.scheduler = scheduler or cls.scheduler 86 | app.register_admin(cls) 87 | return cls.scheduler 88 | 89 | def __init__(self, app: "AdminApp"): 90 | super().__init__(app) 91 | self.schema_update = create_model_by_model( 92 | self.JobModel, 93 | "JobsUpdate", 94 | include={"name", "next_run_time"}, 95 | set_none=True, 96 | ) 97 | self.paginator = Paginator(perPageMax=100) 98 | 99 | async def get_page(self, request: Request) -> Page: 100 | page = await super().get_page(request) 101 | headerToolbar = [ 102 | "reload", 103 | "bulkActions", 104 | {"type": "columns-toggler", "align": "right"}, 105 | {"type": "drag-toggler", "align": "right"}, 106 | {"type": "pagination", "align": "right"}, 107 | { 108 | "type": "tpl", 109 | "tpl": _("SHOWING ${items|count} OF ${total} RESULT(S)"), 110 | "className": "v-middle", 111 | "align": "right", 112 | }, 113 | ] 114 | page.body = TableCRUD( 115 | api=f"get:{self.router_path}/list", 116 | autoFillHeight=True, 117 | headerToolbar=headerToolbar, 118 | filterTogglable=True, 119 | filterDefaultVisible=False, 120 | syncLocation=False, 121 | keepItemSelectionOnPageChange=True, 122 | footerToolbar=[ 123 | "statistics", 124 | "switch-per-page", 125 | "pagination", 126 | "load-more", 127 | "export-csv", 128 | ], 129 | columns=await self.get_list_columns(request), 130 | itemActions=await self.get_actions_on_item(request), 131 | bulkActions=await self.get_actions_on_bulk(request), 132 | quickSaveItemApi=f"{self.router_path}/item/$id", 133 | ) 134 | return page 135 | 136 | async def get_list_columns(self, request: Request) -> List[TableColumn]: 137 | columns = [] 138 | update_fields = model_fields(self.schema_update) 139 | for modelfield in model_fields(self.JobModel).values(): 140 | column = self.site.amis_parser.as_table_column(modelfield, quick_edit=modelfield.name in update_fields) 141 | if column: 142 | columns.append(column) 143 | return columns 144 | 145 | async def get_actions_on_item(self, request: Request) -> List[Action]: 146 | actions = [ 147 | await self.get_job_action(request, bulk=False, action="resume"), 148 | await self.get_job_action(request, bulk=False, action="pause"), 149 | await self.get_update_action(request, bulk=False), 150 | await self.get_job_action(request, bulk=False, action="remove"), 151 | ] 152 | return list(filter(None, actions)) 153 | 154 | async def get_actions_on_bulk(self, request: Request) -> List[Action]: 155 | bulkActions = [ 156 | await self.get_job_action(request, bulk=True, action="resume"), 157 | await self.get_job_action(request, bulk=True, action="pause"), 158 | await self.get_job_action(request, bulk=True, action="remove"), 159 | ] 160 | return list(filter(None, bulkActions)) 161 | 162 | async def get_update_form(self, request: Request, bulk: bool = False) -> Form: 163 | 164 | api = f"{self.router_path}/item/" + ("${ids|raw}" if bulk else "$id") 165 | fields = model_fields(self.schema_update).values() 166 | return Form( 167 | api=api, 168 | name=CrudEnum.update, 169 | body=[await self.get_form_item(request, field, action=CrudEnum.update) for field in fields], 170 | submitText=None, 171 | trimValues=True, 172 | ) 173 | 174 | async def get_update_action(self, request: Request, bulk: bool = False) -> Optional[Action]: 175 | return ActionType.Dialog( 176 | icon="fa fa-pencil", 177 | tooltip=_("Update"), 178 | dialog=Dialog( 179 | title=_("Update"), 180 | size=SizeEnum.lg, 181 | body=await self.get_update_form(request, bulk=bulk), 182 | ), 183 | ) 184 | 185 | async def get_job_action( 186 | self, 187 | request: Request, 188 | bulk: bool = False, 189 | action: Literal["auto", "remove", "pause", "resume"] = "remove", 190 | ) -> Optional[Action]: 191 | label, icon = { 192 | "remove": (_("remove"), "fa-times text-danger"), 193 | "pause": (_("pause"), "fa-pause"), 194 | "resume": (_("resume"), "fa-play"), 195 | }[action] 196 | return ( 197 | ActionType.Ajax( 198 | icon=f"fa {icon}", 199 | tooltip=_("Bulk %s") % label, 200 | confirmText=_("Are you sure you want to batch %s selected tasks?") % label, 201 | api=f"{self.router_path}/item/" + "${ids|raw}?action=" + action, 202 | ) 203 | if bulk 204 | else ActionType.Ajax( 205 | icon=f"fa {icon}", 206 | tooltip=label, 207 | confirmText=_("Are you sure you want to %s the selected task?") % label, 208 | api=f"{self.router_path}/item/$id?action={action}", 209 | ) 210 | ) 211 | 212 | async def get_form_item(self, request: Request, modelfield: ModelField, action: CrudEnum) -> Union[FormItem, SchemaNode]: 213 | is_filter = action == CrudEnum.list 214 | return self.site.amis_parser.as_form_item(modelfield, is_filter=is_filter) 215 | 216 | def register_router(self): 217 | @self.router.get( 218 | "/list", 219 | response_model=BaseApiOut[ItemListSchema[self.JobModel]], 220 | include_in_schema=True, 221 | ) 222 | async def get_jobs(paginator: Annotated[self.paginator, Depends()]): # type: ignore 223 | jobs = self.scheduler.get_jobs() 224 | start = (paginator.page - 1) * paginator.perPage 225 | end = paginator.page * paginator.perPage 226 | data = ItemListSchema(items=[self.JobModel.parse_job(job) for job in jobs[start:end]]) 227 | data.total = len(jobs) if paginator.show_total else None 228 | return BaseApiOut(data=data) 229 | 230 | @self.router.post( 231 | "/item/{item_id}", 232 | response_model=BaseApiOut[List[self.JobModel]], 233 | include_in_schema=True, 234 | ) 235 | async def modify_job( 236 | item_id: ItemIdListDepend, 237 | action: Literal["auto", "remove", "pause", "resume"] = None, 238 | data: Annotated[self.schema_update, Body()] = None, # type: ignore 239 | ): 240 | jobs = [] 241 | for i in item_id: 242 | job = self.scheduler.get_job(job_id=i) 243 | if job: 244 | if action is None: 245 | job.modify(**data.dict(exclude_unset=True)) 246 | elif action == "auto": 247 | job.pause() if job.next_run_time else job.resume() 248 | elif action == "pause": 249 | job.pause() 250 | elif action == "resume": 251 | job.resume() 252 | elif action == "remove": 253 | job.remove() 254 | jobs.append(self.JobModel.parse_job(job)) 255 | return BaseApiOut(data=jobs) 256 | 257 | return super().register_router() 258 | -------------------------------------------------------------------------------- /pdm.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "aiofiles" 3 | version = "22.1.0" 4 | requires_python = ">=3.7,<4.0" 5 | summary = "File support for asyncio." 6 | 7 | [[package]] 8 | name = "anyio" 9 | version = "3.6.1" 10 | requires_python = ">=3.6.2" 11 | summary = "High level compatibility layer for multiple asynchronous event loop implementations" 12 | dependencies = [ 13 | "idna>=2.8", 14 | "sniffio>=1.1", 15 | "typing-extensions; python_version < \"3.8\"", 16 | ] 17 | 18 | [[package]] 19 | name = "apscheduler" 20 | version = "3.9.1" 21 | requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 22 | summary = "In-process task scheduler with Cron-like capabilities" 23 | dependencies = [ 24 | "pytz", 25 | "setuptools>=0.7", 26 | "six>=1.4.0", 27 | "tzlocal!=3.*,>=2.0", 28 | ] 29 | 30 | [[package]] 31 | name = "atomicwrites" 32 | version = "1.4.1" 33 | requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 34 | summary = "Atomic file writes." 35 | 36 | [[package]] 37 | name = "attrs" 38 | version = "22.1.0" 39 | requires_python = ">=3.5" 40 | summary = "Classes Without Boilerplate" 41 | 42 | [[package]] 43 | name = "backports.zoneinfo" 44 | version = "0.2.1" 45 | requires_python = ">=3.6" 46 | summary = "Backport of the standard library zoneinfo module" 47 | 48 | [[package]] 49 | name = "black" 50 | version = "22.8.0" 51 | requires_python = ">=3.6.2" 52 | summary = "The uncompromising code formatter." 53 | dependencies = [ 54 | "click>=8.0.0", 55 | "mypy-extensions>=0.4.3", 56 | "pathspec>=0.9.0", 57 | "platformdirs>=2", 58 | "tomli>=1.1.0; python_full_version < \"3.11.0a7\"", 59 | "typed-ast>=1.4.2; python_version < \"3.8\" and implementation_name == \"cpython\"", 60 | "typing-extensions>=3.10.0.0; python_version < \"3.10\"", 61 | ] 62 | 63 | [[package]] 64 | name = "cfgv" 65 | version = "3.3.1" 66 | requires_python = ">=3.6.1" 67 | summary = "Validate configuration and produce human readable error messages." 68 | 69 | [[package]] 70 | name = "click" 71 | version = "8.1.3" 72 | requires_python = ">=3.7" 73 | summary = "Composable command line interface toolkit" 74 | dependencies = [ 75 | "colorama; platform_system == \"Windows\"", 76 | "importlib-metadata; python_version < \"3.8\"", 77 | ] 78 | 79 | [[package]] 80 | name = "colorama" 81 | version = "0.4.5" 82 | requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 83 | summary = "Cross-platform colored terminal text." 84 | 85 | [[package]] 86 | name = "distlib" 87 | version = "0.3.6" 88 | summary = "Distribution utilities" 89 | 90 | [[package]] 91 | name = "fastapi" 92 | version = "0.85.0" 93 | requires_python = ">=3.7" 94 | summary = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" 95 | dependencies = [ 96 | "pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2", 97 | "starlette==0.20.4", 98 | ] 99 | 100 | [[package]] 101 | name = "fastapi-amis-admin" 102 | version = "0.2.2" 103 | requires_python = ">=3.7" 104 | summary = "FastAPI-Amis-Admin is a high-performance, efficient and easily extensible FastAPI admin framework. Inspired by Django-admin, and has as many powerful functions as Django-admin. " 105 | dependencies = [ 106 | "aiofiles>=0.17.0", 107 | "fastapi>=0.68.0", 108 | "python-multipart>=0.0.5", 109 | "sqlalchemy-database<0.1.0,>=0.0.7", 110 | "sqlmodel>=0.0.7", 111 | ] 112 | 113 | [[package]] 114 | name = "filelock" 115 | version = "3.8.0" 116 | requires_python = ">=3.7" 117 | summary = "A platform independent file lock." 118 | 119 | [[package]] 120 | name = "flake8" 121 | version = "5.0.4" 122 | requires_python = ">=3.6.1" 123 | summary = "the modular source code checker: pep8 pyflakes and co" 124 | dependencies = [ 125 | "importlib-metadata<4.3,>=1.1.0; python_version < \"3.8\"", 126 | "mccabe<0.8.0,>=0.7.0", 127 | "pycodestyle<2.10.0,>=2.9.0", 128 | "pyflakes<2.6.0,>=2.5.0", 129 | ] 130 | 131 | [[package]] 132 | name = "greenlet" 133 | version = "1.1.3" 134 | requires_python = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" 135 | summary = "Lightweight in-process concurrent programming" 136 | 137 | [[package]] 138 | name = "identify" 139 | version = "2.5.5" 140 | requires_python = ">=3.7" 141 | summary = "File identification library for Python" 142 | 143 | [[package]] 144 | name = "idna" 145 | version = "3.4" 146 | requires_python = ">=3.5" 147 | summary = "Internationalized Domain Names in Applications (IDNA)" 148 | 149 | [[package]] 150 | name = "importlib-metadata" 151 | version = "4.2.0" 152 | requires_python = ">=3.6" 153 | summary = "Read metadata from Python packages" 154 | dependencies = [ 155 | "typing-extensions>=3.6.4; python_version < \"3.8\"", 156 | "zipp>=0.5", 157 | ] 158 | 159 | [[package]] 160 | name = "iniconfig" 161 | version = "1.1.1" 162 | summary = "iniconfig: brain-dead simple config-ini parsing" 163 | 164 | [[package]] 165 | name = "isort" 166 | version = "5.10.1" 167 | requires_python = ">=3.6.1,<4.0" 168 | summary = "A Python utility / library to sort Python imports." 169 | 170 | [[package]] 171 | name = "mccabe" 172 | version = "0.7.0" 173 | requires_python = ">=3.6" 174 | summary = "McCabe checker, plugin for flake8" 175 | 176 | [[package]] 177 | name = "mypy-extensions" 178 | version = "0.4.3" 179 | summary = "Experimental type system extensions for programs checked with the mypy typechecker." 180 | 181 | [[package]] 182 | name = "nodeenv" 183 | version = "1.7.0" 184 | requires_python = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" 185 | summary = "Node.js virtual environment builder" 186 | dependencies = [ 187 | "setuptools", 188 | ] 189 | 190 | [[package]] 191 | name = "packaging" 192 | version = "21.3" 193 | requires_python = ">=3.6" 194 | summary = "Core utilities for Python packages" 195 | dependencies = [ 196 | "pyparsing!=3.0.5,>=2.0.2", 197 | ] 198 | 199 | [[package]] 200 | name = "pathspec" 201 | version = "0.10.1" 202 | requires_python = ">=3.7" 203 | summary = "Utility library for gitignore style pattern matching of file paths." 204 | 205 | [[package]] 206 | name = "platformdirs" 207 | version = "2.5.2" 208 | requires_python = ">=3.7" 209 | summary = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 210 | 211 | [[package]] 212 | name = "pluggy" 213 | version = "1.0.0" 214 | requires_python = ">=3.6" 215 | summary = "plugin and hook calling mechanisms for python" 216 | dependencies = [ 217 | "importlib-metadata>=0.12; python_version < \"3.8\"", 218 | ] 219 | 220 | [[package]] 221 | name = "pre-commit" 222 | version = "2.20.0" 223 | requires_python = ">=3.7" 224 | summary = "A framework for managing and maintaining multi-language pre-commit hooks." 225 | dependencies = [ 226 | "cfgv>=2.0.0", 227 | "identify>=1.0.0", 228 | "importlib-metadata; python_version < \"3.8\"", 229 | "nodeenv>=0.11.1", 230 | "pyyaml>=5.1", 231 | "toml", 232 | "virtualenv>=20.0.8", 233 | ] 234 | 235 | [[package]] 236 | name = "py" 237 | version = "1.11.0" 238 | requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 239 | summary = "library with cross-python path, ini-parsing, io, code, log facilities" 240 | 241 | [[package]] 242 | name = "pycodestyle" 243 | version = "2.9.1" 244 | requires_python = ">=3.6" 245 | summary = "Python style guide checker" 246 | 247 | [[package]] 248 | name = "pydantic" 249 | version = "1.10.2" 250 | requires_python = ">=3.7" 251 | summary = "Data validation and settings management using python type hints" 252 | dependencies = [ 253 | "typing-extensions>=4.1.0", 254 | ] 255 | 256 | [[package]] 257 | name = "pyflakes" 258 | version = "2.5.0" 259 | requires_python = ">=3.6" 260 | summary = "passive checker of Python programs" 261 | 262 | [[package]] 263 | name = "pyparsing" 264 | version = "3.0.9" 265 | requires_python = ">=3.6.8" 266 | summary = "pyparsing module - Classes and methods to define and execute parsing grammars" 267 | 268 | [[package]] 269 | name = "pytest" 270 | version = "6.2.5" 271 | requires_python = ">=3.6" 272 | summary = "pytest: simple powerful testing with Python" 273 | dependencies = [ 274 | "atomicwrites>=1.0; sys_platform == \"win32\"", 275 | "attrs>=19.2.0", 276 | "colorama; sys_platform == \"win32\"", 277 | "importlib-metadata>=0.12; python_version < \"3.8\"", 278 | "iniconfig", 279 | "packaging", 280 | "pluggy<2.0,>=0.12", 281 | "py>=1.8.2", 282 | "toml", 283 | ] 284 | 285 | [[package]] 286 | name = "python-multipart" 287 | version = "0.0.5" 288 | summary = "A streaming multipart parser for Python" 289 | dependencies = [ 290 | "six>=1.4.0", 291 | ] 292 | 293 | [[package]] 294 | name = "pytz" 295 | version = "2022.2.1" 296 | summary = "World timezone definitions, modern and historical" 297 | 298 | [[package]] 299 | name = "pytz-deprecation-shim" 300 | version = "0.1.0.post0" 301 | requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 302 | summary = "Shims to make deprecation of pytz easier" 303 | dependencies = [ 304 | "backports.zoneinfo; python_version >= \"3.6\" and python_version < \"3.9\"", 305 | "tzdata; python_version >= \"3.6\"", 306 | ] 307 | 308 | [[package]] 309 | name = "pyyaml" 310 | version = "6.0" 311 | requires_python = ">=3.6" 312 | summary = "YAML parser and emitter for Python" 313 | 314 | [[package]] 315 | name = "setuptools" 316 | version = "65.3.0" 317 | requires_python = ">=3.7" 318 | summary = "Easily download, build, install, upgrade, and uninstall Python packages" 319 | 320 | [[package]] 321 | name = "six" 322 | version = "1.16.0" 323 | requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 324 | summary = "Python 2 and 3 compatibility utilities" 325 | 326 | [[package]] 327 | name = "sniffio" 328 | version = "1.3.0" 329 | requires_python = ">=3.7" 330 | summary = "Sniff out which async library your code is running under" 331 | 332 | [[package]] 333 | name = "sqlalchemy" 334 | version = "1.4.41" 335 | requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 336 | summary = "Database Abstraction Library" 337 | dependencies = [ 338 | "greenlet!=0.4.17; python_version >= \"3\" and (platform_machine == \"aarch64\" or (platform_machine == \"ppc64le\" or (platform_machine == \"x86_64\" or (platform_machine == \"amd64\" or (platform_machine == \"AMD64\" or (platform_machine == \"win32\" or platform_machine == \"WIN32\"))))))", 339 | "importlib-metadata; python_version < \"3.8\"", 340 | ] 341 | 342 | [[package]] 343 | name = "sqlalchemy-database" 344 | version = "0.0.7" 345 | requires_python = ">=3.6.1" 346 | summary = "SQLAlchemy-Database provides shortcut functions to common database operations for SQLAlchemy ORM." 347 | dependencies = [ 348 | "sqlalchemy", 349 | ] 350 | 351 | [[package]] 352 | name = "sqlalchemy2-stubs" 353 | version = "0.0.2a27" 354 | requires_python = ">=3.6" 355 | summary = "Typing Stubs for SQLAlchemy 1.4" 356 | dependencies = [ 357 | "typing-extensions>=3.7.4", 358 | ] 359 | 360 | [[package]] 361 | name = "sqlmodel" 362 | version = "0.0.8" 363 | requires_python = ">=3.6.1,<4.0.0" 364 | summary = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness." 365 | dependencies = [ 366 | "SQLAlchemy<=1.4.41,>=1.4.17", 367 | "pydantic<2.0.0,>=1.8.2", 368 | "sqlalchemy2-stubs", 369 | ] 370 | 371 | [[package]] 372 | name = "starlette" 373 | version = "0.20.4" 374 | requires_python = ">=3.7" 375 | summary = "The little ASGI library that shines." 376 | dependencies = [ 377 | "anyio<5,>=3.4.0", 378 | "typing-extensions>=3.10.0; python_version < \"3.10\"", 379 | ] 380 | 381 | [[package]] 382 | name = "toml" 383 | version = "0.10.2" 384 | requires_python = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 385 | summary = "Python Library for Tom's Obvious, Minimal Language" 386 | 387 | [[package]] 388 | name = "tomli" 389 | version = "2.0.1" 390 | requires_python = ">=3.7" 391 | summary = "A lil' TOML parser" 392 | 393 | [[package]] 394 | name = "typed-ast" 395 | version = "1.5.4" 396 | requires_python = ">=3.6" 397 | summary = "a fork of Python 2 and 3 ast modules with type comment support" 398 | 399 | [[package]] 400 | name = "typing-extensions" 401 | version = "4.3.0" 402 | requires_python = ">=3.7" 403 | summary = "Backported and Experimental Type Hints for Python 3.7+" 404 | 405 | [[package]] 406 | name = "tzdata" 407 | version = "2022.2" 408 | requires_python = ">=2" 409 | summary = "Provider of IANA time zone data" 410 | 411 | [[package]] 412 | name = "tzlocal" 413 | version = "4.2" 414 | requires_python = ">=3.6" 415 | summary = "tzinfo object for the local timezone" 416 | dependencies = [ 417 | "backports.zoneinfo; python_version < \"3.9\"", 418 | "pytz-deprecation-shim", 419 | "tzdata; platform_system == \"Windows\"", 420 | ] 421 | 422 | [[package]] 423 | name = "virtualenv" 424 | version = "20.16.2" 425 | requires_python = ">=3.6" 426 | summary = "Virtual Python Environment builder" 427 | dependencies = [ 428 | "distlib<1,>=0.3.1", 429 | "filelock<4,>=3.2", 430 | "importlib-metadata>=0.12; python_version < \"3.8\"", 431 | "platformdirs<3,>=2", 432 | ] 433 | 434 | [[package]] 435 | name = "zipp" 436 | version = "3.8.1" 437 | requires_python = ">=3.7" 438 | summary = "Backport of pathlib-compatible object wrapper for zip files" 439 | 440 | [metadata] 441 | lock_version = "4.0" 442 | content_hash = "sha256:f294e6244e8c4c34692f749c8a25c7c59c34037dead7502d1b2e707bcc7003bc" 443 | 444 | [metadata.files] 445 | "aiofiles 22.1.0" = [ 446 | {url = "https://mirrors.aliyun.com/pypi/packages/86/26/6e5060a159a6131c430e8a01ec8327405a19a449a506224b394e36f2ebc9/aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, 447 | {url = "https://mirrors.aliyun.com/pypi/packages/a0/48/d5d1ab7cfe46e573c3694fa1365442a7d7cadc3abb03d8507e58a3755bb2/aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, 448 | ] 449 | "anyio 3.6.1" = [ 450 | {url = "https://mirrors.aliyun.com/pypi/packages/67/c4/fd50bbb2fb72532a4b778562e28ba581da15067cfb2537dbd3a2e64689c1/anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, 451 | {url = "https://mirrors.aliyun.com/pypi/packages/c3/22/4cba7e1b4f45ffbefd2ca817a6800ba1c671c26f288d7705f20289872012/anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, 452 | ] 453 | "apscheduler 3.9.1" = [ 454 | {url = "https://mirrors.aliyun.com/pypi/packages/3a/7c/f21a6fb73810191d16162f3fce325ff2a62673f63223c390bea48741ea00/APScheduler-3.9.1.tar.gz", hash = "sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3"}, 455 | {url = "https://mirrors.aliyun.com/pypi/packages/e4/9f/c3937d4babe62504b874d4bf2c0d85aa69c7f59fa84cf6050f3b9dc5d83e/APScheduler-3.9.1-py2.py3-none-any.whl", hash = "sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a"}, 456 | ] 457 | "atomicwrites 1.4.1" = [ 458 | {url = "https://mirrors.aliyun.com/pypi/packages/87/c6/53da25344e3e3a9c01095a89f16dbcda021c609ddb42dd6d7c0528236fb2/atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, 459 | ] 460 | "attrs 22.1.0" = [ 461 | {url = "https://mirrors.aliyun.com/pypi/packages/1a/cb/c4ffeb41e7137b23755a45e1bfec9cbb76ecf51874c6f1d113984ecaa32c/attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, 462 | {url = "https://mirrors.aliyun.com/pypi/packages/f2/bc/d817287d1aa01878af07c19505fafd1165cd6a119e9d0821ca1d1c20312d/attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, 463 | ] 464 | "backports.zoneinfo 0.2.1" = [ 465 | {url = "https://mirrors.aliyun.com/pypi/packages/1a/ab/3e941e3fcf1b7d3ab3d0233194d99d6a0ed6b24f8f956fc81e47edc8c079/backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, 466 | {url = "https://mirrors.aliyun.com/pypi/packages/1c/96/baaca3ad1b06d97138d42a225e4d4d27cd1586b646740f771706cd2d812c/backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, 467 | {url = "https://mirrors.aliyun.com/pypi/packages/28/d5/e2f3d6a52870045afd8c37b2681c47fd0b98679cd4851e349bfd7e19cfd7/backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, 468 | {url = "https://mirrors.aliyun.com/pypi/packages/33/1c/9357061860f5d3a09e1877aa4cf7c004c55eec40a1036761144ef24d8a1d/backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, 469 | {url = "https://mirrors.aliyun.com/pypi/packages/4a/6d/eca004eeadcbf8bd64cc96feb9e355536147f0577420b44d80c7cac70767/backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, 470 | {url = "https://mirrors.aliyun.com/pypi/packages/4c/7e/ed8af95bed90eeccfb4a4fe6ec424bc7a79e1aa983e54dd1d9062d9fa20b/backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, 471 | {url = "https://mirrors.aliyun.com/pypi/packages/6c/99/513f2c4dd41522eefc42feb86854f6cf3b1add9c175c14d90c070775e484/backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, 472 | {url = "https://mirrors.aliyun.com/pypi/packages/74/a1/323f86a5ca5a559d452affb879512365a0473529398bfcf2d712a40ae088/backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, 473 | {url = "https://mirrors.aliyun.com/pypi/packages/78/cc/e27fd6493bbce8dbea7e6c1bc861fe3d3bc22c4f7c81f4c3befb8ff5bfaf/backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, 474 | {url = "https://mirrors.aliyun.com/pypi/packages/ad/85/475e514c3140937cf435954f78dedea1861aeab7662d11de232bdaa90655/backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, 475 | {url = "https://mirrors.aliyun.com/pypi/packages/c0/34/5fdb0a3a28841d215c255be8fc60b8666257bb6632193c86fd04b63d4a31/backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, 476 | {url = "https://mirrors.aliyun.com/pypi/packages/c1/8f/9b1b920a6a95652463143943fa3b8c000cb0b932ab463764a6f2a2416560/backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, 477 | {url = "https://mirrors.aliyun.com/pypi/packages/d1/04/8f2fed9c0cb9c88442fc8d6372cb0f5738fb05a65b45e2d371fbc8a15087/backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, 478 | {url = "https://mirrors.aliyun.com/pypi/packages/d4/79/249bd3c4f794741f04f1e0ff33ad3cca9b2d1f4299b73f78d0d9bc9ec8dc/backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, 479 | {url = "https://mirrors.aliyun.com/pypi/packages/ef/9a/8de8f379d5b3961a517762cc051b366de3f7d4d3a2250120e7a71e25fab4/backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, 480 | {url = "https://mirrors.aliyun.com/pypi/packages/f9/04/33e910faffe91a5680d68a064162525779259ae5de3b0c0c5bd9c4e900e0/backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, 481 | ] 482 | "black 22.8.0" = [ 483 | {url = "https://mirrors.aliyun.com/pypi/packages/05/b1/9bd51244802560ea3cae386fd7c4b3dc104f3da2c71d9cebe0dd9a58cf21/black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, 484 | {url = "https://mirrors.aliyun.com/pypi/packages/0e/08/daaae4173461abc664563e651a1e3c5edc9570ca03283793a444becb9c2f/black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, 485 | {url = "https://mirrors.aliyun.com/pypi/packages/17/87/5842bd8d3451131ad56aad8b6a680cc60034cb32a67cb7a4c930d73b55b4/black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, 486 | {url = "https://mirrors.aliyun.com/pypi/packages/18/09/63714f5c9d4d7e04c6c04603ce7fb69bf746f69caed0a3416e41bf2db168/black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, 487 | {url = "https://mirrors.aliyun.com/pypi/packages/18/bd/f6500e0ff2d2233863d36882418d9928ca7e2532a26a0ac16e2681bf5631/black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, 488 | {url = "https://mirrors.aliyun.com/pypi/packages/22/8c/395e63013297e567253b70ae36460038d47643c3cfaa25180e86dee04344/black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, 489 | {url = "https://mirrors.aliyun.com/pypi/packages/36/87/2e2ebe732de20a85ad50732da070e19c06de28505a4a40d12d25d66dba6d/black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, 490 | {url = "https://mirrors.aliyun.com/pypi/packages/3a/1b/38a013f75022fae724ed766fdac5f6777544c45eecbe00a6d8fd91a2a26b/black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, 491 | {url = "https://mirrors.aliyun.com/pypi/packages/3d/a4/3eaab92ec893d7890966e4a2f7c4e3e4e6b94b4df50e4b93d2ce33180276/black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, 492 | {url = "https://mirrors.aliyun.com/pypi/packages/4d/44/466ae995a55a5c8d5914e0f02520cb64710fbc3e2df8eddc4d2a54bf6a7e/black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, 493 | {url = "https://mirrors.aliyun.com/pypi/packages/63/64/fc6167e4ac4547d6eb9dd31be54979553e95816df5cc889b2680556c3898/black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, 494 | {url = "https://mirrors.aliyun.com/pypi/packages/67/e9/d6e8365eae2dd2b0d9fcdff129a88ab316a545ab44445c92ae8353c7f5ef/black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, 495 | {url = "https://mirrors.aliyun.com/pypi/packages/71/2c/73563faaf6c8aeb31954b8e83b3284bb01ac0ec58110ed84ecec95a055f4/black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, 496 | {url = "https://mirrors.aliyun.com/pypi/packages/75/03/e68f2051e0ea06db2ce57151387dd34acf35beb3d67936823c1b928a0522/black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, 497 | {url = "https://mirrors.aliyun.com/pypi/packages/86/9c/25cab63ed9440df5dba7688d4b55123f4bb352dc48ddf93d2b32c882dbe1/black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, 498 | {url = "https://mirrors.aliyun.com/pypi/packages/a5/3f/c6da8f60962de05c7e5026ce5963a102b0d6ef38884bf9ee825c09b8d0b4/black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, 499 | {url = "https://mirrors.aliyun.com/pypi/packages/b9/d2/7476c40f3ed871047e5ef4e27a6e946b3aac5357fe9a2e08548c95b79327/black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, 500 | {url = "https://mirrors.aliyun.com/pypi/packages/c1/22/5d7cd0cd1c6ce136fd8dbac3f83a260723b3022cfcc0496a84f2a14c7b9a/black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, 501 | {url = "https://mirrors.aliyun.com/pypi/packages/c6/63/a852b07abc942dc069b5457af40feca82667cf5ed9faec7d4688a4d9c7da/black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, 502 | {url = "https://mirrors.aliyun.com/pypi/packages/d4/a1/dc7bc3cc5eef263625532176015d65033425af8187b732ef2495a1cfa597/black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, 503 | {url = "https://mirrors.aliyun.com/pypi/packages/d5/08/2dbe5c8e5d251fad5b06494a113940232716246e973ca33a44e59b7f1dbd/black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, 504 | {url = "https://mirrors.aliyun.com/pypi/packages/d5/0a/c86b68b24812deaceb48dc7e335fde0f1289e04171ef2fc5ff8eecc50102/black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, 505 | {url = "https://mirrors.aliyun.com/pypi/packages/df/9f/1a01c38b187bf49ddf97872932c4ef4f87065e08b037efbe72f3f824970d/black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, 506 | ] 507 | "cfgv 3.3.1" = [ 508 | {url = "https://mirrors.aliyun.com/pypi/packages/6d/82/0a0ebd35bae9981dea55c06f8e6aaf44a49171ad798795c72c6f64cba4c2/cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, 509 | {url = "https://mirrors.aliyun.com/pypi/packages/c4/bf/d0d622b660d414a47dc7f0d303791a627663f554345b21250e39e7acb48b/cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, 510 | ] 511 | "click 8.1.3" = [ 512 | {url = "https://mirrors.aliyun.com/pypi/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, 513 | {url = "https://mirrors.aliyun.com/pypi/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, 514 | ] 515 | "colorama 0.4.5" = [ 516 | {url = "https://mirrors.aliyun.com/pypi/packages/2b/65/24d033a9325ce42ccbfa3ca2d0866c7e89cc68e5b9d92ecaba9feef631df/colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, 517 | {url = "https://mirrors.aliyun.com/pypi/packages/77/8b/7550e87b2d308a1b711725dfaddc19c695f8c5fa413c640b2be01662f4e6/colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, 518 | ] 519 | "distlib 0.3.6" = [ 520 | {url = "https://mirrors.aliyun.com/pypi/packages/58/07/815476ae605bcc5f95c87a62b95e74a1bce0878bc7a3119bc2bf4178f175/distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, 521 | {url = "https://mirrors.aliyun.com/pypi/packages/76/cb/6bbd2b10170ed991cf64e8c8b85e01f2fb38f95d1bc77617569e0b0b26ac/distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, 522 | ] 523 | "fastapi 0.85.0" = [ 524 | {url = "https://mirrors.aliyun.com/pypi/packages/f2/74/15805b9921c0fa99a732bbab71fc548a269d027b6540f48043f87338a273/fastapi-0.85.0.tar.gz", hash = "sha256:bb219cfafd0d2ccf8f32310c9a257a06b0210bd8e2a03706a6f5a9f9f1416878"}, 525 | {url = "https://mirrors.aliyun.com/pypi/packages/f8/f6/5334a17a8acb95b2b71825db6c8c3d2b984d1d0c31266fcda02480ab62ab/fastapi-0.85.0-py3-none-any.whl", hash = "sha256:1803d962f169dc9f8dde54a64b22eb16f6d81573f54401971f90f0a67234a8b4"}, 526 | ] 527 | "fastapi-amis-admin 0.2.2" = [ 528 | {url = "https://mirrors.aliyun.com/pypi/packages/05/ce/1411f9659030ca8f0a7421f2dadfa70d9fd256ebc3c67d27c2aad1dc4ed4/fastapi_amis_admin-0.2.2.tar.gz", hash = "sha256:1ff53b98da69e201bc7212bcb71bb2d8ec284d44f167d073944feb7d3d7d5608"}, 529 | {url = "https://mirrors.aliyun.com/pypi/packages/d1/53/ffa1cfac7450e8c2a2d6db6421ef4083fa228c9011f3608633de7572ac25/fastapi_amis_admin-0.2.2-py3-none-any.whl", hash = "sha256:52de4355e60506e16e2a2650067e7385067bd8de6a57fb2873b7cdb2c7e7dc02"}, 530 | ] 531 | "filelock 3.8.0" = [ 532 | {url = "https://mirrors.aliyun.com/pypi/packages/94/b3/ff2845971788613e646e667043fdb5f128e2e540aefa09a3c55be8290d6d/filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, 533 | {url = "https://mirrors.aliyun.com/pypi/packages/95/55/b897882bffb8213456363e646bf9e9fa704ffda5a7d140edf935a9e02c7b/filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, 534 | ] 535 | "flake8 5.0.4" = [ 536 | {url = "https://mirrors.aliyun.com/pypi/packages/ad/00/9808c62b2d529cefc69ce4e4a1ea42c0f855effa55817b7327ec5b75e60a/flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, 537 | {url = "https://mirrors.aliyun.com/pypi/packages/cf/a0/b881b63a17a59d9d07f5c0cc91a29182c8e8a9aa2bde5b3b2b16519c02f4/flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, 538 | ] 539 | "greenlet 1.1.3" = [ 540 | {url = "https://mirrors.aliyun.com/pypi/packages/08/09/81841908fba6a6fce1e53330b531a54aa2aeb1f88726d24e863444e846b0/greenlet-1.1.3-cp35-cp35m-win_amd64.whl", hash = "sha256:7532a46505470be30cbf1dbadb20379fb481244f1ca54207d7df3bf0bbab6a20"}, 541 | {url = "https://mirrors.aliyun.com/pypi/packages/0d/b2/c99afdda51e14e402cde7840f59c7dcd5e64450128c9418a6774445e105e/greenlet-1.1.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7c5227963409551ae4a6938beb70d56bf1918c554a287d3da6853526212fbe0a"}, 542 | {url = "https://mirrors.aliyun.com/pypi/packages/0f/49/f323822def663f1f5f36039a02fa74625aa54bdbc42b5b22909b4e177910/greenlet-1.1.3-cp36-cp36m-win_amd64.whl", hash = "sha256:4f166b4aca8d7d489e82d74627a7069ab34211ef5ebb57c300ec4b9337b60fc0"}, 543 | {url = "https://mirrors.aliyun.com/pypi/packages/16/da/a27556bb606dce662094b604caba8e0a0b54fabb071fc373f4eb8cc0c29a/greenlet-1.1.3-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9b2f7d0408ddeb8ea1fd43d3db79a8cefaccadd2a812f021333b338ed6b10aba"}, 544 | {url = "https://mirrors.aliyun.com/pypi/packages/1c/6b/5dc11506e40bef6888f2862d5178f0863ca9c0108d3133ee45f39a0c2bde/greenlet-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b41d19c0cfe5c259fe6c539fd75051cd39a5d33d05482f885faf43f7f5e7d26"}, 545 | {url = "https://mirrors.aliyun.com/pypi/packages/1c/73/de586acd333ffa1962bf4fda33f6100c003b98537aea1382425855bda9a9/greenlet-1.1.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:cbc1eb55342cbac8f7ec159088d54e2cfdd5ddf61c87b8bbe682d113789331b2"}, 546 | {url = "https://mirrors.aliyun.com/pypi/packages/1c/96/06a04dfc52d466bf28267120683a5ed1bca23af1201e4fd397823f08c84e/greenlet-1.1.3-cp37-cp37m-win32.whl", hash = "sha256:048d2bed76c2aa6de7af500ae0ea51dd2267aec0e0f2a436981159053d0bc7cc"}, 547 | {url = "https://mirrors.aliyun.com/pypi/packages/2d/7b/a6783972e0d5e3fe94514055a8ea23219ad7a78ec5b0b1675facced24c26/greenlet-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb0aa7f6996879551fd67461d5d3ab0c3c0245da98be90c89fcb7a18d437403"}, 548 | {url = "https://mirrors.aliyun.com/pypi/packages/2e/73/917cae386223b87f632104ef77168fe77a511834aad0e6a7e2fbe3936d07/greenlet-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd0404d154084a371e6d2bafc787201612a1359c2dee688ae334f9118aa0bf47"}, 549 | {url = "https://mirrors.aliyun.com/pypi/packages/32/c4/c6a4ca55f4ea4519f6b95bde95209861fae00a7c177b8a5c98190fe31251/greenlet-1.1.3-cp27-cp27m-win_amd64.whl", hash = "sha256:de431765bd5fe62119e0bc6bc6e7b17ac53017ae1782acf88fcf6b7eae475a49"}, 550 | {url = "https://mirrors.aliyun.com/pypi/packages/35/ba/1a78f1fa0be05b08e585e47b495806fad9e48969a7312070b58e384d18f7/greenlet-1.1.3-cp35-cp35m-win32.whl", hash = "sha256:65ad1a7a463a2a6f863661329a944a5802c7129f7ad33583dcc11069c17e622c"}, 551 | {url = "https://mirrors.aliyun.com/pypi/packages/36/f1/cbbe136664df3b71b54bc7c65d6208045128ad0054eb65b7e2b3b3d3c09e/greenlet-1.1.3-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:903fa5716b8fbb21019268b44f73f3748c41d1a30d71b4a49c84b642c2fed5fa"}, 552 | {url = "https://mirrors.aliyun.com/pypi/packages/48/db/66280f6a9fa8c8a4fe62e898f0f9f9a99854c86c47fe57edeb7f2e201e06/greenlet-1.1.3-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:184416e481295832350a4bf731ba619a92f5689bf5d0fa4341e98b98b1265bd7"}, 553 | {url = "https://mirrors.aliyun.com/pypi/packages/49/f7/d65631895faf49a19b08f9bfc6a880d659776ceda26d9f6ef50221e3fb01/greenlet-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce5b64dfe8d0cca407d88b0ee619d80d4215a2612c1af8c98a92180e7109f4b5"}, 554 | {url = "https://mirrors.aliyun.com/pypi/packages/4a/68/86bb2c8672b25f0882111120d97f96e377fd8401d4aab592a8fe6d6faba7/greenlet-1.1.3-cp39-cp39-win32.whl", hash = "sha256:5fbe1ab72b998ca77ceabbae63a9b2e2dc2d963f4299b9b278252ddba142d3f1"}, 555 | {url = "https://mirrors.aliyun.com/pypi/packages/4b/6c/eb9c1fb487f8ee3ad98414dbf2219775829dfde4db9e6d2809a2fa38fb7d/greenlet-1.1.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537e4baf0db67f382eb29255a03154fcd4984638303ff9baaa738b10371fa57"}, 556 | {url = "https://mirrors.aliyun.com/pypi/packages/4f/1a/033bf5169a4b8228378a3e4d71f932a96a9d840212a0b55482ccb295e653/greenlet-1.1.3-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e8533f5111704d75de3139bf0b8136d3a6c1642c55c067866fa0a51c2155ee33"}, 557 | {url = "https://mirrors.aliyun.com/pypi/packages/4f/bc/d80ab48ebd631cfe582daf91f5ed433395d78d2a9dfdbe6cf15f5d9f89bc/greenlet-1.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c88e134d51d5e82315a7c32b914a58751b7353eb5268dbd02eabf020b4c4700"}, 558 | {url = "https://mirrors.aliyun.com/pypi/packages/50/a5/69ccd55c60d065d9838f892717eea24002d8b458337a758816e003d69e9c/greenlet-1.1.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:694ffa7144fa5cc526c8f4512665003a39fa09ef00d19bbca5c8d3406db72fbe"}, 559 | {url = "https://mirrors.aliyun.com/pypi/packages/5a/f1/db883c1526f167ee853ea1a7afcb21d77e0c62c84889cade85f57100eb60/greenlet-1.1.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:1626185d938d7381631e48e6f7713e8d4b964be246073e1a1d15c2f061ac9f08"}, 560 | {url = "https://mirrors.aliyun.com/pypi/packages/5b/4c/4a17e2377eeca2f3055e91f28a12ea2cdd1524b14666eb060b4a4f59b4d7/greenlet-1.1.3-cp36-cp36m-win32.whl", hash = "sha256:88b04e12c9b041a1e0bcb886fec709c488192638a9a7a3677513ac6ba81d8e79"}, 561 | {url = "https://mirrors.aliyun.com/pypi/packages/5b/bc/d32082975b023108fc810296c1fff0313b5b7121e0918c27e74b05a4a46e/greenlet-1.1.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cf45e339cabea16c07586306a31cfcc5a3b5e1626d365714d283732afed6809"}, 562 | {url = "https://mirrors.aliyun.com/pypi/packages/5c/93/654613aeeda6fc8f65227d6d2b9f0c469f324ec12cb1511430e77da4875b/greenlet-1.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6200a11f003ec26815f7e3d2ded01b43a3810be3528dd760d2f1fa777490c3cd"}, 563 | {url = "https://mirrors.aliyun.com/pypi/packages/5d/4d/c8ccbd24f62327bc443b96494cadbb8894720babbe057d5f657cbd6cdb03/greenlet-1.1.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:0118817c9341ef2b0f75f5af79ac377e4da6ff637e5ee4ac91802c0e379dadb4"}, 564 | {url = "https://mirrors.aliyun.com/pypi/packages/5e/45/3bf0e06777d47f46de04edf53750c85db0527000d6460951c84d2303a493/greenlet-1.1.3-cp38-cp38-win32.whl", hash = "sha256:db5b25265010a1b3dca6a174a443a0ed4c4ab12d5e2883a11c97d6e6d59b12f9"}, 565 | {url = "https://mirrors.aliyun.com/pypi/packages/6d/68/1aef9bcde734b6aa4c033ef4d0178345f33a47480f6daa3ba7c86994b555/greenlet-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3a669f11289a8995d24fbfc0e63f8289dd03c9aaa0cc8f1eab31d18ca61a382"}, 566 | {url = "https://mirrors.aliyun.com/pypi/packages/78/0b/1e5a41732fb45952a3d843cc5b1756b26df3ec7d63e5bd51fb9637c6dc35/greenlet-1.1.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:db41f3845eb579b544c962864cce2c2a0257fe30f0f1e18e51b1e8cbb4e0ac6d"}, 567 | {url = "https://mirrors.aliyun.com/pypi/packages/80/8f/9e306474f3bf07cad465dfeac416505f53a7f0dd3b83b516e8fd3958419b/greenlet-1.1.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:510c3b15587afce9800198b4b142202b323bf4b4b5f9d6c79cb9a35e5e3c30d2"}, 568 | {url = "https://mirrors.aliyun.com/pypi/packages/83/9b/dd9b4c55d87af030db1f54066d163b55b1dc8df2a13dd4c36106750b593c/greenlet-1.1.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9951dcbd37850da32b2cb6e391f621c1ee456191c6ae5528af4a34afe357c30e"}, 569 | {url = "https://mirrors.aliyun.com/pypi/packages/84/80/4f5d4f3ec06e9747419ab6ced98dcb255b5bdd9a14dd2689aba6890a5487/greenlet-1.1.3-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:8c287ae7ac921dfde88b1c125bd9590b7ec3c900c2d3db5197f1286e144e712b"}, 570 | {url = "https://mirrors.aliyun.com/pypi/packages/8d/29/537d30f6317a0c2370fab260a84dd596dfd4f0e78b579f1dcc186362c1f7/greenlet-1.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd51d2650e70c6c4af37f454737bf4a11e568945b27f74b471e8e2a9fd21268"}, 571 | {url = "https://mirrors.aliyun.com/pypi/packages/97/ef/850afc133304b3b43babdbe8fafe0f45491712e3288ccb8bb315e95a7203/greenlet-1.1.3-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2f908239b7098799b8845e5936c2ccb91d8c2323be02e82f8dcb4a80dcf4a25"}, 572 | {url = "https://mirrors.aliyun.com/pypi/packages/9f/6b/f348409ea8cfcf5a43b43f403654915fd5005c42b9257dbab419e2941ac4/greenlet-1.1.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1ec2779774d8e42ed0440cf8bc55540175187e8e934f2be25199bf4ed948cd9e"}, 573 | {url = "https://mirrors.aliyun.com/pypi/packages/a0/d5/70772b3693f086a362f122516225a43fe4f1182e17158c81ba1ab271ab9b/greenlet-1.1.3.tar.gz", hash = "sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455"}, 574 | {url = "https://mirrors.aliyun.com/pypi/packages/a6/8f/246702e161db2cae57e85186cad740e81c8400d19e740272bf2a1c17fcf9/greenlet-1.1.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:466ce0928e33421ee84ae04c4ac6f253a3a3e6b8d600a79bd43fd4403e0a7a76"}, 575 | {url = "https://mirrors.aliyun.com/pypi/packages/ac/3f/3af852c44090814ba41b9a4b5bcfd977f49c9fee83d19b65829e164fc11d/greenlet-1.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:6f5d4b2280ceea76c55c893827961ed0a6eadd5a584a7c4e6e6dd7bc10dfdd96"}, 576 | {url = "https://mirrors.aliyun.com/pypi/packages/ae/e8/a5557081069f917c84d347440cb8747bf18a413788017bb1bdf3b152cc5a/greenlet-1.1.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:07c58e169bbe1e87b8bbf15a5c1b779a7616df9fd3e61cadc9d691740015b4f8"}, 577 | {url = "https://mirrors.aliyun.com/pypi/packages/b1/39/c86190ea19ead2d36003de6b6271e2f7fdc039007ae868e4cfc960bb52c1/greenlet-1.1.3-cp27-cp27m-win32.whl", hash = "sha256:9fae214f6c43cd47f7bef98c56919b9222481e833be2915f6857a1e9e8a15318"}, 578 | {url = "https://mirrors.aliyun.com/pypi/packages/b2/89/95080f533d68e165c623930fa63b0387b4621479944702cd2a9d9ad30584/greenlet-1.1.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d58a5a71c4c37354f9e0c24c9c8321f0185f6945ef027460b809f4bb474bfe41"}, 579 | {url = "https://mirrors.aliyun.com/pypi/packages/b3/21/23e31be2951ed2630d11d7a4fcac3fe9c1b9ab0ea4514aa5db5f06cafea7/greenlet-1.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a43bbfa9b6cfdfaeefbd91038dde65ea2c421dc387ed171613df340650874f2"}, 580 | {url = "https://mirrors.aliyun.com/pypi/packages/b3/ce/8d2d15f5cf3673e41288de6a4218a8ac24d4b4310ea1687dbf519667ded7/greenlet-1.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b4817c34c9272c65550b788913620f1fdc80362b209bc9d7dd2f40d8793080"}, 581 | {url = "https://mirrors.aliyun.com/pypi/packages/b3/eb/0b876ab2ba52538553d262dc799ee837a8da5e7692b5e95451d13309886a/greenlet-1.1.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:870a48007872d12e95a996fca3c03a64290d3ea2e61076aa35d3b253cf34cd32"}, 582 | {url = "https://mirrors.aliyun.com/pypi/packages/c2/f5/2ab72bc747071f1dd01196c4d38d8c56179de1cc32ece12217f9bcaddd76/greenlet-1.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76a53bfa10b367ee734b95988bd82a9a5f0038a25030f9f23bbbc005010ca600"}, 583 | {url = "https://mirrors.aliyun.com/pypi/packages/c3/d8/392929fac1cae6ec404e55a4c63130033fe6cc16eacafc45fd578724c228/greenlet-1.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b181e9aa6cb2f5ec0cacc8cee6e5a3093416c841ba32c185c30c160487f0380"}, 584 | {url = "https://mirrors.aliyun.com/pypi/packages/cb/1e/dd59ffc98b3dcf57f2f93eeaca9fe005b91f9c346a353469a2cd4c31a23f/greenlet-1.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:77e41db75f9958f2083e03e9dd39da12247b3430c92267df3af77c83d8ff9eed"}, 585 | {url = "https://mirrors.aliyun.com/pypi/packages/cb/47/28119e1d0de9bcf7ade11f3e759e6459c7ed54428d6ebbf48534b10f7281/greenlet-1.1.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8bfd36f368efe0ab2a6aa3db7f14598aac454b06849fb633b762ddbede1db90"}, 586 | {url = "https://mirrors.aliyun.com/pypi/packages/cd/a1/579b95d9b32adefa23fdbcca9733310f4bfa0d44bee9de785484ffd9026e/greenlet-1.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:095a980288fe05adf3d002fbb180c99bdcf0f930e220aa66fcd56e7914a38202"}, 587 | {url = "https://mirrors.aliyun.com/pypi/packages/ce/0b/30abb3cfb77059f3739f47981481bda42e2bf13a44a4d1a089900c996ad8/greenlet-1.1.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0877a9a2129a2c56a2eae2da016743db7d9d6a05d5e1c198f1b7808c602a30e"}, 588 | {url = "https://mirrors.aliyun.com/pypi/packages/d3/72/f81ec121d7d694437ad571de3090676e51671a11340a9bc277c43f387cc3/greenlet-1.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:ffe73f9e7aea404722058405ff24041e59d31ca23d1da0895af48050a07b6932"}, 589 | {url = "https://mirrors.aliyun.com/pypi/packages/dd/c5/0aa9ad0bf4b330445006839e0d2027aea08f11f47ec5a2daf1885199842e/greenlet-1.1.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:caff52cb5cd7626872d9696aee5b794abe172804beb7db52eed1fd5824b63910"}, 590 | {url = "https://mirrors.aliyun.com/pypi/packages/e0/62/1e4fbb8a2791ba802f9adff2c70db9a5658015c19a9c202b1c93df672b7f/greenlet-1.1.3-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:aa741c1a8a8cc25eb3a3a01a62bdb5095a773d8c6a86470bde7f607a447e7905"}, 591 | {url = "https://mirrors.aliyun.com/pypi/packages/e2/9a/147e5a8b44307d389abb48b1f5f4e27276769b9fefc30b4498119c63ca66/greenlet-1.1.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5b756e6730ea59b2745072e28ad27f4c837084688e6a6b3633c8b1e509e6ae0e"}, 592 | {url = "https://mirrors.aliyun.com/pypi/packages/e3/bc/b03fab52f00640946f91f2a430eca47cbf3cc6363614b82ef36cc54ad988/greenlet-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df02fdec0c533301497acb0bc0f27f479a3a63dcdc3a099ae33a902857f07477"}, 593 | {url = "https://mirrors.aliyun.com/pypi/packages/fa/a1/fda45c5efdde9d3bab7455fad5f9b3f63879ba969747ced480022d291f1c/greenlet-1.1.3-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:cd16a89efe3a003029c87ff19e9fba635864e064da646bc749fc1908a4af18f3"}, 594 | ] 595 | "identify 2.5.5" = [ 596 | {url = "https://mirrors.aliyun.com/pypi/packages/60/cb/59dee3614aca9244a5955f99ba66e64366a759f7d8ea6b149cad027b91a6/identify-2.5.5.tar.gz", hash = "sha256:322a5699daecf7c6fd60e68852f36f2ecbb6a36ff6e6e973e0d2bb6fca203ee6"}, 597 | {url = "https://mirrors.aliyun.com/pypi/packages/fd/80/681ca4485f8cefe72ee43b9a0b0c15f7a78642c6c187d5e4bed8421cc576/identify-2.5.5-py2.py3-none-any.whl", hash = "sha256:ef78c0d96098a3b5fe7720be4a97e73f439af7cf088ebf47b620aeaa10fadf97"}, 598 | ] 599 | "idna 3.4" = [ 600 | {url = "https://mirrors.aliyun.com/pypi/packages/8b/e1/43beb3d38dba6cb420cefa297822eac205a277ab43e5ba5d5c46faf96438/idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, 601 | {url = "https://mirrors.aliyun.com/pypi/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, 602 | ] 603 | "importlib-metadata 4.2.0" = [ 604 | {url = "https://mirrors.aliyun.com/pypi/packages/22/51/52442c59db26637681148c21f8984eed58c9db67053a0a4783a047010c98/importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, 605 | {url = "https://mirrors.aliyun.com/pypi/packages/c7/7c/126a8686399ebe256b5e4343ea80b6f2ee91549969da2eef0bb2891b8d24/importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, 606 | ] 607 | "iniconfig 1.1.1" = [ 608 | {url = "https://mirrors.aliyun.com/pypi/packages/23/a2/97899f6bd0e873fed3a7e67ae8d3a08b21799430fb4da15cfedf10d6e2c2/iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, 609 | {url = "https://mirrors.aliyun.com/pypi/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, 610 | ] 611 | "isort 5.10.1" = [ 612 | {url = "https://mirrors.aliyun.com/pypi/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, 613 | {url = "https://mirrors.aliyun.com/pypi/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, 614 | ] 615 | "mccabe 0.7.0" = [ 616 | {url = "https://mirrors.aliyun.com/pypi/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, 617 | {url = "https://mirrors.aliyun.com/pypi/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, 618 | ] 619 | "mypy-extensions 0.4.3" = [ 620 | {url = "https://mirrors.aliyun.com/pypi/packages/5c/eb/975c7c080f3223a5cdaff09612f3a5221e4ba534f7039db34c35d95fa6a5/mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, 621 | {url = "https://mirrors.aliyun.com/pypi/packages/63/60/0582ce2eaced55f65a4406fc97beba256de4b7a95a0034c6576458c6519f/mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, 622 | ] 623 | "nodeenv 1.7.0" = [ 624 | {url = "https://mirrors.aliyun.com/pypi/packages/96/a8/d3b5baead78adadacb99e7281b3e842126da825cf53df61688cfc8b8ff91/nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, 625 | {url = "https://mirrors.aliyun.com/pypi/packages/f3/9d/a28ecbd1721cd6c0ea65da6bfb2771d31c5d7e32d916a8f643b062530af3/nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, 626 | ] 627 | "packaging 21.3" = [ 628 | {url = "https://mirrors.aliyun.com/pypi/packages/05/8e/8de486cbd03baba4deef4142bd643a3e7bbe954a784dc1bb17142572d127/packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, 629 | {url = "https://mirrors.aliyun.com/pypi/packages/df/9e/d1a7217f69310c1db8fdf8ab396229f55a699ce34a203691794c5d1cad0c/packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, 630 | ] 631 | "pathspec 0.10.1" = [ 632 | {url = "https://mirrors.aliyun.com/pypi/packages/24/9f/a9ae1e6efa11992dba2c4727d94602bd2f6ee5f0dedc29ee2d5d572c20f7/pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, 633 | {url = "https://mirrors.aliyun.com/pypi/packages/63/82/2179fdc39bc1bb43296f638ae1dfe2581ec2617b4e87c28b0d23d44b997f/pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, 634 | ] 635 | "platformdirs 2.5.2" = [ 636 | {url = "https://mirrors.aliyun.com/pypi/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, 637 | {url = "https://mirrors.aliyun.com/pypi/packages/ff/7b/3613df51e6afbf2306fc2465671c03390229b55e3ef3ab9dd3f846a53be6/platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, 638 | ] 639 | "pluggy 1.0.0" = [ 640 | {url = "https://mirrors.aliyun.com/pypi/packages/9e/01/f38e2ff29715251cf25532b9082a1589ab7e4f571ced434f98d0139336dc/pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, 641 | {url = "https://mirrors.aliyun.com/pypi/packages/a1/16/db2d7de3474b6e37cbb9c008965ee63835bba517e22cdb8c35b5116b5ce1/pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, 642 | ] 643 | "pre-commit 2.20.0" = [ 644 | {url = "https://mirrors.aliyun.com/pypi/packages/1e/ba/8cf8b88d0e07588818de46877effc9971305541d9421bc6377b06639d135/pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, 645 | {url = "https://mirrors.aliyun.com/pypi/packages/b2/6c/9ccb5213a3d9fd3f8c0fd69d207951901eaef86b7a1a69bcc478364d3072/pre_commit-2.20.0-py2.py3-none-any.whl", hash = "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7"}, 646 | ] 647 | "py 1.11.0" = [ 648 | {url = "https://mirrors.aliyun.com/pypi/packages/98/ff/fec109ceb715d2a6b4c4a85a61af3b40c723a961e8828319fbcb15b868dc/py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, 649 | {url = "https://mirrors.aliyun.com/pypi/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, 650 | ] 651 | "pycodestyle 2.9.1" = [ 652 | {url = "https://mirrors.aliyun.com/pypi/packages/67/e4/fc77f1039c34b3612c4867b69cbb2b8a4e569720b1f19b0637002ee03aff/pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, 653 | {url = "https://mirrors.aliyun.com/pypi/packages/b6/83/5bcaedba1f47200f0665ceb07bcb00e2be123192742ee0edfb66b600e5fd/pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, 654 | ] 655 | "pydantic 1.10.2" = [ 656 | {url = "https://mirrors.aliyun.com/pypi/packages/13/e3/5b83cba317390c9125e049a5328b8e19475098362d398a65936aaab3f00f/pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, 657 | {url = "https://mirrors.aliyun.com/pypi/packages/22/53/196c9a5752e30d682e493d7c00ea0a02377446578e577ae5e085010dc0bd/pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, 658 | {url = "https://mirrors.aliyun.com/pypi/packages/33/82/40effb1628768af97223df215ed909cc25e0d04d5503667cf7fb5266ee0d/pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, 659 | {url = "https://mirrors.aliyun.com/pypi/packages/33/dd/a8eda780256d32a0ebf2a507e3ee6776e485b98c15b5f6c9ee1661b7374a/pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, 660 | {url = "https://mirrors.aliyun.com/pypi/packages/4c/5f/11db15638a3f5b29c7ae6f24b43c1e7985f09b0fe983621d7ef1ff722020/pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, 661 | {url = "https://mirrors.aliyun.com/pypi/packages/4c/a9/26873855ce8c1d84cc892036c3396dd1e2d3233201d0b7002451f679ad8d/pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, 662 | {url = "https://mirrors.aliyun.com/pypi/packages/4f/53/5747ced47f8af73753bdeb39271acaef47dc63873e0ca16fc33d4a777f31/pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, 663 | {url = "https://mirrors.aliyun.com/pypi/packages/5d/96/3861db92c405d491d02abf17a88f04575311f36688bdb9fb086838d0b379/pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, 664 | {url = "https://mirrors.aliyun.com/pypi/packages/65/06/5925bb1302daaacc28cdf3ac832d62bd0f5fdda5c648409d98cce26d78a4/pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, 665 | {url = "https://mirrors.aliyun.com/pypi/packages/6e/fd/8ffad95e696caf36834c3819d1509f8fb146120501c8deb27c8bfb146b26/pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, 666 | {url = "https://mirrors.aliyun.com/pypi/packages/74/3e/f043a9db9f3ec835b49b084054a83e64a2057d6dabc15da4d2f00edaf8f4/pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, 667 | {url = "https://mirrors.aliyun.com/pypi/packages/74/4f/ea30b0bc3ea6f41d73c9aaa26fd51bd9d4f6f755c62625b592c2c2b1b6f0/pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, 668 | {url = "https://mirrors.aliyun.com/pypi/packages/7a/1d/d61c9ae42b62686a4230a7747119527269cb8bd17fb7146ee463b1a3ed71/pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, 669 | {url = "https://mirrors.aliyun.com/pypi/packages/7d/7d/58dd62f792b002fa28cce4e83cb90f4359809e6d12db86eedf26a752895c/pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, 670 | {url = "https://mirrors.aliyun.com/pypi/packages/87/f7/b02ec31ffd6eafdd2ca8a4a9f1a3ad2fa68ca8b850de82bbe99053e3d2c0/pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, 671 | {url = "https://mirrors.aliyun.com/pypi/packages/88/6f/69a98253109e15de3eba1b6ec5c621f01c9e3735c2d3e6a949b4f467d78e/pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, 672 | {url = "https://mirrors.aliyun.com/pypi/packages/8a/18/2050f86b48b79fe731e7ca706f4914dd2fcfa4071ca29d5509deb54972fc/pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, 673 | {url = "https://mirrors.aliyun.com/pypi/packages/8a/b0/8a4349bb4388e1cd6b843a908b33bc1fea261ce948c287fd5b32e094dc96/pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, 674 | {url = "https://mirrors.aliyun.com/pypi/packages/92/fb/0d5e414d3f72b43c50572f63647fab3abf41cc9f04f810bec97e4d61f09a/pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, 675 | {url = "https://mirrors.aliyun.com/pypi/packages/97/d5/dc4bd637ba0c2cefc58f40415116b9bbc315aa41da158dc3b81d9d981c1c/pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, 676 | {url = "https://mirrors.aliyun.com/pypi/packages/a9/ce/f01d53fa974c954610e08be73058436f5df6a5125929a8d732030eeb19a8/pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, 677 | {url = "https://mirrors.aliyun.com/pypi/packages/af/cf/beecf80bc07c9bd1612219b053950af9b04eb597806c9905dbcfd75fa50d/pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, 678 | {url = "https://mirrors.aliyun.com/pypi/packages/b0/b5/b673ec4154429dcf152e993fd0a2146a3f8a2de3bc4a2dd0768ba051eefb/pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, 679 | {url = "https://mirrors.aliyun.com/pypi/packages/b2/74/961f37b2c2df5c021dd4ac981750a455f0eea312f3eb074a0b7f0fd4663d/pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, 680 | {url = "https://mirrors.aliyun.com/pypi/packages/c2/f7/9c79223c4131bd258dd4b362e426804346b62b1a2e7c914f3eefd6f9f73c/pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, 681 | {url = "https://mirrors.aliyun.com/pypi/packages/c4/ab/25e2515801f17d1434500ed59405a9f13030891896bd4fc90088f8bdf610/pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, 682 | {url = "https://mirrors.aliyun.com/pypi/packages/c6/9b/7a383fbd1f5f0ec8143fb9ebf57c22c4356fadedc0ca376262117e6f2878/pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, 683 | {url = "https://mirrors.aliyun.com/pypi/packages/d4/ec/230ab377c457cd68cfda78759e2a57f8c08a9e9adb4cd53c4d2fc9100b15/pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, 684 | {url = "https://mirrors.aliyun.com/pypi/packages/d6/8b/9ec347ac3a848bb8c356ec6c6a5a5066300f37e985915b0fa68cf78f448a/pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, 685 | {url = "https://mirrors.aliyun.com/pypi/packages/dc/bf/5965230bf0547c5fa0005984564146dcc414e6e8b6349177eca413761013/pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, 686 | {url = "https://mirrors.aliyun.com/pypi/packages/e5/23/96ba59f91dc42b35d72d8ffd8eff1f9c4b508b927207f9122fcfa679c495/pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, 687 | {url = "https://mirrors.aliyun.com/pypi/packages/ef/a8/c11b225b5eae30cf7c00be4d056705aaee42cc646e77e7bda9e407728619/pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, 688 | {url = "https://mirrors.aliyun.com/pypi/packages/f0/83/9bb5cfa0eca92d0c7c317438ecce33051c3879bf2b0a2b990e4e0d6070b7/pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, 689 | {url = "https://mirrors.aliyun.com/pypi/packages/f8/91/814d1d833d4d53ae4854dcb23256c55758b0fc01b90b20a297ee2c76bb84/pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, 690 | {url = "https://mirrors.aliyun.com/pypi/packages/fe/5b/6f77e6ebc93e5e3c7fd480e1b171a6547407eba901a56a65d2745df24144/pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, 691 | {url = "https://mirrors.aliyun.com/pypi/packages/fe/fd/8f7f8271d526378c927babd1229501e576760cef9a509909a3415eec3c0d/pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, 692 | ] 693 | "pyflakes 2.5.0" = [ 694 | {url = "https://mirrors.aliyun.com/pypi/packages/07/92/f0cb5381f752e89a598dd2850941e7f570ac3cb8ea4a344854de486db152/pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, 695 | {url = "https://mirrors.aliyun.com/pypi/packages/dc/13/63178f59f74e53acc2165aee4b002619a3cfa7eeaeac989a9eb41edf364e/pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, 696 | ] 697 | "pyparsing 3.0.9" = [ 698 | {url = "https://mirrors.aliyun.com/pypi/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, 699 | {url = "https://mirrors.aliyun.com/pypi/packages/71/22/207523d16464c40a0310d2d4d8926daffa00ac1f5b1576170a32db749636/pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, 700 | ] 701 | "pytest 6.2.5" = [ 702 | {url = "https://mirrors.aliyun.com/pypi/packages/40/76/86f886e750b81a4357b6ed606b2bcf0ce6d6c27ad3c09ebf63ed674fc86e/pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, 703 | {url = "https://mirrors.aliyun.com/pypi/packages/4b/24/7d1f2d2537de114bdf1e6875115113ca80091520948d370c964b88070af2/pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, 704 | ] 705 | "python-multipart 0.0.5" = [ 706 | {url = "https://mirrors.aliyun.com/pypi/packages/46/40/a933ac570bf7aad12a298fc53458115cc74053474a72fbb8201d7dc06d3d/python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, 707 | ] 708 | "pytz 2022.2.1" = [ 709 | {url = "https://mirrors.aliyun.com/pypi/packages/24/0c/401283bb1499768e33ddd2e1a35817c775405c1f047a9dc088a29ce2ea5d/pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"}, 710 | {url = "https://mirrors.aliyun.com/pypi/packages/d5/50/54451e88e3da4616286029a3a17fc377de817f66a0f50e1faaee90161724/pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"}, 711 | ] 712 | "pytz-deprecation-shim 0.1.0.post0" = [ 713 | {url = "https://mirrors.aliyun.com/pypi/packages/94/f0/909f94fea74759654390a3e1a9e4e185b6cd9aa810e533e3586f39da3097/pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, 714 | {url = "https://mirrors.aliyun.com/pypi/packages/eb/73/3eaab547ca809754e67e06871cff0fc962bafd4b604e15f31896a0f94431/pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, 715 | ] 716 | "pyyaml 6.0" = [ 717 | {url = "https://mirrors.aliyun.com/pypi/packages/02/25/6ba9f6bb50a3d4fbe22c1a02554dc670682a07c8701d1716d19ddea2c940/PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, 718 | {url = "https://mirrors.aliyun.com/pypi/packages/08/f4/ffa743f860f34a5e8c60abaaa686f82c9ac7a2b50e5a1c3b1eb564d59159/PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, 719 | {url = "https://mirrors.aliyun.com/pypi/packages/0f/93/5f81d1925ce3b531f5ff215376445ec220887cd1c9a8bde23759554dbdfd/PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, 720 | {url = "https://mirrors.aliyun.com/pypi/packages/12/fc/a4d5a7554e0067677823f7265cb3ae22aed8a238560b5133b58cda252dad/PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, 721 | {url = "https://mirrors.aliyun.com/pypi/packages/21/67/b42191239c5650c9e419c4a08a7a022bbf1abf55b0391c380a72c3af5462/PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, 722 | {url = "https://mirrors.aliyun.com/pypi/packages/2e/b3/13dfd4eeb5e4b2d686b6d1822b40702e991bf3a4194ca5cbcce8d43749db/PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, 723 | {url = "https://mirrors.aliyun.com/pypi/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, 724 | {url = "https://mirrors.aliyun.com/pypi/packages/44/e5/4fea13230bcebf24b28c0efd774a2dd65a0937a2d39e94a4503438b078ed/PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, 725 | {url = "https://mirrors.aliyun.com/pypi/packages/4d/7d/c2ab8da648cd2b937de11fb35649b127adab4851cbeaf5fd9b60a2dab0f7/PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, 726 | {url = "https://mirrors.aliyun.com/pypi/packages/55/e3/507a92589994a5b3c3d7f2a7a066339d6ff61c5c839bae56f7eff03d9c7b/PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, 727 | {url = "https://mirrors.aliyun.com/pypi/packages/56/8f/e8b49ad21d26111493dc2d5cae4d7efbd0e2e065440665f5023515f87f64/PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, 728 | {url = "https://mirrors.aliyun.com/pypi/packages/59/00/30e33fcd2a4562cd40c49c7740881009240c5cbbc0e41ca79ca4bba7c24b/PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, 729 | {url = "https://mirrors.aliyun.com/pypi/packages/5e/f4/7b4bb01873be78fc9fde307f38f62e380b7111862c165372cf094ca2b093/PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, 730 | {url = "https://mirrors.aliyun.com/pypi/packages/63/6b/f5dc7942bac17192f4ef00b2d0cdd1ae45eea453d05c1944c0573debe945/PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, 731 | {url = "https://mirrors.aliyun.com/pypi/packages/67/d4/b95266228a25ef5bd70984c08b4efce2c035a4baa5ccafa827b266e3dc36/PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, 732 | {url = "https://mirrors.aliyun.com/pypi/packages/68/3f/c027422e49433239267c62323fbc6320d6ac8d7d50cf0cb2a376260dad5f/PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, 733 | {url = "https://mirrors.aliyun.com/pypi/packages/6c/3d/524c642f3db37e7e7ab8d13a3f8b0c72d04a619abc19100097d987378fc6/PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, 734 | {url = "https://mirrors.aliyun.com/pypi/packages/74/68/3c13deaa496c14a030c431b7b828d6b343f79eb241b4848c7918091a64a2/PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, 735 | {url = "https://mirrors.aliyun.com/pypi/packages/77/da/e845437ffe0dffae4e7562faf23a4f264d886431c5d2a2816c853288dc8e/PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, 736 | {url = "https://mirrors.aliyun.com/pypi/packages/7f/d9/6a0d14ac8d3b5605dc925d177c1d21ee9f0b7b39287799db1e50d197b2f4/PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, 737 | {url = "https://mirrors.aliyun.com/pypi/packages/81/59/561f7e46916b78f3c4cab8d0c307c81656f11e32c846c0c97fda0019ed76/PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, 738 | {url = "https://mirrors.aliyun.com/pypi/packages/89/26/0bfd7b756b34c68f8fd158b7bc762b6b1705fc1b3cebf4cdbb53fd9ea75b/PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, 739 | {url = "https://mirrors.aliyun.com/pypi/packages/91/49/d46d7b15cddfa98533e89f3832f391aedf7e31f37b4d4df3a7a7855a7073/PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, 740 | {url = "https://mirrors.aliyun.com/pypi/packages/9d/f6/7e91fbb58c9ee528759aea5892e062cccb426720c5830ddcce92eba00ff1/PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, 741 | {url = "https://mirrors.aliyun.com/pypi/packages/a4/ba/e508fc780e3c94c12753a54fe8f74de535741a10d33b29a576a9bec03500/PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, 742 | {url = "https://mirrors.aliyun.com/pypi/packages/a4/e6/4d7a01bc0730c8f958a62d6a4c4f3df23b6139ad68c132b168970d84f192/PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, 743 | {url = "https://mirrors.aliyun.com/pypi/packages/a8/32/1bbe38477fb23f1d83041fefeabf93ef1cd6f0efcf44c221519507315d92/PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, 744 | {url = "https://mirrors.aliyun.com/pypi/packages/a8/5b/c4d674846ea4b07ee239fbf6010bcc427c4e4552ba5655b446e36b9a40a7/PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, 745 | {url = "https://mirrors.aliyun.com/pypi/packages/b3/85/79b9e5b4e8d3c0ac657f4e8617713cca8408f6cdc65d2ee6554217cedff1/PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, 746 | {url = "https://mirrors.aliyun.com/pypi/packages/b7/09/2f6f4851bbca08642fef087bade095edc3c47f28d1e7bff6b20de5262a77/PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, 747 | {url = "https://mirrors.aliyun.com/pypi/packages/cb/5f/05dd91f5046e2256e35d885f3b8f0f280148568f08e1bf20421887523e9a/PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, 748 | {url = "https://mirrors.aliyun.com/pypi/packages/d1/c0/4fe04181b0210ee2647cfbb89ecd10a36eef89f10d8aca6a192c201bbe58/PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, 749 | {url = "https://mirrors.aliyun.com/pypi/packages/d7/42/7ad4b6d67a16229496d4f6e74201bdbebcf4bc1e87d5a70c9297d4961bd2/PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, 750 | {url = "https://mirrors.aliyun.com/pypi/packages/db/4e/74bc723f2d22677387ab90cd9139e62874d14211be7172ed8c9f9a7c81a9/PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, 751 | {url = "https://mirrors.aliyun.com/pypi/packages/df/75/ee0565bbf65133e5b6ffa154db43544af96ea4c42439e6b58c1e0eb44b4e/PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, 752 | {url = "https://mirrors.aliyun.com/pypi/packages/eb/5f/6e6fe6904e1a9c67bc2ca5629a69e7a5a0b17f079da838bab98a1e548b25/PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, 753 | {url = "https://mirrors.aliyun.com/pypi/packages/ef/ad/b443cce94539e57e1a745a845f95c100ad7b97593d7e104051e43f730ecd/PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, 754 | {url = "https://mirrors.aliyun.com/pypi/packages/f5/6f/b8b4515346af7c33d3b07cd8ca8ea0700ca72e8d7a750b2b87ac0268ca4e/PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, 755 | {url = "https://mirrors.aliyun.com/pypi/packages/f8/54/799b059314b13e1063473f76e908f44106014d18f54b16c83a16edccd5ec/PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, 756 | {url = "https://mirrors.aliyun.com/pypi/packages/fc/48/531ecd926fe0a374346dd811bf1eda59a95583595bb80eadad511f3269b8/PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, 757 | ] 758 | "setuptools 65.3.0" = [ 759 | {url = "https://mirrors.aliyun.com/pypi/packages/cc/83/7ea9d9b3a6ff3225aca2fce5e4df373bee7e0a74c539711a4fbfda53374f/setuptools-65.3.0.tar.gz", hash = "sha256:7732871f4f7fa58fb6bdcaeadb0161b2bd046c85905dbaa066bdcbcc81953b57"}, 760 | {url = "https://mirrors.aliyun.com/pypi/packages/d9/5f/2daccd14278b6b780ae6799f85998377c06019354982391245f4b58a927d/setuptools-65.3.0-py3-none-any.whl", hash = "sha256:2e24e0bec025f035a2e72cdd1961119f557d78ad331bb00ff82efb2ab8da8e82"}, 761 | ] 762 | "six 1.16.0" = [ 763 | {url = "https://mirrors.aliyun.com/pypi/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 764 | {url = "https://mirrors.aliyun.com/pypi/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 765 | ] 766 | "sniffio 1.3.0" = [ 767 | {url = "https://mirrors.aliyun.com/pypi/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, 768 | {url = "https://mirrors.aliyun.com/pypi/packages/cd/50/d49c388cae4ec10e8109b1b833fd265511840706808576df3ada99ecb0ac/sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, 769 | ] 770 | "sqlalchemy 1.4.41" = [ 771 | {url = "https://mirrors.aliyun.com/pypi/packages/05/f5/23735f8e87c4c66058b327773654930898cdb3e206a8ddb22aadc2e54cea/SQLAlchemy-1.4.41-cp36-cp36m-win32.whl", hash = "sha256:3e2ef592ac3693c65210f8b53d0edcf9f4405925adcfc031ff495e8d18169682"}, 772 | {url = "https://mirrors.aliyun.com/pypi/packages/07/0d/46d1a6c25fce13d2c6892e9a203d4baae3058cb04396915365d621965f95/SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639e1ae8d48b3c86ffe59c0daa9a02e2bfe17ca3d2b41611b30a0073937d4497"}, 773 | {url = "https://mirrors.aliyun.com/pypi/packages/08/a8/8146793f1cbe0b7753463e885dd30ad2f647d700530625598355863397b5/SQLAlchemy-1.4.41-cp37-cp37m-win_amd64.whl", hash = "sha256:5323252be2bd261e0aa3f33cb3a64c45d76829989fa3ce90652838397d84197d"}, 774 | {url = "https://mirrors.aliyun.com/pypi/packages/10/60/e891b496ca0bbbabedcb387d43be52b6b59dfb902a0e2df26d1cc43caf4c/SQLAlchemy-1.4.41-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2d6495f84c4fd11584f34e62f9feec81bf373787b3942270487074e35cbe5330"}, 775 | {url = "https://mirrors.aliyun.com/pypi/packages/1b/82/53cc4c827ce330ce97767a3536e320e58f8803da3255ba4752ca20d8f376/SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d8472356e1d5f096c5e0e1a7e0f9182140ada3602f8fff6b7329e9e7cfbcd"}, 776 | {url = "https://mirrors.aliyun.com/pypi/packages/1d/46/208bb085d3405eaec7aa41e8b3eda0c3aa596169e0d31c7bcc75ad1b9abc/SQLAlchemy-1.4.41-cp37-cp37m-win32.whl", hash = "sha256:0005bd73026cd239fc1e8ccdf54db58b6193be9a02b3f0c5983808f84862c767"}, 777 | {url = "https://mirrors.aliyun.com/pypi/packages/37/b5/136c78031fb88f3f79fa1090c339f36a7b9bbb359651767b617f2bbf655a/SQLAlchemy-1.4.41-cp311-cp311-win_amd64.whl", hash = "sha256:d2e054aed4645f9b755db85bc69fc4ed2c9020c19c8027976f66576b906a74f1"}, 778 | {url = "https://mirrors.aliyun.com/pypi/packages/39/ec/02955ea76aca27cba7b280cea29f7952133f154b3a0be50281f125a4c753/SQLAlchemy-1.4.41-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:c23d64a0b28fc78c96289ffbd0d9d1abd48d267269b27f2d34e430ea73ce4b26"}, 779 | {url = "https://mirrors.aliyun.com/pypi/packages/42/8b/4ddf009cb17231471419d9e31dd03005c0b31f8a4e94a9cd1a0b4ade44d4/SQLAlchemy-1.4.41-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:4ba7e122510bbc07258dc42be6ed45997efdf38129bde3e3f12649be70683546"}, 780 | {url = "https://mirrors.aliyun.com/pypi/packages/5b/05/0344b99768d345cd92785949a3dac38bfb7059b3b4dc6ae1e55ea842c772/SQLAlchemy-1.4.41-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:361f6b5e3f659e3c56ea3518cf85fbdae1b9e788ade0219a67eeaaea8a4e4d2a"}, 781 | {url = "https://mirrors.aliyun.com/pypi/packages/5b/3d/4c6da7a76f850c55e9115d5bcf2f90509a8617f4e955d9bd82f23008e029/SQLAlchemy-1.4.41-cp38-cp38-win32.whl", hash = "sha256:58bb65b3274b0c8a02cea9f91d6f44d0da79abc993b33bdedbfec98c8440175a"}, 782 | {url = "https://mirrors.aliyun.com/pypi/packages/5c/0c/4256c722fc41e7f581776ac05af9b5db5c304c7888d625e47d079024c7b8/SQLAlchemy-1.4.41-cp38-cp38-win_amd64.whl", hash = "sha256:ce8feaa52c1640de9541eeaaa8b5fb632d9d66249c947bb0d89dd01f87c7c288"}, 783 | {url = "https://mirrors.aliyun.com/pypi/packages/67/a0/97da2cb07e013fd6c37fd896a86b374aa726e4161cafd57185e8418d59aa/SQLAlchemy-1.4.41.tar.gz", hash = "sha256:0292f70d1797e3c54e862e6f30ae474014648bc9c723e14a2fda730adb0a9791"}, 784 | {url = "https://mirrors.aliyun.com/pypi/packages/73/2e/d61aeec5580ae1841508c39ac63a9a8cfb8200d88f3d9b7d57607ab2f245/SQLAlchemy-1.4.41-cp39-cp39-win_amd64.whl", hash = "sha256:f5fa526d027d804b1f85cdda1eb091f70bde6fb7d87892f6dd5a48925bc88898"}, 785 | {url = "https://mirrors.aliyun.com/pypi/packages/79/5f/cf2664ea15b04cfacab5f9ed791741874c67d58f69ad86c22488bc53a2f0/SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14576238a5f89bcf504c5f0a388d0ca78df61fb42cb2af0efe239dc965d4f5c9"}, 786 | {url = "https://mirrors.aliyun.com/pypi/packages/7e/7f/0693241547e0b8534600e831dfe0a8bbcb29a60c53925ed604a747a00bb8/SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e16c2be5cb19e2c08da7bd3a87fed2a0d4e90065ee553a940c4fc1a0fb1ab72b"}, 787 | {url = "https://mirrors.aliyun.com/pypi/packages/85/8a/83f1056449d819532c337a4a1b709a8e6291b9398340c0b2c00d5fdc7589/SQLAlchemy-1.4.41-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:05f0de3a1dc3810a776275763764bb0015a02ae0f698a794646ebc5fb06fad33"}, 788 | {url = "https://mirrors.aliyun.com/pypi/packages/93/0c/377daa276fa54ad65a6dbd0323285cf0892972fa88a4dbe17113ec440c32/SQLAlchemy-1.4.41-cp311-cp311-win32.whl", hash = "sha256:59bdc291165b6119fc6cdbc287c36f7f2859e6051dd923bdf47b4c55fd2f8bd0"}, 789 | {url = "https://mirrors.aliyun.com/pypi/packages/a8/62/9f74f13f3907ca416d8fc7b1c33a8137717a2a2d42364038b9437dcc8040/SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0002e829142b2af00b4eaa26c51728f3ea68235f232a2e72a9508a3116bd6ed0"}, 790 | {url = "https://mirrors.aliyun.com/pypi/packages/b1/1a/e0c11a28c2d2c3c1e74705d4fcb2246434050eed69b70e6acf0ef88adbb0/SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22ff16cedab5b16a0db79f1bc99e46a6ddececb60c396562e50aab58ddb2871c"}, 791 | {url = "https://mirrors.aliyun.com/pypi/packages/b6/df/51a99ba9b419e15aa39948756f79d6ef2df9ede3288799c1deb43b618799/SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5102fb9ee2c258a2218281adcb3e1918b793c51d6c2b4666ce38c35101bb940e"}, 792 | {url = "https://mirrors.aliyun.com/pypi/packages/bc/a9/f9eb3d4952bfa67f7489732af8db2c31b2e99b6b2f70f786fb6d92b18ebb/SQLAlchemy-1.4.41-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:199a73c31ac8ea59937cc0bf3dfc04392e81afe2ec8a74f26f489d268867846c"}, 793 | {url = "https://mirrors.aliyun.com/pypi/packages/be/76/912622f9e0b87a9fc58d4d58e9ce459bbd9cd83021c51989afb1839d2162/SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0990932f7cca97fece8017414f57fdd80db506a045869d7ddf2dda1d7cf69ecc"}, 794 | {url = "https://mirrors.aliyun.com/pypi/packages/bf/ed/443a8584b15cbab97f0a5e5ba4974c7b6c989d2ec5a37423946a24619bcf/SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb8897367a21b578b26f5713833836f886817ee2ffba1177d446fa3f77e67c8"}, 795 | {url = "https://mirrors.aliyun.com/pypi/packages/bf/f2/69c9f96515b4eb65fac522c8b81ec10666ee4789484b0c123452c1f22505/SQLAlchemy-1.4.41-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ad2b727fc41c7f8757098903f85fafb4bf587ca6605f82d9bf5604bd9c7cded"}, 796 | {url = "https://mirrors.aliyun.com/pypi/packages/ce/b7/1b65516236b36b55624768f7923c9a8d55ca4ba239b795ea84cb82086718/SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2307495d9e0ea00d0c726be97a5b96615035854972cc538f6e7eaed23a35886c"}, 797 | {url = "https://mirrors.aliyun.com/pypi/packages/d0/ea/86e73fb946694c491a332710d0686f3260b941b3af43502457d3a62512dd/SQLAlchemy-1.4.41-cp310-cp310-win32.whl", hash = "sha256:2082a2d2fca363a3ce21cfa3d068c5a1ce4bf720cf6497fb3a9fc643a8ee4ddd"}, 798 | {url = "https://mirrors.aliyun.com/pypi/packages/d5/4a/29ce9d2ec5bb2d3e83ad387b956defde6229252259795cd28210a5020740/SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ebeeec5c14533221eb30bad716bc1fd32f509196318fb9caa7002c4a364e4c"}, 799 | {url = "https://mirrors.aliyun.com/pypi/packages/d6/b7/78d3425a6b3aa486c46259228c1933a22ac4d48b0e6220930973ac852091/SQLAlchemy-1.4.41-cp310-cp310-win_amd64.whl", hash = "sha256:e4b12e3d88a8fffd0b4ca559f6d4957ed91bd4c0613a4e13846ab8729dc5c251"}, 800 | {url = "https://mirrors.aliyun.com/pypi/packages/de/c2/cb1e60fee76b253b396e31a641e117ba689437b1d9dbecfe8415cb0e8b43/SQLAlchemy-1.4.41-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:13e397a9371ecd25573a7b90bd037db604331cf403f5318038c46ee44908c44d"}, 801 | {url = "https://mirrors.aliyun.com/pypi/packages/e4/3c/b37bbfe25ebfe129cfa7843e74af3081cca6ae9a893869ba82639479fdf9/SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0dcf127bb99458a9d211e6e1f0f3edb96c874dd12f2503d4d8e4f1fd103790b"}, 802 | {url = "https://mirrors.aliyun.com/pypi/packages/e5/5b/fbaf9a5f3ef900f9eb30644cb74520a7771250a1d0b26a44ca053d3ef4fe/SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676d51c9f6f6226ae8f26dc83ec291c088fe7633269757d333978df78d931ab"}, 803 | {url = "https://mirrors.aliyun.com/pypi/packages/ea/4e/4bcd7e756fa2e989e7eed239bca3c3fc57101b7d0c49864f8e41d202d1ce/SQLAlchemy-1.4.41-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67fc780cfe2b306180e56daaa411dd3186bf979d50a6a7c2a5b5036575cbdbb"}, 804 | {url = "https://mirrors.aliyun.com/pypi/packages/f0/97/c6a1bc6e80844c10ee1cb599fa5d8c919fc68b9d9ebed22217cadcfca4c8/SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd767cf5d7252b1c88fcfb58426a32d7bd14a7e4942497e15b68ff5d822b41ad"}, 805 | {url = "https://mirrors.aliyun.com/pypi/packages/f1/81/638d6bd19baf595959c42c154d83262d609140898eb88866db2f024fcc00/SQLAlchemy-1.4.41-cp39-cp39-win32.whl", hash = "sha256:9c56e19780cd1344fcd362fd6265a15f48aa8d365996a37fab1495cae8fcd97d"}, 806 | {url = "https://mirrors.aliyun.com/pypi/packages/f4/06/78ab18ec859c7dbdb5182b8463ebb3abac932ad086b9dd15fb60958f9a4f/SQLAlchemy-1.4.41-cp27-cp27m-win_amd64.whl", hash = "sha256:5facb7fd6fa8a7353bbe88b95695e555338fb038ad19ceb29c82d94f62775a05"}, 807 | {url = "https://mirrors.aliyun.com/pypi/packages/f6/ca/6d666434176ff264e750d14b833a7f2243183a8a69f3a25253f1f0052f09/SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccfd238f766a5bb5ee5545a62dd03f316ac67966a6a658efb63eeff8158a4bbf"}, 808 | {url = "https://mirrors.aliyun.com/pypi/packages/f8/84/f92a2de0e4a7e82acca2bc74c75295fe5f141ea8ba002e2218cea41d2245/SQLAlchemy-1.4.41-cp36-cp36m-win_amd64.whl", hash = "sha256:eb30cf008850c0a26b72bd1b9be6730830165ce049d239cfdccd906f2685f892"}, 809 | {url = "https://mirrors.aliyun.com/pypi/packages/fa/5f/150ca2e971231624041de73fbc61b0b16f5139530cbff889213cc00f83f8/SQLAlchemy-1.4.41-cp27-cp27m-win32.whl", hash = "sha256:e570cfc40a29d6ad46c9aeaddbdcee687880940a3a327f2c668dd0e4ef0a441d"}, 810 | {url = "https://mirrors.aliyun.com/pypi/packages/fe/28/f22792eee334cd83a15ef34b825761ee057d330b9b24d3f1496b95faa557/SQLAlchemy-1.4.41-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:90484a2b00baedad361402c257895b13faa3f01780f18f4a104a2f5c413e4536"}, 811 | {url = "https://mirrors.aliyun.com/pypi/packages/ff/1c/55bf52c1961ce01164835047ed2c09e44b76d1f18a75841715626f2786b1/SQLAlchemy-1.4.41-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f37fa70d95658763254941ddd30ecb23fc4ec0c5a788a7c21034fc2305dab7cc"}, 812 | ] 813 | "sqlalchemy-database 0.0.7" = [ 814 | {url = "https://mirrors.aliyun.com/pypi/packages/3c/ee/b15f41de8cf79fca6fe763ea5c8ab94b3faddcc9423f6c1889fead2a1a5a/sqlalchemy_database-0.0.7-py3-none-any.whl", hash = "sha256:0064da9661561aca0a16b8d3d118f6a3785658a91ff5ba0a8bfcc08edf62fb5c"}, 815 | {url = "https://mirrors.aliyun.com/pypi/packages/9e/a5/0c4d0f18524d05682f03b7658f601e02440da46768d3800c2344175420ef/sqlalchemy_database-0.0.7.tar.gz", hash = "sha256:6fe835f6b386e995959a1d8282f529a854830067b2699e00c8ef4d2b3829c7cc"}, 816 | ] 817 | "sqlalchemy2-stubs 0.0.2a27" = [ 818 | {url = "https://mirrors.aliyun.com/pypi/packages/bf/4e/2f6b738a97f6ad2c538f851992bf477313faba42e2b3be495da34c91c0df/sqlalchemy2-stubs-0.0.2a27.tar.gz", hash = "sha256:f79bce50b7837a2c2374ef4480b41e2b8a8226f313f347dc2a70526a4191db93"}, 819 | {url = "https://mirrors.aliyun.com/pypi/packages/f4/08/54a5a9153a2ada666ba91ee508433ac6a39fc13bfc2b0bdb3777d3cf6651/sqlalchemy2_stubs-0.0.2a27-py3-none-any.whl", hash = "sha256:6cea12fec3c261f6e0e14a95d2cc4914e373095e68ec4fc2eb473183ac2b17a2"}, 820 | ] 821 | "sqlmodel 0.0.8" = [ 822 | {url = "https://mirrors.aliyun.com/pypi/packages/64/ba/ad07004536e94e71f99aaae5e667bb6f7230f7e0fbc0b0266e88960dda5f/sqlmodel-0.0.8.tar.gz", hash = "sha256:3371b4d1ad59d2ffd0c530582c2140b6c06b090b32af9b9c6412986d7b117036"}, 823 | {url = "https://mirrors.aliyun.com/pypi/packages/90/63/65f95cf5902ccdfccec99de87666b5e039589c19db7ab62b3770171e5685/sqlmodel-0.0.8-py3-none-any.whl", hash = "sha256:0fd805719e0c5d4f22be32eb3ffc856eca3f7f20e8c7aa3e117ad91684b518ee"}, 824 | ] 825 | "starlette 0.20.4" = [ 826 | {url = "https://mirrors.aliyun.com/pypi/packages/51/37/8ac52116984d6a0d8502ec2c7e4a4a78f862b76410cdb1a4bcb384c91cb3/starlette-0.20.4-py3-none-any.whl", hash = "sha256:c0414d5a56297d37f3db96a84034d61ce29889b9eaccf65eb98a0b39441fcaa3"}, 827 | {url = "https://mirrors.aliyun.com/pypi/packages/b7/9b/dc9fa4c05a8aceb7abbf057b1279f0007ce8ab42c9b8f31a9c71981955bc/starlette-0.20.4.tar.gz", hash = "sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084"}, 828 | ] 829 | "toml 0.10.2" = [ 830 | {url = "https://mirrors.aliyun.com/pypi/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 831 | {url = "https://mirrors.aliyun.com/pypi/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 832 | ] 833 | "tomli 2.0.1" = [ 834 | {url = "https://mirrors.aliyun.com/pypi/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 835 | {url = "https://mirrors.aliyun.com/pypi/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 836 | ] 837 | "typed-ast 1.5.4" = [ 838 | {url = "https://mirrors.aliyun.com/pypi/packages/04/93/482d12fd3334b53ec4087e658ab161ab23affcf8b052166b4cf972ca673b/typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, 839 | {url = "https://mirrors.aliyun.com/pypi/packages/07/d2/d55702e8deba2c80282fea0df53130790d8f398648be589750954c2dcce4/typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, 840 | {url = "https://mirrors.aliyun.com/pypi/packages/0b/e7/8ec06fc870254889198f933a595f139b7871b24bab1116d6128440731ea9/typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, 841 | {url = "https://mirrors.aliyun.com/pypi/packages/0f/59/430b86961d63278fcbced5ba72655ee93aa35e8e908bad4ff138480eb25d/typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, 842 | {url = "https://mirrors.aliyun.com/pypi/packages/1a/f6/dd891624aaf98b918d7012b9d01753d0192c4eb18cf33ce616c0e08f62ba/typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, 843 | {url = "https://mirrors.aliyun.com/pypi/packages/2f/87/25abe9558ed6cbd83ad5bfdccf7210a7eefaaf0232f86de99f65992e91fd/typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, 844 | {url = "https://mirrors.aliyun.com/pypi/packages/2f/d5/02059fe6ca70b11bb831007962323160372ca83843e0bf296e8b6d833198/typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, 845 | {url = "https://mirrors.aliyun.com/pypi/packages/34/2d/17fc1845dd5210345904b054c9fa90f451d64df56de0470f429bc8d63d39/typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, 846 | {url = "https://mirrors.aliyun.com/pypi/packages/38/54/48f7d5b1f954f3a4d8f76e1a11c8497ae899b900cd5a67f826fa3937f701/typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, 847 | {url = "https://mirrors.aliyun.com/pypi/packages/40/1a/5731a1a3908f60032aead10c2ffc9af12ee708bc9a156ed14a5065a9873a/typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, 848 | {url = "https://mirrors.aliyun.com/pypi/packages/48/6c/d96a545d337589dc5d7ecc0f8991122800ffec8dc10a24090619883b515e/typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, 849 | {url = "https://mirrors.aliyun.com/pypi/packages/4e/c1/cddc664ed3dd7d6bb62c80286c4e088b10556efc9a8db2049b425f8f23f7/typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, 850 | {url = "https://mirrors.aliyun.com/pypi/packages/5c/e3/f539e658614ebf5a521c8ba7cbbb98afc5f5e90ddb0332ea22c164612dad/typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, 851 | {url = "https://mirrors.aliyun.com/pypi/packages/70/2c/6d18e111d2c5422bb9e561bbf36885e430407859b2adef9b3fb575f189d5/typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, 852 | {url = "https://mirrors.aliyun.com/pypi/packages/78/18/3ecf5043f227ebd4a43af57e18e6a38f9fe0b81dbfbb8d62eec669d7b69e/typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, 853 | {url = "https://mirrors.aliyun.com/pypi/packages/96/35/612258bab9e1867b28e3137910df35576b7b0fbb9b6f3013cc23435a79ed/typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, 854 | {url = "https://mirrors.aliyun.com/pypi/packages/9b/d5/5540eb496c6817eaee8120fb759c7adb36f91ef647c6bb2877f09acc0569/typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, 855 | {url = "https://mirrors.aliyun.com/pypi/packages/c4/90/dacf9226b34961277f357c17c33b7cae3f05a5f5b8a1d23bd630d7a97a36/typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, 856 | {url = "https://mirrors.aliyun.com/pypi/packages/ca/da/fbc14befbf19d69d05b4b8b019edbc6554d958037a821c6d5585767fe0ff/typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, 857 | {url = "https://mirrors.aliyun.com/pypi/packages/cd/f3/188eede730be3f6ddb9a788cd6b7289207c5fceebbf8ae190f9716dd8c05/typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, 858 | {url = "https://mirrors.aliyun.com/pypi/packages/d8/4e/db9505b53c44d7bc324a3d2e09bdf82b0943d6e08b183ae382860f482a87/typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, 859 | {url = "https://mirrors.aliyun.com/pypi/packages/dd/87/09764c19a60a192b935579c93a07e781f6a52def10b723c8c5748e69a863/typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, 860 | {url = "https://mirrors.aliyun.com/pypi/packages/e3/7c/7407838e9c540031439f2948bce2763cdd6882ebb72cc0a25b763c10529e/typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, 861 | {url = "https://mirrors.aliyun.com/pypi/packages/f9/57/89ac0020d5ffc762487376d0c78e5d02af795657f18c411155b73de3c765/typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, 862 | ] 863 | "typing-extensions 4.3.0" = [ 864 | {url = "https://mirrors.aliyun.com/pypi/packages/9e/1d/d128169ff58c501059330f1ad96ed62b79114a2eb30b8238af63a2e27f70/typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, 865 | {url = "https://mirrors.aliyun.com/pypi/packages/ed/d6/2afc375a8d55b8be879d6b4986d4f69f01115e795e36827fd3a40166028b/typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, 866 | ] 867 | "tzdata 2022.2" = [ 868 | {url = "https://mirrors.aliyun.com/pypi/packages/3e/eb/a00286433c739bb1a0d83a069b2dc379a5d14b0b9c927e3cb00cb434d740/tzdata-2022.2.tar.gz", hash = "sha256:21f4f0d7241572efa7f7a4fdabb052e61b55dc48274e6842697ccdf5253e5451"}, 869 | {url = "https://mirrors.aliyun.com/pypi/packages/71/9b/8b9fea4f4dc956de76baa291cec1c864a8edadf2950d1740bc386d7fe55a/tzdata-2022.2-py2.py3-none-any.whl", hash = "sha256:c3119520447d68ef3eb8187a55a4f44fa455f30eb1b4238fa5691ba094f2b05b"}, 870 | ] 871 | "tzlocal 4.2" = [ 872 | {url = "https://mirrors.aliyun.com/pypi/packages/31/b7/3bc2c1868f27677139b772e4fde95265b93151912fd90eb874827943bfcf/tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, 873 | {url = "https://mirrors.aliyun.com/pypi/packages/7d/b9/164d5f510e0547ae92280d0ca4a90407a15625901afbb9f57a19d9acd9eb/tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, 874 | ] 875 | "virtualenv 20.16.2" = [ 876 | {url = "https://mirrors.aliyun.com/pypi/packages/9d/17/5a822952d90f791947f9d1d11c84c055ffc3b7a315c2552d4f46a0d6cd12/virtualenv-20.16.2.tar.gz", hash = "sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"}, 877 | {url = "https://mirrors.aliyun.com/pypi/packages/f6/5e/1c73595c491b4cceffcb1aebf87eb54b9a5d48cc5226409ccf0ea96aeb91/virtualenv-20.16.2-py2.py3-none-any.whl", hash = "sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"}, 878 | ] 879 | "zipp 3.8.1" = [ 880 | {url = "https://mirrors.aliyun.com/pypi/packages/3b/e3/fb79a1ea5f3a7e9745f688855d3c673f2ef7921639a380ec76f7d4d83a85/zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, 881 | {url = "https://mirrors.aliyun.com/pypi/packages/f0/36/639d6742bcc3ffdce8b85c31d79fcfae7bb04b95f0e5c4c6f8b206a038cc/zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, 882 | ] 883 | --------------------------------------------------------------------------------