diff --git a/.github/workflows/app.yaml b/.github/workflows/app.yaml new file mode 100644 index 0000000..a5c4fe9 --- /dev/null +++ b/.github/workflows/app.yaml @@ -0,0 +1,68 @@ +name: Python App Quality and Testing + +on: [push] + + +jobs: + quality: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.11] + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: # https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#caching-packages + python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: "requirements/dev.txt" + - name: Install dev dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r requirements/dev.txt + - name: Lint with ruff + run: | + python -m ruff check --verbose --format=github . + - name: Lint with mypy + run: | + python -m mypy --show-error-codes --pretty --show-column-numbers --show-error-context . + - name: Lint with black + run: | + python -m black --check --verbose . + - name: Lint with pyproject-fmt + run: | + python -m pyproject_fmt --check --indent=4 . + test: + needs: [quality] + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.11] + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: # https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#caching-packages + python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: "requirements/test.txt" + - name: Install test dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r requirements/test.txt + - name: Test with pytest + run: | + python -m pytest -v -s --failed-first --cov=app --cov-report=xml --cov-branch + - name: Generate Coverage Report + run: | + python -m coverage report -m + - name: Upload coverage to Codecov + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + if: ${{ env.CODECOV_TOKEN }} + uses: codecov/codecov-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: coverage.xml + name: python ${{ matrix.python-version }} diff --git a/.github/workflows/frontend.yaml b/.github/workflows/frontend.yaml new file mode 100644 index 0000000..c47fcc2 --- /dev/null +++ b/.github/workflows/frontend.yaml @@ -0,0 +1,120 @@ +# Sample workflow for building and deploying a Next.js site to GitHub Pages +# +# To get started with Next.js see: https://nextjs.org/docs/getting-started +# +name: Build and Deploy Next.js to GitHub Pages + +on: + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run + workflow_run: + workflows: + - "Scraping the repositories from Source Graph" + - "Python App Quality and Testing" + branches: [main] + types: + - completed + # Allows you to run this workflow manually from the Actions tab + # https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + # Use ``frontend`` as the working directory + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_iddefaultsrun + defaults: + run: + working-directory: ./frontend + strategy: + matrix: + node-version: [18.17.1] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "pnpm" + cache-dependency-path: "./frontend/pnpm-lock.yaml" + - name: Install dependencies + run: pnpm install + - name: Setup Pages + uses: actions/configure-pages@v3 + with: + # Automatically inject basePath in your Next.js configuration file and disable + # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). + # + # You may remove this line if you want to manage the configuration yourself. + static_site_generator: next + - name: Build with Next.js + run: pnpm next build + - name: Static HTML export with Next.js + run: pnpm next export + - name: Upload artifact + if: ${{ !env.ACT }} # skip during local actions testing + uses: actions/upload-pages-artifact@v2 + with: + path: ./frontend/out + + # Lint job + lint: + runs-on: ubuntu-latest + # Use ``frontend`` as the working directory + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_iddefaultsrun + defaults: + run: + working-directory: ./frontend + strategy: + matrix: + node-version: [18.17.1] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "pnpm" + cache-dependency-path: "./frontend/pnpm-lock.yaml" + - name: Install dependencies + run: pnpm install + - name: Lint with ESLint + run: pnpm lint + - name: Lint with Prettier + run: pnpm prettier:lint + + # Deployment job + deploy: + if: ${{ !github.event.act }} # skip during local actions testing + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/scraping.yaml b/.github/workflows/scraping.yaml new file mode 100644 index 0000000..92672ce --- /dev/null +++ b/.github/workflows/scraping.yaml @@ -0,0 +1,51 @@ +name: Scraping the repositories from Source Graph + +on: + schedule: + # Trigger every day at midnight + # https://crontab.guru/#0_0_*_*_* + - cron: '0 0 * * *' + # Allows you to run this workflow manually from the Actions tab + # https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch + workflow_dispatch: + +concurrency: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + group: "scraping" + cancel-in-progress: false + +jobs: + scraping: + if: ${{ !github.event.act }} # skip during local actions testing + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.11] + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: "requirements/base.txt" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r requirements/base.txt + - name: Scrape the repositories + run: | + python -m app.scrape scrape-repos + - name: Parse the dependencies + run: | + python -m app.scrape parse-dependencies + - name: Generate the repositories index + run: | + python -m app.index index-repos + - name: Generate the dependencies index + run: | + python -m app.index index-dependencies + - name: Commit the changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "Scraped repositories from Source Graph, parsed the dependencies, and generated the indexes" diff --git a/.gitignore b/.gitignore index 4604d67..8a5a660 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments .env -links.txt -unique_links.txt -imports.txt -reps/ -.vscode +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ + +# Ruff cache +.ruff_cache/ diff --git a/.gitlint b/.gitlint new file mode 100644 index 0000000..86c71b6 --- /dev/null +++ b/.gitlint @@ -0,0 +1,2 @@ +[general] +ignore=body-is-missing diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..6aab9b4 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +v18.18.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..a303334 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,53 @@ +--- +default_language_version: + python: python3.11 +default_install_hook_types: [pre-commit, commit-msg] +default_stages: [commit] +fail_fast: false +minimum_pre_commit_version: 3.3.3 +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: mixed-line-ending + args: ["--fix=lf"] + - id: check-added-large-files + - id: check-toml + - id: check-yaml + - repo: https://github.com/charliermarsh/ruff-pre-commit + rev: v0.0.280 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - repo: local + hooks: + - id: mypy + name: mypy + entry: | + python -m mypy . + types: [python] + language: system + require_serial: true + pass_filenames: false + - repo: https://github.com/ambv/black + rev: 23.7.0 + hooks: + - id: black + - repo: https://github.com/tox-dev/pyproject-fmt + rev: "0.13.0" + hooks: + - id: pyproject-fmt + args: ["--indent=4"] + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v3.0.3" + hooks: + - id: prettier + entry: prettier --write --list-different --ignore-unknown --config frontend/.prettierrc --ignore-path frontend/.prettierignore + files: ^frontend/ + language_version: 18.18.0 + - repo: https://github.com/jorisroovers/gitlint + rev: "v0.19.1" + hooks: + - id: gitlint diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..451403d --- /dev/null +++ b/Makefile @@ -0,0 +1,139 @@ + # we want bash behaviour in all shell invocations +SHELL := bash +# Run each target in a separate shell +.ONESHELL: + # Fail on error inside any functions or subshells +.SHELLFLAGS := -eu -o pipefail -c + # Remove partially created files on error +.DELETE_ON_ERROR: + # Warn when an undefined variable is referenced +MAKEFLAGS += --warn-undefined-variables +# Disable built-in rules +MAKEFLAGS += --no-builtin-rules +# A catalog of requirements files +REQUIREMENTS?=requirements + +help: # Show this help + @echo "Usage: make [target]" + @echo "" + @echo "Targets:" + @echo " help Show this help" + @echo " requirements-base Compile base requirements" + @echo " requirements-test Compile test requirements" + @echo " requirements-dev Compile dev requirements" + @echo " requirements Compile all requirements" + @echo " install Install the app locally" + @echo " install-front Install frontend" + @echo " install-test Install the app locally with test dependencies" + @echo " install-dev Install the app locally with dev dependencies" + @echo " install-test-dev Install the app locally with test and dev dependencies" + @echo " init-test-dev Install the app locally with test and dev dependencies. Also install pre-commit hooks." + @echo " reinit-test-dev Reinstall pre-commit hooks" + @echo " lint Run linters" + @echo " test Run tests" + @echo " migrate Run migrations" + @echo " revision Create a new migration" + @echo " front Run frontend" + @echo " scrape-repos Scrape repos" + @echo " parse-dependencies Scrape dependencies" + @echo " index-repos Index repos" + @echo " index-dependencies Index dependencies" + +requirements-base: # Compile base requirements + python -m piptools compile \ + --output-file=requirements/base.txt \ + -v \ + pyproject.toml + +requirements-test: requirements-base # Compile test requirements + python -m piptools compile \ + --extra=test \ + --output-file=requirements/test.txt \ + -v \ + pyproject.toml + +requirements-dev: requirements-base # Compile dev requirements + python -m piptools compile \ + --extra=dev \ + --output-file=requirements/dev.txt \ + -v \ + pyproject.toml + +requirements: requirements-base requirements-test requirements-dev # Compile all requirements +.PHONY: requirements + +install: # Install the app locally + python -m pip install -r $(REQUIREMENTS)/base.txt . +.PHONY: install + +install-test: # Install the app locally with test dependencies + python -m pip install \ + -r $(REQUIREMENTS)/base.txt \ + -r $(REQUIREMENTS)/test.txt \ + --editable . +.PHONY: install-test + +install-dev: # Install the app locally with dev dependencies + python -m pip install \ + -r $(REQUIREMENTS)/base.txt \ + -r $(REQUIREMENTS)/dev.txt \ + --editable . +.PHONY: install-dev + +install-test-dev: # Install the app locally with test and dev dependencies + python -m pip install \ + -r $(REQUIREMENTS)/base.txt \ + -r $(REQUIREMENTS)/test.txt \ + -r $(REQUIREMENTS)/dev.txt \ + --editable . +.PHONY: install-test-dev + +install-front: # Install frontend + cd frontend && pnpm install +.PHONY: install-front + +init-test-dev: install-test-dev # Install the app locally with test and dev dependencies. Also install pre-commit hooks. + pre-commit install +.PHONY: init-test-dev + +reinit-test-dev: init-test-dev # Reinstall pre-commit hooks + pre-commit install --install-hooks --overwrite +.PHONY: reinit-test-dev + +lint: # Run linters + pre-commit run --all-files +.PHONY: lint + +test: # Run tests + python -m pytest -vv -s --cov=app --cov-report=xml --cov-branch app +.PHONY: test + +migrate: # Run migrations + python -m alembic upgrade heads +.PHONY: migrate + +revision: # Create a new migration + python -m alembic revision --autogenerate -m "$(message)" +.PHONY: revision + +front: install-front # Run frontend + cd frontend && pnpm dev +.PHONY: front + +scrape-repos: # Scrape repos + python -m app.scrape scrape-repos +.PHONY: scrape-repos + +parse-dependencies: # Scrape dependencies + python -m app.scrape parse-dependencies +.PHONY: parse-dependencies + +index-repos: # Index repos + python -m app.index index-repos +.PHONY: index-repos + +index-dependencies: # Index dependencies + python -m app.index index-dependencies +.PHONY: index-dependencies + +.DEFAULT_GOAL := init-test-dev # Set the default goal to init-dev-test diff --git a/README.md b/README.md index 5e9dbd3..e96db7b 100644 --- a/README.md +++ b/README.md @@ -1,550 +1,57 @@ # Awesome FastAPI Projects -> **Warning** -> If you want to help me to maintain this project, please send a message on https://github.com/Kludex/awesome-fastapi-projects/issues/16. -> I'll happily onboard you. +View the website: https://Kludex.github.io/awesome-fastapi-projects/ -The aim of this repository is to have an organized list of projects that use FastAPI. +## Local Development -If you're looking for FastAPI content, you might want to check [Awesome FastAPI](https://github.com/mjhea0/awesome-fastapi). +### Setup -## Table +#### Python and Virtual Environment -| Project | Dependencies | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -|[2020_slowdelivery_take](https://github.com/zekaio/2020_slowdelivery_take ) |aiohttp, pytest, tortoise | -|[AI-Service](https://github.com/eHelply/AI-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[African_Wildlife_Classifier](https://github.com/peterbacalso/African_Wildlife_Classifier ) |aiohttp, fastai, torch | -|[Auth-Service](https://github.com/eHelply/Auth-Service ) |kombu, requests, setuptools, passlib, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, jwt, socketio, src, bson | -|[BenchmarkRoundOne](https://github.com/peterdeme/BenchmarkRoundOne ) |aiohttp | -|[Benchmarker](https://github.com/vutran1710/Benchmarker ) |apis | -|[Blog](https://github.com/elbruno/Blog ) |face_recognition, imutils, PIL, flask, cv2 | -|[CCTO](https://github.com/SnarferX/CCTO ) |sets, SimpleHTTPSErver, requests, dircache, ovm_lib, jarray, pip, httplib, urllib3, SockerServer, ansible, hello, java, ovmclient | -|[CFE_30D.PY](https://github.com/torredefarol24/CFE_30D.PY ) |formatting, flask, scrape, logger, requests, pandas, download_util, requests_html | -|[COVID-19API](https://github.com/zeroday0619/COVID-19API ) |aiohttp, ujson, async_lru, API, scrapy, fastapi_plugins, aioredis, bs4 | -|[COVID-QA](https://github.com/deepset-ai/COVID-QA ) |elasticapm, eval, sentence_transformers, sklearn, elasticsearch, tqdm, scrapy, requests, backend, nltk, haystack, preprocess, farm, langid, datasources, torch, tfidf_train, covid_nlp | -|[CUCM-Phone-Info](https://github.com/jsteinberg1/CUCM-Phone-Info ) |rq, cryptography, zeep, requests, redis, lxml, lib, apscheduler, api, OpenSSL, sqlalchemy, jwt, bs4 | -|[Chatbot](https://github.com/aramakus/Chatbot ) |nltk, chatterbot, sklearn, requests, tqdm, chatbot | -|[ChatiChatou](https://github.com/auredentan/ChatiChatou ) |chat, aioredis | -|[CheckersAI](https://github.com/HuiiBuh/CheckersAI ) |pytest, aiohttp, game, api, conftest, checkers | -|[Cloud_APS1](https://github.com/ehrhardt98/Cloud_APS1 ) |pymongo, requests | -|[CryptoViz](https://github.com/MohanVashist1/CryptoViz ) |bs4, requests, pyti, pymongo, lib, binance, dateutil, cryptocalculator, channelfinder, dotenv, flask, boto3, click, fastapi_users | -|[DS-API](https://github.com/BW-Post-Here-06-2020/DS-API ) |dotenv, praw | -|[Daft](https://github.com/mpalka31/DaftAcademyCourse ) |main, queries, schemas, pytest, jose, database, crud | -|[Daims_FastAPI](https://github.com/GeorgeMiao219/Daims_FastAPI ) |auth, dns, dataset, config, url, utils, database | -|[Data-Engineering](https://github.com/De-Dash/Data-Engineering ) |nltk, aiohttp, api | -|[Docker-Builder](https://github.com/Javier162380/Docker-Builder ) |rq, pytest, endpoints, requests, redis, builder, docker, settings, docker_builder, models, worker, middlewares, router | -|[Dispatch](https://github.com/Netflix/dispatch ) |SQLAlchemy-Searchable, aiofiles, alembic‚ arrow‚ bcrypt, cachetools, click, email-validator, emails, fastapi_permissions, google-api-python-client, google-auth-oauthlib, h11, httpx, jinja2, jira, joblib, numpy, oauth2client, pandas, pdpyras, psycopg2-binary, pyparsing, python-dateutil, python-jose, python-multipart, pytz, requests, rsa, schedule, sentry-asgi, sentry-sdk, sh, slackclient, spacy, sqlalchemy, sqlalchemy-filters, statsmodels, tabulate, tenacity, uvicorn | -|[DockerImageResNet50](https://github.com/OrenLeung/DockerImageResNet50 ) |redis, PIL, locust, keras | -|[Downotifier](https://github.com/herbzhao/Downotifier ) |twilio, bs4, requests, URLChecker, TwilioWhatsapp | -|[ExcelTools](https://github.com/xx2life/ExcelTools ) |motor, databases | -|[ExpenseAPI](https://github.com/MushroomMaula/ExpenseAPI ) |pytest, faker, sqlalchemy, myapp, fastapi_login, alembic, dotenv | -|[FAAS](https://github.com/jacksonhenry3/FAAS ) |flask | -|[Fast-API-Starter](https://github.com/khaman1/Fast-API-Starter ) |shared, urls | -|[Fast-Project](https://github.com/alex-2201/Fast-Project ) |redis, conn, cassandra, apis, pymysql, logzero, models, utils, middlewares | -|[FastAPI-Auth](https://github.com/Madpilot0/FastAPI-Auth ) |bcrypt, lib, routes, yaml, jwt, MySQLdb | -|[FastAPI-CRUD](https://github.com/Mr-Manna/FastAPI-CRUD ) |databases, sqlalchemy, post, config | -|[FastAPI-Demo](https://github.com/JPMike/FastAPI-Demo ) |requests | -|[FastAPI-Example](https://github.com/gauravgola96/FastAPI-Example ) |botocore, aiobotocore, dotenv, s3_events, boto3, utils | -|[FastAPI-Learning-Example](https://github.com/oinsd/FastAPI-Learning-Example ) |main, main_b, jwt, routers, sqlalchemy, database, passlib | -|[FastAPI-React-PostgreSQL_Full-Stack](https://github.com/scionoftech/FastAPI-React-PostgreSQL_Full-Stack ) |db, setuptools, logs, passlib, utils, sqlalchemy, conf, routes, auth, jwt | -|[FastAPITutorial](https://github.com/HeywoodKing/FastAPITutorial ) |invoke, config | -|[FastAPI_Tortoise_template](https://github.com/GoddessEyes/FastAPI_Tortoise_template ) |celery, jwt, tortoise, template, passlib, emails | -|[FastAPI_Vue](https://github.com/quietking0312/FastAPI_Vue ) |pymongo, apps | -|[FastAPI_app1](https://github.com/Sai-Vamsi-Ogety/FastAPI_app1 ) |spacy | -|[FastAPI_proto](https://github.com/bartomo/FastAPI_proto ) |controllers, urls, sqlalchemy, db, models | -|[FastAdmin](https://github.com/CoderCharm/FastAdmin ) |passlib, loguru, sqlalchemy, myapp, jose, alembic | -|[Fastapi](https://github.com/xyz25/Fastapi ) |router_app, sqlalchemy | -|[FastapiLearn](https://github.com/xuqm/FastapiLearn ) |part4, part11, part7, part8, part15, part2, part10, application, part14, part12, part9, part13, part3, part16, part1, part5, part6 | -|[Fusion-Vision](https://github.com/sdhnshu/Fusion-Vision ) |wandb, pytest, sklearn, requests, tqdm, torch, text_classification | -|[GET_POST](https://github.com/mitsumushibayama/GET_POST ) |MySQLdb | -|[GraphQLAPI](https://github.com/webjunkie01/GraphQLAPI ) |graphene, cryptacular, pytest, graphene_sqlalchemy, sqlalchemy | -|[Gringotts](https://github.com/cning112/Gringotts ) |werkzeug, requests, flask_restplus, typing_extensions, apis, flask_cors, libs, flask, routers, models | -|[HjwzwApi](https://github.com/k1dave6412/HjwzwApi ) |backend, requests, aiohttp, asyncpg, loguru, sqlalchemy, myapp, alembic, databases, bs4 | -|[Image-Diff-back](https://github.com/filipe-guerra/Image-Diff-back ) |imutils, skimage, imageDiff, cv2 | -|[Item-Xref](https://github.com/Roselingit/Item-Xref ) |psycopg2 | -|[KOARCH](https://github.com/janstrohschein/KOARCH ) |classes, emotion_recognition_master, pydash, sklearn, requests, tweepy, scipy, kafka, yaml, psycopg2, emotion_predictor, avro, keras | -|[Logging-Service](https://github.com/eHelply/Logging-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[MLServer](https://github.com/SeldonIO/MLServer ) |orjson, grpc, click, pytest, mlserver, google, setuptools | -|[MallAPI](https://github.com/CoderCharm/MallAPI ) |alembic, loguru, sqlalchemy, extensions, setting, myapp, api, utils | -|[MealCare](https://github.com/hack4impact-mcgill/MealCare ) |pony, passlib, config, tests, sqlalchemy, psycopg2, jwt | -|[MetodoClasificacionTexto](https://github.com/talend-Erick/MetodoClasificacionTexto ) |gensim, nltk, spacy, src, pandas | -|[MyChild](https://github.com/YunusovSamat/MyChild ) |passlib, asyncpg, tortoise, sqlalchemy, alembic, databases, jwt | -|[MyNotes](https://github.com/wq758511990/MyNotes ) |serial, werkzeug, flask_sqlalchemy, flask_httpauth, sqlalchemy, wtforms, pytz, webapp, flask, itsdangerous | -|[NIMSPARQL](https://github.com/Ningensei848/NIMSPARQL ) |elasticapm, sqlalchemy, elasticsearch, db, api | -|[NT118](https://github.com/maivanhung33/NT118 ) |request, kombu, common, elasticsearch, geopy, requests, injector, pymongo, redis, consul, boltons, cachetools, controller, elasticsearch_dsl, sqlalchemy, service, pytz, response | -|[News-Summarizer](https://github.com/CYBINT-IN/News-Summarizer ) |scipy, sentence_transformers, flask, sklearn, torch, requests, transformers, pyLDAvis, bs4 | -|[Notification-Service](https://github.com/eHelply/Notification-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[Pycharm](https://github.com/godori004/Pycharm ) |urllib3, flask_restful, flask, src, pandas, google | -|[Python-example](https://github.com/hzjsea/Python-example ) |netmiko, static_files, requests, basedb, sqlalchemy, ansible, zabbix_info | -|[Python3Test](https://github.com/hjslovehr/Python3Test ) |requests, redis, openpyxl, sqlhelper, pymssql, md5_helper, flask, helpers, bs4 | -|[PythonFastApi](https://github.com/kbeaugrand/PythonFastApi ) |win32service, win32event, servicemanager, win32serviceutil, yaml | -|[RemoteVP-Npc](https://github.com/viccom/RemoteVP-Npc ) |win32serviceutil, serial, requests, apps, pythoncom, cores, helper, ping3, bases, hbmqtt, conf, Crypto, wmi | -|[RestFramework](https://github.com/rakesh4real/RestFramework ) |django, streamapp, rest_framework, other_app, jwt, senddata, my_app, passlib | -|[SOA](https://github.com/FisnikL/SOA ) |prometheus_client, sqlalchemy, sqlalchemy_utils, database | -|[Semester-Stats](https://github.com/Rushyanth111/Semester-Stats ) |playhouse, faker, setuptools, peewee, mailmerge, docx | -|[Service-Template](https://github.com/eHelply/Service-Template ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[SpotifyAPI](https://github.com/dixneuf19/SpotifyAPI ) |spotipy, dotenv, src | -|[StanleyIpkiss](https://github.com/JimmiBram/StanleyIpkiss ) |tests, sibase | -|[Studium-ds](https://github.com/Lambda-School-Labs/Studium-ds ) |retrieve_definition, gauge_plot, requests, calendar_heatmap, inflect | -|[TT_COVID19_API_site_and_emailer](https://github.com/VSpectrum/TT_COVID19_API_site_and_emailer ) |email_validator, requests, config, emailer | -|[TaskXenter](https://github.com/CoolSpring8/TaskXenter ) |celery, sentry_sdk, loguru, databases, jwt, tortoise, passlib, httpx | -|[Telegram-BusBot-DataManager](https://github.com/David-Lor/Telegram-BusBot-DataManager ) |pymongo, motor, busbot_data_manager | -|[WAM_server_API_template](https://github.com/rl-institut/WAM_server_API_template ) |flask_app, celery, flask, pytest, worker, sphinx_rtd_theme | -|[WEB](https://github.com/maivanhung33/WEB ) |request, kombu, common, elasticsearch, geopy, requests, injector, pymongo, redis, consul, boltons, cachetools, controller, elasticsearch_dsl, sqlalchemy, service, pytz, response | -|[WFM](https://github.com/unegade/WFM ) |pika, aio_pika, BSSAPI, locust | -|[WebApp-PhoneClassifier](https://github.com/minh-dg/WebApp-PhoneClassifier ) |fastai | -|[WitnessMe](https://github.com/byt3bl33d3r/WitnessMe ) |xmltodict, imgcat, pytest, pyppeteer, jinja2, terminaltables, prompt_toolkit, pkg_resources, aiosqlite, yaml, witnessme | -|[Words_record](https://github.com/LMFrank/Words_record ) |databases, pytest, pymysql, sqlalchemy, requests | -|[Workspace](https://github.com/AYCHSPACE/Workspace ) |tqdm, jupyter_core, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[YoutubeBackup](https://github.com/FratStar/YoutubeBackup ) |google_auth_oauthlib, zeep, googleapiclient, spyne, google | -|[Zulu](https://github.com/OSS-team-zulu/Zulu ) |requests, passlib, pymongo, geojson, tests, zulu, dynaconf, jwt, bson, pytest | -|[ai-dungeon](https://github.com/AntonNeld/ai-dungeon ) |errors, test_utils, typing_extensions, pytest, models, api, dungeon | -|[aioprometheus](https://github.com/claws/aioprometheus ) |setuptools, aiohttp, alabaster, quart, psutil, asynctest, sphinx, aioprometheus, quantile, prometheus_metrics_proto | -|[aita](https://github.com/logan-connolly/aita ) |pytest, requests, tqdm, aiohttp, asyncpg, aita, loguru, orm, typer, sqlalchemy, databases, praw | -|[alda-online](https://github.com/JesseChua94/alda-online ) |models, alda | -|[alg_interface_fastapi_project](https://github.com/wuzaipei/alg_interface_fastapi_project ) |system_file, pymysql, sqlalchemy, data_model | -|[alice-yamaha-skill](https://github.com/toshka/alice-yamaha-skill ) |exceptions, auth, yaml, capabilities, routers, rxv, config, httpx | -|[allay-ds](https://github.com/Lambda-School-Labs/allay-ds ) |wandb, spacy, sklearn, requests, scrapy, process_data, fastapi_app, tensorflow, numpy, indeed, en_core_web_sm, dotenv | -|[allure_reporter](https://github.com/penguinlav/allure_reporter ) |jinja2, requests, allure_reporter, loguru, aiofiles, async_generator, pytest | -|[andrewhou-zonar](https://github.com/amhou/andrewhou-zonar ) |main, requests, util | -|[apex-tracker](https://github.com/Timzan/apex-tracker ) |routers, requests, config | -|[api](https://github.com/wuzaipei/alg_interface_fastapi_project ) |pyazo_api, alembic, dotenv, jwt, sqlalchemy, passlib | -|[api-ocr](https://github.com/dzakyputra/api-ocr ) |tesserocr, PIL, cv2, modules | -|[api-poc](https://github.com/igorfarias30/fastapi-poc ) |sklearn | -|[api.authentication](https://github.com/jrhuerta/api.authentication ) |api_authentication | -|[api_works](https://github.com/omrylcn/api_works ) |PIL, requests | -|[apiestas](https://github.com/franloza/apiestas ) |crawling, scrapy, fuzzywuzzy, loguru, slugify, api, js2xml, dateparser, typer, twisted, pytz, motor | -|[apitoolbox](https://github.com/zuarbase/apitoolbox ) |pytest, setuptools, passlib, sqlalchemy_filters, tests, sqlalchemy, ordered_uuid, tzlocal, pytz, jwt, apitoolbox, itsdangerous | -|[arcas](https://github.com/maialogic/arcas ) |graphene, snapshottest | -|[asgi-server-timing-middleware](https://github.com/sm-Fifteen/asgi-server-timing-middleware ) |yappi, asgi_server_timing, setuptools | -|[asu-schedule](https://github.com/skhortiuk/asu-schedule ) |aiohttp, src, validators, bs4 | -|[async_django_session](https://github.com/imbolc/async_django_session ) |setuptools, aiohttp, asyncpg, async_django_session, cfg, django, databases | -|[authal-poc](https://github.com/michal-nakoneczny/authal-poc ) |authal, asynctest, pytest, bson, requests, tests, httpx | -|[auto_populate](https://github.com/NealWhitlock/auto_populate ) |psycopg2, getter | -|[autoloadtest](https://github.com/hkiang01/autoloadtest ) |locust, hypothesis | -|[automagic_hashtag](https://github.com/MarianMalvin/automagic_hashtag ) |utils, google | -|[b0mb3r](https://github.com/crinny/b0mb3r ) |setuptools, sentry_sdk, loguru, pkg_resources, b0mb3r, phonenumbers, click, httpx | -|[b2blue-challenge](https://github.com/lfvilella/b2blue-challenge ) |pydantic_sqlalchemy, sqlalchemy | -|[b3ta](https://github.com/nm17/b3ta ) |setuptools, sentry_sdk, loguru, pkg_resources, service, b0mb3r, phonenumbers, click, httpx | -|[backend](https://github.com/ElusiveSpirit/fbd-backend ) |asynctest, transliterate | -|[backend-skeleton](https://github.com/dmontagu/backend-skeleton ) |pytest, requests, typing_extensions, sqlalchemy_utils, tests, sqlalchemy, myapp, alembic, tenacity | -|[balikobot_tmp_2](https://github.com/Horac-Bouthon/balikobot_tmp_2 ) |logger_wrapper, databases, schemas, sqlalchemy, conf, routers, sql_factory | -|[base-fastapi-postgresql](https://github.com/alldevic/base-fastapi-postgresql ) |alembic, arq, sqlalchemy, sqlalchemy_utils, gino | -|[basic-python-postgis-docker](https://github.com/stephenhillier/basic-python-postgis-docker ) |alembic, tenacity, sqlalchemy, myapp | -|[bc_rates](https://github.com/MRobalinho/bc_rates ) |bc | -|[belajar-fastapi](https://github.com/aansubarkah/belajar-fastapi ) |yfinance, sqlalchemy, models, config, tutorial, database | -|[bench-rest-api-frameworks](https://github.com/py4mac/bench-rest-api-frameworks ) |sanic, locust, aiohttp, tornado, api, main, core | -|[biomedical-computing-project-backend](https://github.com/SinaKhalili/biomedical-computing-project-backend ) |extra, xlrd, CoronaAnalysis | -|[blog](https://github.com/deagle-z/blog ) |blog, loguru, jwt, sqlalchemy | -|[blog-posts](https://github.com/tiangolo/blog-posts ) |pytest, sqlalchemy, jose, passlib | -|[bluesky](https://github.com/paulorodriguesxv/bluesky ) |pytest, passlib, aiohttp, decouple, sqlalchemy_utils, sqlalchemy, myapp, alembic, jwt | -|[boilerplate](https://github.com/pmcarlos/fast-api-boilerplate ) |utils, config | -|[book-graphics](https://github.com/kamartem/book-graphics ) |alembic, sentry_sdk, asyncpg, loguru, sqlalchemy, gino | -|[bplustogether](https://github.com/wborbajr/bplustogether ) |dynaconf, databases, loguru, sqlalchemy, bpapi | -|[bracket_install](https://github.com/mobjack/bracket_install ) |six, flask, requests, colorama | -|[bread-app](https://github.com/aidan-mcbride/bread-app ) |pyArango, pytest, jwt, routers, api, tests, passlib | -|[bridgeapp](https://github.com/jasujm/bridgeapp ) |click, orjson, bridgeapp, click_log, pytest, zmq | -|[budget-blocks-ds](https://github.com/Lambda-School-Labs/budget-blocks-ds ) |DB, geopy, transactionhist, mainhelp, census, main, psycopg2, dotenv, routers | -|[bullshit-website](https://github.com/kaylynn234/bullshit-website ) |corporate_bullshit | -|[burriking](https://github.com/txemac/burriking ) |infrastructure, dependency_injector, werkzeug, requests, pymongo, freezegun, tests, config, main, user_interface, application, database, flask, bson, pytest, flasgger, domain | -|[bw3_attempt](https://github.com/worldwidekatie/bw3_attempt ) |dotenv, sklearn, requests, joblib | -|[c4p2n](https://github.com/piterpy-meetup/c4p2n ) |c4p2n, fastapi_security_typeform, notion, ppm_telegram_bot_client | -|[cah-v2](https://github.com/Mdellit110/cah-v2 ) |graphene, schema, graphene_sqlalchemy, sqlalchemy, models, config, schema_blackcards, database, schema_whitecards | -|[calculator](https://github.com/ch0c01ate/calculator ) |pymongo, calculator, requests, dbsetup | -|[canvote](https://github.com/alvintangz/canvote ) |jinja2, requests, passlib, sqlalchemy_pagination, humps, sqlalchemy, myapp, pytz, alembic, secure, jwt | -|[cashflow](https://github.com/VSpectrum/cashflow ) |pytest, config | -|[ccrbackend](https://github.com/danieldominguete/ccrbackend ) |six, dotenv, dynamorm, mangum, src, jose, marshmallow | -|[challenge](https://github.com/Creditas/challenge ) |iris_classifier, sklearn | -|[chapushillo](https://github.com/maxipavlovic/chapushillo ) |pusher, dotenv, pusher_client | -|[checkmarx](https://github.com/zetkin/checkmarx ) |scanner, checkmarx, pytest, pyzbar, setuptools | -|[chinook_fastapi](https://github.com/sandervandorsten/chinook_fastapi ) |dotenv, setuptools, chinook_fastapi | -|[cloudrun-fastapi](https://github.com/anthcor/cloudrun-fastapi ) |pytest, actions, passlib, sqlalchemy_utils, config, tests, main, sqlalchemy, myapp, database, google, alembic, schemas, jwt, routers, gunicorn_config, models | -|[cnapp-fastapi](https://github.com/cnapp/cnapp-fastapi ) |sanic, daiquiri, jinja2, prometheus_client, cnapps, starlette_prometheus | -|[code_example_fastapi](https://github.com/d-tamirlan/code_example_fastapi ) |tortoise, src, envparse, fastapi_users | -|[codewars-watchdog](https://github.com/uriyyo/codewars-watchdog ) |git | -|[coding-challenges](https://github.com/fjemi/coding-challenges ) |password_generator, tqdm, jsbeautifier, dateutil, matplotlib, flask_api, word_square_check, flask | -|[concurrency](https://github.com/Jorricks/concurrency ) |PIL, setuptools, redis, dataclasses_json, src, asgiref, click | -|[contact-form](https://github.com/k4ssyi/contact-form ) |dotenv, controllers, urls, settings, utils, request_body | -|[cookiecutter-python](https://github.com/ValentinCalomme/cookiecutter-python ) |typer | -|[cookiecutter-simcore-py-fastapi](https://github.com/pcrespov/cookiecutter-simcore-py-fastapi ) |cryptography, pytest, servicelib, setuptools, simcore_service_catalog, aiohttp, pkg_resources, attr, ptvsd, aiopg, sqlalchemy, tenacity, yarl, httpx | -|[coronavirus-tg-api](https://github.com/egbakou/coronavirus-tg-api ) |aiohttp, invoke, asyncmock, dateparser, async_asgi_testclient, async_generator, dotenv, pytest, bs4 | -|[coursera-ibm-ai-workflow-submission](https://github.com/eightBEC/coursera-ibm-ai-workflow-submission ) |loguru, sklearn, pytest, joblib | -|[coursework](https://github.com/algorithm-ssau/coursework ) |dotenv, databases, motor | -|[covid-19-Chile](https://github.com/RentadroneCL/covid-19-Chile ) |orator, dotenv, routes, pendulum, covid_19_chile, config, database | -|[covid-19-dashboard-api](https://github.com/zeshuaro/covid-19-dashboard-api ) |sortedcontainers, dotenv, jwt, pycountry, requests, google, passlib | -|[covid19-id](https://github.com/anzharip/covid19-id ) |selenium, requests | -|[covidfaq](https://github.com/dialoguemd/covidfaq ) |pytest, spacy, sklearn, tqdm, requests, covidfaq, selenium, bert_reranker, structlog, spacy_langdetect, yaml, html2text, boto3, torch, transformers, bs4 | -|[covidsage](https://github.com/chancey-gardener/covidsage ) |spacy, data_loader, requests, backends, nlu_client, numpy, matplotlib, plotter, rasa, rasa_sdk, pymysql, discourse | -|[cpython3-fastapi](https://github.com/phongln/cpython3-fastapi ) |blog, admin | -|[custom-actions-app-python](https://github.com/Frameio/custom-actions-app-python ) |pytest, requests, custom_actions | -|[daftacademy-python-levelup](https://github.com/holdenkold/daftacademy-python-levelup ) |main, pytest | -|[daiei-backend](https://github.com/a-nakajima-at-shokuryu/daiei-backend ) |fastapi_server, dotenv, models, utils, dateutil, settings | -|[daizu-online-judge-backend](https://github.com/SoyBeansLab/daizu-online-judge-backend ) |psycopg2, infrastructure, marshmallow_dataclass, interface, marshmallow, domain | -|[dask-remote](https://github.com/octoenergy/dask-remote ) |distributed, typing_extensions, pytest, requests, dask_remote, setuptools | -|[datarepo](https://github.com/PUG-PB-Traducao/datarepo ) |bcrypt, dotenv, fastapi_sqlalchemy, sqlalchemy | -|[debitcard](https://github.com/xpnewmedia/debitcard ) |debitcard | -|[debts](https://github.com/afonasev/debts ) |pytest, locust, factory, passlib, sentry_asgi, sentry_sdk, contextvars_executor, server, context_logging, sqlalchemy, alembic, jwt | -|[decentralized-news-publishing](https://github.com/teddymarkov/decentralized-news-publishing ) |ariadne | -|[demo-dms](https://github.com/gucharbon/demo-dms ) |urllib3, typer, pytest, minio, backend | -|[deploy](https://github.com/pcmalves/codeploy-teste ) |main | -|[devops-assignment](https://github.com/fokinpv/devops-assignment ) |asynctest, pytest, service, pulp | -|[devs-conn-api](https://github.com/txemac/devs-conn-api ) |github, pytest, sqlalchemy, sqlalchemy_utils, data, twitter, tests | -|[dfstore](https://github.com/Exhor/dfstore ) |requests, src, tests, feather | -|[dig-bioindex](https://github.com/broadinstitute/dig-bioindex ) |requests, colorama, orjson, lib, enlighten, sqlalchemy, dotenv, boto3, click | -|[django-fastapi-example](https://github.com/jordaneremieff/django-fastapi-example ) |django, api | -|[docker-fastapi-demo](https://github.com/pylixm/docker-fastapi-demo ) |alembic, loguru, databases, core, sqlalchemy, service, myapp, api | -|[docker-workshop](https://github.com/blairdrummond/docker-workshop ) |scipy, PIL, dash, flask, inference, sklearn, requests, numpy, joblib, flask_caching | -|[downloads_statistics](https://github.com/mmidu/downloads_statistics ) |redis, main, seeds, controllers, DownloadSeeder, requests, models, config, utils, DownloadsController | -|[dreamcatcher](https://github.com/sbathgate/dreamcatcher ) |pytest, passlib, sqlalchemy, myapp, jose, alembic, celery, tenacity, raven, emails | -|[duke](https://github.com/jamescurtin/duke ) |duke, PIL, pytest | -|[eXchangeAPI-PY](https://github.com/wborbajr/eXchangeAPI-PY ) |pymongo, dynaconf, exchangeapi, motor | -|[educator_api](https://github.com/wycliffogembo87/educator_api ) |pony, requests, passlib, loguru, api, settings, schemas, core, models, util | -|[effortless_fast_api](https://github.com/davideasaf/effortless_fast_api ) |requests, passlib, invoke, config, utils, main, sqlalchemy, schemas, jwt, models, services, pytest | -|[embl_python_software_engineer_test](https://github.com/yusra-haider/embl_python_software_engineer_test ) |sqlalchemy, requests | -|[eml_analyzer](https://github.com/ninoseki/eml_analyzer ) |async_timeout, pytest, eml_parser, compressed_rtf, arrow, compoundfiles, olefile, loguru, fastapi_utils, tests, dateparser, asynctest, magic, aiospamc, ioc_finder, respx, httpx | -|[entroprise-api](https://github.com/peterdeepsix/entroprise-api ) |simpletransformers, service, models, api | -|[eu-taxation-customs-api](https://github.com/aditya-08/eu-taxation-customs-api ) |main, zeep, requests | -|[events-api](https://github.com/txemac/events-api ) |pytz, xmltodict, pytest, sqlalchemy, sqlalchemy_utils, apscheduler, data, requests, tests | -|[example-fastapi-sqlachemy-pytest](https://github.com/timhughes/example-fastapi-sqlachemy-pytest ) |example, pytest, sqlalchemy | -|[excerpt-formatter](https://github.com/cmckillop/excerpt-formatter ) |text_formatter, slack_manager, requests, models | -|[fake-news-game](https://github.com/jsandovalc/fake-news-game ) |databases | -|[fantasy-fencing](https://github.com/Innoviox/fantasy-fencing ) |colorlog, selenium, click, scrape, requests, logs, bs4 | -|[fapi](https://github.com/glebofff/fapi ) |api, sqlalchemy, myapp, alembic, fastapi_sqlalchemy, core, models, click | -|[fast](https://github.com/foobar8675/fastai-bite ) |routers, user | -|[fast-api-asyncdb](https://github.com/tsadimas/fast-api-asyncdb ) |dotenv, databases, sqlalchemy, settings, fastapi_users | -|[fast-api-boilerplate](https://github.com/pmcarlos/fast-api-boilerplate ) |alembic, dotenv, fastapi_sqlalchemy, core, sqlalchemy, myapp | -|[fast-api-rest](https://github.com/javier-lopez/fast-api-rest ) |config, bjoern | -|[fast-api-sql-template](https://github.com/Jonatha-Varjao/fast-api-sql-template ) |pytest, googletrans, requests, passlib, sqlalchemy_utils, sqlalchemy, alembic, jwt, emails | -|[fast-elm](https://github.com/yuzebin/fast-elm ) |bcrypt, fmmodel, requests, fmsecurity, passlib, fmdb, slugify, fmcrud, fmapi, databases, motor, jwt, fmtoken, bson | -|[fastAPI-be](https://github.com/BonneC/fastAPI-be ) |alembic, dotenv, sqlalchemy, models, api, config, myapp, crud | -|[fastApi](https://github.com/fionasummer/fastApiSelf ) |my_super_project, graphene, projetStage, sqlalchemy | -|[fastApiSelf](https://github.com/fionasummer/fastApiSelf ) |pytest, rr, sqlalchemy, websocket, fackApi, app1 | -|[fastApiSimple](https://github.com/marirs/fastApiSimple ) |pymongo, geoip2, motor, server | -|[fastAppAppointment](https://github.com/EdvinaNakos/fastAppAppointment ) |main, controller, databases, sqlalchemy, db, service | -|[fast_api](https://github.com/davideasaf/effortless_fast_api ) |app_utils, bcrypt, schemas, jwt, sqlalchemy, models, database, crud | -|[fast_api_camelcase_example](https://github.com/ahmednafies/fast_api_camelcase_example ) |humps, models | -|[fast_api_self_study](https://github.com/cuongld2/fast_api_self_study ) |bcrypt, jwt, sqlalchemy, sql_app | -|[fastaaps](https://github.com/sergio-chumacero/fastaaps ) |pymongo, celery, motor | -|[fastai-bite](https://github.com/foobar8675/fastai-bite ) |PIL, graphene, my_utils, fastai2, cv2, httpx | -|[fastapi-GraphQL-full-stack-docker-github-actions-graphene-test-client-template](https://github.com/gaylonalfano/fastapi-GraphQL-full-stack-docker-github-actions-graphene-test-client-template )|graphene, pytest, sqlalchemy, graphql, snapshottest | -|[fastapi-GraphQL-full-stack-docker-travisci-starlette-test-client-template](https://github.com/gaylonalfano/fastapi-GraphQL-full-stack-docker-travisci-starlette-test-client-template ) |graphene, pytest | -|[fastapi-admin](https://github.com/long2ice/fastapi-admin ) |colorama, passlib, fastapi_admin, prompt_toolkit, tortoise, module, xlsxwriter, jwt | -|[fastapi-auth](https://github.com/dmontagu/fastapi-auth ) |argon2, bcrypt, pytest, requests, typing_extensions, fastapi_auth, tests, sqlalchemy, jwt | -|[fastapi-backend](https://github.com/dev-courses/fastapi-backend ) |bcrypt, pytest, passlib, asyncpg, loguru, slugify, tests, asgi_lifespan, sqlalchemy, docker, alembic, psycopg2, databases, jwt, httpx | -|[fastapi-boilerplate](https://github.com/teamhide/fastapi-boilerplate ) |alembic, jwt, sqlalchemy, core, myapp | -|[fastapi-celery](https://github.com/GregaVrbancic/fastapi-celery ) |worker, celery | -|[fastapi-celery-redis-rabbitmq](https://github.com/karthikasasanka/fastapi-celery-redis-rabbitmq ) |redis, celery, shopping | -|[fastapi-cool](https://github.com/genchsusu/fastapi-cool ) |kombu, aiosmtplib, tortoise, yaml, settings, celery, jwt, ldap3 | -|[fastapi-crud](https://github.com/sophiabrandt/fastapi-crud ) |databases, pytest, sqlalchemy, db | -|[fastapi-crud-sync](https://github.com/testdrivenio/fastapi-crud-sync ) |pytest, sqlalchemy | -|[fastapi-demo](https://github.com/sonhal/fastapi-demo ) |rethinkdb, fastapi_demo | -|[fastapi-discovery](https://github.com/DenisOH/fastapi-discovery ) |sqlalchemy, fastapi_discovery | -|[fastapi-docs-cn](https://github.com/apachecn/fastapi-docs-cn ) |graphene, passlib, peewee, couchbase, sqlalchemy, flask, databases, jwt | -|[fastapi-esf-demo](https://github.com/hightfly/fastapi-esf-demo ) |databases, sqlalchemy, sqlalchemy_utils | -|[fastapi-etag](https://github.com/steinitzu/fastapi-etag ) |pytest, requests, fastapi_etag | -|[fastapi-exploring](https://github.com/manjurulhoque/fastapi-exploring ) |alembic, dotenv, fastapi_sqlalchemy, sqlalchemy, myapp | -|[fastapi-for-firebase](https://github.com/attakei/fastapi-for-firebase ) |fastapi_for_firebase, pytest | -|[fastapi-fullstack](https://github.com/lfvilella/fastapi-fullstack ) |pytest, sqlalchemy, validate_docbr | -|[fastapi-healthcheck](https://github.com/jeffsiver/fastapi-healthcheck ) |healthcheck, setuptools | -|[fastapi-helloworld](https://github.com/yashwanthl/fastapi-helloworld ) |nltk, sklearn, modules | -|[fastapi-hero](https://github.com/Hedde/fastapi-heroku-test ) |dotenv, motor, core, db, bson, models, api | -|[fastapi-hex-boilerplate](https://github.com/GArmane/fastapi-hex-boilerplate ) |factory, toolz, tests, sqlalchemy, myapp, alembic, dotenv, databases, pytest | -|[fastapi-jsonrpc](https://github.com/smagafurov/fastapi-jsonrpc ) |fastapi_jsonrpc, aiojobs, pytest, setuptools | -|[fastapi-jwt](https://github.com/carminati-marco/fastapi-jwt ) |ms_auth, auth, jwt, passlib | -|[fastapi-layered-architecture](https://github.com/teamhide/fastapi-layered-architecture ) |alembic, pythondi, jwt, sqlalchemy, core, myapp | -|[fastapi-login](https://github.com/parsd/fastapi-login ) |pytest, requests, setuptools, fastapi_login, assertpy | -|[fastapi-mako](https://github.com/LouisYZK/fastapi-mako ) |mako, setuptools | -|[fastapi-mangum-example](https://github.com/chgangaraju/fastapi-mangum-example ) |mangum | -|[fastapi-microblog](https://github.com/vkhnychenko/fastapi-microblog ) |alembic, core, sqlalchemy, microblog, myapp, user | -|[fastapi-ml-scaffolding](https://github.com/jmeisele/fastapi-ml-scaffolding ) |loguru, pytest, fastapi_scaffolding, joblib | -|[fastapi-ml-skeleton](https://github.com/eightBEC/fastapi-ml-skeleton ) |loguru, pytest, fastapi_skeleton, joblib | -|[fastapi-mount](https://github.com/Midnighter/fastapi-mount ) |mount_demo | -|[fastapi-nuxt-blog](https://github.com/tokusumi/fastapi-nuxt-blog ) |PIL, passlib, sqlalchemy_utils, sqlalchemy, myapp, sendgrid, pytz, alembic, jwt, boto3, pytest | -|[fastapi-permissions](https://github.com/holgi/fastapi-permissions ) |pytest, jwt, fastapi_permissions, passlib | -|[fastapi-playground](https://github.com/FlorianBorn/fastapi-playground ) |PIL, fastai | -|[fastapi-plugins](https://github.com/madkote/fastapi-plugins ) |fastapi_plugins, setuptools, aioredis, tenacity, aiojobs, pytest | -|[fastapi-poc](https://github.com/igorfarias30/fastapi-poc ) |main, data, models, todo | -|[fastapi-postgres-aws-lambda](https://github.com/KurtKline/fastapi-postgres-aws-lambda ) |mangum, sqlalchemy | -|[fastapi-realworld-example-app-mysql](https://github.com/xiaozl/fastapi-realworld-example-app-mysql ) |bcrypt, passlib, asyncpg, loguru, aiomysql, tests, asgi_lifespan, docker, psycopg2, databases, jwt, pytest, httpx | -|[fastapi-route](https://github.com/franodos/fastapi-route ) |response, setuptools | -|[fastapi-satella-metrics](https://github.com/piotrmaslanka/fastapi-satella-metrics ) |fastapi_satella_metrics, requests, setuptools, satella | -|[fastapi-scaffold](https://github.com/ibegyourpardon/fastapi-scaffold ) |xuan | -|[fastapi-simple-cachecontrol](https://github.com/attakei/fastapi-simple-cachecontrol ) |fastapi_simple_cachecontrol, pytest | -|[fastapi-simple-template](https://github.com/MushroomMaula/fastapi-simple-template ) |alembic, dotenv, pytest, faker, sqlalchemy, myapp, fastapi_login | -|[fastapi-snippets](https://github.com/hhatto/fastapi-snippets ) |caches, fastapi_plugins, aioredis | -|[fastapi-sqlalchemy](https://github.com/zuarbase/fastapi-sqlalchemy-example ) |pytest, setuptools, passlib, sqlalchemy_filters, tests, sqlalchemy, ordered_uuid, tzlocal, pytz, fastapi_sqlalchemy, jwt, itsdangerous | -|[fastapi-sqlalchemy-example](https://github.com/zuarbase/fastapi-sqlalchemy-example ) |alembic, itsdangerous, fastapi_sqlalchemy, pytest, fastapi_sqlalchemy_example, sqlalchemy, myapp, click, setuptools | -|[fastapi-starter-kit](https://github.com/Shinichi-Nakagawa/fastapi-starter-kit ) |book, pytest, sqlalchemy, db | -|[fastapi-tdd-docker](https://github.com/pmcarlos/fastapi-tdd-docker ) |pytest, tortoise | -|[fastapi-template](https://github.com/jefmud/fastapi-templates ) |pytest, setuptools, passlib, sentry_sdk, sqlalchemy_utils, gino, sqlalchemy, jose, alembic, fastapi_template, migrations | -|[fastapi-test](https://github.com/jrwalk/fastapi-test ) |pytest, pandas | -|[fastapi-tools](https://github.com/so1n/fastapi-tools ) |fastapi_tools, prometheus_client, httpx | -|[fastapi-tortoise](https://github.com/prostomarkeloff/fastapi-tortoise ) |loguru, pytest, tortoise, requests, tests | -|[fastapi-users](https://github.com/frankie567/fastapi-users ) |passlib, tortoise, tests, asynctest, asgi_lifespan, sqlalchemy, httpx_oauth, makefun, databases, motor, jwt, fastapi_users, pytest, httpx | -|[fastapi-utils](https://github.com/dmontagu/fastapi-utils ) |pytest, fastapi_utils, tests, sqlalchemy | -|[fastapi-uvicorn-gunicorn-nginx-supervisor-boilerplate](https://github.com/sumitsk20/fastapi-uvicorn-gunicorn-nginx-supervisor-boilerplate ) |orjson, motor, core, server, bson, apps, utils | -|[fastapi-versioning](https://github.com/DeanWay/fastapi-versioning ) |example, typing_extensions, fastapi_versioning, setuptools | -|[fastapi-vue-test](https://github.com/abreumatheus/fastapi-vue-test ) |PIL, sqlalchemy, myapp, pytz, alembic, boto3 | -|[fastapi-websockets](https://github.com/natanael-silvamt/fastapi-websockets ) |api | -|[fastapi-whisper-rest-api](https://github.com/BolajiOlajide/fastapi-whisper-rest-api ) |api | -|[fastapi_admin](https://github.com/Chise1/fastapi_admin ) |apps, setuptools, passlib, fastapi_admin, sqlalchemy, settings, databases, pymysql, jwt | -|[fastapi_catchup](https://github.com/Kamihara/fastapi_catchup ) |intro | -|[fastapi_douyin](https://github.com/bigdataboy2020/fastapi_douyin ) |routers, requests, settings, exceptions, spiders | -|[fastapi_gino](https://github.com/pengyejun/fastapi_gino ) |gino_starlette, pytest, gino_fastapi_demo, sqlalchemy, myapp, aioredis, alembic, poetry, urllib2 | -|[fastapi_microblog](https://github.com/mrworksome/fastapi_microblog ) |alembic, databases, core, sqlalchemy, microblog, myapp, user, passlib, fastapi_users | -|[fastapi_mock](https://github.com/superxuu/fastapi_mock ) |apis, yaml, common | -|[fastapi_model](https://github.com/Nathanlauga/fastapi_model ) |loguru, joblib | -|[fastapi_playground](https://github.com/Rurson/fastapi_playground ) |pony, db | -|[fastapi_preset](https://github.com/cln-m4rie/fastapi_preset ) |setuptools | -|[fastapi_router](https://github.com/christopherzimmerman/fastapi_router ) |fastapi_router, trimport, setuptools | -|[fastapi_serviceutils](https://github.com/skallfass/fastapi_serviceutils_template ) |pytest, requests, setuptools, toolz, loguru, fastapi_serviceutils, yaml, cookiecutter, sqlalchemy, databases | -|[fastapi_serviceutils_template](https://github.com/skallfass/fastapi_serviceutils_template ) |fastapi_serviceutils | -|[fastapi_stu](https://github.com/Thousandhack/fastapi_stu ) |aliyunsdkcore, jwt, sqlalchemy, passlib | -|[fastapi_template](https://github.com/ytxfate/fastapi_template ) |pymongo, redis, jwt, minio, project | -|[fastapi_todo_hex](https://github.com/josemlp91/fastapi_todo_hex ) |factory, toolz, pytest_factoryboy, tests, sqlalchemy, myapp, alembic, dotenv, databases, pytest, todolist | -|[fastbroker](https://github.com/cetanu/fastbroker ) |pkg_resources, ujson, fastbroker, jsonschema, setuptools | -|[fastrf](https://github.com/iancleary/fastrf ) |asgi_lifespan, pytest, fastrf, httpx | -|[fbd-backend](https://github.com/ElusiveSpirit/fbd-backend ) |redis, pytest_mock, celery, loguru, ujson, pytest, tests | -|[finance-api](https://github.com/rennerocha/finance-api ) |finance_api, dynaconf, pytest, requests | -|[first_fastapi](https://github.com/vittorduartte/first_fastapi ) |routes, ext, schemas, sqlalchemy, rules, models | -|[firstderm_demo](https://github.com/polyrand/firstderm_demo ) |requests | -|[foreign-subs](https://github.com/joe-eklund/foreign-subs ) |fsubs, setuptools, pymongo, typer, jwt, bson | -|[frontapp](https://github.com/Blasterai/frontapp ) |decorator, frontapp, requests, envparse, attr | -|[fullasync](https://github.com/lipengsh/fullasync ) |celery, tasks, core, api | -|[fullstack-fastapi-elasticsearch](https://github.com/cleobulo/fullstack-fastapi-elasticsearch ) |core, elasticsearch, db, models, api | -|[fuzzy-octo-funicular](https://github.com/mattkatz/fuzzy-octo-funicular ) |main | -|[gaia-fastapi-demo](https://github.com/muslax/gaia-fastapi-demo ) |email_validator, passlib, pymongo, sentry_sdk, motor, jwt, bson, emails | -|[gaki-server](https://github.com/shitangdama/gaki-server ) |alembic, jwt, sqlalchemy, myapp, passlib | -|[galicea-odoo-addons-ecosystem](https://github.com/galicea/galicea-odoo-addons-ecosystem ) |cryptography, werkzeug, jwcrypto, odoo, git | -|[game](https://github.com/jsandovalc/fake-news-game ) |basegame | -|[gateway-microservice](https://github.com/anforaProject/gateway-microservice ) |aiohttp, v1 | -|[gerenciador-tarefas](https://github.com/matheuspsouza/gerenciador-tarefas ) |gerenciador_tarefas | -|[gfw-tile-cache](https://github.com/wri/gfw-tile-cache ) |gino_starlette, mercantile, pytest, pendulum, async_lru, requests, shapely, cachetools, sqlalchemy, aenum | -|[gifter_api](https://github.com/zhanymkanov/gifter_api ) |pytest, jwt, sqlalchemy, tests, passlib | -|[gigscovery_backend](https://github.com/martijnboers/gigscovery_backend ) |functions, sklearn, bandsintown, spotipy | -|[gino-admin](https://github.com/xnuinside/gino-admin ) |sanic, pytest, click, jinja2, db, requests, passlib, expiring_dict, gino_admin, asyncpg, dsnparse, sqlalchemy_utils, gino, urllib3, aiofiles, yaml, sqlalchemy, sanic_jwt, sanic_jinja2 | -|[gino-starlette](https://github.com/python-gino/gino-starlette ) |requests, gino_fastapi_demo, asyncpg, gino, urllib3, importlib_metadata, sqlalchemy, alembic, pytest, click | -|[girandole](https://github.com/bartkl/girandole ) |beets, plugin, girandole, yaml | -|[girias.json](https://github.com/kvnol/girias.json ) |tinydb | -|[gitea-dispatcher](https://github.com/Trim21/gitea-dispatcher ) |httpx | -|[gke-cicd-sandbox](https://github.com/mana-ysh/gke-cicd-sandbox ) |exampleapp, pytest | -|[glittr-fastapi](https://github.com/kellischeuble/glittr-fastapi ) |glittr, sqlalchemy | -|[graph-server](https://github.com/ZettaAI/graph-server ) |pychunkedgraph, numpy | -|[graphql-python-server](https://github.com/apoveda25/graphql-python-server ) |env, gql, dotenv, schemas, ariadne, models, database, arango | -|[graphql-tutorial](https://github.com/jcremona/graphql-tutorial ) |schema, graphene | -|[grocery-stores-home-delivery](https://github.com/dz-experts/grocery-stores-home-delivery ) |db, app_factory, setuptools, crud, api, typer, sqlalchemy, myapp, alembic, constans, schemas, core, models | -|[guid_tracker](https://github.com/nwcell/guid_tracker ) |alembic, databases, aiocache, guid, pytest, sqlalchemy, sqlalchemy_utils, myapp | -|[hackaton-berlin-legal-tech-2020](https://github.com/jjanczur/hackaton-berlin-legal-tech-2020 ) |pytest, sklearn, joblib, nltk, loguru, cleaner, config, fastapi_skeleton, bs4 | -|[hello-world-fastapi](https://github.com/benhid/hello-world-fastapi ) |fastapp, setuptools, rich | -|[henry](https://github.com/jacksonhenry3/FAAS ) |infrastructure, interface, sqlalchemy | -|[heroku-google-translate-api](https://github.com/fawazahmed0/heroku-google-translate-api ) |googletrans | -|[hh_parser](https://github.com/Kuzyashin/hh_parser ) |passlib, aiohttp, tortoise, template, celery, jwt, emails | -|[home_recruiters](https://github.com/Mohamed-Kaizen/home_recruiters ) |users, pendulum, passlib, jobs, tortoise, typer, usernames, jwt, core, confusable_homoglyphs, username | -|[http-battle](https://github.com/MihaiAnei/http-battle ) |flask_restful, flask, python_flask | -|[hvilkenfisk](https://github.com/David-IL/hvilkenfisk ) |imutils, fish_utils, sklearn, h5py, cv2, keras, img_preprocess, model_utils | -|[iam_working](https://github.com/carlosporta/iam_working ) |iam_working | -|[iem-web-services](https://github.com/akrherz/iem-web-services ) |setuptools, pyiem, shapely, metpy, pytz, pygrib, pyproj, pandas, geopandas, pytest | -|[ihan-productizer-example](https://github.com/digitalliving/ihan-productizer-example ) |aiohttp, ujson, settings_local, settings | -|[image_capabilities_backend](https://github.com/alejgo06/image_capabilities_backend ) |PIL, cv2 | -|[image_classifier_backend](https://github.com/alejgo06/image_classifier_backend ) |PIL, cv2 | -|[image_detector_backend](https://github.com/alejgo06/image_detector_backend ) |PIL, torch, utils, torchvision, pycocotools, models, cv2 | -|[img-filter-api](https://github.com/RaRhAeu/img-filter-api ) |aiohttp, cv2, api, requests, pytest | -|[ingaia_app](https://github.com/higaooliveira/ingaia_app ) |pytest, sqlalchemy, resources, requests, config, spotipy, domain | -|[innovativeproject-photographers-portfolio](https://github.com/nokia-wroclaw/innovativeproject-photographers-portfolio ) |fastapi_mail, jwt, sqlalchemy, src, database, passlib | -|[inpainting_backen](https://github.com/kaikai03/inpainting_backen ) |tinydb | -|[introduction-to-async-await](https://github.com/ci42/introduction-to-async-await ) |unsync, unsyncable, colorama | -|[iter8-analytics](https://github.com/iter8-tools/iter8-analytics ) |analytics_namespace, requests, flask_restplus, setuptools, experiment_namespace, yaml, jsonschema, iter8_analytics, django, flask, requests_mock | -|[jjs](https://github.com/jjs-dev/jjs ) |bcrypt, pytest, api_models, pymongo, db_models, routes, auth, db_connect | -|[jobsearch_statistics](https://github.com/JobtechSwe/jobsearch_statistics ) |certifi, searchstatistics, elasticsearch | -|[json-fastapi](https://github.com/stocky37/json-fastapi ) |json_fastapi, tinydb, slugify, link_header, util | -|[juice-box](https://github.com/dannytannertantrum/juice-box ) |tests | -|[jupyter_fastapi](https://github.com/Zsailer/jupyter_fastapi ) |jupyter_server, tornado, hypothesis, pytest, jupyter_fastapi, hypothesis_jsonschema, setuptools | -|[k8s-traefik-example](https://github.com/Hedde/k8s-traefik-example ) |flask | -|[kartu-beckend](https://github.com/AntonKristiono/kartu-beckend ) |PIL, config, yaml, autocrop, routes, motor, bson, cv2 | -|[koalachat](https://github.com/therumbler/koalachat ) |koalachat, aiofiles | -|[koalastream](https://github.com/therumbler/koalastream ) |aiofiles, koalastream | -|[kritika](https://github.com/Egnod/kritika ) |alembic, sitri, slugify, sqlalchemy, myapp, kritika | -|[kubeflow-containers-desktop](https://github.com/StatCan/kubeflow-containers-desktop ) |tqdm, jupyter_core, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[kubernetes-experiments](https://github.com/richard-to/kubernetes-experiments ) |redis, alembic, sqlalchemy, myapp, passlib | -|[kuma](https://github.com/deepalikumar/sync_async_compare ) |bcrypt, docstring_parser, passlib, orjson, loguru, sqlalchemy, myapp, jupyter_client, alembic, databases, jwt, nbformat | -|[kvmail](https://github.com/la9ran9e/kvmail ) |tarantool, dotenv, settings | -|[lab_monitor](https://github.com/nutanix-japan/lab_monitor ) |pymongo, requests, schedule, client | -|[lagom](https://github.com/meadsteve/lagom ) |sybil, pytest, lagom, typing_extensions, tests, django, flask | -|[lang-python](https://github.com/tim-barnes/lang-python ) |submod2, worker_a, etcd3, rabbit, worker_b, optmod1, psutil, mongoengine, pika, test_pb2, grpc, google, optmod2, submod1, celery, flask, models, pytest | -|[league-manager](https://github.com/Project-SRC/league-manager ) |jwt, src, environs, passlib | -|[learn-kubernetes](https://github.com/quan-vu/learn-kubernetes ) |flask, flask_restful | -|[lgbsttracker_api](https://github.com/py4mac/lgbsttracker_api ) |lgbsttracker, lgbsttracker_api | -|[lightgbm-project-demo](https://github.com/raywu60kg/lightgbm-project-demo ) |psycopg2, sklearn, src, tests, ray | -|[linkalong-pre-inteview-task](https://github.com/pydevd/linkalong-pre-inteview-task ) |decouple, linkalong | -|[love-alarm](https://github.com/dl-eric/love-alarm ) |pymongo, redis, nexmo, jwt, boto3, bson, passlib | -|[maale-map-bot](https://github.com/kudanai/maale-map-bot ) |pyngrok, dotenv, discord, bots, viberbot, models, settings, fuzzywuzzy, telegram | -|[manageme-api](https://github.com/managemeapp/manageme-api ) |mangum, today_app, setuptools | -|[mangum-fastapi-aws-test](https://github.com/dan-danciu/mangum-fastapi-aws-test ) |mangum | -|[mars-rover](https://github.com/rSkogeby/mars-rover ) |models, views | -|[memefly-ds](https://github.com/Lambda-School-Labs/memefly-ds ) |wandb, memefly, requests, pymongo, decouple, api, tensorflow, dotenv, boto3, click | -|[metabot](https://github.com/vasyukvv42/metabot ) |metabot, requests, fastapi_metabot, setuptools, aiohttp, pymongo, help, typing_extensions, feedback, aioredis, vacations, slackers, motor, mockaioredis, bson, slack, pytest, httpx | -|[micro-data-lake](https://github.com/abxda/micro-data-lake ) |sklearn, newspaper, altair, airflow, sqlalchemy, IPython, minio, setproctitle | -|[microservices](https://github.com/hugosteixeira/microservices ) |requests | -|[mironov_blog_pwa](https://github.com/yuriymironov96/mironov_blog_pwa ) |alembic, dotenv, sqlalchemy, myapp, apps | -|[ml-project-template](https://github.com/raywu60kg/ml-project-template ) |psycopg2, src, tests, ray | -|[ml-workspace](https://github.com/DennisRasey/ml-workspace ) |jupyter_core, tqdm, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[modelo-fast-api](https://github.com/knienkotter/modelo-fast-api ) |pytest, gerenciador_tarefas | -|[moneyTransfer](https://github.com/williamsyb/moneyTransfer ) |faker, db, app_factory, passlib, apis, config, utils, main, sqlalchemy, auth, schemas, jwt, pytest | -|[mongodb_admin](https://github.com/ArtemZaitsev1994/mongodb_admin ) |trafaret_config, envparse, pymongo, base, motor, jwt, bson | -|[mri_image_reconstruction](https://github.com/Pradhy729/mri_image_reconstruction ) |utils, config | -|[msys2-web](https://github.com/msys2/msys2-web ) |pytest, pgpdump, jinja2, fastapi_etag, respx, httpx | -|[musixfy_service](https://github.com/divyam234/musixfy_service ) |requests, Cryptodome | -|[mv-backend](https://github.com/Sreerajta/mv-backend ) |cassandra, requests, passlib, redis, fnc, global_config, sqlalchemy, jwt, greenstalk | -|[mvp-metric](https://github.com/DjaPy/mvp-metric ) |databases, sqlalchemy, dateutil | -|[mvs_eland_api](https://github.com/rl-institut/mvs_eland_api ) |celery, pytest, worker, mvs_eland_tool, sphinx_rtd_theme | -|[my-notes-app](https://github.com/jgabriel1/my-notes-app ) |databases, pytest, jwt, sqlalchemy, passlib | -|[mychef](https://github.com/logan-connolly/mychef ) |spacy, requests, scrapy, tqdm, aiohttp, asyncpg, loguru, orm, reddit, scraper, sqlalchemy, databases, praw, pytest, jsonlines, bs4 | -|[nasa_neo](https://github.com/cmmarti/nasa_neo ) |repo, requests | -|[nereid](https://github.com/Geosyntec/nereid ) |nereid, pytest, redis, typing_extensions, numpy, matplotlib, scipy, yaml, pint, celery, pandas | -|[ners](https://github.com/cedricconol/ners ) |utils, config | -|[netpalm](https://github.com/tbotnz/netpalm ) |xmltodict, rq, netmiko, pytest, jinja2, backend, netpalm_pinned_worker, requests, jinja2schema, redis, lxml, tests, jsonschema, ncclient, routers, napalm | -|[next-word-sentence-pred-api](https://github.com/rakesh4real/next-word-sentence-pred-api ) |tree, sqlalchemy, models, database | -|[nile-api](https://github.com/mattgeiger/nile-api ) |alembic, bcrypt, databases, jwt, sqlalchemy, api | -|[nlp_api](https://github.com/rdenadai/nlp_api ) |nltk, decouple, spacy, utils | -|[nmdc-server](https://github.com/microbiomedata/nmdc-server ) |pytest, faker, factory, requests, setuptools, pkg_resources, sqlalchemy, alembic, nmdc_server | -|[nomine](https://github.com/gzzo/nomine ) |graphql_sqlalchemy, ariadne, sqlalchemy, nomine, graphql | -|[nurse-schedule](https://github.com/csabex94/nurse-schedule ) |spital_routes, mongoengine, nurse_routes, jwt, models, utils, passlib | -|[oasis](https://github.com/instedd/oasis ) |users, bcrypt, pytest, stories, requests, mysql, flask_cors, sqlalchemy, myapp, sigfig, database, jenkspy, alembic, flask, auth, jwt, router, emails | -|[ocfapi](https://github.com/nikhiljha/ocfapi ) |ocflib | -|[oreMeet](https://github.com/mfortini/oreMeet ) |ics, worker | -|[owi_Result-Collector](https://github.com/JensGe/owi_Result-Collector ) |sqlalchemy, tests | -|[page-visitor-counter](https://github.com/trapflag/page-visitor-counter ) |redis | -|[paste.bin](https://github.com/magiskboy/paste.bin ) |pymongo, redis, gridfs, bson | -| |PIL, PyPDF4 | -|[perfume-ai](https://github.com/gurutaka/perfume-ai ) |PIL, torchvision, predict, cv2, torch | -|[persistent-identifier-service](https://github.com/OpertusMundi/persistent-identifier-service ) |ompid, yaml, sqlalchemy | -|[personal-learning](https://github.com/hoangthienan95/personal-learning ) |pyimagesearch, sklearn, calculator, cv2, keras | -|[pi-camera-hardware-server](https://github.com/NSnietol/pi-camera-hardware-server ) |loguru, picamera, requests, src | -|[piccolo_api](https://github.com/piccolo-orm/piccolo_api ) |setuptools, asyncpg, test_session, piccolo, livereload, jwt, piccolo_api, asgiref | -|[plarin_task](https://github.com/jjoskey/plarin_task ) |pymongo, main, employees, pytest, faker, bson, settings | -|[plonkowski.b-gmail.com](https://github.com/Raroog/plonkowski.b-gmail.com ) |main | -|[plotly-graphene](https://github.com/mdpham/plotly-graphene ) |pymongo, mutation, graphene, schema, minio, loompy, bson, query, minio_client | -|[pneumoniadetection](https://github.com/aalikadic/pneumoniadetection ) |kaggle, PIL, classifier, keras | -|[pol](https://github.com/RedHatInsights/policies-notifications ) |pytest, requests, aioresponses, etc, orjson, aiohttp, redis, sentry_sdk, tests, sqlalchemy, myapp, aioredis, pytz, alembic, databases, aiologger | -|[policies-notifications](https://github.com/RedHatInsights/policies-notifications ) |pytest, jinja2, aiokafka, aiohttp, asyncpg, prometheus_client, apscheduler, gino, tests, sqlalchemy, myapp, starlette_prometheus, alembic | -|[poll-app](https://github.com/jgabriel1/poll-app ) |pymongo, dotenv, selenium, pytest, flask_testing, tests, config | -|[ppm-telegram-bot](https://github.com/piterpy-meetup/ppm-telegram-bot ) |pip, aiogram, fastapi_security_telegram_webhook, ppm_telegram_bot | -|[ppr](https://github.com/bcgov/ppr ) |pytest, endpoints, requests, setuptools, sentry_sdk, freezegun, config, main, repository, sqlalchemy, myapp, datedelta, pytz, alembic, dotenv, schemas, models | -|[practical-python](https://github.com/sudharsan2020/practical-python ) |redis, celery_with_fastapi, celery | -|[programs](https://github.com/deta/programs ) |deta, jinja2, colors, svgs, passlib | -|[projects](https://github.com/hungd25/projects ) |sklearn, lrsgd, utils, numpy, matplotlib, nose, models_partc, src, phonenumbers | -|[property-prediction](https://github.com/solanyn/property-prediction ) |botocore, psycopg2, pytest, catboost, sklearn, hello_world, boto3, requests | -|[proxmox-slack-bot](https://github.com/PlenusPyramis/proxmox-slack-bot ) |slack_model, requests, slack | -|[proxy-checker](https://github.com/infaticaio/proxy-checker ) |aiohttp, main, checker, aiosocks | -|[py-cidemia-security](https://github.com/cidemia/py-cidemia-security ) |werkzeug, requests, setuptools, passlib, yaml, cidemiasecurity, jwt | -|[pyBets](https://github.com/GabrielCappelli/pyBets ) |error_messages, db_models, views, sqlalchemy, application, database, app_logging, models, services, pytest | -|[pyapi](https://github.com/srghosh29/pyapi ) |apis | -|[pycon2020-FastAPI](https://github.com/gloriasky/pycon2020-FastAPI ) |schemas, sqlalchemy, models, api, database | -|[pyctuator](https://github.com/SolarEdgeTech/pyctuator ) |werkzeug, multidict, requests, aiohttp, redis, tests, psutil, pyctuator, sqlalchemy, flask, pytest | -|[pydantic-ddd-exploration](https://github.com/allgreed/pydantic-ddd-exploration ) |sqlalchemy, src | -|[pyml](https://github.com/dockerian/pyml ) |PIL, pytest, setuptools, gevent, h5py, tests, numpy, dateutil, matplotlib, scipy, mock, connexion, yaml, google, jsonpickle, flask, ml, asgiref | -|[pypis](https://github.com/jurelou/pypis ) |packaging, setuptools, asyncpg, loguru, pkg_resources, sqlalchemy, stdlib_list, dynaconf, pypis, httpx | -|[python](https://github.com/jijinggang/test_python ) |requests, requests_html, unidecode, lxml, openpyxl, send_mail, download_util, formatting, settings, templates, flask | -|[python-api-template](https://github.com/mana-ysh/python-api-template ) |pytest | -|[python-asyncio-crud](https://github.com/aleimu/python-asyncio-crud ) |sanic, six, uvloop, muggle_ocr, redis, flask_sqlalchemy, aiomysql, sqlalchemy, aioredis, flask | -|[python-crash-course](https://github.com/cyberinsane/python-crash-course ) |tinydb, schema, pandas, requests | -|[python-deployment-samples](https://github.com/edisga/python-deployment-samples ) |aiohttp, webtest, django, pyramidsite, flask, pyramid, flask_cors, my_app, setuptools, other_app | -|[python-fastapi-hex-todo](https://github.com/GArmane/python-fastapi-hex-todo ) |pytest, faker, factory, passlib, toolz, asyncpg, pytest_factoryboy, tests, sqlalchemy, myapp, alembic, dotenv, databases, jwt, todolist | -|[python-graphql](https://github.com/tsungchih/python-graphql ) |graphene, aiohttp, loguru, ujson, psutil, graphql | -|[python-ml-service-template](https://github.com/paramoshin/python-ml-service-template ) |yaml, joblib, starlette_prometheus | -|[python-playground](https://github.com/tgmti/python-playground ) |flask_restful, flask, sqlalchemy | -|[python-poetry-docker-example](https://github.com/michael0liver/python-poetry-docker-example ) |pytest | -|[python-private-service-layout](https://github.com/U-Company/python-private-service-layout ) |fire, loguru, prometheus_client, pytest, vault_client, info, clients, tests, setuptools | -|[python_benchmark](https://github.com/T4D3K/python_benchmark ) |fastapi_frm, locust, sqlalchemy, tortoise, falcon, gino, falcon_frm | -|[python_common_tools](https://github.com/CheungChan/python_common_tools ) |requests, setuptools, redis, python_common_tools, paramiko, stackprinter, DBUtils, pymysql | -|[python_fastapi](https://github.com/playwhyyza/python_fastapi ) |jwt, passlib | -|[qa-api](https://github.com/venuraja79/qa-api ) |elasticapm, controller, haystack, config | -|[qhub-home](https://github.com/Quansight/qhub-home ) |toml, flit, setuptools | -|[qr-generator](https://github.com/gosha20777/qr-generator ) |qrcode | -|[rakm](https://github.com/emanuelaguna/rakm ) |pytest, requests, aiohttp, asyncache, invoke, asyncmock, tests, dateutil, cachetools, async_asgi_testclient, async_generator, dotenv | -|[random_projects](https://github.com/thepartisan101/random_projects ) |flask_restful, graphene, extraction, selenium, flask, flask_graphql, schema, sqlalchemy, requests | -|[recommender_fastapi](https://github.com/gjorgjinac/recommender_fastapi ) |repository, pybreaker, helper, sqlalchemy, default_ad_listener, requests, web, defaults | -|[recommender_server](https://github.com/gjorgjinac/recommender_server ) |repository, pybreaker, helper, sqlalchemy, default_ad_listener, requests, web, defaults | -|[ref-final-project-backend](https://github.com/Reyvel/ref-final-project-backend ) |faust, kafka, msgpack, settings, utils | -|[repost-fastapi](https://github.com/pckv/repost-fastapi ) |dotenv, jwt, sqlalchemy, repost, passlib | -|[responsive-layout-part](https://github.com/lmacchiavelli/responsive-layout-part ) |PIL | -|[rest_api_docker_mongo_aws](https://github.com/RodrigoMachado9/rest_api_docker_mongo_aws ) |pymongo, six, bottle_resource, beartype, bottle, spacy, passlib | -|[restbot](https://github.com/cwerner/restbot ) |restbot, loguru, pytest, joblib | -|[reternal-backend](https://github.com/d3vzer0/reternal-backend ) |pymongo, redis, flask_restful, flask_jwt_extended, sigma, workers, mongoengine, yaml, environment, database, pytz, flask_socketio, celery, flask, jwt, bson | -|[reverse-geocoder](https://github.com/claws/reverse-geocoder ) |databases, sqlalchemy, geoalchemy2 | -|[rjgtoys-xc](https://github.com/bobgautier/rjgtoys-xc ) |pytest, jinja2, requests, rjgtoys, apierrors, sphinx, sphinx_autodoc_typehints | -|[rn-fastapi-app](https://github.com/cloudeyes/rn-fastapi-app ) |sample, psycopg2, fastapi_login, MySQLdb, sqlalchemy, fastalchemy, passlib | -|[runn](https://github.com/alex-2201/runn ) |requests, passlib, tests, utils, sqlalchemy, jwt, logzero, pytest, emails | -|[sauti-fastapi](https://github.com/taycurran/sauti-fastapi ) |dotenv, pstgres, sqlalchemy | -|[sauti-monitor-ds-api](https://github.com/taycurran/sauti-monitor-ds-api ) |dotenv, sqlalchemy | -|[scaling-spoon](https://github.com/bloomingmath/scaling-spoon ) |email_validator, pony, bcrypt, pytest, extensions, passlib, pymongo, selenium, blinker, main, async_asgi_testclient, dotenv, motor, schemas, routers, bson, models | -|[sensehat-fastapi](https://github.com/cmlccie/sensehat-fastapi ) |sense_hat, senseapi | -|[server-open-alpr](https://github.com/NSnietol/server-open-alpr ) |openalpr, loguru, src | -|[serverless-fastapi-cdk](https://github.com/jaehyeon-kim/serverless-fastapi-cdk ) |mangum, resources, src, aws_cdk | -|[show-tell-api](https://github.com/team-eyespace/show-tell-api ) |nltk, PIL, TensorBoardCaption, NIC, evaluate, flask, jwt, preprocessing, keras, utils | -|[signal-cli-rest-api](https://github.com/SebastianLuebke/signal-cli-rest-api ) |pyqrcode, requests, signal_cli_rest_api | -|[simple-kp](https://github.com/ranking-agent/simple-kp ) |aiosqlite, pytest, simple_kp, reasoner_pydantic, data, setuptools | -|[simple-messenger](https://github.com/IvanDubrowin/simple-messenger ) |server | -|[simple-report-data-table-vuetify](https://github.com/shizidushu/simple-report-data-table-vuetify ) |bcrypt, dotenv, mongoengine, jwt, pypandoc, bson, casbin, passlib | -|[simpleapp-aws-fargate](https://github.com/kbaafi/simpleapp-aws-fargate ) |controllers, databases, sqlalchemy, boto3, data, config, services, settings, requests | -|[siso-library](https://github.com/nfowl/siso-library ) |databases, sqlalchemy | -|[sklearn-docker-api](https://github.com/crocopie/sklearn-docker-api ) |sklearn, service, joblib | -|[slowapi](https://github.com/laurentS/slowapi ) |limits, redis, slowapi, tests, hiro, mock | -|[smart-social-distancing](https://github.com/neuralet/smart-social-distancing ) |openvino, tflite_runtime, invoke, ui, tools, wget, scipy, libs | -|[sms_gateway](https://github.com/arxell/sms_gateway ) |passlib, aiohttp, sentry_sdk, aiopg, sqlalchemy, myapp, grpc, google, alembic, psycopg2, jwt, click, grpclib | -|[social-insights](https://github.com/dsc-umass/social-insights ) |sklearn, requests, joblib, nltk, tweepy, numpy, firebase_admin, twitter_credentials, scipy, spellchecker, get_tweets, google, flask, keras, xgboost, suggest | -|[sociallyhigh](https://github.com/NikhilSharmay/sociallyhigh ) |pkg_resources, sociallyhigh | -|[sparky](https://github.com/perfecto25/sparky ) |sparky, config | -|[speechRecognition_api](https://github.com/X-CCS/speechRecognition_api ) |librosa, sklearn, aukit, aip, Django_jianlong, videototextapp, videoaddsubtitleapp, myapp, IPython, my_app, other_app, djcelery, django, celery, video2audio_noiseReduction, keras | -|[start-fastapi](https://github.com/utmhikari/start-fastapi ) |model, middleware, controller, service, application, dotenv | -|[startapp](https://github.com/marlin-dev/startapp ) |extensions, marshmallow, setuptools, passlib, flask_env, flask_jwt_extended, sentry_sdk, flask_sqlalchemy, sqlalchemy_utils, gino, sqlalchemy, flask_marshmallow, takeaway, settings, flask_migrate, starlette_prometheus, flask, app_init, core| -|[statsfy](https://github.com/skmatz/statsfy ) |spotifier | -|[stock-tracker](https://github.com/jgabriel1/stock-tracker ) |pymongo, aiohttp, dotenv, pytest, jwt, server, requests, passlib | -|[stores](https://github.com/dz-experts/grocery-stores-home-delivery ) |stores, pytest, api, util | -|[storyboard_renderer](https://github.com/Weltii/storyboard_renderer ) |render_job, layouts, bridge, statics, layout_bridge, utils | -|[summaries](https://github.com/bradstimpson/summaries ) |nltk, newspaper, pytest, tortoise | -|[summarize-api](https://github.com/gary23w/summarize-api ) |nltk, newspaper, pytest, tortoise | -|[surfacescan](https://github.com/vbogretsov/surfacescan ) |networkx, pytest, faker, atomiclong, locust, surfacescan, pkg_resources, tests | -|[sweetHome](https://github.com/zkity/sweetHome ) |serial, lib | -|[sync_async_compare](https://github.com/deepalikumar/sync_async_compare ) |blog, faker, marshmallow, flask_sqlalchemy, sqlalchemy_utils, flask_apispec, commands, sqlalchemy, myapp, resources, settings, flask_migrate, alembic, dotenv, flask, databases, pytest | -|[takeAction-Backend](https://github.com/AndyKChen/takeAction-Backend ) |ml_controller, googlesearch, sklearn, getURL, bs4, keras, utils, numpy | -|[tariffengineapi](https://github.com/SofieneEnnaoui/tariffengineapi ) |memory_profiler, redis, numba, tariffs_modules, tests, api_fastapi, memory | -|[task_manager](https://github.com/VladOsiichuk/task_manager ) |passlib, gino, sqlalchemy, myapp, alembic, jwt | -|[taskriptor-web](https://github.com/nasuka/taskriptor-web ) |alembic, sqlalchemy, myapp | -|[tdd-fastapi-template](https://github.com/markusntz/tdd-fastapi-template ) |fastapi_tdd_docker, pytest, tortoise | -|[teached](https://github.com/Mohamed-Kaizen/teached ) |pytest, pendulum, requests, passlib, loguru, tortoise, teached, typer, importlib_metadata, nox, usernames, dropbox, jwt, confusable_homoglyphs, username | -|[techsoulai_backend](https://github.com/zhanymkanov/techsoulai_backend ) |pytest, jamspell, jwt, sqlalchemy, pymystem3, passlib | -|[temperature-web](https://github.com/sj175/temperature-web ) |board, dotenv, adafruit_dht, boto3, requests | -|[test_fastapi](https://github.com/leblancfg/test_fastapi ) |PIL, magic, fastapi_versioning, autocrop, cv2, requests, google | -|[test_shop](https://github.com/Ayaks7/test_shop ) |requests, passlib, peewee, user_orders, my_app, other_app, django, yoyo, catalog, auth, jwt, pytest, peewee_async, tastypie | -|[testfastapi](https://github.com/18438655078/testfastapi ) |tortoise, boto3 | -|[todo-list-fastapi](https://github.com/mcauto/todo-list-fastapi ) |aiofiles, pytest, jwt, sqlalchemy, src, passlib | -|[todoapp](https://github.com/prashunchitkr/todoapp ) |alembic, jwt, sqlalchemy, myapp, passlib | -|[trainee_mi](https://github.com/goncharov-roman/trainee_mi ) |pymongo | -|[transactions_api](https://github.com/txemac/transactions_api ) |pytest, sqlalchemy, sqlalchemy_utils, database | -|[transformers](https://github.com/raphtlw/transformers ) |aitextgen | -|[translator](https://github.com/eightytwo/translator ) |translator, schemas, api, httpx | -|[try-fast-api](https://github.com/kayshcache/try-fast-api ) |dotenv | -|[users-service](https://github.com/falled10/users-service ) |werkzeug, pytest, oauth2client, sqlalchemy_utils, api, config, main, repository, humps, sqlalchemy, myapp, alembic, jwt, routers, authlib, services | -|[uvicorn-gunicorn-fastapi](https://github.com/dshadow/uvicorn-gunicorn-fastapi-docker ) |test_utils, docker, requests, pytest | -|[vollmacht](https://github.com/ogeller/vollmacht ) |fitz | -|[volunteer-database](https://github.com/crowdsourcemedical/volunteer-database ) |alembic, pytest, jwt, sqlalchemy, myapp, passlib | -|[wamedex2](https://github.com/gwf-uwaterloo/wamedex2 ) |pytest, pyserini, hnswlib, pkg_resources, helper, freezegun, dateparser | -|[wazo-router-calld](https://github.com/wazo-platform/wazo-router-calld ) |wazo_router_calld, consul, click, sqlalchemy, setuptools | -|[web-api](https://github.com/aroio/web-api ) |exceptions, yaml, auth, jwt, routers, models, data | -|[web-avatarify](https://github.com/charlielito/web-avatarify ) |PIL, afy, skimage, moviepy, requests, imageio, tqdm, animate, sync_batchnorm, ffmpeg, torch, matplotlib, scipy, face_alignment, yaml, python_path, cv2, modules | -|[web-frameworks-benchmark](https://github.com/kesha1225/web-frameworks-benchmark ) |muffin, sanic, pyramid, falcon, requests, bottle, aiohttp, bobo, quart, hug, japronto, request_bench, my_app, other_app, django, flask, cherrypy, kumquat, freezy | -|[web_speedtest](https://github.com/Kulikovpavel/web_speedtest ) |flask | -|[weblink-downloader](https://github.com/cortexin/weblink-downloader ) |passlib, asyncpg, tests, link_downloader, databases, pytest, httpx | -|[xo_back](https://github.com/octomen/xo_back ) |pytest, api | -|[xpublish](https://github.com/xarray-contrib/xpublish ) |xarray, pytest, cachey, xpublish, setuptools, pkg_resources, h5py, netCDF4, numcodecs, dask, zarr | -|[xraysink](https://github.com/garyd203/xraysink ) |aiohttp, jsonpickle, xraysink, async_asgi_testclient, aws_xray_sdk, requests, pytest | -|[yappfm-backend](https://github.com/yappfm/yappfm-backend ) |alembic, sqlalchemy, myapp, yappfm, gino | -|[yatsm](https://github.com/danielmartins/yatsm ) |dramatiq, walrus, pytest, pendulum, passlib, apscheduler, typer, assertpy, pytz, jwt, yatsm | -|[yumemi_intern_API](https://github.com/tkrk1209/yumemi_intern_API ) |aiohttp, sqlalchemy, myapp, google, alembic | -|[zo](https://github.com/wazo-platform/wazo-router-calld ) |PIL, requests, ssdb, setuptools, loguru, urllib3, zo, munch | +The instructions below assume you have [pyenv](https://github.com/pyenv/pyenv) installed. +If you don't, use any other method to create a virtual environment +and install Python 3.11.4. -## Contributing +- Install Python 3.11.4 -Pull requests are welcome. +```shell +pyenv install 3.11.4 +``` + +- Create a virtual environment + +```shell +pyenv virtualenv 3.11.4 awesome-fastapi-projects +``` + +- Activate the virtual environment + +```shell +pyenv local awesome-fastapi-projects +``` + +#### Install dependencies and pre-commit hooks + +There is a `Makefile` with some useful commands to help you get started. +For available commands, run `make help`. To install dependencies and pre-commit hooks, run: + +```shell +make +``` + +#### Frontend + +The frontend is built with [React](https://reactjs.org/) and [Next.js](https://nextjs.org/). +It is being statically built and served on GitHub Pages: https://Kludex.github.io/awesome-fastapi-projects/ + +To run the frontend locally, you need to install [Node.js](https://nodejs.org/en/) and [pnpm](https://pnpm.io/). +The node version is specified in the `.node-version` file. +To easily manage the node version, you can use [fnm](https://github.com/Schniz/fnm). +Then, run the following commands: + +```shell +make front +``` + +This will install the dependencies and start the development server. +The frontend will be available at http://localhost:3000. diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 0000000..c396e5b --- /dev/null +++ b/alembic.ini @@ -0,0 +1,107 @@ +# A generic, single database configuration. +[alembic] +# path to migration scripts +script_location = migrations + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to migrations/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +sqlalchemy.url = sqlite+aiosqlite:///db.sqlite3 + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..752c57c --- /dev/null +++ b/app/__init__.py @@ -0,0 +1 @@ +"""A web application for indexing the projects using FastAPI.""" diff --git a/app/conftest.py b/app/conftest.py new file mode 100644 index 0000000..9f5ba2c --- /dev/null +++ b/app/conftest.py @@ -0,0 +1,105 @@ +"""The application-level conftest.""" +import asyncio +import contextlib +from collections.abc import AsyncGenerator, Generator +from typing import Literal + +import pytest +import stamina +from dirty_equals import IsList +from pytest_mock import MockerFixture +from sqlalchemy.ext.asyncio import AsyncConnection, AsyncSession + +from app.database import Dependency, Repo +from app.factories import DependencyCreateDataFactory +from app.source_graph.factories import SourceGraphRepoDataFactory +from app.source_graph.models import SourceGraphRepoData + + +@pytest.fixture(autouse=True, scope="session") +def anyio_backend() -> Literal["asyncio"]: + """Use asyncio as the async backend.""" + return "asyncio" + + +@pytest.fixture(autouse=True, scope="session") +def _deactivate_retries() -> None: + """Deactivate stamina retries.""" + stamina.set_active(False) + + +@pytest.fixture(autouse=True) +def _test_db(mocker: MockerFixture) -> None: + """Use the in-memory database for tests.""" + mocker.patch("app.database.DB_PATH", "") + + +@pytest.fixture(scope="session") +def event_loop( + request: pytest.FixtureRequest, +) -> Generator[asyncio.AbstractEventLoop, None, None]: + """ + Create an instance of the default event loop for a session. + + An event loop is destroyed at the end of the test session. + https://docs.pytest.org/en/6.2.x/fixture.html#fixture-scopes + """ + with contextlib.closing(loop := asyncio.get_event_loop_policy().get_event_loop()): + yield loop + + +@pytest.fixture(scope="session") +async def test_db_connection() -> AsyncGenerator[AsyncConnection, None]: + """Use the in-memory database for tests.""" + from app.database import Base, engine + + try: + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.drop_all) + await conn.run_sync(Base.metadata.create_all) + yield conn + finally: + # for AsyncEngine created in function scope, close and + # clean-up pooled connections + await engine.dispose() + + +@pytest.fixture() +async def test_db_session( + test_db_connection: AsyncConnection, +) -> AsyncGenerator[AsyncSession, None]: + """Use the in-memory database for tests.""" + from app.uow import async_session_uow + + async with async_session_uow() as session: + yield session + + +@pytest.fixture() +async def some_repos( + test_db_session: AsyncSession, + source_graph_repo_data_factory: SourceGraphRepoDataFactory, + dependency_create_data_factory: DependencyCreateDataFactory, +) -> list[Repo]: + """Create some repos.""" + source_graph_repos_data: list[ + SourceGraphRepoData + ] = source_graph_repo_data_factory.batch(10) + assert source_graph_repos_data == IsList(length=10) + repos = [ + Repo( + url=str(source_graph_repo_data.repo_url), + description=source_graph_repo_data.description, + stars=source_graph_repo_data.stars, + source_graph_repo_id=source_graph_repo_data.repo_id, + dependencies=[ + Dependency(**dependency_create_data.model_dump()) + for dependency_create_data in dependency_create_data_factory.batch(5) + ], + ) + for source_graph_repo_data in source_graph_repos_data + ] + test_db_session.add_all(repos) + await test_db_session.flush() + await asyncio.gather(*[test_db_session.refresh(repo) for repo in repos]) + return repos diff --git a/app/database.py b/app/database.py new file mode 100644 index 0000000..c555d35 --- /dev/null +++ b/app/database.py @@ -0,0 +1,107 @@ +""" +Database models and session. + +The database is a SQLite database, and is stored in the root +of the project as `db.sqlite3`. + +The database is managed using Alembic, and migrations +are stored in the `migrations/` directory. + +The module defines the following models: + +- `Repo`: A repository that is being tracked. +- `Dependency`: A dependency of a repository. +- `RepoDependency`: A relationship between a repository and a dependency. + +The database is accessed asynchronously using SQLAlchemy's async API. +""" +from collections.abc import AsyncGenerator +from pathlib import PurePath +from typing import Final + +from sqlalchemy import BigInteger, ForeignKey, MetaData, String, Text, UniqueConstraint +from sqlalchemy.ext.asyncio import ( + AsyncAttrs, + AsyncEngine, + AsyncSession, + async_sessionmaker, + create_async_engine, +) +from sqlalchemy.orm import ( + Mapped, + declarative_base, + mapped_column, + relationship, +) + +DB_PATH: Final[PurePath] = PurePath(__file__).parent.parent / "db.sqlite3" + +SQLALCHEMY_DATABASE_URL: Final[str] = f"sqlite+aiosqlite:///{DB_PATH}" + +engine: Final[AsyncEngine] = create_async_engine(SQLALCHEMY_DATABASE_URL) + +async_session_maker: Final[async_sessionmaker[AsyncSession]] = async_sessionmaker( + engine, expire_on_commit=False, autoflush=False, autocommit=False +) + +metadata = MetaData( + naming_convention={ + "ix": "ix_%(table_name)s_%(column_0_N_name)s ", + "uq": "uq_%(table_name)s_%(column_0_N_name)s ", + "ck": "ck_%(table_name)s_%(constraint_name)s ", + "fk": "fk_%(table_name)s_%(column_0_N_name)s_%(referred_table_name)s", + "pk": "pk_%(table_name)s", + } +) + + +async def get_async_session() -> AsyncGenerator[AsyncSession, None]: + """Get an async session.""" + async with async_session_maker() as session: + yield session + + +Base = declarative_base(metadata=metadata, cls=AsyncAttrs) + + +class Repo(Base): + """A repository that is being tracked.""" + + __tablename__ = "repo" + id: Mapped[int] = mapped_column(primary_key=True) + url: Mapped[str] = mapped_column(nullable=False, unique=True) + description: Mapped[str] = mapped_column(Text, nullable=False) + stars: Mapped[int] = mapped_column(BigInteger, nullable=False) + source_graph_repo_id: Mapped[int | None] = mapped_column( + BigInteger, nullable=True, unique=True + ) + dependencies: Mapped[list["Dependency"]] = relationship( + "Dependency", secondary="repo_dependency", back_populates="repos" + ) + last_checked_revision: Mapped[str | None] = mapped_column( + String(255), nullable=True + ) + __table_args__ = (UniqueConstraint("url", "source_graph_repo_id"),) + + +class Dependency(Base): + """A dependency of a repository.""" + + __tablename__ = "dependency" + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] = mapped_column(String(255), nullable=False, unique=True) + repos: Mapped[list["Repo"]] = relationship( + "Repo", secondary="repo_dependency", back_populates="dependencies" + ) + + +class RepoDependency(Base): + """A relationship between a repository and a dependency.""" + + __tablename__ = "repo_dependency" + repo_id: Mapped[int] = mapped_column( + ForeignKey(Repo.id, ondelete="CASCADE"), primary_key=True + ) + dependency_id: Mapped[int] = mapped_column( + ForeignKey(Dependency.id, ondelete="CASCADE"), primary_key=True + ) diff --git a/app/dependencies.py b/app/dependencies.py new file mode 100644 index 0000000..8d159ac --- /dev/null +++ b/app/dependencies.py @@ -0,0 +1,149 @@ +"""Dependencies parsing.""" +import asyncio +import subprocess +from collections.abc import Sequence + +import aiofiles.tempfile +import stamina +from loguru import logger + +from app.database import Repo +from app.models import DependencyCreateData +from app.types import RevisionHash + + +async def run_command(*cmd: str, cwd: str | None = None) -> str: + """ + Run the given command in a subprocess and return the stdout as plain text. + + :param cmd: The command to run. + :param cwd: The working directory to run the command in. + :return: The stdout result + """ + process = await asyncio.create_subprocess_exec( + *cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + cwd=cwd, + ) + + stdout, stderr = await process.communicate() + + if process.returncode != 0: + raise RuntimeError( + f"Command '{cmd}' failed with exit code '{process.returncode}':\n" + f"[stdout]: '{stdout.decode()}'\n" + f"[stderr]: '{stderr.decode()}'" + ) + + return stdout.decode() + + +async def acquire_dependencies_data_for_repository( + repo: Repo, +) -> tuple[RevisionHash, list[DependencyCreateData]]: + """ + Acquire dependencies for the given repository. + + The function will use the "third-party-imports" tool to + parse the third-party dependencies of the repository. + + Since this tool has been written in Rust and is basically + a CLI tool, the parsing will happen is a subprocess. + + :param repo: A repository for which to return the dependencies. + :return: The dependencies data required to create the dependencies in the DB. + """ + logger.info( + "Acquiring the dependencies data for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + async with aiofiles.tempfile.TemporaryDirectory() as directory: + # Clone the repository + logger.info( + "Cloning the repo with id {repo_id} into the directory {directory}.", + repo_id=repo.id, + directory=directory, + enqueue=True, + ) + await run_command( + "git", + "clone", + "--depth", + "1", + repo.url, + directory, + ) + + # Get the latest commit hash + logger.info( + "Getting the latest commit hash for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + revision: str = await run_command( + "git", + "rev-parse", + "HEAD", + cwd=directory, + ) + + if repo.last_checked_revision == revision: + # Assume there are no new dependencies to return + # since all the repo dependencies have already + # been parsed. + logger.info( + "The repo with id {repo_id} has already been updated.", + repo_id=repo.id, + enqueue=True, + ) + return RevisionHash(revision), [] + + # Parse the dependencies + async for attempt in stamina.retry_context(on=RuntimeError, attempts=3): + with attempt: + logger.info( + "Parsing the dependencies for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + dependencies: str = await run_command( + "third-party-imports", + directory, + ) + if dependencies: + logger.info( + "Successfully parsed the dependencies for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + # Split the dependencies by new line + dependencies_list: Sequence[str] = dependencies.split("\n") + # Drop the first two lines (the info lines) + dependencies_list = ( + dependencies_list[2:] if len(dependencies_list) > 2 else [] + ) + logger.info( + "Found {count} dependencies for the repo with id {repo_id}.", + count=len(dependencies_list), + repo_id=repo.id, + enqueue=True, + ) + else: + logger.info( + "No dependencies found for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + dependencies_list = [] + return ( + RevisionHash(revision), + [ + DependencyCreateData( + name=dependency.strip(), + ) + for dependency in dependencies_list + if dependency.strip() + ], + ) diff --git a/app/factories.py b/app/factories.py new file mode 100644 index 0000000..9a8b48f --- /dev/null +++ b/app/factories.py @@ -0,0 +1,12 @@ +"""Factories for creating models for testing.""" +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.pytest_plugin import register_fixture + +from app.models import DependencyCreateData + + +@register_fixture +class DependencyCreateDataFactory(ModelFactory[DependencyCreateData]): + """Factory for creating DependencyCreateData.""" + + __model__ = DependencyCreateData diff --git a/app/index.py b/app/index.py new file mode 100644 index 0000000..6b4a6cd --- /dev/null +++ b/app/index.py @@ -0,0 +1,104 @@ +""" +Create repos and dependencies indexes. + +This script creates can create two indexes: + +- ``repos_index.json``: Contains all the repositories and their dependencies. +- ``dependencies_index.json``: Contains all the dependencies and the + repositories that depend on them. + +The indexes are used by the frontend to display the data and perform searches. +""" +import asyncio +import json +from pathlib import Path +from typing import Final + +import aiofiles +import sqlalchemy.orm +import typer + +from app.database import Dependency, Repo +from app.models import DependencyDetail, RepoDetail +from app.uow import async_session_uow + +#: The path to the repos index file. +REPOS_INDEX_PATH: Final[Path] = Path(__file__).parent.parent / "repos_index.json" +#: The path to the dependencies index file. +DEPENDENCIES_INDEX_PATH: Final[Path] = ( + Path(__file__).parent.parent / "dependencies_index.json" +) + +app = typer.Typer() + + +async def create_repos_index() -> None: + """ + Create repos_index.json file from database. + + :return: None + """ + async with async_session_uow() as session, aiofiles.open( + REPOS_INDEX_PATH, "w" + ) as index_file: + await index_file.write( + json.dumps( + { + "repos": [ + RepoDetail.model_validate(repo).model_dump() + async for repo in ( + await session.stream_scalars( + sqlalchemy.select(Repo) + .order_by(Repo.id) + .options(sqlalchemy.orm.selectinload(Repo.dependencies)) + ) + ) + ], + }, + indent=4, + ) + ) + + +async def create_dependencies_index() -> None: + """ + Create dependencies_index.json file from database. + + :return: None + """ + async with async_session_uow() as session, aiofiles.open( + DEPENDENCIES_INDEX_PATH, "w" + ) as index_file: + dependencies = [ + DependencyDetail.model_validate(dependency).model_dump() + async for dependency in ( + await session.stream_scalars( + sqlalchemy.select(Dependency).order_by(Dependency.id) + ) + ) + if dependency.name + ] + await index_file.write( + json.dumps( + { + "dependencies": dependencies, + }, + indent=4, + ) + ) + + +@app.command() +def index_repos() -> None: + """Create ``repos_index.json``.""" + asyncio.run(create_repos_index()) + + +@app.command() +def index_dependencies() -> None: + """Create ``dependencies_index.json``.""" + asyncio.run(create_dependencies_index()) + + +if __name__ == "__main__": + app() diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..4b118b1 --- /dev/null +++ b/app/models.py @@ -0,0 +1,38 @@ +"""Module contains the models for the application.""" + +from pydantic import BaseModel, ConfigDict, NonNegativeInt + +from app.types import DependencyId, RepoId, RevisionHash + + +class DependencyCreateData(BaseModel): + """A dependency of a repository.""" + + name: str + + +class DependencyDetail(BaseModel): + """A dependency of a repository.""" + + model_config = ConfigDict( + from_attributes=True, + ) + + id: DependencyId + name: str + + +class RepoDetail(BaseModel): + """A repository that is being tracked.""" + + model_config = ConfigDict( + from_attributes=True, + ) + + id: RepoId + url: str + description: str + stars: NonNegativeInt + source_graph_repo_id: int + dependencies: list[DependencyDetail] + last_checked_revision: RevisionHash | None diff --git a/app/scrape.py b/app/scrape.py new file mode 100644 index 0000000..e64d15f --- /dev/null +++ b/app/scrape.py @@ -0,0 +1,243 @@ +"""The logic for scraping the source graph data processing it.""" +import asyncio + +import sqlalchemy.dialects.sqlite +import typer +from loguru import logger +from sqlalchemy.ext.asyncio import AsyncSession + +from app.database import Dependency, Repo, RepoDependency +from app.dependencies import acquire_dependencies_data_for_repository +from app.source_graph.client import AsyncSourceGraphSSEClient +from app.source_graph.mapper import create_or_update_repos_from_source_graph_repos_data +from app.types import RepoId +from app.uow import async_session_uow + + +async def _create_dependencies_for_repo(session: AsyncSession, repo: Repo) -> None: + """ + Create dependencies for a repo. + + For each parsed dependency, creates a new record in the database, if such a + dependency does not exist. + Then, assigns the dependencies to the given repo. + + :param session: An asynchronous session object + :param repo: A repo for which to create and assign the dependencies + """ + # Acquire the dependencies data for the repo + logger.info( + "Acquiring the dependencies data for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + try: + ( + revision, + dependencies_create_data, + ) = await acquire_dependencies_data_for_repository(repo) + except RuntimeError: + # If the parsing fails, + # just skip creating the dependencies + logger.error( + "Failed to acquire the dependencies data for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + return + if repo.last_checked_revision == revision: + # If the repo has already been updated, + # just skip creating the dependencies + logger.info( + "The repo with id {repo_id} has fresh dependencies.", + repo_id=repo.id, + enqueue=True, + ) + return + if not dependencies_create_data: + # If there are no dependencies, + # just skip creating the dependencies + logger.info( + "The repo with id {repo_id} has no dependencies.", + repo_id=repo.id, + enqueue=True, + ) + return + # Update the repo with the revision hash + logger.info( + "Updating the repo with id {repo_id} with the revision hash {revision}.", + repo_id=repo.id, + revision=revision, + enqueue=True, + ) + update_repo_statement = ( + sqlalchemy.update(Repo) + .where(Repo.id == repo.id) + .values(last_checked_revision=revision) + ) + await session.execute(update_repo_statement) + # Create dependencies - on conflict do nothing. + # This is to avoid creating duplicate dependencies. + logger.info( + "Creating the dependencies for the repo with id {repo_id}.", + repo_id=repo.id, + enqueue=True, + ) + insert_dependencies_statement = sqlalchemy.dialects.sqlite.insert( + Dependency + ).on_conflict_do_nothing(index_elements=[Dependency.name]) + await session.execute( + insert_dependencies_statement.returning(Dependency), + [ + { + "name": dependency_data.name, + } + for dependency_data in dependencies_create_data + ], + ) + # Re-fetch the dependencies from the database + dependencies = ( + await session.scalars( + sqlalchemy.select(Dependency).where( + Dependency.name.in_( + [ + dependency_data.name + for dependency_data in dependencies_create_data + ] + ) + ) + ) + ).all() + # Add the dependencies to the repo + insert_repo_dependencies_statement = sqlalchemy.dialects.sqlite.insert( + RepoDependency + ).on_conflict_do_nothing([RepoDependency.repo_id, RepoDependency.dependency_id]) + await session.execute( + insert_repo_dependencies_statement, + [ + { + "repo_id": repo.id, + "dependency_id": dependency.id, + } + for dependency in dependencies + ], + ) + + +async def scrape_source_graph_repos() -> None: + """ + Iterate over the source graph repos and create or update them in the database. + + :return: None + """ + async with AsyncSourceGraphSSEClient() as sg_client: + async with async_session_uow() as session: + async with asyncio.TaskGroup() as tg: + logger.info( + "Creating or updating repos from source graph repos data.", + enqueue=True, + ) + async for sg_repos_data in sg_client.aiter_fastapi_repos(): + logger.info( + "Received {count} repos.", + count=len(sg_repos_data), + enqueue=True, + ) + tg.create_task( + create_or_update_repos_from_source_graph_repos_data( + session=session, + source_graph_repos_data=sg_repos_data, + ) + ) + await session.commit() + + +async def parse_dependencies_for_repo( + semaphore: asyncio.Semaphore, repo_id: RepoId +) -> None: + """ + Parse the dependencies for a given repo and create them in the database. + + :param semaphore: A semaphore to limit the number of concurrent requests + :param repo_id: The id of the repo for which to parse the dependencies + :return: None + """ + async with async_session_uow() as session, semaphore: + # Fetch the repo from the database + logger.info( + "Fetching the repo with id {repo_id}.", repo_id=repo_id, enqueue=True + ) + repo = ( + await session.scalars(sqlalchemy.select(Repo).where(Repo.id == repo_id)) + ).one() + # Create the dependencies for the repo + logger.info( + "Creating the dependencies for the repo with id {repo_id}.", + repo_id=repo_id, + enqueue=True, + ) + await _create_dependencies_for_repo(session=session, repo=repo) + await session.commit() + + +async def parse_dependencies_for_repos() -> None: + """ + Parse the dependencies for all the repos in the database. + + :return: None. + """ + logger.info("Fetching the repos from the database.", enqueue=True) + async with async_session_uow() as session: + repo_ids = ( + await session.scalars( + sqlalchemy.select(Repo.id).order_by( + Repo.last_checked_revision.is_(None).desc() + ) + ) + ).all() + logger.info("Fetched {count} repos.", count=len(repo_ids), enqueue=True) + logger.info("Parsing the dependencies for the repos.", enqueue=True) + semaphore = asyncio.Semaphore(10) + async with asyncio.TaskGroup() as tg: + for repo_id in repo_ids: + logger.info( + "Parsing the dependencies for repo {repo_id}.", + repo_id=repo_id, + enqueue=True, + ) + tg.create_task( + parse_dependencies_for_repo( + semaphore=semaphore, repo_id=RepoId(repo_id) + ) + ) + + +app = typer.Typer() + + +@app.command() +def scrape_repos() -> None: + """ + Scrape the FastAPI-related repositories utilizing the source graph API. + + :return: None + """ + logger.info("Scraping the source graph repos.", enqueue=True) + asyncio.run(scrape_source_graph_repos()) + + +@app.command() +def parse_dependencies() -> None: + """ + Parse the dependencies for all the repos in the database. + + :return: None. + """ + logger.info( + "Parsing the dependencies for all the repos in the database.", enqueue=True + ) + asyncio.run(parse_dependencies_for_repos()) + + +if __name__ == "__main__": + app() diff --git a/app/source_graph/__init__.py b/app/source_graph/__init__.py new file mode 100644 index 0000000..d698baa --- /dev/null +++ b/app/source_graph/__init__.py @@ -0,0 +1 @@ +"""Scraping module for the application.""" diff --git a/app/source_graph/client.py b/app/source_graph/client.py new file mode 100644 index 0000000..ea2054f --- /dev/null +++ b/app/source_graph/client.py @@ -0,0 +1,123 @@ +"""The client for the SourceGraph API.""" +import asyncio +from collections.abc import AsyncGenerator, Mapping, MutableMapping +from contextlib import asynccontextmanager +from datetime import timedelta +from types import TracebackType +from typing import Any, Final, Self +from urllib.parse import quote + +import httpx +import stamina +from httpx_sse import EventSource, ServerSentEvent, aconnect_sse +from loguru import logger + +from app.source_graph.models import SourceGraphRepoData, SourceGraphRepoDataListAdapter + +#: The URL of the SourceGraph SSE API. +SOURCE_GRAPH_STREAM_API_URL: Final[str] = "https://sourcegraph.com/.api/search/stream" + + +#: The query parameters for the SourceGraph SSE API. +FASTAPI_REPOS_QUERY_PARAMS: Final[Mapping[str, str]] = { + "q": quote( + " ".join( + [ + "repo:has.content(from fastapi import FastApi)", + "type:repo", + "visibility:public", + "archived:no", + "fork:no", + ] + ) + ), +} + + +class AsyncSourceGraphSSEClient: + """ + A client for the SourceGraph SSE API. + + To learn more about the underlying API, see the ``SourceGraph SSE API`` + https://docs.sourcegraph.com/api/stream_api#sourcegraph-stream-api + """ + + def __init__(self: Self) -> None: + """Initialize the client.""" + self._last_event_id: str | None = None + self._reconnection_delay: float = 0.0 + self._aclient: httpx.AsyncClient = httpx.AsyncClient() + + async def __aenter__(self: Self) -> Self: + """Enter the async context manager.""" + await self._aclient.__aenter__() + return self + + async def __aexit__( + self: Self, + exc_type: type[BaseException] | None = None, + exc_val: BaseException | None = None, + exc_tb: TracebackType | None = None, + ) -> None: + """Exit the async context manager.""" + return await self._aclient.__aexit__(exc_type, exc_val, exc_tb) + + @asynccontextmanager + async def _aconnect_sse( + self: Self, **kwargs: MutableMapping[str, Any] + ) -> AsyncGenerator[EventSource, None]: + """Connect to the SourceGraph SSE API.""" + headers = kwargs.pop("headers", {}) + if self._last_event_id is not None: + headers["Last-Event-ID"] = self._last_event_id + async with aconnect_sse( + client=self._aclient, + url=str(SOURCE_GRAPH_STREAM_API_URL), + method="GET", + headers=headers, + **kwargs, + ) as event_source: + yield event_source + + async def _aiter_sse( + self: Self, **kwargs: MutableMapping[str, Any] + ) -> AsyncGenerator[ServerSentEvent, None]: + """Iterate over the SourceGraph SSE API.""" + async with self._aconnect_sse(**kwargs) as event_source: + async for event in event_source.aiter_sse(): + yield event + + async def _aiter_sse_with_retries( + self: Self, **kwargs: MutableMapping[str, Any] + ) -> AsyncGenerator[ServerSentEvent, None]: + """Iterate over the SourceGraph SSE API with retries.""" + async for attempt in stamina.retry_context( + on=(httpx.ReadError, httpx.ReadTimeout) + ): + with attempt: + await asyncio.sleep(self._reconnection_delay) + async for event in self._aiter_sse(**kwargs): + self._last_event_id = event.id + if event.retry is not None: + logger.error( + "Received a retry event from the SourceGraph SSE API. " + "Schedule a reconnection in {retry} milliseconds.", + retry=event.retry, + enqueue=True, + ) + self._reconnection_delay = timedelta( + milliseconds=event.retry + ).total_seconds() + else: + self._reconnection_delay = 0.0 + yield event + + async def aiter_fastapi_repos( + self: Self, + ) -> AsyncGenerator[list[SourceGraphRepoData], None]: + """Iterate over the SourceGraph SSE API with retries.""" + async for event in self._aiter_sse_with_retries( + params=dict(FASTAPI_REPOS_QUERY_PARAMS) + ): + if event.event == "matches": + yield SourceGraphRepoDataListAdapter.validate_python(event.json()) diff --git a/app/source_graph/factories.py b/app/source_graph/factories.py new file mode 100644 index 0000000..de13a39 --- /dev/null +++ b/app/source_graph/factories.py @@ -0,0 +1,12 @@ +"""Factories for creating test data.""" +from polyfactory.factories.pydantic_factory import ModelFactory +from polyfactory.pytest_plugin import register_fixture + +from app.source_graph.models import SourceGraphRepoData + + +@register_fixture +class SourceGraphRepoDataFactory(ModelFactory[SourceGraphRepoData]): + """Factory for creating RepoCreateData.""" + + __model__ = SourceGraphRepoData diff --git a/app/source_graph/mapper.py b/app/source_graph/mapper.py new file mode 100644 index 0000000..45015df --- /dev/null +++ b/app/source_graph/mapper.py @@ -0,0 +1,46 @@ +"""Mapper for source graph models to the database objects.""" +from collections.abc import Sequence + +import sqlalchemy.dialects.sqlite +from sqlalchemy.ext.asyncio import AsyncSession + +from app import database +from app.source_graph.models import SourceGraphRepoData + + +async def create_or_update_repos_from_source_graph_repos_data( + session: AsyncSession, source_graph_repos_data: Sequence[SourceGraphRepoData] +) -> Sequence[database.Repo]: + """ + Create repos from source graph repos data. + + If any repos already exist, update them. + + :param session: The database session. + :param source_graph_repos_data: The source graph repos data. + """ + insert_statement = sqlalchemy.dialects.sqlite.insert(database.Repo) + update_statement = insert_statement.on_conflict_do_update( + index_elements=[database.Repo.source_graph_repo_id], + set_={ + "url": insert_statement.excluded.url, + "description": insert_statement.excluded.description, + "stars": insert_statement.excluded.stars, + "source_graph_repo_id": insert_statement.excluded.source_graph_repo_id, + }, + ) + + return ( + await session.scalars( + update_statement.returning(database.Repo), + [ + { + "url": str(repo_data.repo_url), + "description": repo_data.description, + "stars": repo_data.stars, + "source_graph_repo_id": repo_data.repo_id, + } + for repo_data in source_graph_repos_data + ], + ) + ).all() diff --git a/app/source_graph/models.py b/app/source_graph/models.py new file mode 100644 index 0000000..07c99b8 --- /dev/null +++ b/app/source_graph/models.py @@ -0,0 +1,39 @@ +"""The models for the Source Graph data.""" +import datetime +from typing import Literal, NewType, Self + +from pydantic import ( + BaseModel, + Field, + HttpUrl, + NonNegativeInt, + TypeAdapter, + computed_field, +) + +#: The ID of a repository from the SourceGraph API. +SourceGraphRepoId = NewType("SourceGraphRepoId", int) + + +class SourceGraphRepoData(BaseModel): + """The data of a repository.""" + + type: Literal["repo"] + repo_id: SourceGraphRepoId = Field(..., alias="repositoryID") + repo_handle: str = Field(..., alias="repository") + stars: NonNegativeInt = Field(..., alias="repoStars") + last_fetched_at: datetime.datetime = Field(..., alias="repoLastFetched") + description: str = Field(default="") + + @computed_field # type: ignore[misc] + @property + def repo_url(self: Self) -> HttpUrl: + """The URL of the repository.""" + return TypeAdapter(HttpUrl).validate_python(f"https://{self.repo_handle}") + + +#: The type adapter for the SourceGraphRepoData. +SourceGraphRepoDataAdapter = TypeAdapter(SourceGraphRepoData) + +#: The type adapter for the SourceGraphRepoData list. +SourceGraphRepoDataListAdapter = TypeAdapter(list[SourceGraphRepoData]) diff --git a/app/source_graph/tests/__init__.py b/app/source_graph/tests/__init__.py new file mode 100644 index 0000000..2ca8733 --- /dev/null +++ b/app/source_graph/tests/__init__.py @@ -0,0 +1 @@ +"""Test the scraping of the SourceGraph API.""" diff --git a/app/source_graph/tests/test_client.py b/app/source_graph/tests/test_client.py new file mode 100644 index 0000000..f5ef974 --- /dev/null +++ b/app/source_graph/tests/test_client.py @@ -0,0 +1,120 @@ +"""Test the client module for the source graph.""" +from typing import Any + +import pytest +from dirty_equals import HasLen, IsDatetime, IsInstance, IsPositiveInt +from pydantic import Json, TypeAdapter + +from app.source_graph.models import SourceGraphRepoData + + +@pytest.fixture() +def source_graph_matched_repos_data() -> Json[Any]: + """Return the sample data of the matched repositories.""" + return [ + { + "type": "repo", + "repositoryID": 55636527, + "repository": "github.com/tiangolo/sqlmodel", + "repoStars": 10277, + "repoLastFetched": "2023-07-31T18:47:22.875731Z", + "description": ( + "SQL databases in Python, designed " + "for simplicity, compatibility, " + "and robustness." + ), + "metadata": { + "fastapi": "null", + "json": "null", + "json-schema": "null", + "pydantic": "null", + "python": "null", + "sql": "null", + "sqlalchemy": "null", + }, + }, + { + "type": "repo", + "repositoryID": 59434622, + "repository": "github.com/reflex-dev/reflex", + "repoStars": 10061, + "repoLastFetched": "2023-07-31T08:58:42.692906Z", + "description": "(Previously Pynecone) 🕸 Web apps in pure Python 🐍", + }, + { + "type": "repo", + "repositoryID": 42982149, + "repository": "github.com/PaddlePaddle/PaddleNLP", + "repoStars": 9804, + "repoLastFetched": "2023-07-31T16:48:08.839209Z", + "description": ( + "👑 Easy-to-use and powerful NLP library with 🤗 " + "Awesome model zoo, supporting wide-range of NLP tasks " + "from research to industrial applications, including" + " 🗂Text Classification, 🔍 Neural Search, ❓ Question " + "Answering, ℹ️ Information Extraction, " + "📄 Document Intelligence, 💌 Sentiment Analysis etc." + ), + "metadata": { + "bert": "null", + "embedding": "null", + "ernie": "null", + "information-extraction": "null", + "neural-search": "null", + "nlp": "null", + "paddlenlp": "null", + "pretrained-models": "null", + "question-answering": "null", + "search-engine": "null", + "semantic-analysis": "null", + "sentiment-analysis": "null", + "seq2seq": "null", + "transformer": "null", + "transformers": "null", + "uie": "null", + }, + }, + { + "type": "repo", + "repositoryID": 36246068, + "repository": "github.com/realpython/materials", + "repoStars": 4359, + "repoLastFetched": "2023-07-31T05:15:16.993896Z", + }, + ] + + +def test_source_graph_repo_data(source_graph_matched_repos_data: Json[Any]) -> None: + """Test the SourceGraphRepoData deserialization.""" + assert source_graph_matched_repos_data == HasLen(4) + _SourceGraphRepoDataListValidator = TypeAdapter(list[SourceGraphRepoData]) + repos_parsed = _SourceGraphRepoDataListValidator.validate_python( + source_graph_matched_repos_data + ) + assert repos_parsed == HasLen(4) + assert all(repo == IsInstance[SourceGraphRepoData] for repo in repos_parsed) + assert all( + repo.repo_id == repo_data["repositoryID"] + for repo, repo_data in zip( + repos_parsed, source_graph_matched_repos_data, strict=True + ) + ) + assert all( + repo.repo_handle == repo_data["repository"] + for repo, repo_data in zip( + repos_parsed, source_graph_matched_repos_data, strict=True + ) + ) + assert all( + repo.stars == IsPositiveInt and repo.stars == repo_data["repoStars"] + for repo, repo_data in zip( + repos_parsed, source_graph_matched_repos_data, strict=True + ) + ) + assert all( + str(repo.repo_url) == f"https://{repo_data['repository']}" + for repo, repo_data in zip( + repos_parsed, source_graph_matched_repos_data, strict=True + ) + ) + assert all(repo.last_fetched_at == IsDatetime for repo in repos_parsed) diff --git a/app/source_graph/tests/test_mapper.py b/app/source_graph/tests/test_mapper.py new file mode 100644 index 0000000..89cd224 --- /dev/null +++ b/app/source_graph/tests/test_mapper.py @@ -0,0 +1,65 @@ +"""The tests for the source graph mapper to the database objects.""" + +import pytest +import sqlalchemy +from dirty_equals import IsInstance, IsList +from sqlalchemy.ext.asyncio import AsyncSession + +from app import database +from app.source_graph.factories import SourceGraphRepoDataFactory +from app.source_graph.mapper import create_or_update_repos_from_source_graph_repos_data +from app.source_graph.models import SourceGraphRepoData + +pytestmark = pytest.mark.anyio + + +async def test_create_or_update_repos_from_source_graph_repos_data( + test_db_session: AsyncSession, + source_graph_repo_data_factory: SourceGraphRepoDataFactory, +) -> None: + """Test creating repos from source graph repos data.""" + source_graph_repo_data: list[ + SourceGraphRepoData + ] = source_graph_repo_data_factory.batch(5) + repos = await create_or_update_repos_from_source_graph_repos_data( + test_db_session, source_graph_repo_data + ) + assert repos == IsList(length=5) + assert all(repo == IsInstance[database.Repo] for repo in repos) + assert all(repo.id is not None for repo in repos) + + +async def test_create_or_update_repos_from_source_graph_repos_data_update( + some_repos: list[database.Repo], + test_db_session: AsyncSession, + source_graph_repo_data_factory: SourceGraphRepoDataFactory, +) -> None: + """Test updating repos from source graph repos data.""" + assert ( + await test_db_session.execute( + sqlalchemy.select(sqlalchemy.func.count(database.Repo.id)) + ) + ).scalar() == len(some_repos) + source_graph_repos_data: list[ + SourceGraphRepoData + ] = source_graph_repo_data_factory.batch(len(some_repos)) + source_graph_repos_data = [ + SourceGraphRepoData( + **( + repo_data.model_dump(by_alias=True) + | {"repositoryID": repo.source_graph_repo_id} + ) + ) + for repo, repo_data in zip(some_repos, source_graph_repos_data, strict=True) + ] + repos = await create_or_update_repos_from_source_graph_repos_data( + test_db_session, source_graph_repos_data + ) + assert repos == IsList(length=len(some_repos)) + assert all(repo == IsInstance[database.Repo] for repo in repos) + assert all(repo.id is not None for repo in repos) + assert ( + await test_db_session.execute( + sqlalchemy.select(sqlalchemy.func.count(database.Repo.id)) + ) + ).scalar() == len(some_repos) diff --git a/app/tests/__init__.py b/app/tests/__init__.py new file mode 100644 index 0000000..69f3eac --- /dev/null +++ b/app/tests/__init__.py @@ -0,0 +1 @@ +"""The application tests.""" diff --git a/app/tests/test_database.py b/app/tests/test_database.py new file mode 100644 index 0000000..e986cd0 --- /dev/null +++ b/app/tests/test_database.py @@ -0,0 +1,103 @@ +"""Test the operations on the database models.""" +import pytest +import sqlalchemy as sa +import sqlalchemy.orm +from dirty_equals import IsList +from sqlalchemy.ext.asyncio import AsyncSession + +from app import database +from app.factories import DependencyCreateDataFactory +from app.models import DependencyCreateData +from app.source_graph.factories import SourceGraphRepoDataFactory +from app.source_graph.models import SourceGraphRepoData + +pytestmark = pytest.mark.anyio + + +def _assert_repo_properties( + repo: database.Repo, source_graph_repo_data: SourceGraphRepoData +) -> bool: + """Assert that the repo has the expected properties.""" + assert repo.id is not None + assert repo.url == str(source_graph_repo_data.repo_url) + assert repo.description == source_graph_repo_data.description + assert repo.stars == source_graph_repo_data.stars + assert repo.source_graph_repo_id == source_graph_repo_data.repo_id + return True + + +async def test_create_repo_no_dependencies( + test_db_session: AsyncSession, + source_graph_repo_data_factory: SourceGraphRepoDataFactory, +) -> None: + """Test creating a repo.""" + source_graph_repo_data: SourceGraphRepoData = source_graph_repo_data_factory.build() + repo = database.Repo( + url=str(source_graph_repo_data.repo_url), + description=source_graph_repo_data.description, + stars=source_graph_repo_data.stars, + source_graph_repo_id=source_graph_repo_data.repo_id, + ) + test_db_session.add(repo) + await test_db_session.flush() + await test_db_session.refresh(repo) + _assert_repo_properties(repo, source_graph_repo_data) + assert (await repo.awaitable_attrs.dependencies) == IsList(length=0) + + +async def test_create_repo_with_dependencies( + test_db_session: AsyncSession, + source_graph_repo_data_factory: SourceGraphRepoDataFactory, + dependency_create_data_factory: DependencyCreateDataFactory, +) -> None: + """Test creating a repo with dependencies.""" + source_graph_repo_data: SourceGraphRepoData = source_graph_repo_data_factory.build() + dependencies_create_data: list[ + DependencyCreateData + ] = dependency_create_data_factory.batch(5) + repo = database.Repo( + url=str(source_graph_repo_data.repo_url), + description=source_graph_repo_data.description, + stars=source_graph_repo_data.stars, + source_graph_repo_id=source_graph_repo_data.repo_id, + dependencies=[ + database.Dependency(**dependency_create_data.model_dump()) + for dependency_create_data in dependencies_create_data + ], + ) + test_db_session.add(repo) + await test_db_session.flush() + await test_db_session.refresh(repo) + _assert_repo_properties(repo, source_graph_repo_data) + repo_dependencies = await repo.awaitable_attrs.dependencies + assert repo_dependencies == IsList(length=5) + assert all( + repo_dependency.name == dependency.name + for repo_dependency, dependency in zip( + repo_dependencies, dependencies_create_data, strict=True + ) + ) + + +async def test_list_repositories( + test_db_session: AsyncSession, + some_repos: list[database.Repo], +) -> None: + """Test listing repositories.""" + repos_from_db_result = await test_db_session.execute( + sa.select(database.Repo).options( + sqlalchemy.orm.joinedload(database.Repo.dependencies) + ) + ) + repos_from_db = repos_from_db_result.scalars().unique().all() + assert repos_from_db == IsList(length=10) + assert all( + repo.id == repo_data.id + and all( + repo_dependency.name == dependency.name + for repo_dependency, dependency in zip( + repo.dependencies, repo_data.dependencies, strict=True + ) + ) + for repo, repo_data in zip(repos_from_db, some_repos, strict=True) + ) diff --git a/app/types.py b/app/types.py new file mode 100644 index 0000000..207f825 --- /dev/null +++ b/app/types.py @@ -0,0 +1,6 @@ +"""Type definitions for the application.""" +from typing import NewType + +RepoId = NewType("RepoId", int) +DependencyId = NewType("DependencyId", int) +RevisionHash = NewType("RevisionHash", str) diff --git a/app/uow.py b/app/uow.py new file mode 100644 index 0000000..89c4492 --- /dev/null +++ b/app/uow.py @@ -0,0 +1,27 @@ +""" +The Unit of Work pattern implementation. + +To learn more about the UoW, see: +https://www.cosmicpython.com/book/chapter_06_uow.html +""" +from collections.abc import AsyncGenerator +from contextlib import asynccontextmanager + +from sqlalchemy.ext.asyncio import AsyncSession + +from app.database import async_session_maker + + +@asynccontextmanager +async def async_session_uow() -> AsyncGenerator[AsyncSession, None]: + """ + Provide a transactional scope around a series of operations. + + :return: a UoW instance + """ + async with async_session_maker() as session: + async with session.begin(): + try: + yield session + finally: + await session.rollback() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..1cd7654 Binary files /dev/null and b/db.sqlite3 differ diff --git a/dependencies_index.json b/dependencies_index.json new file mode 100644 index 0000000..8e6bccf --- /dev/null +++ b/dependencies_index.json @@ -0,0 +1,19180 @@ +{ + "dependencies": [ + { + "id": 2, + "name": "starlette" + }, + { + "id": 3, + "name": "fastapi" + }, + { + "id": 4, + "name": "ray" + }, + { + "id": 5, + "name": "mlflow" + }, + { + "id": 6, + "name": "snorkel" + }, + { + "id": 7, + "name": "great_expectations" + }, + { + "id": 8, + "name": "pretty_errors" + }, + { + "id": 9, + "name": "typing_extensions" + }, + { + "id": 10, + "name": "typer" + }, + { + "id": 11, + "name": "transformers" + }, + { + "id": 12, + "name": "pandas" + }, + { + "id": 13, + "name": "pytest" + }, + { + "id": 14, + "name": "numpy" + }, + { + "id": 15, + "name": "torch" + }, + { + "id": 16, + "name": "sklearn" + }, + { + "id": 17, + "name": "numpyencoder" + }, + { + "id": 18, + "name": "setuptools" + }, + { + "id": 19, + "name": "requests" + }, + { + "id": 20, + "name": "pyppeteer" + }, + { + "id": 21, + "name": "ujson" + }, + { + "id": 22, + "name": "bs4" + }, + { + "id": 23, + "name": "aiosqlite" + }, + { + "id": 24, + "name": "netaddr" + }, + { + "id": 25, + "name": "shodan" + }, + { + "id": 26, + "name": "dateutil" + }, + { + "id": 27, + "name": "aiodns" + }, + { + "id": 28, + "name": "_pytest" + }, + { + "id": 29, + "name": "aiohttp" + }, + { + "id": 30, + "name": "certifi" + }, + { + "id": 31, + "name": "yaml" + }, + { + "id": 32, + "name": "aiomultiprocess" + }, + { + "id": 33, + "name": "censys" + }, + { + "id": 34, + "name": "uvicorn" + }, + { + "id": 35, + "name": "slowapi" + }, + { + "id": 36, + "name": "uvloop" + }, + { + "id": 37, + "name": "httpx" + }, + { + "id": 38, + "name": "pydantic" + }, + { + "id": 39, + "name": "streamlit" + }, + { + "id": 40, + "name": "pptx" + }, + { + "id": 41, + "name": "docx2txt" + }, + { + "id": 42, + "name": "weaviate" + }, + { + "id": 43, + "name": "pinecone" + }, + { + "id": 44, + "name": "chromadb" + }, + { + "id": 45, + "name": "arrow" + }, + { + "id": 46, + "name": "azure" + }, + { + "id": 47, + "name": "tenacity" + }, + { + "id": 48, + "name": "supabase" + }, + { + "id": 49, + "name": "grpc" + }, + { + "id": 50, + "name": "tiktoken" + }, + { + "id": 51, + "name": "qdrant_client" + }, + { + "id": 52, + "name": "psycopg2cffi" + }, + { + "id": 53, + "name": "PyPDF2" + }, + { + "id": 54, + "name": "loguru" + }, + { + "id": 55, + "name": "pgvector" + }, + { + "id": 56, + "name": "redis" + }, + { + "id": 57, + "name": "llama_index" + }, + { + "id": 58, + "name": "pymilvus" + }, + { + "id": 59, + "name": "elasticsearch" + }, + { + "id": 60, + "name": "psycopg2" + }, + { + "id": 61, + "name": "alembic" + }, + { + "id": 62, + "name": "app" + }, + { + "id": 63, + "name": "raven" + }, + { + "id": 64, + "name": "jose" + }, + { + "id": 65, + "name": "emails" + }, + { + "id": 66, + "name": "celery" + }, + { + "id": 67, + "name": "passlib" + }, + { + "id": 68, + "name": "sqlalchemy" + }, + { + "id": 69, + "name": "oyaml" + }, + { + "id": 70, + "name": "cortex" + }, + { + "id": 71, + "name": "cv2" + }, + { + "id": 72, + "name": "jsonschema" + }, + { + "id": 73, + "name": "jinja2" + }, + { + "id": 74, + "name": "sentry_sdk" + }, + { + "id": 75, + "name": "importlib_resources" + }, + { + "id": 76, + "name": "click" + }, + { + "id": 77, + "name": "dotenv" + }, + { + "id": 78, + "name": "imageio" + }, + { + "id": 79, + "name": "e2e" + }, + { + "id": 80, + "name": "tensorflow" + }, + { + "id": 81, + "name": "boto3" + }, + { + "id": 82, + "name": "PIL" + }, + { + "id": 83, + "name": "validator_collection" + }, + { + "id": 84, + "name": "torchvision" + }, + { + "id": 85, + "name": "tritonclient" + }, + { + "id": 86, + "name": "sse_starlette" + }, + { + "id": 87, + "name": "tokenizers" + }, + { + "id": 88, + "name": "pexpect" + }, + { + "id": 89, + "name": "triton_python_backend_utils" + }, + { + "id": 90, + "name": "environs" + }, + { + "id": 91, + "name": "mysql" + }, + { + "id": 92, + "name": "pymongo" + }, + { + "id": 93, + "name": "gfpgan" + }, + { + "id": 94, + "name": "clip" + }, + { + "id": 95, + "name": "blendmodes" + }, + { + "id": 96, + "name": "rich" + }, + { + "id": 97, + "name": "omegaconf" + }, + { + "id": 98, + "name": "pytz" + }, + { + "id": 99, + "name": "facexlib" + }, + { + "id": 100, + "name": "ui_extra_networks_lora" + }, + { + "id": 101, + "name": "scunet_model_arch" + }, + { + "id": 102, + "name": "sd_hijack_ddpm_v1" + }, + { + "id": 103, + "name": "tomesd" + }, + { + "id": 104, + "name": "ldsr_model_arch" + }, + { + "id": 105, + "name": "timm" + }, + { + "id": 106, + "name": "anyio" + }, + { + "id": 107, + "name": "ldm" + }, + { + "id": 108, + "name": "inflection" + }, + { + "id": 109, + "name": "extra_networks_lora" + }, + { + "id": 110, + "name": "pytorch_lightning" + }, + { + "id": 111, + "name": "einops" + }, + { + "id": 112, + "name": "networks" + }, + { + "id": 113, + "name": "facelib" + }, + { + "id": 114, + "name": "xformers" + }, + { + "id": 115, + "name": "packaging" + }, + { + "id": 116, + "name": "swinir_model_arch" + }, + { + "id": 117, + "name": "network" + }, + { + "id": 118, + "name": "gradio" + }, + { + "id": 119, + "name": "basicsr" + }, + { + "id": 120, + "name": "sgm" + }, + { + "id": 121, + "name": "lark" + }, + { + "id": 122, + "name": "psutil" + }, + { + "id": 123, + "name": "piexif" + }, + { + "id": 124, + "name": "git" + }, + { + "id": 125, + "name": "lora" + }, + { + "id": 126, + "name": "_codecs" + }, + { + "id": 127, + "name": "tqdm" + }, + { + "id": 128, + "name": "k_diffusion" + }, + { + "id": 129, + "name": "skimage" + }, + { + "id": 130, + "name": "safetensors" + }, + { + "id": 131, + "name": "torchsde" + }, + { + "id": 132, + "name": "swinir_model_arch_v2" + }, + { + "id": 133, + "name": "sd_hijack_autoencoder" + }, + { + "id": 134, + "name": "realesrgan" + }, + { + "id": 135, + "name": "pkg_resources" + }, + { + "id": 136, + "name": "open_clip" + }, + { + "id": 137, + "name": "transformer_engine" + }, + { + "id": 138, + "name": "nltk" + }, + { + "id": 139, + "name": "model" + }, + { + "id": 140, + "name": "scipy" + }, + { + "id": 141, + "name": "energonai" + }, + { + "id": 142, + "name": "pynvml" + }, + { + "id": 143, + "name": "academictorrents" + }, + { + "id": 144, + "name": "megatron" + }, + { + "id": 145, + "name": "fire" + }, + { + "id": 146, + "name": "fastfold" + }, + { + "id": 147, + "name": "sanic" + }, + { + "id": 148, + "name": "main" + }, + { + "id": 149, + "name": "jieba" + }, + { + "id": 150, + "name": "quant_cuda" + }, + { + "id": 151, + "name": "bitsandbytes" + }, + { + "id": 152, + "name": "rouge_score" + }, + { + "id": 153, + "name": "mask" + }, + { + "id": 154, + "name": "datasets" + }, + { + "id": 155, + "name": "six" + }, + { + "id": 156, + "name": "tabulate" + }, + { + "id": 157, + "name": "triton" + }, + { + "id": 158, + "name": "diffusers" + }, + { + "id": 159, + "name": "lightning" + }, + { + "id": 160, + "name": "pulp" + }, + { + "id": 161, + "name": "matplotlib" + }, + { + "id": 162, + "name": "loss_func" + }, + { + "id": 163, + "name": "pudb" + }, + { + "id": 164, + "name": "prefetch_generator" + }, + { + "id": 165, + "name": "evaluate" + }, + { + "id": 166, + "name": "rouge_chinese" + }, + { + "id": 167, + "name": "scann" + }, + { + "id": 168, + "name": "fused_mix_prec_layer_norm_cuda" + }, + { + "id": 169, + "name": "bert_score" + }, + { + "id": 170, + "name": "loralib" + }, + { + "id": 171, + "name": "imwatermark" + }, + { + "id": 172, + "name": "natsort" + }, + { + "id": 173, + "name": "contexttimer" + }, + { + "id": 174, + "name": "albumentations" + }, + { + "id": 175, + "name": "sanic_ext" + }, + { + "id": 176, + "name": "coati" + }, + { + "id": 177, + "name": "h5py" + }, + { + "id": 178, + "name": "peft" + }, + { + "id": 179, + "name": "fabric" + }, + { + "id": 180, + "name": "apex" + }, + { + "id": 181, + "name": "zhon" + }, + { + "id": 182, + "name": "wandb" + }, + { + "id": 183, + "name": "openai" + }, + { + "id": 184, + "name": "utils" + }, + { + "id": 185, + "name": "huggingface_hub" + }, + { + "id": 186, + "name": "seaborn" + }, + { + "id": 187, + "name": "tensornvme" + }, + { + "id": 188, + "name": "flash_attn" + }, + { + "id": 189, + "name": "accelerate" + }, + { + "id": 190, + "name": "locust" + }, + { + "id": 191, + "name": "taming" + }, + { + "id": 192, + "name": "titans" + }, + { + "id": 193, + "name": "scripts" + }, + { + "id": 194, + "name": "logger" + }, + { + "id": 195, + "name": "llm" + }, + { + "id": 196, + "name": "asyncpg" + }, + { + "id": 197, + "name": "vectorstore" + }, + { + "id": 198, + "name": "auth" + }, + { + "id": 199, + "name": "routes" + }, + { + "id": 200, + "name": "models" + }, + { + "id": 201, + "name": "repository" + }, + { + "id": 202, + "name": "resend" + }, + { + "id": 203, + "name": "pypandoc" + }, + { + "id": 204, + "name": "parsers" + }, + { + "id": 205, + "name": "crawl" + }, + { + "id": 206, + "name": "langchain" + }, + { + "id": 207, + "name": "black" + }, + { + "id": 208, + "name": "mdtex2html" + }, + { + "id": 209, + "name": "requests_html" + }, + { + "id": 210, + "name": "slack_sdk" + }, + { + "id": 211, + "name": "requests_oauthlib" + }, + { + "id": 212, + "name": "duckduckgo_search" + }, + { + "id": 213, + "name": "fastapi_sqlalchemy" + }, + { + "id": 214, + "name": "json5" + }, + { + "id": 215, + "name": "cryptography" + }, + { + "id": 216, + "name": "newspaper" + }, + { + "id": 217, + "name": "confluent_kafka" + }, + { + "id": 218, + "name": "lxml" + }, + { + "id": 219, + "name": "fastapi_jwt_auth" + }, + { + "id": 220, + "name": "jsonmerge" + }, + { + "id": 221, + "name": "distlib" + }, + { + "id": 222, + "name": "jira" + }, + { + "id": 223, + "name": "botocore" + }, + { + "id": 224, + "name": "google" + }, + { + "id": 225, + "name": "google_auth_oauthlib" + }, + { + "id": 226, + "name": "googleapiclient" + }, + { + "id": 227, + "name": "websocket" + }, + { + "id": 228, + "name": "bertopic" + }, + { + "id": 229, + "name": "retry" + }, + { + "id": 230, + "name": "fastlangid" + }, + { + "id": 231, + "name": "multitasking" + }, + { + "id": 232, + "name": "oasst_backend" + }, + { + "id": 233, + "name": "oasst_data" + }, + { + "id": 234, + "name": "rules" + }, + { + "id": 235, + "name": "prometheus_fastapi_instrumentator" + }, + { + "id": 236, + "name": "sqlmodel" + }, + { + "id": 237, + "name": "polars" + }, + { + "id": 238, + "name": "hikari" + }, + { + "id": 239, + "name": "lorem" + }, + { + "id": 240, + "name": "splits" + }, + { + "id": 241, + "name": "lightbulb" + }, + { + "id": 242, + "name": "kaggle" + }, + { + "id": 243, + "name": "html2text" + }, + { + "id": 244, + "name": "logic" + }, + { + "id": 245, + "name": "absl" + }, + { + "id": 246, + "name": "sentence_transformers" + }, + { + "id": 247, + "name": "fastapi_limiter" + }, + { + "id": 248, + "name": "text_client_utils" + }, + { + "id": 249, + "name": "authlib" + }, + { + "id": 250, + "name": "praw" + }, + { + "id": 251, + "name": "playwright" + }, + { + "id": 252, + "name": "fastapi_utils" + }, + { + "id": 253, + "name": "miru" + }, + { + "id": 254, + "name": "syntax" + }, + { + "id": 255, + "name": "spacy" + }, + { + "id": 256, + "name": "prawcore" + }, + { + "id": 257, + "name": "model_training" + }, + { + "id": 258, + "name": "youtube_transcript_api" + }, + { + "id": 259, + "name": "asgiref" + }, + { + "id": 260, + "name": "IPython" + }, + { + "id": 261, + "name": "pyarrow" + }, + { + "id": 262, + "name": "oasst_shared" + }, + { + "id": 263, + "name": "blade2blade" + }, + { + "id": 264, + "name": "sseclient" + }, + { + "id": 265, + "name": "uuid_extensions" + }, + { + "id": 266, + "name": "discord" + }, + { + "id": 267, + "name": "trlx" + }, + { + "id": 268, + "name": "iso639" + }, + { + "id": 269, + "name": "bot" + }, + { + "id": 270, + "name": "oasst_inference_server" + }, + { + "id": 271, + "name": "db" + }, + { + "id": 272, + "name": "bson" + }, + { + "id": 273, + "name": "airflow" + }, + { + "id": 274, + "name": "slow" + }, + { + "id": 275, + "name": "line_with_91" + }, + { + "id": 276, + "name": "line_with_89" + }, + { + "id": 277, + "name": "z" + }, + { + "id": 278, + "name": "plotly" + }, + { + "id": 279, + "name": "line_with_88" + }, + { + "id": 280, + "name": "FOO" + }, + { + "id": 281, + "name": "experiments" + }, + { + "id": 282, + "name": "some_module" + }, + { + "id": 283, + "name": "numpy2" + }, + { + "id": 284, + "name": "aa" + }, + { + "id": 285, + "name": "foo9" + }, + { + "id": 286, + "name": "background" + }, + { + "id": 287, + "name": "attrs" + }, + { + "id": 288, + "name": "numpy1" + }, + { + "id": 289, + "name": "line_with_92" + }, + { + "id": 290, + "name": "requests_mock" + }, + { + "id": 291, + "name": "custom_typing" + }, + { + "id": 292, + "name": "flask" + }, + { + "id": 293, + "name": "fast" + }, + { + "id": 294, + "name": "lib2" + }, + { + "id": 295, + "name": "D" + }, + { + "id": 296, + "name": "E" + }, + { + "id": 297, + "name": "pysnmp" + }, + { + "id": 298, + "name": "pkg" + }, + { + "id": 299, + "name": "bbb" + }, + { + "id": 300, + "name": "com" + }, + { + "id": 301, + "name": "x" + }, + { + "id": 302, + "name": "BAR" + }, + { + "id": 303, + "name": "my_module" + }, + { + "id": 304, + "name": "fu" + }, + { + "id": 305, + "name": "some_other_module" + }, + { + "id": 306, + "name": "bop" + }, + { + "id": 307, + "name": "foo15" + }, + { + "id": 308, + "name": "mypackage" + }, + { + "id": 309, + "name": "myapp" + }, + { + "id": 310, + "name": "a" + }, + { + "id": 311, + "name": "inner_imports" + }, + { + "id": 312, + "name": "modl" + }, + { + "id": 313, + "name": "mypy_extensions" + }, + { + "id": 314, + "name": "name_of_a_company" + }, + { + "id": 315, + "name": "module2" + }, + { + "id": 316, + "name": "line_with_90" + }, + { + "id": 317, + "name": "baz" + }, + { + "id": 318, + "name": "somewhere" + }, + { + "id": 319, + "name": "kombu" + }, + { + "id": 320, + "name": "lib4" + }, + { + "id": 321, + "name": "my_first_party" + }, + { + "id": 322, + "name": "py" + }, + { + "id": 323, + "name": "TYP001" + }, + { + "id": 324, + "name": "foo16" + }, + { + "id": 325, + "name": "c" + }, + { + "id": 326, + "name": "foo14" + }, + { + "id": 327, + "name": "f" + }, + { + "id": 328, + "name": "foo2" + }, + { + "id": 329, + "name": "foo10" + }, + { + "id": 330, + "name": "applications" + }, + { + "id": 331, + "name": "funca" + }, + { + "id": 332, + "name": "dd" + }, + { + "id": 333, + "name": "some" + }, + { + "id": 334, + "name": "bpy" + }, + { + "id": 335, + "name": "_typeshed" + }, + { + "id": 336, + "name": "A" + }, + { + "id": 337, + "name": "annotations" + }, + { + "id": 338, + "name": "notpytest" + }, + { + "id": 339, + "name": "myclass" + }, + { + "id": 340, + "name": "aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa" + }, + { + "id": 341, + "name": "paramiko" + }, + { + "id": 342, + "name": "import_self" + }, + { + "id": 343, + "name": "some_library" + }, + { + "id": 344, + "name": "B" + }, + { + "id": 345, + "name": "foo6" + }, + { + "id": 346, + "name": "foo7" + }, + { + "id": 347, + "name": "foo13" + }, + { + "id": 348, + "name": "django" + }, + { + "id": 349, + "name": "mock" + }, + { + "id": 350, + "name": "mymodule" + }, + { + "id": 351, + "name": "sphinx" + }, + { + "id": 352, + "name": "mwahaha" + }, + { + "id": 353, + "name": "foo3" + }, + { + "id": 354, + "name": "third_party" + }, + { + "id": 355, + "name": "importlib_metadata" + }, + { + "id": 356, + "name": "library" + }, + { + "id": 357, + "name": "directory" + }, + { + "id": 358, + "name": "b" + }, + { + "id": 359, + "name": "bb" + }, + { + "id": 360, + "name": "pkgfoo" + }, + { + "id": 361, + "name": "g" + }, + { + "id": 362, + "name": "geopandas" + }, + { + "id": 363, + "name": "transport" + }, + { + "id": 364, + "name": "foo4" + }, + { + "id": 365, + "name": "hello" + }, + { + "id": 366, + "name": "lib6" + }, + { + "id": 367, + "name": "h" + }, + { + "id": 368, + "name": "moo" + }, + { + "id": 369, + "name": "numpy10" + }, + { + "id": 370, + "name": "dask" + }, + { + "id": 371, + "name": "lib5" + }, + { + "id": 372, + "name": "this" + }, + { + "id": 373, + "name": "tests" + }, + { + "id": 374, + "name": "F" + }, + { + "id": 375, + "name": "module1" + }, + { + "id": 376, + "name": "bar" + }, + { + "id": 377, + "name": "lib3" + }, + { + "id": 378, + "name": "gi" + }, + { + "id": 379, + "name": "d" + }, + { + "id": 380, + "name": "core" + }, + { + "id": 381, + "name": "holoviews" + }, + { + "id": 382, + "name": "logging_setup" + }, + { + "id": 383, + "name": "office_helper" + }, + { + "id": 384, + "name": "pyproj" + }, + { + "id": 385, + "name": "foo" + }, + { + "id": 386, + "name": "mod" + }, + { + "id": 387, + "name": "ruff" + }, + { + "id": 388, + "name": "foo8" + }, + { + "id": 389, + "name": "warning" + }, + { + "id": 390, + "name": "foo1" + }, + { + "id": 391, + "name": "foo12" + }, + { + "id": 392, + "name": "j" + }, + { + "id": 393, + "name": "package" + }, + { + "id": 394, + "name": "other" + }, + { + "id": 395, + "name": "line_with_93" + }, + { + "id": 396, + "name": "module" + }, + { + "id": 397, + "name": "datastructures" + }, + { + "id": 398, + "name": "cc" + }, + { + "id": 399, + "name": "orjson" + }, + { + "id": 400, + "name": "altair" + }, + { + "id": 401, + "name": "long_module_name" + }, + { + "id": 402, + "name": "foo5" + }, + { + "id": 403, + "name": "e" + }, + { + "id": 404, + "name": "C" + }, + { + "id": 405, + "name": "panel" + }, + { + "id": 406, + "name": "foo11" + }, + { + "id": 407, + "name": "lib1" + }, + { + "id": 408, + "name": "socketio" + }, + { + "id": 409, + "name": "watchdog" + }, + { + "id": 410, + "name": "selenium" + }, + { + "id": 411, + "name": "starlette_admin" + }, + { + "id": 412, + "name": "cloudpickle" + }, + { + "id": 413, + "name": "asynctest" + }, + { + "id": 414, + "name": "GPUtil" + }, + { + "id": 415, + "name": "torchtext" + }, + { + "id": 416, + "name": "ptitprince" + }, + { + "id": 417, + "name": "xgboost_ray" + }, + { + "id": 418, + "name": "joblib" + }, + { + "id": 419, + "name": "torchmetrics" + }, + { + "id": 420, + "name": "horovod" + }, + { + "id": 421, + "name": "dataclasses_json" + }, + { + "id": 422, + "name": "gpustat" + }, + { + "id": 423, + "name": "marshmallow_jsonschema" + }, + { + "id": 424, + "name": "aim" + }, + { + "id": 425, + "name": "fsspec" + }, + { + "id": 426, + "name": "lightgbm" + }, + { + "id": 427, + "name": "daft" + }, + { + "id": 428, + "name": "marshmallow" + }, + { + "id": 429, + "name": "wget" + }, + { + "id": 430, + "name": "urllib3" + }, + { + "id": 431, + "name": "comet_ml" + }, + { + "id": 432, + "name": "torchinfo" + }, + { + "id": 433, + "name": "neuropod" + }, + { + "id": 434, + "name": "hiplot" + }, + { + "id": 435, + "name": "hummingbird" + }, + { + "id": 436, + "name": "mpl_toolkits" + }, + { + "id": 437, + "name": "modin" + }, + { + "id": 438, + "name": "cpuinfo" + }, + { + "id": 439, + "name": "torchaudio" + }, + { + "id": 440, + "name": "marshmallow_dataclass" + }, + { + "id": 441, + "name": "lightgbm_ray" + }, + { + "id": 442, + "name": "filelock" + }, + { + "id": 443, + "name": "mediapipe" + }, + { + "id": 444, + "name": "panopticapi" + }, + { + "id": 445, + "name": "pygments" + }, + { + "id": 446, + "name": "tensorboardX" + }, + { + "id": 447, + "name": "svglib" + }, + { + "id": 448, + "name": "roslib" + }, + { + "id": 449, + "name": "hydra" + }, + { + "id": 450, + "name": "reportlab" + }, + { + "id": 451, + "name": "mmdet" + }, + { + "id": 452, + "name": "onnxruntime" + }, + { + "id": 453, + "name": "geffnet" + }, + { + "id": 454, + "name": "zoedepth" + }, + { + "id": 455, + "name": "prettytable" + }, + { + "id": 456, + "name": "fairscale" + }, + { + "id": 457, + "name": "launch" + }, + { + "id": 458, + "name": "parrots" + }, + { + "id": 459, + "name": "petrel_client" + }, + { + "id": 460, + "name": "rospy" + }, + { + "id": 461, + "name": "ftfy" + }, + { + "id": 462, + "name": "yapf" + }, + { + "id": 463, + "name": "tifffile" + }, + { + "id": 464, + "name": "fvcore" + }, + { + "id": 465, + "name": "mc" + }, + { + "id": 466, + "name": "cv_bridge" + }, + { + "id": 467, + "name": "openvino" + }, + { + "id": 468, + "name": "onnx" + }, + { + "id": 469, + "name": "termcolor" + }, + { + "id": 470, + "name": "midas" + }, + { + "id": 471, + "name": "shapely" + }, + { + "id": 472, + "name": "kornia" + }, + { + "id": 473, + "name": "lvis" + }, + { + "id": 474, + "name": "mmpose" + }, + { + "id": 475, + "name": "cityscapesscripts" + }, + { + "id": 476, + "name": "modules" + }, + { + "id": 477, + "name": "webdriver_manager" + }, + { + "id": 478, + "name": "std_msgs" + }, + { + "id": 479, + "name": "regex" + }, + { + "id": 480, + "name": "turbojpeg" + }, + { + "id": 481, + "name": "addict" + }, + { + "id": 482, + "name": "pavi" + }, + { + "id": 483, + "name": "ceph" + }, + { + "id": 484, + "name": "torch_tb_profiler" + }, + { + "id": 485, + "name": "lmdb" + }, + { + "id": 486, + "name": "mmcv" + }, + { + "id": 487, + "name": "iopath" + }, + { + "id": 488, + "name": "dominate" + }, + { + "id": 489, + "name": "sensor_msgs" + }, + { + "id": 490, + "name": "imutils" + }, + { + "id": 491, + "name": "data" + }, + { + "id": 492, + "name": "caffe2" + }, + { + "id": 493, + "name": "mmseg" + }, + { + "id": 494, + "name": "requests_xml" + }, + { + "id": 495, + "name": "Cython" + }, + { + "id": 496, + "name": "httptools" + }, + { + "id": 497, + "name": "prometheus_client" + }, + { + "id": 498, + "name": "coverage" + }, + { + "id": 499, + "name": "blib2to3" + }, + { + "id": 500, + "name": "graphql" + }, + { + "id": 501, + "name": "immutables" + }, + { + "id": 502, + "name": "pyflakes" + }, + { + "id": 503, + "name": "edgedb" + }, + { + "id": 504, + "name": "jwcrypto" + }, + { + "id": 505, + "name": "debugpy" + }, + { + "id": 506, + "name": "parsing" + }, + { + "id": 507, + "name": "setuptools_rust" + }, + { + "id": 508, + "name": "setproctitle" + }, + { + "id": 509, + "name": "docutils" + }, + { + "id": 510, + "name": "flake8" + }, + { + "id": 511, + "name": "mypy" + }, + { + "id": 512, + "name": "sphinx_rtd_theme" + }, + { + "id": 513, + "name": "auto_gptq" + }, + { + "id": 514, + "name": "tvm" + }, + { + "id": 515, + "name": "tlcpack_sphinx_addon" + }, + { + "id": 516, + "name": "shortuuid" + }, + { + "id": 517, + "name": "api_v1" + }, + { + "id": 518, + "name": "gpt4all" + }, + { + "id": 519, + "name": "sentencepiece" + }, + { + "id": 520, + "name": "nomic" + }, + { + "id": 521, + "name": "jsonlines" + }, + { + "id": 522, + "name": "clip_server" + }, + { + "id": 523, + "name": "jina" + }, + { + "id": 524, + "name": "tensorrt" + }, + { + "id": 525, + "name": "cn_clip" + }, + { + "id": 526, + "name": "onnxmltools" + }, + { + "id": 527, + "name": "clip_client" + }, + { + "id": 528, + "name": "docarray" + }, + { + "id": 529, + "name": "pillow_avif" + }, + { + "id": 530, + "name": "annlite" + }, + { + "id": 531, + "name": "opentelemetry" + }, + { + "id": 532, + "name": "intel_extension_for_pytorch" + }, + { + "id": 533, + "name": "optuna" + }, + { + "id": 534, + "name": "torch_xla" + }, + { + "id": 535, + "name": "smdistributed" + }, + { + "id": 536, + "name": "streamlit_chat" + }, + { + "id": 537, + "name": "torchdistx" + }, + { + "id": 538, + "name": "pydantic_settings" + }, + { + "id": 539, + "name": "pydantic_core" + }, + { + "id": 540, + "name": "material" + }, + { + "id": 541, + "name": "strawberry" + }, + { + "id": 542, + "name": "multipart" + }, + { + "id": 543, + "name": "peewee" + }, + { + "id": 544, + "name": "email_validator" + }, + { + "id": 545, + "name": "couchbase" + }, + { + "id": 546, + "name": "mkdocs" + }, + { + "id": 547, + "name": "databases" + }, + { + "id": 548, + "name": "markupsafe" + }, + { + "id": 549, + "name": "dirty_equals" + }, + { + "id": 550, + "name": "rwkv" + }, + { + "id": 551, + "name": "deepspeed" + }, + { + "id": 552, + "name": "tinychat" + }, + { + "id": 553, + "name": "prompt_toolkit" + }, + { + "id": 554, + "name": "vertexai" + }, + { + "id": 555, + "name": "polyglot" + }, + { + "id": 556, + "name": "anthropic" + }, + { + "id": 557, + "name": "pycld2" + }, + { + "id": 558, + "name": "vllm" + }, + { + "id": 559, + "name": "markdownify" + }, + { + "id": 560, + "name": "llama" + }, + { + "id": 561, + "name": "tests_pytorch" + }, + { + "id": 562, + "name": "gym" + }, + { + "id": 563, + "name": "starsessions" + }, + { + "id": 564, + "name": "lightning_api_access" + }, + { + "id": 565, + "name": "s3fs" + }, + { + "id": 566, + "name": "dash_renderjson" + }, + { + "id": 567, + "name": "rl" + }, + { + "id": 568, + "name": "lightning_habana" + }, + { + "id": 569, + "name": "deepdiff" + }, + { + "id": 570, + "name": "lit_jupyter" + }, + { + "id": 571, + "name": "justpy" + }, + { + "id": 572, + "name": "croniter" + }, + { + "id": 573, + "name": "inquirer" + }, + { + "id": 574, + "name": "websockets" + }, + { + "id": 575, + "name": "lightning_cloud" + }, + { + "id": 576, + "name": "tests_cloud" + }, + { + "id": 577, + "name": "pympler" + }, + { + "id": 578, + "name": "param" + }, + { + "id": 579, + "name": "get_ipython" + }, + { + "id": 580, + "name": "gymnasium" + }, + { + "id": 581, + "name": "integrations_app" + }, + { + "id": 582, + "name": "lightning_graphcore" + }, + { + "id": 583, + "name": "__main__" + }, + { + "id": 584, + "name": "tests_fabric" + }, + { + "id": 585, + "name": "pt_lightning_sphinx_theme" + }, + { + "id": 586, + "name": "lightning_app" + }, + { + "id": 587, + "name": "flask_cors" + }, + { + "id": 588, + "name": "tests_app" + }, + { + "id": 589, + "name": "jsonargparse" + }, + { + "id": 590, + "name": "parity_fabric" + }, + { + "id": 591, + "name": "learn2learn" + }, + { + "id": 592, + "name": "dash" + }, + { + "id": 593, + "name": "lightning_bagua" + }, + { + "id": 594, + "name": "dash_daq" + }, + { + "id": 595, + "name": "backoff" + }, + { + "id": 596, + "name": "lightning_utilities" + }, + { + "id": 597, + "name": "docstring_parser" + }, + { + "id": 598, + "name": "torchdata" + }, + { + "id": 599, + "name": "lightning_colossalai" + }, + { + "id": 600, + "name": "placeholdername" + }, + { + "id": 601, + "name": "flash" + }, + { + "id": 602, + "name": "parity_pytorch" + }, + { + "id": 603, + "name": "streamlit_autorefresh" + }, + { + "id": 604, + "name": "cherry" + }, + { + "id": 605, + "name": "mpi4py" + }, + { + "id": 606, + "name": "adlfs" + }, + { + "id": 607, + "name": "tensorboard" + }, + { + "id": 608, + "name": "lai_sphinx_theme" + }, + { + "id": 609, + "name": "rank_bm25" + }, + { + "id": 610, + "name": "boilerpy3" + }, + { + "id": 611, + "name": "fitz" + }, + { + "id": 612, + "name": "pytesseract" + }, + { + "id": 613, + "name": "platformdirs" + }, + { + "id": 614, + "name": "canals" + }, + { + "id": 615, + "name": "faiss" + }, + { + "id": 616, + "name": "seqeval" + }, + { + "id": 617, + "name": "astroid" + }, + { + "id": 618, + "name": "beir" + }, + { + "id": 619, + "name": "prompthub" + }, + { + "id": 620, + "name": "networkx" + }, + { + "id": 621, + "name": "elastic_transport" + }, + { + "id": 622, + "name": "pydoc_markdown" + }, + { + "id": 623, + "name": "more_itertools" + }, + { + "id": 624, + "name": "docspec" + }, + { + "id": 625, + "name": "onnxruntime_tools" + }, + { + "id": 626, + "name": "quantulum3" + }, + { + "id": 627, + "name": "langdetect" + }, + { + "id": 628, + "name": "magic" + }, + { + "id": 629, + "name": "frontmatter" + }, + { + "id": 630, + "name": "pylint" + }, + { + "id": 631, + "name": "responses" + }, + { + "id": 632, + "name": "posthog" + }, + { + "id": 633, + "name": "rapidfuzz" + }, + { + "id": 634, + "name": "events" + }, + { + "id": 635, + "name": "requests_cache" + }, + { + "id": 636, + "name": "opensearchpy" + }, + { + "id": 637, + "name": "datadog" + }, + { + "id": 638, + "name": "pygraphviz" + }, + { + "id": 639, + "name": "whisper" + }, + { + "id": 640, + "name": "numba" + }, + { + "id": 641, + "name": "aenum" + }, + { + "id": 642, + "name": "openapi_server" + }, + { + "id": 643, + "name": "Crypto" + }, + { + "id": 644, + "name": "connexion" + }, + { + "id": 645, + "name": "flask_testing" + }, + { + "id": 646, + "name": "openapi_client" + }, + { + "id": 647, + "name": "petstore_api" + }, + { + "id": 648, + "name": "pyaudio" + }, + { + "id": 649, + "name": "pgl" + }, + { + "id": 650, + "name": "backports" + }, + { + "id": 651, + "name": "run_squad" + }, + { + "id": 652, + "name": "LAC" + }, + { + "id": 653, + "name": "onnxconverter_common" + }, + { + "id": 654, + "name": "_jsonnet" + }, + { + "id": 655, + "name": "annotator" + }, + { + "id": 656, + "name": "uie" + }, + { + "id": 657, + "name": "pycocotools" + }, + { + "id": 658, + "name": "reprod_log" + }, + { + "id": 659, + "name": "easydict" + }, + { + "id": 660, + "name": "colorlog" + }, + { + "id": 661, + "name": "paddleseg" + }, + { + "id": 662, + "name": "paddleslim" + }, + { + "id": 663, + "name": "paddle2onnx" + }, + { + "id": 664, + "name": "ipadic" + }, + { + "id": 665, + "name": "simnet" + }, + { + "id": 666, + "name": "predict_glue" + }, + { + "id": 667, + "name": "sqlparse" + }, + { + "id": 668, + "name": "roberta" + }, + { + "id": 669, + "name": "ann_util" + }, + { + "id": 670, + "name": "visualdl" + }, + { + "id": 671, + "name": "configuration" + }, + { + "id": 672, + "name": "export_generation" + }, + { + "id": 673, + "name": "multiprocess" + }, + { + "id": 674, + "name": "task" + }, + { + "id": 675, + "name": "modeling" + }, + { + "id": 676, + "name": "dataset" + }, + { + "id": 677, + "name": "fugashi" + }, + { + "id": 678, + "name": "trustai" + }, + { + "id": 679, + "name": "pypinyin" + }, + { + "id": 680, + "name": "note_seq" + }, + { + "id": 681, + "name": "ppfleetx_ops" + }, + { + "id": 682, + "name": "cn2an" + }, + { + "id": 683, + "name": "tls" + }, + { + "id": 684, + "name": "sahi" + }, + { + "id": 685, + "name": "run_glue_trainer" + }, + { + "id": 686, + "name": "t5_dataset" + }, + { + "id": 687, + "name": "milvus" + }, + { + "id": 688, + "name": "export_glue" + }, + { + "id": 689, + "name": "src" + }, + { + "id": 690, + "name": "markdown" + }, + { + "id": 691, + "name": "pdfplumber" + }, + { + "id": 692, + "name": "wordcloud" + }, + { + "id": 693, + "name": "model_interpretation" + }, + { + "id": 694, + "name": "progressbar" + }, + { + "id": 695, + "name": "tensorflow_text" + }, + { + "id": 696, + "name": "reader" + }, + { + "id": 697, + "name": "Mykytea" + }, + { + "id": 698, + "name": "pydub" + }, + { + "id": 699, + "name": "predict_generation" + }, + { + "id": 700, + "name": "predict" + }, + { + "id": 701, + "name": "subword_nmt" + }, + { + "id": 702, + "name": "text2sql" + }, + { + "id": 703, + "name": "data_util" + }, + { + "id": 704, + "name": "cog" + }, + { + "id": 705, + "name": "saliency_map" + }, + { + "id": 706, + "name": "pythainlp" + }, + { + "id": 707, + "name": "data_tools" + }, + { + "id": 708, + "name": "pyrsistent" + }, + { + "id": 709, + "name": "baidubce" + }, + { + "id": 710, + "name": "readers" + }, + { + "id": 711, + "name": "modeling_pp" + }, + { + "id": 712, + "name": "mmh3" + }, + { + "id": 713, + "name": "paddle" + }, + { + "id": 714, + "name": "paddlehub" + }, + { + "id": 715, + "name": "milvus_util" + }, + { + "id": 716, + "name": "attrdict" + }, + { + "id": 717, + "name": "base_model" + }, + { + "id": 718, + "name": "layoutlmft" + }, + { + "id": 719, + "name": "_io" + }, + { + "id": 720, + "name": "rouge" + }, + { + "id": 721, + "name": "paddleocr" + }, + { + "id": 722, + "name": "pdf2image" + }, + { + "id": 723, + "name": "editdistance" + }, + { + "id": 724, + "name": "tool_helpers" + }, + { + "id": 725, + "name": "args" + }, + { + "id": 726, + "name": "run_msra_ner" + }, + { + "id": 727, + "name": "pyrouge" + }, + { + "id": 728, + "name": "rnn" + }, + { + "id": 729, + "name": "infer_generation" + }, + { + "id": 730, + "name": "auto_log" + }, + { + "id": 731, + "name": "annotated_text" + }, + { + "id": 732, + "name": "zstandard" + }, + { + "id": 733, + "name": "paddle_serving_client" + }, + { + "id": 734, + "name": "pymysql" + }, + { + "id": 735, + "name": "ligo" + }, + { + "id": 736, + "name": "run_pretrain" + }, + { + "id": 737, + "name": "pip" + }, + { + "id": 738, + "name": "paddle_serving_server_gpu" + }, + { + "id": 739, + "name": "finetune_generation" + }, + { + "id": 740, + "name": "boomup" + }, + { + "id": 741, + "name": "gensim" + }, + { + "id": 742, + "name": "hnswlib" + }, + { + "id": 743, + "name": "parameterized" + }, + { + "id": 744, + "name": "paddle_serving_server" + }, + { + "id": 745, + "name": "metric" + }, + { + "id": 746, + "name": "run_pretrain_trainer" + }, + { + "id": 747, + "name": "export_model" + }, + { + "id": 748, + "name": "deploy" + }, + { + "id": 749, + "name": "run_glue" + }, + { + "id": 750, + "name": "ui" + }, + { + "id": 751, + "name": "fastdeploy" + }, + { + "id": 752, + "name": "asdl" + }, + { + "id": 753, + "name": "nvgpu" + }, + { + "id": 754, + "name": "librosa" + }, + { + "id": 755, + "name": "_locale" + }, + { + "id": 756, + "name": "run_classifier" + }, + { + "id": 757, + "name": "fastcore" + }, + { + "id": 758, + "name": "tokenizer" + }, + { + "id": 759, + "name": "progress" + }, + { + "id": 760, + "name": "hyperopt" + }, + { + "id": 761, + "name": "LIME" + }, + { + "id": 762, + "name": "fastBPE" + }, + { + "id": 763, + "name": "unidic_lite" + }, + { + "id": 764, + "name": "unidic" + }, + { + "id": 765, + "name": "attr" + }, + { + "id": 766, + "name": "rest_api" + }, + { + "id": 767, + "name": "fused_ln" + }, + { + "id": 768, + "name": "tokenizers_pegasus" + }, + { + "id": 769, + "name": "run_generation" + }, + { + "id": 770, + "name": "run_finetune" + }, + { + "id": 771, + "name": "ppfleetx" + }, + { + "id": 772, + "name": "config" + }, + { + "id": 773, + "name": "MLWorkflow" + }, + { + "id": 774, + "name": "labeling_job_state_change" + }, + { + "id": 775, + "name": "aws_requests_auth" + }, + { + "id": 776, + "name": "rl_coach" + }, + { + "id": 777, + "name": "eppy" + }, + { + "id": 778, + "name": "docker" + }, + { + "id": 779, + "name": "autogluon" + }, + { + "id": 780, + "name": "mo" + }, + { + "id": 781, + "name": "greengrasssdk" + }, + { + "id": 782, + "name": "sagemaker_inference" + }, + { + "id": 783, + "name": "sagemaker_rl" + }, + { + "id": 784, + "name": "gluonts" + }, + { + "id": 785, + "name": "transformers_neuronx" + }, + { + "id": 786, + "name": "ActiveLearning" + }, + { + "id": 787, + "name": "mxnet" + }, + { + "id": 788, + "name": "papermill" + }, + { + "id": 789, + "name": "api_batch_create" + }, + { + "id": 790, + "name": "Labeling" + }, + { + "id": 791, + "name": "shap" + }, + { + "id": 792, + "name": "smdebug" + }, + { + "id": 793, + "name": "step_functions_send_second_level_sns_and_check_response" + }, + { + "id": 794, + "name": "moto" + }, + { + "id": 795, + "name": "awscli" + }, + { + "id": 796, + "name": "pygame" + }, + { + "id": 797, + "name": "agent_pb2" + }, + { + "id": 798, + "name": "fasttext" + }, + { + "id": 799, + "name": "xgboost" + }, + { + "id": 800, + "name": "tensorpack" + }, + { + "id": 801, + "name": "dgl" + }, + { + "id": 802, + "name": "xmltodict" + }, + { + "id": 803, + "name": "test_shared" + }, + { + "id": 804, + "name": "cupy" + }, + { + "id": 805, + "name": "aitemplate" + }, + { + "id": 806, + "name": "roboschool" + }, + { + "id": 807, + "name": "s3_helper" + }, + { + "id": 808, + "name": "ipywidgets" + }, + { + "id": 809, + "name": "sagemaker_xgboost_container" + }, + { + "id": 810, + "name": "sagemaker_containers" + }, + { + "id": 811, + "name": "argh" + }, + { + "id": 812, + "name": "faker" + }, + { + "id": 813, + "name": "chalice" + }, + { + "id": 814, + "name": "eplus" + }, + { + "id": 815, + "name": "dask_cudf" + }, + { + "id": 816, + "name": "Bootstrap" + }, + { + "id": 817, + "name": "causalnex" + }, + { + "id": 818, + "name": "mlagents_envs" + }, + { + "id": 819, + "name": "pyspark" + }, + { + "id": 820, + "name": "cuml" + }, + { + "id": 821, + "name": "awscam" + }, + { + "id": 822, + "name": "py3nvml" + }, + { + "id": 823, + "name": "pyvis" + }, + { + "id": 824, + "name": "bokeh" + }, + { + "id": 825, + "name": "torch_neuronx" + }, + { + "id": 826, + "name": "retrying" + }, + { + "id": 827, + "name": "cudf" + }, + { + "id": 828, + "name": "multiprocessing_train" + }, + { + "id": 829, + "name": "step_functions_batch_error" + }, + { + "id": 830, + "name": "smjsindustry" + }, + { + "id": 831, + "name": "my_custom_library" + }, + { + "id": 832, + "name": "orchestrator" + }, + { + "id": 833, + "name": "api_batch_show" + }, + { + "id": 834, + "name": "sagemaker_pytorch_serving_container" + }, + { + "id": 835, + "name": "rl_operations_research_baselines" + }, + { + "id": 836, + "name": "tensorflow_datasets" + }, + { + "id": 837, + "name": "shared" + }, + { + "id": 838, + "name": "captum" + }, + { + "id": 839, + "name": "MetaData" + }, + { + "id": 840, + "name": "neopytorch" + }, + { + "id": 841, + "name": "djl_python" + }, + { + "id": 842, + "name": "torcheia" + }, + { + "id": 843, + "name": "gluoncv" + }, + { + "id": 844, + "name": "torch_neuron" + }, + { + "id": 845, + "name": "stable_baselines" + }, + { + "id": 846, + "name": "segment_anything" + }, + { + "id": 847, + "name": "awswrangler" + }, + { + "id": 848, + "name": "tensorflow_addons" + }, + { + "id": 849, + "name": "jax" + }, + { + "id": 850, + "name": "neomx" + }, + { + "id": 851, + "name": "gym_unity" + }, + { + "id": 852, + "name": "sagemaker_training" + }, + { + "id": 853, + "name": "smexperiments" + }, + { + "id": 854, + "name": "step_functions_copy_logs_and_send_batch_completed" + }, + { + "id": 855, + "name": "saicinpainting" + }, + { + "id": 856, + "name": "agent_pb2_grpc" + }, + { + "id": 857, + "name": "keras" + }, + { + "id": 858, + "name": "string_helper" + }, + { + "id": 859, + "name": "gluonnlp" + }, + { + "id": 860, + "name": "ts" + }, + { + "id": 861, + "name": "awsglue" + }, + { + "id": 862, + "name": "fairseq" + }, + { + "id": 863, + "name": "trax" + }, + { + "id": 864, + "name": "trainer" + }, + { + "id": 865, + "name": "pipelines" + }, + { + "id": 866, + "name": "util" + }, + { + "id": 867, + "name": "eval" + }, + { + "id": 868, + "name": "sagemaker" + }, + { + "id": 869, + "name": "sagemaker_tensorflow" + }, + { + "id": 870, + "name": "Output" + }, + { + "id": 871, + "name": "dask_ml" + }, + { + "id": 872, + "name": "catboost" + }, + { + "id": 873, + "name": "dask_cuda" + }, + { + "id": 874, + "name": "fastapi_socketio" + }, + { + "id": 875, + "name": "compel" + }, + { + "id": 876, + "name": "pyperclip" + }, + { + "id": 877, + "name": "easing_functions" + }, + { + "id": 878, + "name": "send2trash" + }, + { + "id": 879, + "name": "flask_socketio" + }, + { + "id": 880, + "name": "picklescan" + }, + { + "id": 881, + "name": "npyscreen" + }, + { + "id": 882, + "name": "plumbum" + }, + { + "id": 883, + "name": "flaskwebgui" + }, + { + "id": 884, + "name": "dynamicprompts" + }, + { + "id": 885, + "name": "eventlet" + }, + { + "id": 886, + "name": "werkzeug" + }, + { + "id": 887, + "name": "fastapi_events" + }, + { + "id": 888, + "name": "controlnet_aux" + }, + { + "id": 889, + "name": "func_timeout" + }, + { + "id": 890, + "name": "haiku" + }, + { + "id": 891, + "name": "pathy" + }, + { + "id": 892, + "name": "lm_dataformat" + }, + { + "id": 893, + "name": "smart_open" + }, + { + "id": 894, + "name": "optax" + }, + { + "id": 895, + "name": "lm_eval" + }, + { + "id": 896, + "name": "llama_cpp" + }, + { + "id": 897, + "name": "serge" + }, + { + "id": 898, + "name": "pypika" + }, + { + "id": 899, + "name": "text2vec" + }, + { + "id": 900, + "name": "InstructorEmbedding" + }, + { + "id": 901, + "name": "hypothesis" + }, + { + "id": 902, + "name": "overrides" + }, + { + "id": 903, + "name": "cohere" + }, + { + "id": 904, + "name": "pulsar" + }, + { + "id": 905, + "name": "guillotina" + }, + { + "id": 906, + "name": "quart" + }, + { + "id": 907, + "name": "masoniteorm" + }, + { + "id": 908, + "name": "apidaora" + }, + { + "id": 909, + "name": "tornado" + }, + { + "id": 910, + "name": "ninja" + }, + { + "id": 911, + "name": "routerling" + }, + { + "id": 912, + "name": "nameko" + }, + { + "id": 913, + "name": "cherrypy" + }, + { + "id": 914, + "name": "klein" + }, + { + "id": 915, + "name": "hug" + }, + { + "id": 916, + "name": "tonberry" + }, + { + "id": 917, + "name": "emmett" + }, + { + "id": 918, + "name": "asgineer" + }, + { + "id": 919, + "name": "pyramid" + }, + { + "id": 920, + "name": "baize" + }, + { + "id": 921, + "name": "masonite" + }, + { + "id": 922, + "name": "clastic" + }, + { + "id": 923, + "name": "bottle" + }, + { + "id": 924, + "name": "indexpy" + }, + { + "id": 925, + "name": "blacksheep" + }, + { + "id": 926, + "name": "falcon" + }, + { + "id": 927, + "name": "molten" + }, + { + "id": 928, + "name": "pygtrie" + }, + { + "id": 929, + "name": "yarl" + }, + { + "id": 930, + "name": "multidict" + }, + { + "id": 931, + "name": "nonebug" + }, + { + "id": 932, + "name": "tomli" + }, + { + "id": 933, + "name": "plugins" + }, + { + "id": 934, + "name": "reactpy" + }, + { + "id": 935, + "name": "flask_sock" + }, + { + "id": 936, + "name": "toml" + }, + { + "id": 937, + "name": "invoke" + }, + { + "id": 938, + "name": "sphinx_autobuild" + }, + { + "id": 939, + "name": "docs_app" + }, + { + "id": 940, + "name": "simple_websocket" + }, + { + "id": 941, + "name": "semver" + }, + { + "id": 942, + "name": "jsonpointer" + }, + { + "id": 943, + "name": "sanic_cors" + }, + { + "id": 944, + "name": "sphinx_design" + }, + { + "id": 945, + "name": "fastjsonschema" + }, + { + "id": 946, + "name": "pytest_mock" + }, + { + "id": 947, + "name": "tzlocal" + }, + { + "id": 948, + "name": "apscheduler" + }, + { + "id": 949, + "name": "paho" + }, + { + "id": 950, + "name": "cbor2" + }, + { + "id": 951, + "name": "pytest_lazyfixture" + }, + { + "id": 952, + "name": "sniffio" + }, + { + "id": 953, + "name": "freezegun" + }, + { + "id": 954, + "name": "statsmodels" + }, + { + "id": 955, + "name": "pydash" + }, + { + "id": 956, + "name": "numpy_groupies" + }, + { + "id": 957, + "name": "aioredis" + }, + { + "id": 958, + "name": "jesse_live" + }, + { + "id": 959, + "name": "mplfinance" + }, + { + "id": 960, + "name": "talib" + }, + { + "id": 961, + "name": "pywt" + }, + { + "id": 962, + "name": "tulipy" + }, + { + "id": 963, + "name": "simplejson" + }, + { + "id": 964, + "name": "timeloop" + }, + { + "id": 965, + "name": "playhouse" + }, + { + "id": 966, + "name": "weppy" + }, + { + "id": 967, + "name": "aiopg" + }, + { + "id": 968, + "name": "MySQLdb" + }, + { + "id": 969, + "name": "eve" + }, + { + "id": 970, + "name": "meinheld" + }, + { + "id": 971, + "name": "bjoern" + }, + { + "id": 972, + "name": "bareasgi_jinja2" + }, + { + "id": 973, + "name": "vibora" + }, + { + "id": 974, + "name": "cachetools" + }, + { + "id": 975, + "name": "morepath" + }, + { + "id": 976, + "name": "microdot_jinja" + }, + { + "id": 977, + "name": "crax" + }, + { + "id": 978, + "name": "paste" + }, + { + "id": 979, + "name": "fastwsgi" + }, + { + "id": 980, + "name": "aioworkers" + }, + { + "id": 981, + "name": "alchemical" + }, + { + "id": 982, + "name": "WebKit" + }, + { + "id": 983, + "name": "world" + }, + { + "id": 984, + "name": "socketify" + }, + { + "id": 985, + "name": "pony" + }, + { + "id": 986, + "name": "asyncache" + }, + { + "id": 987, + "name": "responder" + }, + { + "id": 988, + "name": "controller" + }, + { + "id": 989, + "name": "gluon" + }, + { + "id": 990, + "name": "more" + }, + { + "id": 991, + "name": "aioworkers_pg" + }, + { + "id": 992, + "name": "momoko" + }, + { + "id": 993, + "name": "tg" + }, + { + "id": 994, + "name": "frameworkbenchmarks" + }, + { + "id": 995, + "name": "robyn" + }, + { + "id": 996, + "name": "bareasgi" + }, + { + "id": 997, + "name": "microdot_wsgi" + }, + { + "id": 998, + "name": "microdot_asgi" + }, + { + "id": 999, + "name": "webtest" + }, + { + "id": 1000, + "name": "starlite" + }, + { + "id": 1001, + "name": "aiohttp_jinja2" + }, + { + "id": 1002, + "name": "api_hour" + }, + { + "id": 1003, + "name": "asyncworker" + }, + { + "id": 1004, + "name": "colorama" + }, + { + "id": 1005, + "name": "japronto" + }, + { + "id": 1006, + "name": "aiomysql" + }, + { + "id": 1007, + "name": "motor" + }, + { + "id": 1008, + "name": "waitress" + }, + { + "id": 1009, + "name": "xpresso" + }, + { + "id": 1010, + "name": "tortoise" + }, + { + "id": 1011, + "name": "granian" + }, + { + "id": 1012, + "name": "traitlets" + }, + { + "id": 1013, + "name": "perspective" + }, + { + "id": 1014, + "name": "jupyter_packaging" + }, + { + "id": 1015, + "name": "sphinxcontrib" + }, + { + "id": 1016, + "name": "statsd" + }, + { + "id": 1017, + "name": "jupyter_core" + }, + { + "id": 1018, + "name": "certipy" + }, + { + "id": 1019, + "name": "async_generator" + }, + { + "id": 1020, + "name": "pytablewriter" + }, + { + "id": 1021, + "name": "oauthlib" + }, + { + "id": 1022, + "name": "oauthenticator" + }, + { + "id": 1023, + "name": "jupyter_server" + }, + { + "id": 1024, + "name": "notebook" + }, + { + "id": 1025, + "name": "pamela" + }, + { + "id": 1026, + "name": "jupyter_client" + }, + { + "id": 1027, + "name": "jupyterlab" + }, + { + "id": 1028, + "name": "ruamel" + }, + { + "id": 1029, + "name": "jupyter_telemetry" + }, + { + "id": 1030, + "name": "tls_client" + }, + { + "id": 1031, + "name": "bard" + }, + { + "id": 1032, + "name": "quora" + }, + { + "id": 1033, + "name": "defineSQL" + }, + { + "id": 1034, + "name": "pypasser" + }, + { + "id": 1035, + "name": "ora" + }, + { + "id": 1036, + "name": "names" + }, + { + "id": 1037, + "name": "phind" + }, + { + "id": 1038, + "name": "writesonic" + }, + { + "id": 1039, + "name": "wudao" + }, + { + "id": 1040, + "name": "t3nsor" + }, + { + "id": 1041, + "name": "you" + }, + { + "id": 1042, + "name": "browser_cookie3" + }, + { + "id": 1043, + "name": "curl_cffi" + }, + { + "id": 1044, + "name": "gerapy_auto_extractor" + }, + { + "id": 1045, + "name": "chardet" + }, + { + "id": 1046, + "name": "flagai" + }, + { + "id": 1047, + "name": "sqlalchemy_utils" + }, + { + "id": 1048, + "name": "clickhouse_driver" + }, + { + "id": 1049, + "name": "or_dependencies" + }, + { + "id": 1050, + "name": "routers" + }, + { + "id": 1051, + "name": "chalicelib" + }, + { + "id": 1052, + "name": "bigquery_utils" + }, + { + "id": 1053, + "name": "pandas_redshift" + }, + { + "id": 1054, + "name": "schemas" + }, + { + "id": 1055, + "name": "onelogin" + }, + { + "id": 1056, + "name": "schemas_ee" + }, + { + "id": 1057, + "name": "kafka" + }, + { + "id": 1058, + "name": "msgcodec" + }, + { + "id": 1059, + "name": "decouple" + }, + { + "id": 1060, + "name": "pendulum" + }, + { + "id": 1061, + "name": "jwt" + }, + { + "id": 1062, + "name": "handler" + }, + { + "id": 1063, + "name": "messages" + }, + { + "id": 1064, + "name": "aiodocker" + }, + { + "id": 1065, + "name": "async_timeout" + }, + { + "id": 1066, + "name": "iptc" + }, + { + "id": 1067, + "name": "dns" + }, + { + "id": 1068, + "name": "docx" + }, + { + "id": 1069, + "name": "gptcache" + }, + { + "id": 1070, + "name": "auto_gpt_plugin_template" + }, + { + "id": 1071, + "name": "markdown2" + }, + { + "id": 1072, + "name": "unstructured" + }, + { + "id": 1073, + "name": "diskcache" + }, + { + "id": 1074, + "name": "duckdb" + }, + { + "id": 1075, + "name": "bardapi" + }, + { + "id": 1076, + "name": "playsound" + }, + { + "id": 1077, + "name": "simpy" + }, + { + "id": 1078, + "name": "geometry_msgs" + }, + { + "id": 1079, + "name": "isort" + }, + { + "id": 1080, + "name": "vbuild" + }, + { + "id": 1081, + "name": "icecream" + }, + { + "id": 1082, + "name": "rclpy" + }, + { + "id": 1083, + "name": "aiofiles" + }, + { + "id": 1084, + "name": "webview" + }, + { + "id": 1085, + "name": "launch_ros" + }, + { + "id": 1086, + "name": "win32api" + }, + { + "id": 1087, + "name": "netifaces" + }, + { + "id": 1088, + "name": "replicate" + }, + { + "id": 1089, + "name": "img2imgapi" + }, + { + "id": 1090, + "name": "search" + }, + { + "id": 1091, + "name": "serverMain" + }, + { + "id": 1092, + "name": "jaxlib" + }, + { + "id": 1093, + "name": "circus" + }, + { + "id": 1094, + "name": "detectron2" + }, + { + "id": 1095, + "name": "schema" + }, + { + "id": 1096, + "name": "cattrs" + }, + { + "id": 1097, + "name": "grpc_channelz" + }, + { + "id": 1098, + "name": "skl2onnx" + }, + { + "id": 1099, + "name": "simple_di" + }, + { + "id": 1100, + "name": "fastai" + }, + { + "id": 1101, + "name": "model_config_pb2" + }, + { + "id": 1102, + "name": "service_pb2" + }, + { + "id": 1103, + "name": "cattr" + }, + { + "id": 1104, + "name": "pathspec" + }, + { + "id": 1105, + "name": "fs" + }, + { + "id": 1106, + "name": "click_option_group" + }, + { + "id": 1107, + "name": "msgpack" + }, + { + "id": 1108, + "name": "bentoml_cli" + }, + { + "id": 1109, + "name": "chex" + }, + { + "id": 1110, + "name": "grpc_health" + }, + { + "id": 1111, + "name": "deepmerge" + }, + { + "id": 1112, + "name": "filetype" + }, + { + "id": 1113, + "name": "service" + }, + { + "id": 1114, + "name": "pip_requirements_parser" + }, + { + "id": 1115, + "name": "grpc_reflection" + }, + { + "id": 1116, + "name": "flax" + }, + { + "id": 1117, + "name": "watchfiles" + }, + { + "id": 1118, + "name": "build" + }, + { + "id": 1119, + "name": "bentoml" + }, + { + "id": 1120, + "name": "mongoengine" + }, + { + "id": 1121, + "name": "stability_sdk" + }, + { + "id": 1122, + "name": "redis_om" + }, + { + "id": 1123, + "name": "common" + }, + { + "id": 1124, + "name": "m2r2" + }, + { + "id": 1125, + "name": "bytewax" + }, + { + "id": 1126, + "name": "assertpy" + }, + { + "id": 1127, + "name": "fissix" + }, + { + "id": 1128, + "name": "cassandra" + }, + { + "id": 1129, + "name": "testcontainers" + }, + { + "id": 1130, + "name": "mangum" + }, + { + "id": 1131, + "name": "minio" + }, + { + "id": 1132, + "name": "snowflake" + }, + { + "id": 1133, + "name": "hazelcast" + }, + { + "id": 1134, + "name": "kubernetes" + }, + { + "id": 1135, + "name": "_snowflake" + }, + { + "id": 1136, + "name": "proto" + }, + { + "id": 1137, + "name": "happybase" + }, + { + "id": 1138, + "name": "feast" + }, + { + "id": 1139, + "name": "dill" + }, + { + "id": 1140, + "name": "gunicorn" + }, + { + "id": 1141, + "name": "bowler" + }, + { + "id": 1142, + "name": "typeguard" + }, + { + "id": 1143, + "name": "pycloudflared" + }, + { + "id": 1144, + "name": "easydiffusion" + }, + { + "id": 1145, + "name": "sdkit" + }, + { + "id": 1146, + "name": "hyperlpr3" + }, + { + "id": 1147, + "name": "MNN" + }, + { + "id": 1148, + "name": "image_utils" + }, + { + "id": 1149, + "name": "tf" + }, + { + "id": 1150, + "name": "object_detection" + }, + { + "id": 1151, + "name": "tensorflow_hub" + }, + { + "id": 1152, + "name": "dataloader" + }, + { + "id": 1153, + "name": "research" + }, + { + "id": 1154, + "name": "image_classification" + }, + { + "id": 1155, + "name": "efficientnet_model" + }, + { + "id": 1156, + "name": "ml_collections" + }, + { + "id": 1157, + "name": "deeplab" + }, + { + "id": 1158, + "name": "lite" + }, + { + "id": 1159, + "name": "projects" + }, + { + "id": 1160, + "name": "ops" + }, + { + "id": 1161, + "name": "official" + }, + { + "id": 1162, + "name": "hyperparameters" + }, + { + "id": 1163, + "name": "serving" + }, + { + "id": 1164, + "name": "tensorflow_gan" + }, + { + "id": 1165, + "name": "tensorflow_model_optimization" + }, + { + "id": 1166, + "name": "patchwork" + }, + { + "id": 1167, + "name": "apache_beam" + }, + { + "id": 1168, + "name": "executor" + }, + { + "id": 1169, + "name": "nibabel" + }, + { + "id": 1170, + "name": "configs" + }, + { + "id": 1171, + "name": "mnasnet_models" + }, + { + "id": 1172, + "name": "mlperf_loadgen" + }, + { + "id": 1173, + "name": "efficientnet_builder" + }, + { + "id": 1174, + "name": "evaluation" + }, + { + "id": 1175, + "name": "tensorflow_serving" + }, + { + "id": 1176, + "name": "ratelimiter" + }, + { + "id": 1177, + "name": "load_test" + }, + { + "id": 1178, + "name": "mixnet" + }, + { + "id": 1179, + "name": "pymssql" + }, + { + "id": 1180, + "name": "a3" + }, + { + "id": 1181, + "name": "oracledb" + }, + { + "id": 1182, + "name": "pkg_notok" + }, + { + "id": 1183, + "name": "used_in_class" + }, + { + "id": 1184, + "name": "chameleon" + }, + { + "id": 1185, + "name": "top_level_cycle" + }, + { + "id": 1186, + "name": "elsewhere" + }, + { + "id": 1187, + "name": "a4" + }, + { + "id": 1188, + "name": "namespace_package" + }, + { + "id": 1189, + "name": "genericpath" + }, + { + "id": 1190, + "name": "fieldflow" + }, + { + "id": 1191, + "name": "spam" + }, + { + "id": 1192, + "name": "spam_module" + }, + { + "id": 1193, + "name": "slow_system" + }, + { + "id": 1194, + "name": "idna" + }, + { + "id": 1195, + "name": "mongosanitizer" + }, + { + "id": 1196, + "name": "mako" + }, + { + "id": 1197, + "name": "cg_trace" + }, + { + "id": 1198, + "name": "generate_flow_model" + }, + { + "id": 1199, + "name": "cycle" + }, + { + "id": 1200, + "name": "cant_resolve" + }, + { + "id": 1201, + "name": "subexpression_return_type" + }, + { + "id": 1202, + "name": "pkg_ok" + }, + { + "id": 1203, + "name": "airspeed" + }, + { + "id": 1204, + "name": "coloredlogs" + }, + { + "id": 1205, + "name": "rsa" + }, + { + "id": 1206, + "name": "toposort" + }, + { + "id": 1207, + "name": "danger" + }, + { + "id": 1208, + "name": "y" + }, + { + "id": 1209, + "name": "chevron" + }, + { + "id": 1210, + "name": "sendgrid" + }, + { + "id": 1211, + "name": "pycurl" + }, + { + "id": 1212, + "name": "not_found" + }, + { + "id": 1213, + "name": "module_without_all" + }, + { + "id": 1214, + "name": "polymorphic" + }, + { + "id": 1215, + "name": "_s" + }, + { + "id": 1216, + "name": "settings" + }, + { + "id": 1217, + "name": "a1" + }, + { + "id": 1218, + "name": "mod1" + }, + { + "id": 1219, + "name": "flask_admin" + }, + { + "id": 1220, + "name": "genshi" + }, + { + "id": 1221, + "name": "start" + }, + { + "id": 1222, + "name": "foo_module" + }, + { + "id": 1223, + "name": "who_knows_what" + }, + { + "id": 1224, + "name": "subexpression_assignment_annotation" + }, + { + "id": 1225, + "name": "M" + }, + { + "id": 1226, + "name": "unknown_settings" + }, + { + "id": 1227, + "name": "xxx" + }, + { + "id": 1228, + "name": "yyy" + }, + { + "id": 1229, + "name": "flask_user" + }, + { + "id": 1230, + "name": "phoenixdb" + }, + { + "id": 1231, + "name": "testlib" + }, + { + "id": 1232, + "name": "create_database_utils" + }, + { + "id": 1233, + "name": "jmespath" + }, + { + "id": 1234, + "name": "a2" + }, + { + "id": 1235, + "name": "twisted" + }, + { + "id": 1236, + "name": "zope" + }, + { + "id": 1237, + "name": "defusedxml" + }, + { + "id": 1238, + "name": "ham" + }, + { + "id": 1239, + "name": "pyodbc" + }, + { + "id": 1240, + "name": "a6" + }, + { + "id": 1241, + "name": "unknown_module" + }, + { + "id": 1242, + "name": "Cheetah" + }, + { + "id": 1243, + "name": "pyOpenSSL" + }, + { + "id": 1244, + "name": "otherlib" + }, + { + "id": 1245, + "name": "unknown2" + }, + { + "id": 1246, + "name": "libxml2" + }, + { + "id": 1247, + "name": "used_in_doctest" + }, + { + "id": 1248, + "name": "test_package" + }, + { + "id": 1249, + "name": "outside" + }, + { + "id": 1250, + "name": "convert_extensions" + }, + { + "id": 1251, + "name": "imported" + }, + { + "id": 1252, + "name": "eggs" + }, + { + "id": 1253, + "name": "dotted" + }, + { + "id": 1254, + "name": "clever_lazy_module_thing" + }, + { + "id": 1255, + "name": "helpers" + }, + { + "id": 1256, + "name": "rest_framework" + }, + { + "id": 1257, + "name": "antlr3" + }, + { + "id": 1258, + "name": "module_that_does_not_exist" + }, + { + "id": 1259, + "name": "Cryptodome" + }, + { + "id": 1260, + "name": "mypkg" + }, + { + "id": 1261, + "name": "trender" + }, + { + "id": 1262, + "name": "flask_sqlalchemy" + }, + { + "id": 1263, + "name": "aioch" + }, + { + "id": 1264, + "name": "argon2" + }, + { + "id": 1265, + "name": "cx_Oracle" + }, + { + "id": 1266, + "name": "pflask" + }, + { + "id": 1267, + "name": "mod2" + }, + { + "id": 1268, + "name": "nonexistent" + }, + { + "id": 1269, + "name": "never_imported" + }, + { + "id": 1270, + "name": "diagnostics_test_utils" + }, + { + "id": 1271, + "name": "used_in_return_type" + }, + { + "id": 1272, + "name": "ldap" + }, + { + "id": 1273, + "name": "flask_pymongo" + }, + { + "id": 1274, + "name": "only_used_in_parameter_annotation" + }, + { + "id": 1275, + "name": "subexpression_parameter_annotation" + }, + { + "id": 1276, + "name": "undefined" + }, + { + "id": 1277, + "name": "pystache" + }, + { + "id": 1278, + "name": "unknown" + }, + { + "id": 1279, + "name": "only_used_in_annotated_assignment" + }, + { + "id": 1280, + "name": "somwhere" + }, + { + "id": 1281, + "name": "qllexer" + }, + { + "id": 1282, + "name": "flask_mongoengine" + }, + { + "id": 1283, + "name": "libtaxii" + }, + { + "id": 1284, + "name": "OpenSSL" + }, + { + "id": 1285, + "name": "xxxx" + }, + { + "id": 1286, + "name": "used_in_docs" + }, + { + "id": 1287, + "name": "ldap3" + }, + { + "id": 1288, + "name": "taintlib" + }, + { + "id": 1289, + "name": "some_unknown_module" + }, + { + "id": 1290, + "name": "fast_system" + }, + { + "id": 1291, + "name": "torchdiffeq" + }, + { + "id": 1292, + "name": "stqdm" + }, + { + "id": 1293, + "name": "bridgeData" + }, + { + "id": 1294, + "name": "streamlit_server_state" + }, + { + "id": 1295, + "name": "barfi" + }, + { + "id": 1296, + "name": "nataili" + }, + { + "id": 1297, + "name": "decord" + }, + { + "id": 1298, + "name": "modeldownload" + }, + { + "id": 1299, + "name": "hydralit_components" + }, + { + "id": 1300, + "name": "sd_utils" + }, + { + "id": 1301, + "name": "hydralit" + }, + { + "id": 1302, + "name": "streamlit_tensorboard" + }, + { + "id": 1303, + "name": "hydrus_api" + }, + { + "id": 1304, + "name": "txt2img" + }, + { + "id": 1305, + "name": "flet" + }, + { + "id": 1306, + "name": "LDSR" + }, + { + "id": 1307, + "name": "transform" + }, + { + "id": 1308, + "name": "slugify" + }, + { + "id": 1309, + "name": "shutup" + }, + { + "id": 1310, + "name": "streamlit_drawable_canvas" + }, + { + "id": 1311, + "name": "umap" + }, + { + "id": 1312, + "name": "ConfigSpace" + }, + { + "id": 1313, + "name": "skopt" + }, + { + "id": 1314, + "name": "kmodes" + }, + { + "id": 1315, + "name": "daal4py" + }, + { + "id": 1316, + "name": "xxhash" + }, + { + "id": 1317, + "name": "schemdraw" + }, + { + "id": 1318, + "name": "m2cgen" + }, + { + "id": 1319, + "name": "autoviz" + }, + { + "id": 1320, + "name": "wurlitzer" + }, + { + "id": 1321, + "name": "fairlearn" + }, + { + "id": 1322, + "name": "pyod" + }, + { + "id": 1323, + "name": "imblearn" + }, + { + "id": 1324, + "name": "explainerdashboard" + }, + { + "id": 1325, + "name": "tune_sklearn" + }, + { + "id": 1326, + "name": "sktime" + }, + { + "id": 1327, + "name": "deepchecks" + }, + { + "id": 1328, + "name": "pmdarima" + }, + { + "id": 1329, + "name": "fugue" + }, + { + "id": 1330, + "name": "dbruntime" + }, + { + "id": 1331, + "name": "category_encoders" + }, + { + "id": 1332, + "name": "dagshub" + }, + { + "id": 1333, + "name": "evidently" + }, + { + "id": 1334, + "name": "yellowbrick" + }, + { + "id": 1335, + "name": "sklearnex" + }, + { + "id": 1336, + "name": "plotly_resampler" + }, + { + "id": 1337, + "name": "interpret" + }, + { + "id": 1338, + "name": "ydata_profiling" + }, + { + "id": 1339, + "name": "scikitplot" + }, + { + "id": 1340, + "name": "general_utils" + }, + { + "id": 1341, + "name": "lightning_fabric" + }, + { + "id": 1342, + "name": "click_help_colors" + }, + { + "id": 1343, + "name": "pyparsing" + }, + { + "id": 1344, + "name": "click_shell" + }, + { + "id": 1345, + "name": "trails" + }, + { + "id": 1346, + "name": "PyQt5" + }, + { + "id": 1347, + "name": "recommonmark" + }, + { + "id": 1348, + "name": "nvidia" + }, + { + "id": 1349, + "name": "hubserving" + }, + { + "id": 1350, + "name": "python" + }, + { + "id": 1351, + "name": "bcolz" + }, + { + "id": 1352, + "name": "paddle_serving_app" + }, + { + "id": 1353, + "name": "fixtures" + }, + { + "id": 1354, + "name": "highlight_io" + }, + { + "id": 1355, + "name": "brotli" + }, + { + "id": 1356, + "name": "functions_framework" + }, + { + "id": 1357, + "name": "blinker" + }, + { + "id": 1358, + "name": "types_aiobotocore_dynamodb" + }, + { + "id": 1359, + "name": "aiomcache" + }, + { + "id": 1360, + "name": "aiobotocore" + }, + { + "id": 1361, + "name": "nacl" + }, + { + "id": 1362, + "name": "etebase_server_settings" + }, + { + "id": 1363, + "name": "devtools" + }, + { + "id": 1364, + "name": "DorisClient" + }, + { + "id": 1365, + "name": "scrapy_redis" + }, + { + "id": 1366, + "name": "scrapy" + }, + { + "id": 1367, + "name": "scrapy_splash" + }, + { + "id": 1368, + "name": "hdfs" + }, + { + "id": 1369, + "name": "impala" + }, + { + "id": 1370, + "name": "thai_segmenter" + }, + { + "id": 1371, + "name": "http3" + }, + { + "id": 1372, + "name": "langid" + }, + { + "id": 1373, + "name": "_md5" + }, + { + "id": 1374, + "name": "asgi_tools" + }, + { + "id": 1375, + "name": "muffin" + }, + { + "id": 1376, + "name": "pytest_cov" + }, + { + "id": 1377, + "name": "zmq" + }, + { + "id": 1378, + "name": "msgspec" + }, + { + "id": 1379, + "name": "aiozmq" + }, + { + "id": 1380, + "name": "fastchat" + }, + { + "id": 1381, + "name": "modal" + }, + { + "id": 1382, + "name": "ffmpeg" + }, + { + "id": 1383, + "name": "runpod" + }, + { + "id": 1384, + "name": "flask_api" + }, + { + "id": 1385, + "name": "aigc_zoo" + }, + { + "id": 1386, + "name": "sacrebleu" + }, + { + "id": 1387, + "name": "fastdatasets" + }, + { + "id": 1388, + "name": "deep_training" + }, + { + "id": 1389, + "name": "hiro" + }, + { + "id": 1390, + "name": "limits" + }, + { + "id": 1391, + "name": "readability" + }, + { + "id": 1392, + "name": "moviepy" + }, + { + "id": 1393, + "name": "scenedetect" + }, + { + "id": 1394, + "name": "extensions" + }, + { + "id": 1395, + "name": "kadalulib" + }, + { + "id": 1396, + "name": "kubectl_kadalu" + }, + { + "id": 1397, + "name": "kadalu_volgen" + }, + { + "id": 1398, + "name": "xattr" + }, + { + "id": 1399, + "name": "version" + }, + { + "id": 1400, + "name": "glustercli" + }, + { + "id": 1401, + "name": "terminaltables" + }, + { + "id": 1402, + "name": "imgcat" + }, + { + "id": 1403, + "name": "beanie" + }, + { + "id": 1404, + "name": "makefun" + }, + { + "id": 1405, + "name": "asgi_lifespan" + }, + { + "id": 1406, + "name": "httpx_oauth" + }, + { + "id": 1407, + "name": "fastapi_users_db_sqlalchemy" + }, + { + "id": 1408, + "name": "fastapi_users_db_beanie" + }, + { + "id": 1409, + "name": "opentracing" + }, + { + "id": 1410, + "name": "jaeger_client" + }, + { + "id": 1411, + "name": "async_asgi_testclient" + }, + { + "id": 1412, + "name": "pytest_asyncio" + }, + { + "id": 1413, + "name": "bcrypt" + }, + { + "id": 1414, + "name": "fakeredis" + }, + { + "id": 1415, + "name": "aiosmtplib" + }, + { + "id": 1416, + "name": "zhdate" + }, + { + "id": 1417, + "name": "mesh_transformer" + }, + { + "id": 1418, + "name": "pyautogui" + }, + { + "id": 1419, + "name": "nicegui" + }, + { + "id": 1420, + "name": "casbin" + }, + { + "id": 1421, + "name": "sqlitedict" + }, + { + "id": 1422, + "name": "amis" + }, + { + "id": 1423, + "name": "pyrogram" + }, + { + "id": 1424, + "name": "pyqrcode" + }, + { + "id": 1425, + "name": "gino" + }, + { + "id": 1426, + "name": "ormar" + }, + { + "id": 1427, + "name": "typing_utils" + }, + { + "id": 1428, + "name": "gql_checker" + }, + { + "id": 1429, + "name": "aioconsole" + }, + { + "id": 1430, + "name": "parse" + }, + { + "id": 1431, + "name": "vcr" + }, + { + "id": 1432, + "name": "requests_toolbelt" + }, + { + "id": 1433, + "name": "pylama" + }, + { + "id": 1434, + "name": "pycodestyle" + }, + { + "id": 1435, + "name": "sass" + }, + { + "id": 1436, + "name": "emoji" + }, + { + "id": 1437, + "name": "respx" + }, + { + "id": 1438, + "name": "pebble" + }, + { + "id": 1439, + "name": "bleach" + }, + { + "id": 1440, + "name": "blurhash" + }, + { + "id": 1441, + "name": "itsdangerous" + }, + { + "id": 1442, + "name": "pyld" + }, + { + "id": 1443, + "name": "factory" + }, + { + "id": 1444, + "name": "mf2py" + }, + { + "id": 1445, + "name": "feedgen" + }, + { + "id": 1446, + "name": "tomli_w" + }, + { + "id": 1447, + "name": "mistletoe" + }, + { + "id": 1448, + "name": "humanize" + }, + { + "id": 1449, + "name": "stringcase" + }, + { + "id": 1450, + "name": "datamodel_code_generator" + }, + { + "id": 1451, + "name": "langchain_experimental" + }, + { + "id": 1452, + "name": "ipdb" + }, + { + "id": 1453, + "name": "supervision" + }, + { + "id": 1454, + "name": "groundingdino" + }, + { + "id": 1455, + "name": "aiodataloader" + }, + { + "id": 1456, + "name": "snapshottest" + }, + { + "id": 1457, + "name": "graphql_sync_dataloaders" + }, + { + "id": 1458, + "name": "lazy_model" + }, + { + "id": 1459, + "name": "wrapt" + }, + { + "id": 1460, + "name": "thrift" + }, + { + "id": 1461, + "name": "hello_world_pb2_grpc" + }, + { + "id": 1462, + "name": "hello_world_pb2" + }, + { + "id": 1463, + "name": "gevent" + }, + { + "id": 1464, + "name": "bitarray" + }, + { + "id": 1465, + "name": "unittest2" + }, + { + "id": 1466, + "name": "nox" + }, + { + "id": 1467, + "name": "forbiddenfruit" + }, + { + "id": 1468, + "name": "get_pypi_latest_version" + }, + { + "id": 1469, + "name": "rapidocr_openvino" + }, + { + "id": 1470, + "name": "rapidocr_web" + }, + { + "id": 1471, + "name": "rapidocr_onnxruntime" + }, + { + "id": 1472, + "name": "pyclipper" + }, + { + "id": 1473, + "name": "rapidocr" + }, + { + "id": 1474, + "name": "wtforms" + }, + { + "id": 1475, + "name": "colour" + }, + { + "id": 1476, + "name": "fastapi_storages" + }, + { + "id": 1477, + "name": "fastavro" + }, + { + "id": 1478, + "name": "avro" + }, + { + "id": 1479, + "name": "trivup" + }, + { + "id": 1480, + "name": "geoip2" + }, + { + "id": 1481, + "name": "nonebot" + }, + { + "id": 1482, + "name": "wmi" + }, + { + "id": 1483, + "name": "win32com" + }, + { + "id": 1484, + "name": "tinydb" + }, + { + "id": 1485, + "name": "questionary" + }, + { + "id": 1486, + "name": "mkdocs_gen_files" + }, + { + "id": 1487, + "name": "_weakref" + }, + { + "id": 1488, + "name": "nest_asyncio" + }, + { + "id": 1489, + "name": "typed_ast" + }, + { + "id": 1490, + "name": "asyncodbc" + }, + { + "id": 1491, + "name": "iso8601" + }, + { + "id": 1492, + "name": "psycopg_pool" + }, + { + "id": 1493, + "name": "psycopg" + }, + { + "id": 1494, + "name": "asyncmy" + }, + { + "id": 1495, + "name": "ciso8601" + }, + { + "id": 1496, + "name": "accimage" + }, + { + "id": 1497, + "name": "example" + }, + { + "id": 1498, + "name": "test_engine" + }, + { + "id": 1499, + "name": "colossalai" + }, + { + "id": 1500, + "name": "readerwriterlock" + }, + { + "id": 1501, + "name": "MeCab" + }, + { + "id": 1502, + "name": "experiment_impact_tracker" + }, + { + "id": 1503, + "name": "ptvsd" + }, + { + "id": 1504, + "name": "keras2onnx" + }, + { + "id": 1505, + "name": "sacremoses" + }, + { + "id": 1506, + "name": "typing_inspect" + }, + { + "id": 1507, + "name": "frictionless" + }, + { + "id": 1508, + "name": "multimethod" + }, + { + "id": 1509, + "name": "distributed" + }, + { + "id": 1510, + "name": "livereload" + }, + { + "id": 1511, + "name": "cachelib" + }, + { + "id": 1512, + "name": "sqlalchemy_database" + }, + { + "id": 1513, + "name": "fastapi_user_auth" + }, + { + "id": 1514, + "name": "viztracer" + }, + { + "id": 1515, + "name": "targ" + }, + { + "id": 1516, + "name": "flytekitplugins" + }, + { + "id": 1517, + "name": "opcode" + }, + { + "id": 1518, + "name": "pydot" + }, + { + "id": 1519, + "name": "_collections_abc" + }, + { + "id": 1520, + "name": "flytekit" + }, + { + "id": 1521, + "name": "pickle5" + }, + { + "id": 1522, + "name": "pytest_chalice" + }, + { + "id": 1523, + "name": "mockupdb" + }, + { + "id": 1524, + "name": "trytond" + }, + { + "id": 1525, + "name": "newrelic" + }, + { + "id": 1526, + "name": "py4j" + }, + { + "id": 1527, + "name": "rb" + }, + { + "id": 1528, + "name": "channels" + }, + { + "id": 1529, + "name": "pytest_benchmark" + }, + { + "id": 1530, + "name": "uwsgi" + }, + { + "id": 1531, + "name": "rediscluster" + }, + { + "id": 1532, + "name": "billiard" + }, + { + "id": 1533, + "name": "quart_auth" + }, + { + "id": 1534, + "name": "asttokens" + }, + { + "id": 1535, + "name": "flask_login" + }, + { + "id": 1536, + "name": "huey" + }, + { + "id": 1537, + "name": "aiocontextvars" + }, + { + "id": 1538, + "name": "pytest_localserver" + }, + { + "id": 1539, + "name": "webob" + }, + { + "id": 1540, + "name": "rq" + }, + { + "id": 1541, + "name": "arq" + }, + { + "id": 1542, + "name": "pytest_django" + }, + { + "id": 1543, + "name": "ulid" + }, + { + "id": 1544, + "name": "unasync" + }, + { + "id": 1545, + "name": "babel" + }, + { + "id": 1546, + "name": "dvc" + }, + { + "id": 1547, + "name": "pack_1" + }, + { + "id": 1548, + "name": "iterative_telemetry" + }, + { + "id": 1549, + "name": "tomlkit" + }, + { + "id": 1550, + "name": "streamlit_pydantic" + }, + { + "id": 1551, + "name": "setuptools_scm" + }, + { + "id": 1552, + "name": "gitlab" + }, + { + "id": 1553, + "name": "_datetime" + }, + { + "id": 1554, + "name": "_ctypes" + }, + { + "id": 1555, + "name": "flaky" + }, + { + "id": 1556, + "name": "gcsfs" + }, + { + "id": 1557, + "name": "pack_2" + }, + { + "id": 1558, + "name": "pika" + }, + { + "id": 1559, + "name": "flatdict" + }, + { + "id": 1560, + "name": "nbformat" + }, + { + "id": 1561, + "name": "nbloader" + }, + { + "id": 1562, + "name": "task_helpers" + }, + { + "id": 1563, + "name": "redmail" + }, + { + "id": 1564, + "name": "redbird" + }, + { + "id": 1565, + "name": "lorem_text" + }, + { + "id": 1566, + "name": "slumber" + }, + { + "id": 1567, + "name": "scaleway" + }, + { + "id": 1568, + "name": "hcloud" + }, + { + "id": 1569, + "name": "dateparser" + }, + { + "id": 1570, + "name": "digitalocean" + }, + { + "id": 1571, + "name": "uvicorn_loguru_integration" + }, + { + "id": 1572, + "name": "snappy" + }, + { + "id": 1573, + "name": "http_server_mock" + }, + { + "id": 1574, + "name": "astor" + }, + { + "id": 1575, + "name": "readme_renderer" + }, + { + "id": 1576, + "name": "elasticsearch_dsl" + }, + { + "id": 1577, + "name": "httpretty" + }, + { + "id": 1578, + "name": "boto" + }, + { + "id": 1579, + "name": "aiormq" + }, + { + "id": 1580, + "name": "aio_pika" + }, + { + "id": 1581, + "name": "pymemcache" + }, + { + "id": 1582, + "name": "remoulade" + }, + { + "id": 1583, + "name": "webdataset" + }, + { + "id": 1584, + "name": "abstract_dataset" + }, + { + "id": 1585, + "name": "braceexpand" + }, + { + "id": 1586, + "name": "triton_pre_mlir" + }, + { + "id": 1587, + "name": "ucollections" + }, + { + "id": 1588, + "name": "uctypes" + }, + { + "id": 1589, + "name": "microdot" + }, + { + "id": 1590, + "name": "microdot_websocket" + }, + { + "id": 1591, + "name": "ffi" + }, + { + "id": 1592, + "name": "microdot_ssl" + }, + { + "id": 1593, + "name": "microdot_asyncio_websocket" + }, + { + "id": 1594, + "name": "uio" + }, + { + "id": 1595, + "name": "_uasyncio" + }, + { + "id": 1596, + "name": "microdot_asyncio_test_client" + }, + { + "id": 1597, + "name": "microdot_cors" + }, + { + "id": 1598, + "name": "microdot_utemplate" + }, + { + "id": 1599, + "name": "_strptime" + }, + { + "id": 1600, + "name": "uasyncio" + }, + { + "id": 1601, + "name": "microdot_asyncio" + }, + { + "id": 1602, + "name": "microdot_asgi_websocket" + }, + { + "id": 1603, + "name": "microdot_session" + }, + { + "id": 1604, + "name": "usocket" + }, + { + "id": 1605, + "name": "uerrno" + }, + { + "id": 1606, + "name": "ure" + }, + { + "id": 1607, + "name": "utemplate" + }, + { + "id": 1608, + "name": "ustruct" + }, + { + "id": 1609, + "name": "uos" + }, + { + "id": 1610, + "name": "utime" + }, + { + "id": 1611, + "name": "microdot_test_client" + }, + { + "id": 1612, + "name": "machine" + }, + { + "id": 1613, + "name": "dependency_injector" + }, + { + "id": 1614, + "name": "api" + }, + { + "id": 1615, + "name": "seedwork" + }, + { + "id": 1616, + "name": "sqlalchemy_json" + }, + { + "id": 1617, + "name": "pythonjsonlogger" + }, + { + "id": 1618, + "name": "unidecode" + }, + { + "id": 1619, + "name": "hdf5storage" + }, + { + "id": 1620, + "name": "pypdfium2" + }, + { + "id": 1621, + "name": "fastprogress" + }, + { + "id": 1622, + "name": "clearml" + }, + { + "id": 1623, + "name": "weasyprint" + }, + { + "id": 1624, + "name": "tf2onnx" + }, + { + "id": 1625, + "name": "mplcursors" + }, + { + "id": 1626, + "name": "aioboto3" + }, + { + "id": 1627, + "name": "internal" + }, + { + "id": 1628, + "name": "cpm_kernels" + }, + { + "id": 1629, + "name": "faster_whisper" + }, + { + "id": 1630, + "name": "ctranslate2" + }, + { + "id": 1631, + "name": "brotli_asgi" + }, + { + "id": 1632, + "name": "elasticapm" + }, + { + "id": 1633, + "name": "mapbox_vector_tile" + }, + { + "id": 1634, + "name": "elasticsearch8" + }, + { + "id": 1635, + "name": "pants_test" + }, + { + "id": 1636, + "name": "mypy_typing_asserts" + }, + { + "id": 1637, + "name": "gnupg" + }, + { + "id": 1638, + "name": "workunit_logger" + }, + { + "id": 1639, + "name": "pex" + }, + { + "id": 1640, + "name": "github" + }, + { + "id": 1641, + "name": "nodesemver" + }, + { + "id": 1642, + "name": "pylsp_jsonrpc" + }, + { + "id": 1643, + "name": "colors" + }, + { + "id": 1644, + "name": "pants" + }, + { + "id": 1645, + "name": "native" + }, + { + "id": 1646, + "name": "mypyc" + }, + { + "id": 1647, + "name": "fasteners" + }, + { + "id": 1648, + "name": "hcl2" + }, + { + "id": 1649, + "name": "hikaru" + }, + { + "id": 1650, + "name": "internal_plugins" + }, + { + "id": 1651, + "name": "hdrh" + }, + { + "id": 1652, + "name": "dockerfile" + }, + { + "id": 1653, + "name": "yamlpath" + }, + { + "id": 1654, + "name": "pants_release" + }, + { + "id": 1655, + "name": "ijson" + }, + { + "id": 1656, + "name": "graphene" + }, + { + "id": 1657, + "name": "Any" + }, + { + "id": 1658, + "name": "datadog_lambda" + }, + { + "id": 1659, + "name": "pep562" + }, + { + "id": 1660, + "name": "pathlib2" + }, + { + "id": 1661, + "name": "mariadb" + }, + { + "id": 1662, + "name": "pylibmc" + }, + { + "id": 1663, + "name": "builtin" + }, + { + "id": 1664, + "name": "vertica_python" + }, + { + "id": 1665, + "name": "enchant" + }, + { + "id": 1666, + "name": "pybind11" + }, + { + "id": 1667, + "name": "bm" + }, + { + "id": 1668, + "name": "austin" + }, + { + "id": 1669, + "name": "debugging" + }, + { + "id": 1670, + "name": "List" + }, + { + "id": 1671, + "name": "beaker" + }, + { + "id": 1672, + "name": "demoapp" + }, + { + "id": 1673, + "name": "suitespec" + }, + { + "id": 1674, + "name": "pylons" + }, + { + "id": 1675, + "name": "funcsigs" + }, + { + "id": 1676, + "name": "atheris" + }, + { + "id": 1677, + "name": "Optional" + }, + { + "id": 1678, + "name": "pynamodb" + }, + { + "id": 1679, + "name": "ddsketch" + }, + { + "id": 1680, + "name": "pytest_bdd" + }, + { + "id": 1681, + "name": "yaaredis" + }, + { + "id": 1682, + "name": "reno" + }, + { + "id": 1683, + "name": "structlog" + }, + { + "id": 1684, + "name": "Dict" + }, + { + "id": 1685, + "name": "sanic_testing" + }, + { + "id": 1686, + "name": "pyperf" + }, + { + "id": 1687, + "name": "uwsgidecorators" + }, + { + "id": 1688, + "name": "dulwich" + }, + { + "id": 1689, + "name": "algoliasearch" + }, + { + "id": 1690, + "name": "consul" + }, + { + "id": 1691, + "name": "riot" + }, + { + "id": 1692, + "name": "sitecustomize" + }, + { + "id": 1693, + "name": "aredis" + }, + { + "id": 1694, + "name": "datadog_api_client" + }, + { + "id": 1695, + "name": "webhelpers" + }, + { + "id": 1696, + "name": "envier" + }, + { + "id": 1697, + "name": "flask_caching" + }, + { + "id": 1698, + "name": "django_hosts" + }, + { + "id": 1699, + "name": "astunparse" + }, + { + "id": 1700, + "name": "dogpile" + }, + { + "id": 1701, + "name": "bytecode" + }, + { + "id": 1702, + "name": "ghapi" + }, + { + "id": 1703, + "name": "giphynavigator" + }, + { + "id": 1704, + "name": "alabaster" + }, + { + "id": 1705, + "name": "githubnavigator" + }, + { + "id": 1706, + "name": "samples" + }, + { + "id": 1707, + "name": "flask_bootstrap" + }, + { + "id": 1708, + "name": "wiringflask" + }, + { + "id": 1709, + "name": "mypy_boto3_s3" + }, + { + "id": 1710, + "name": "wiringfastapi" + }, + { + "id": 1711, + "name": "ordereddict" + }, + { + "id": 1712, + "name": "hvac" + }, + { + "id": 1713, + "name": "configobj" + }, + { + "id": 1714, + "name": "debug_toolbar" + }, + { + "id": 1715, + "name": "wheel" + }, + { + "id": 1716, + "name": "_ruamel_yaml" + }, + { + "id": 1717, + "name": "commentjson" + }, + { + "id": 1718, + "name": "segno" + }, + { + "id": 1719, + "name": "python_http_client" + }, + { + "id": 1720, + "name": "pyzbar" + }, + { + "id": 1721, + "name": "minify_html" + }, + { + "id": 1722, + "name": "simplegui" + }, + { + "id": 1723, + "name": "plyer" + }, + { + "id": 1724, + "name": "fuzzywuzzy" + }, + { + "id": 1725, + "name": "sound" + }, + { + "id": 1726, + "name": "geocoder" + }, + { + "id": 1727, + "name": "png" + }, + { + "id": 1728, + "name": "mutagen" + }, + { + "id": 1729, + "name": "ezgmail" + }, + { + "id": 1730, + "name": "firebase_admin" + }, + { + "id": 1731, + "name": "fcrypt" + }, + { + "id": 1732, + "name": "oauth2client" + }, + { + "id": 1733, + "name": "translate" + }, + { + "id": 1734, + "name": "serial" + }, + { + "id": 1735, + "name": "pynput" + }, + { + "id": 1736, + "name": "pytube" + }, + { + "id": 1737, + "name": "pyttsx3" + }, + { + "id": 1738, + "name": "mechanize" + }, + { + "id": 1739, + "name": "httplib2" + }, + { + "id": 1740, + "name": "twilio" + }, + { + "id": 1741, + "name": "tabula" + }, + { + "id": 1742, + "name": "pyPDF2" + }, + { + "id": 1743, + "name": "pywhatkit" + }, + { + "id": 1744, + "name": "ccxt" + }, + { + "id": 1745, + "name": "fpdf" + }, + { + "id": 1746, + "name": "tkcalendar" + }, + { + "id": 1747, + "name": "pyglet" + }, + { + "id": 1748, + "name": "speech_recognition" + }, + { + "id": 1749, + "name": "quo" + }, + { + "id": 1750, + "name": "gtts" + }, + { + "id": 1751, + "name": "pyjokes" + }, + { + "id": 1752, + "name": "xlwt" + }, + { + "id": 1753, + "name": "freegames" + }, + { + "id": 1754, + "name": "apiclient" + }, + { + "id": 1755, + "name": "openpyxl" + }, + { + "id": 1756, + "name": "flask_ask" + }, + { + "id": 1757, + "name": "notepad_support" + }, + { + "id": 1758, + "name": "nmap" + }, + { + "id": 1759, + "name": "pafy" + }, + { + "id": 1760, + "name": "instagram_monitering" + }, + { + "id": 1761, + "name": "socks" + }, + { + "id": 1762, + "name": "tweepy" + }, + { + "id": 1763, + "name": "xlrd" + }, + { + "id": 1764, + "name": "googletrans" + }, + { + "id": 1765, + "name": "tkinterweb" + }, + { + "id": 1766, + "name": "win10toast" + }, + { + "id": 1767, + "name": "pywifi" + }, + { + "id": 1768, + "name": "pytest_rerunfailures" + }, + { + "id": 1769, + "name": "snuba_sdk" + }, + { + "id": 1770, + "name": "social_auth" + }, + { + "id": 1771, + "name": "bitfield" + }, + { + "id": 1772, + "name": "codeowners" + }, + { + "id": 1773, + "name": "drf_spectacular" + }, + { + "id": 1774, + "name": "amqp" + }, + { + "id": 1775, + "name": "u2flib_server" + }, + { + "id": 1776, + "name": "ua_parser" + }, + { + "id": 1777, + "name": "parsimonious" + }, + { + "id": 1778, + "name": "openapi_core" + }, + { + "id": 1779, + "name": "mistune" + }, + { + "id": 1780, + "name": "arroyo" + }, + { + "id": 1781, + "name": "django_zero_downtime_migrations" + }, + { + "id": 1782, + "name": "honcho" + }, + { + "id": 1783, + "name": "sentry_plugins" + }, + { + "id": 1784, + "name": "csp" + }, + { + "id": 1785, + "name": "sentry_redis_tools" + }, + { + "id": 1786, + "name": "sentry_relay" + }, + { + "id": 1787, + "name": "petname" + }, + { + "id": 1788, + "name": "toronado" + }, + { + "id": 1789, + "name": "sudo" + }, + { + "id": 1790, + "name": "maxminddb" + }, + { + "id": 1791, + "name": "cssselect" + }, + { + "id": 1792, + "name": "isodate" + }, + { + "id": 1793, + "name": "email_reply_parser" + }, + { + "id": 1794, + "name": "phabricator" + }, + { + "id": 1795, + "name": "sentry_kafka_schemas" + }, + { + "id": 1796, + "name": "django_picklefield" + }, + { + "id": 1797, + "name": "phonenumbers" + }, + { + "id": 1798, + "name": "sentry" + }, + { + "id": 1799, + "name": "fido2" + }, + { + "id": 1800, + "name": "unidiff" + }, + { + "id": 1801, + "name": "rapidjson" + }, + { + "id": 1802, + "name": "symbolic" + }, + { + "id": 1803, + "name": "logbook" + }, + { + "id": 1804, + "name": "ecs_logging" + }, + { + "id": 1805, + "name": "kenlm" + }, + { + "id": 1806, + "name": "logs" + }, + { + "id": 1807, + "name": "espnet" + }, + { + "id": 1808, + "name": "sampler" + }, + { + "id": 1809, + "name": "kaldiio" + }, + { + "id": 1810, + "name": "nara_wpe" + }, + { + "id": 1811, + "name": "paddlelite" + }, + { + "id": 1812, + "name": "keyboard" + }, + { + "id": 1813, + "name": "pyworld" + }, + { + "id": 1814, + "name": "utility" + }, + { + "id": 1815, + "name": "paddleaudio" + }, + { + "id": 1816, + "name": "pattern_singleton" + }, + { + "id": 1817, + "name": "inflect" + }, + { + "id": 1818, + "name": "praatio" + }, + { + "id": 1819, + "name": "kaldi_io" + }, + { + "id": 1820, + "name": "pypinyin_dict" + }, + { + "id": 1821, + "name": "pathos" + }, + { + "id": 1822, + "name": "yacs" + }, + { + "id": 1823, + "name": "g2pM" + }, + { + "id": 1824, + "name": "configargparse" + }, + { + "id": 1825, + "name": "soxbindings" + }, + { + "id": 1826, + "name": "hyperpyyaml" + }, + { + "id": 1827, + "name": "ToJyutping" + }, + { + "id": 1828, + "name": "timer" + }, + { + "id": 1829, + "name": "encode" + }, + { + "id": 1830, + "name": "paddlenlp" + }, + { + "id": 1831, + "name": "paddlespeech_ctcdecoders" + }, + { + "id": 1832, + "name": "ppdiffusers" + }, + { + "id": 1833, + "name": "textgrid" + }, + { + "id": 1834, + "name": "cbor" + }, + { + "id": 1835, + "name": "soundfile" + }, + { + "id": 1836, + "name": "parallel_wavegan" + }, + { + "id": 1837, + "name": "nose" + }, + { + "id": 1838, + "name": "resampy" + }, + { + "id": 1839, + "name": "webrtcvad" + }, + { + "id": 1840, + "name": "python_speech_features" + }, + { + "id": 1841, + "name": "g2p_en" + }, + { + "id": 1842, + "name": "opencc" + }, + { + "id": 1843, + "name": "paddllespeech" + }, + { + "id": 1844, + "name": "healthcheck" + }, + { + "id": 1845, + "name": "flask_celeryext" + }, + { + "id": 1846, + "name": "coolname" + }, + { + "id": 1847, + "name": "broadcaster" + }, + { + "id": 1848, + "name": "forex_python" + }, + { + "id": 1849, + "name": "icalendar" + }, + { + "id": 1850, + "name": "objproxies" + }, + { + "id": 1851, + "name": "flask_redis" + }, + { + "id": 1852, + "name": "flask_script" + }, + { + "id": 1853, + "name": "dredd_hooks" + }, + { + "id": 1854, + "name": "flask_limiter" + }, + { + "id": 1855, + "name": "marshmallow_jsonapi" + }, + { + "id": 1856, + "name": "citext" + }, + { + "id": 1857, + "name": "marrow" + }, + { + "id": 1858, + "name": "envparse" + }, + { + "id": 1859, + "name": "xhtml2pdf" + }, + { + "id": 1860, + "name": "oauth2" + }, + { + "id": 1861, + "name": "flask_scrypt" + }, + { + "id": 1862, + "name": "qrcode" + }, + { + "id": 1863, + "name": "graphene_sqlalchemy" + }, + { + "id": 1864, + "name": "flask_jwt_extended" + }, + { + "id": 1865, + "name": "pentabarf" + }, + { + "id": 1866, + "name": "paypalrestsdk" + }, + { + "id": 1867, + "name": "flask_rest_jsonapi" + }, + { + "id": 1868, + "name": "sqlalchemy_continuum" + }, + { + "id": 1869, + "name": "flask_graphql" + }, + { + "id": 1870, + "name": "omise" + }, + { + "id": 1871, + "name": "flask_elasticsearch" + }, + { + "id": 1872, + "name": "stripe" + }, + { + "id": 1873, + "name": "flask_babel" + }, + { + "id": 1874, + "name": "flask_migrate" + }, + { + "id": 1875, + "name": "cowpy" + }, + { + "id": 1876, + "name": "pelican" + }, + { + "id": 1877, + "name": "syft" + }, + { + "id": 1878, + "name": "pytest_mock_resources" + }, + { + "id": 1879, + "name": "ascii_magic" + }, + { + "id": 1880, + "name": "flask_executor" + }, + { + "id": 1881, + "name": "virtualenvapi" + }, + { + "id": 1882, + "name": "itables" + }, + { + "id": 1883, + "name": "gipc" + }, + { + "id": 1884, + "name": "result" + }, + { + "id": 1885, + "name": "hagrid" + }, + { + "id": 1886, + "name": "oblv_ctl" + }, + { + "id": 1887, + "name": "RestrictedPython" + }, + { + "id": 1888, + "name": "sherlock" + }, + { + "id": 1889, + "name": "flask_shell2http" + }, + { + "id": 1890, + "name": "grid" + }, + { + "id": 1891, + "name": "psq" + }, + { + "id": 1892, + "name": "graphviz" + }, + { + "id": 1893, + "name": "libcloudforensics" + }, + { + "id": 1894, + "name": "turbinia_client" + }, + { + "id": 1895, + "name": "dfvfs" + }, + { + "id": 1896, + "name": "turbinia_api_lib" + }, + { + "id": 1897, + "name": "dfimagetools" + }, + { + "id": 1898, + "name": "frozenlist" + }, + { + "id": 1899, + "name": "wcwidth" + }, + { + "id": 1900, + "name": "deepmind_lab" + }, + { + "id": 1901, + "name": "chess" + }, + { + "id": 1902, + "name": "bayes_opt" + }, + { + "id": 1903, + "name": "aiorwlock" + }, + { + "id": 1904, + "name": "zoopt" + }, + { + "id": 1905, + "name": "ax" + }, + { + "id": 1906, + "name": "recsim" + }, + { + "id": 1907, + "name": "pip_install_test" + }, + { + "id": 1908, + "name": "fairseq_cli" + }, + { + "id": 1909, + "name": "hebo" + }, + { + "id": 1910, + "name": "aiosignal" + }, + { + "id": 1911, + "name": "memray" + }, + { + "id": 1912, + "name": "aiohttp_cors" + }, + { + "id": 1913, + "name": "numexpr" + }, + { + "id": 1914, + "name": "aliyunsdkecs" + }, + { + "id": 1915, + "name": "jsonpatch" + }, + { + "id": 1916, + "name": "flaml" + }, + { + "id": 1917, + "name": "rllib_a3c" + }, + { + "id": 1918, + "name": "dm_env" + }, + { + "id": 1919, + "name": "virtualenv" + }, + { + "id": 1920, + "name": "runfiles" + }, + { + "id": 1921, + "name": "composer" + }, + { + "id": 1922, + "name": "testfixtures" + }, + { + "id": 1923, + "name": "jupytext" + }, + { + "id": 1924, + "name": "win32con" + }, + { + "id": 1925, + "name": "pytest_timeout" + }, + { + "id": 1926, + "name": "dragonfly" + }, + { + "id": 1927, + "name": "win32job" + }, + { + "id": 1928, + "name": "test_module" + }, + { + "id": 1929, + "name": "pettingzoo" + }, + { + "id": 1930, + "name": "rllib_a2c" + }, + { + "id": 1931, + "name": "test_env" + }, + { + "id": 1932, + "name": "pymongoarrow" + }, + { + "id": 1933, + "name": "rllib_maml" + }, + { + "id": 1934, + "name": "ray_shuffling_data_loader" + }, + { + "id": 1935, + "name": "raydp" + }, + { + "id": 1936, + "name": "tensorflow_metadata" + }, + { + "id": 1937, + "name": "pyspiel" + }, + { + "id": 1938, + "name": "higher" + }, + { + "id": 1939, + "name": "opencensus" + }, + { + "id": 1940, + "name": "dir2" + }, + { + "id": 1941, + "name": "my_pkg" + }, + { + "id": 1942, + "name": "pygloo" + }, + { + "id": 1943, + "name": "crc32c" + }, + { + "id": 1944, + "name": "hpbandster" + }, + { + "id": 1945, + "name": "supersuit" + }, + { + "id": 1946, + "name": "colorful" + }, + { + "id": 1947, + "name": "anyscale" + }, + { + "id": 1948, + "name": "ludwig" + }, + { + "id": 1949, + "name": "minigrid" + }, + { + "id": 1950, + "name": "_pickle" + }, + { + "id": 1951, + "name": "dnc" + }, + { + "id": 1952, + "name": "trustme" + }, + { + "id": 1953, + "name": "alpa" + }, + { + "id": 1954, + "name": "aliyunsdkcore" + }, + { + "id": 1955, + "name": "conditional_dag" + }, + { + "id": 1956, + "name": "pytest_virtualenv" + }, + { + "id": 1957, + "name": "asyncmock" + }, + { + "id": 1958, + "name": "GPy" + }, + { + "id": 1959, + "name": "d4rl" + }, + { + "id": 1960, + "name": "threadpoolctl" + }, + { + "id": 1961, + "name": "traci" + }, + { + "id": 1962, + "name": "ray_release" + }, + { + "id": 1963, + "name": "torch_geometric" + }, + { + "id": 1964, + "name": "vizdoomgym" + }, + { + "id": 1965, + "name": "pybullet_envs" + }, + { + "id": 1966, + "name": "libsumo" + }, + { + "id": 1967, + "name": "chest" + }, + { + "id": 1968, + "name": "rllib_ddpg" + }, + { + "id": 1969, + "name": "rllib_r2d2" + }, + { + "id": 1970, + "name": "msgpack_numpy" + }, + { + "id": 1971, + "name": "tree" + }, + { + "id": 1972, + "name": "kaggle_environments" + }, + { + "id": 1973, + "name": "lz4" + }, + { + "id": 1974, + "name": "streaming" + }, + { + "id": 1975, + "name": "mars" + }, + { + "id": 1976, + "name": "pytest_docker_tools" + }, + { + "id": 1977, + "name": "open_spiel" + }, + { + "id": 1978, + "name": "nevergrad" + }, + { + "id": 1979, + "name": "llm_serving" + }, + { + "id": 1980, + "name": "pybuildkite" + }, + { + "id": 1981, + "name": "xarray" + }, + { + "id": 1982, + "name": "tensorflow_probability" + }, + { + "id": 1983, + "name": "sigopt" + }, + { + "id": 1984, + "name": "dm_control" + }, + { + "id": 1985, + "name": "litestar" + }, + { + "id": 1986, + "name": "mlflow_test_plugin" + }, + { + "id": 1987, + "name": "databricks_cli" + }, + { + "id": 1988, + "name": "requests_auth_aws_sigv4" + }, + { + "id": 1989, + "name": "querystring_parser" + }, + { + "id": 1990, + "name": "textstat" + }, + { + "id": 1991, + "name": "entrypoints" + }, + { + "id": 1992, + "name": "prometheus_flask_exporter" + }, + { + "id": 1993, + "name": "dummy_package" + }, + { + "id": 1994, + "name": "diviner" + }, + { + "id": 1995, + "name": "delta" + }, + { + "id": 1996, + "name": "dummy_module" + }, + { + "id": 1997, + "name": "johnsnowlabs" + }, + { + "id": 1998, + "name": "pysftp" + }, + { + "id": 1999, + "name": "setfit" + }, + { + "id": 2000, + "name": "prophet" + }, + { + "id": 2001, + "name": "h2o" + }, + { + "id": 2002, + "name": "databricks" + }, + { + "id": 2003, + "name": "mleap" + }, + { + "id": 2004, + "name": "cycler" + }, + { + "id": 2005, + "name": "rpy2" + }, + { + "id": 2006, + "name": "comm" + }, + { + "id": 2007, + "name": "hvplot" + }, + { + "id": 2008, + "name": "pyodide_http" + }, + { + "id": 2009, + "name": "bokeh_django" + }, + { + "id": 2010, + "name": "tranquilizer" + }, + { + "id": 2011, + "name": "stockscreener" + }, + { + "id": 2012, + "name": "vtk" + }, + { + "id": 2013, + "name": "lumen" + }, + { + "id": 2014, + "name": "pyvista" + }, + { + "id": 2015, + "name": "mdit_py_emoji" + }, + { + "id": 2016, + "name": "pyctdev" + }, + { + "id": 2017, + "name": "pydeck" + }, + { + "id": 2018, + "name": "pyinstrument" + }, + { + "id": 2019, + "name": "ipywidgets_bokeh" + }, + { + "id": 2020, + "name": "js" + }, + { + "id": 2021, + "name": "gbm" + }, + { + "id": 2022, + "name": "reacton" + }, + { + "id": 2023, + "name": "anywidget" + }, + { + "id": 2024, + "name": "pyviz_comms" + }, + { + "id": 2025, + "name": "ipympl" + }, + { + "id": 2026, + "name": "sympy" + }, + { + "id": 2027, + "name": "nbsite" + }, + { + "id": 2028, + "name": "nbconvert" + }, + { + "id": 2029, + "name": "sliders" + }, + { + "id": 2030, + "name": "myst_parser" + }, + { + "id": 2031, + "name": "snakeviz" + }, + { + "id": 2032, + "name": "markdown_it" + }, + { + "id": 2033, + "name": "pyodide" + }, + { + "id": 2034, + "name": "streamz" + }, + { + "id": 2035, + "name": "mdit_py_plugins" + }, + { + "id": 2036, + "name": "jupyter_bokeh" + }, + { + "id": 2037, + "name": "pyecharts" + }, + { + "id": 2038, + "name": "ipykernel" + }, + { + "id": 2039, + "name": "ast_comments" + }, + { + "id": 2040, + "name": "schedule" + }, + { + "id": 2041, + "name": "utils_find_1st" + }, + { + "id": 2042, + "name": "telegram" + }, + { + "id": 2043, + "name": "sb3_contrib" + }, + { + "id": 2044, + "name": "cysystemd" + }, + { + "id": 2045, + "name": "nonexiting_module" + }, + { + "id": 2046, + "name": "sdnotify" + }, + { + "id": 2047, + "name": "stable_baselines3" + }, + { + "id": 2048, + "name": "technical" + }, + { + "id": 2049, + "name": "time_machine" + }, + { + "id": 2050, + "name": "pycoingecko" + }, + { + "id": 2051, + "name": "datasieve" + }, + { + "id": 2052, + "name": "macholib" + }, + { + "id": 2053, + "name": "PyQt4" + }, + { + "id": 2054, + "name": "pygbm" + }, + { + "id": 2055, + "name": "river" + }, + { + "id": 2056, + "name": "blake3" + }, + { + "id": 2057, + "name": "OpenGL" + }, + { + "id": 2058, + "name": "future" + }, + { + "id": 2059, + "name": "bqplot" + }, + { + "id": 2060, + "name": "skbuild" + }, + { + "id": 2061, + "name": "aplus" + }, + { + "id": 2062, + "name": "sip" + }, + { + "id": 2063, + "name": "vaex" + }, + { + "id": 2064, + "name": "gavi" + }, + { + "id": 2065, + "name": "asciitable" + }, + { + "id": 2066, + "name": "healpy" + }, + { + "id": 2067, + "name": "sampy" + }, + { + "id": 2068, + "name": "ipyvuetify" + }, + { + "id": 2069, + "name": "ipyvue" + }, + { + "id": 2070, + "name": "biplist" + }, + { + "id": 2071, + "name": "graphene_tornado" + }, + { + "id": 2072, + "name": "pythran" + }, + { + "id": 2073, + "name": "mab" + }, + { + "id": 2074, + "name": "objc" + }, + { + "id": 2075, + "name": "PySide" + }, + { + "id": 2076, + "name": "frozendict" + }, + { + "id": 2077, + "name": "astropy" + }, + { + "id": 2078, + "name": "annoy" + }, + { + "id": 2079, + "name": "javaobj" + }, + { + "id": 2080, + "name": "Metal" + }, + { + "id": 2081, + "name": "nova" + }, + { + "id": 2082, + "name": "tensor2tensor" + }, + { + "id": 2083, + "name": "bigbird" + }, + { + "id": 2084, + "name": "mesh_tensorflow" + }, + { + "id": 2085, + "name": "eflomal" + }, + { + "id": 2086, + "name": "bert" + }, + { + "id": 2087, + "name": "toolz" + }, + { + "id": 2088, + "name": "malaya_boilerplate" + }, + { + "id": 2089, + "name": "gpt_2" + }, + { + "id": 2090, + "name": "create_pretraining_data" + }, + { + "id": 2091, + "name": "herpetologist" + }, + { + "id": 2092, + "name": "pegasus" + }, + { + "id": 2093, + "name": "gin" + }, + { + "id": 2094, + "name": "transformer" + }, + { + "id": 2095, + "name": "fake_useragent" + }, + { + "id": 2096, + "name": "t5" + }, + { + "id": 2097, + "name": "optimization" + }, + { + "id": 2098, + "name": "youtokentome" + }, + { + "id": 2099, + "name": "gpt_2_simple" + }, + { + "id": 2100, + "name": "data_utils" + }, + { + "id": 2101, + "name": "prepro_utils" + }, + { + "id": 2102, + "name": "xlnet" + }, + { + "id": 2103, + "name": "moxing" + }, + { + "id": 2104, + "name": "Sastrawi" + }, + { + "id": 2105, + "name": "function_builder" + }, + { + "id": 2106, + "name": "seqio" + }, + { + "id": 2107, + "name": "smith" + }, + { + "id": 2108, + "name": "symspellpy" + }, + { + "id": 2109, + "name": "pyLDAvis" + }, + { + "id": 2110, + "name": "multilanguagebert_transformer" + }, + { + "id": 2111, + "name": "albert" + }, + { + "id": 2112, + "name": "custom_optimization" + }, + { + "id": 2113, + "name": "model_utils" + }, + { + "id": 2114, + "name": "fast_transformer" + }, + { + "id": 2115, + "name": "dtw" + }, + { + "id": 2116, + "name": "wiktionaryparser" + }, + { + "id": 2117, + "name": "gpu_utils" + }, + { + "id": 2118, + "name": "tokenization" + }, + { + "id": 2119, + "name": "custom_function_builder" + }, + { + "id": 2120, + "name": "tasks" + }, + { + "id": 2121, + "name": "tencentcloud" + }, + { + "id": 2122, + "name": "namesilo" + }, + { + "id": 2123, + "name": "vultr" + }, + { + "id": 2124, + "name": "libs" + }, + { + "id": 2125, + "name": "python_terraform" + }, + { + "id": 2126, + "name": "crud" + }, + { + "id": 2127, + "name": "terrascript" + }, + { + "id": 2128, + "name": "yaspin" + }, + { + "id": 2129, + "name": "corder" + }, + { + "id": 2130, + "name": "send_email_function" + }, + { + "id": 2131, + "name": "dev_appserver" + }, + { + "id": 2132, + "name": "ratemate" + }, + { + "id": 2133, + "name": "webapp2_extras" + }, + { + "id": 2134, + "name": "jsonpath_ng" + }, + { + "id": 2135, + "name": "cloudstorage" + }, + { + "id": 2136, + "name": "bq_load_batches" + }, + { + "id": 2137, + "name": "textblob" + }, + { + "id": 2138, + "name": "tink" + }, + { + "id": 2139, + "name": "gsuite_grant_analyzer" + }, + { + "id": 2140, + "name": "bqtag" + }, + { + "id": 2141, + "name": "load_benchmark_tools" + }, + { + "id": 2142, + "name": "table_logger" + }, + { + "id": 2143, + "name": "capacity_planner" + }, + { + "id": 2144, + "name": "ml_preproc" + }, + { + "id": 2145, + "name": "ml_eda" + }, + { + "id": 2146, + "name": "bq_ddl_validator" + }, + { + "id": 2147, + "name": "constants" + }, + { + "id": 2148, + "name": "faker_schema" + }, + { + "id": 2149, + "name": "composer_dataflow_examples" + }, + { + "id": 2150, + "name": "exrex" + }, + { + "id": 2151, + "name": "preprocessing" + }, + { + "id": 2152, + "name": "slack" + }, + { + "id": 2153, + "name": "pyhive" + }, + { + "id": 2154, + "name": "api_key_rotation_checker" + }, + { + "id": 2155, + "name": "flask_json_schema" + }, + { + "id": 2156, + "name": "flask_restful" + }, + { + "id": 2157, + "name": "kfp" + }, + { + "id": 2158, + "name": "xmlschema" + }, + { + "id": 2159, + "name": "bqpipeline" + }, + { + "id": 2160, + "name": "slackeventsapi" + }, + { + "id": 2161, + "name": "main_dag" + }, + { + "id": 2162, + "name": "launch_demo" + }, + { + "id": 2163, + "name": "utils_optimization" + }, + { + "id": 2164, + "name": "cloud_vision_utils" + }, + { + "id": 2165, + "name": "asset_inventory" + }, + { + "id": 2166, + "name": "read_stt_api_function" + }, + { + "id": 2167, + "name": "asciitree" + }, + { + "id": 2168, + "name": "google_auth_httplib2" + }, + { + "id": 2169, + "name": "lime_utils" + }, + { + "id": 2170, + "name": "gsuite_exporter" + }, + { + "id": 2171, + "name": "perspective_api_function" + }, + { + "id": 2172, + "name": "webapp2" + }, + { + "id": 2173, + "name": "bigquery_user_info_updater" + }, + { + "id": 2174, + "name": "dns_sync" + }, + { + "id": 2175, + "name": "config_generator" + }, + { + "id": 2176, + "name": "textdistance" + }, + { + "id": 2177, + "name": "generic_benchmark_tools" + }, + { + "id": 2178, + "name": "resources" + }, + { + "id": 2179, + "name": "lib" + }, + { + "id": 2180, + "name": "lime" + }, + { + "id": 2181, + "name": "sideinput_refresh" + }, + { + "id": 2182, + "name": "query_benchmark_tools" + }, + { + "id": 2183, + "name": "nlp_api_function" + }, + { + "id": 2184, + "name": "dialogflow_v2" + }, + { + "id": 2185, + "name": "dotmap" + }, + { + "id": 2186, + "name": "migrator" + }, + { + "id": 2187, + "name": "xsdata_pydantic" + }, + { + "id": 2188, + "name": "xsdata" + }, + { + "id": 2189, + "name": "hypertune" + }, + { + "id": 2190, + "name": "cloud_function" + }, + { + "id": 2191, + "name": "appengine_config" + }, + { + "id": 2192, + "name": "tensorflow_transform" + }, + { + "id": 2193, + "name": "data_generator" + }, + { + "id": 2194, + "name": "send_stt_api_function" + }, + { + "id": 2195, + "name": "bigquery_slots_monitoring" + }, + { + "id": 2196, + "name": "xsd2bq" + }, + { + "id": 2197, + "name": "hive_to_bigquery" + }, + { + "id": 2198, + "name": "dependencies" + }, + { + "id": 2199, + "name": "json2xml" + }, + { + "id": 2200, + "name": "ml_dataprep" + }, + { + "id": 2201, + "name": "export_query_results_function" + }, + { + "id": 2202, + "name": "better_profanity" + }, + { + "id": 2203, + "name": "gmon" + }, + { + "id": 2204, + "name": "composer_http_post_example" + }, + { + "id": 2205, + "name": "make_iap_request" + }, + { + "id": 2206, + "name": "bq_table_resizer" + }, + { + "id": 2207, + "name": "gcs_bucket_mover" + }, + { + "id": 2208, + "name": "bq_benchmarks" + }, + { + "id": 2209, + "name": "updater_tools" + }, + { + "id": 2210, + "name": "first" + }, + { + "id": 2211, + "name": "httpcore" + }, + { + "id": 2212, + "name": "shared_libs" + }, + { + "id": 2213, + "name": "griffe" + }, + { + "id": 2214, + "name": "prefect_docker" + }, + { + "id": 2215, + "name": "apprise" + }, + { + "id": 2216, + "name": "cx_Freeze" + }, + { + "id": 2217, + "name": "prefect" + }, + { + "id": 2218, + "name": "readchar" + }, + { + "id": 2219, + "name": "py2exe" + }, + { + "id": 2220, + "name": "nox_poetry" + }, + { + "id": 2221, + "name": "pluggy" + }, + { + "id": 2222, + "name": "strawberry_django" + }, + { + "id": 2223, + "name": "pytest_snapshot" + }, + { + "id": 2224, + "name": "libcst" + }, + { + "id": 2225, + "name": "ddtrace" + }, + { + "id": 2226, + "name": "pytest_codspeed" + }, + { + "id": 2227, + "name": "Transformer_handler_generalized" + }, + { + "id": 2228, + "name": "artserver" + }, + { + "id": 2229, + "name": "management_pb2_grpc" + }, + { + "id": 2230, + "name": "kserve" + }, + { + "id": 2231, + "name": "lgbserver" + }, + { + "id": 2232, + "name": "assets" + }, + { + "id": 2233, + "name": "inference_pb2" + }, + { + "id": 2234, + "name": "xgbserver" + }, + { + "id": 2235, + "name": "pyspark2pmml" + }, + { + "id": 2236, + "name": "timing_asgi" + }, + { + "id": 2237, + "name": "cleo" + }, + { + "id": 2238, + "name": "krbcontext" + }, + { + "id": 2239, + "name": "inference_pb2_grpc" + }, + { + "id": 2240, + "name": "cloudevents" + }, + { + "id": 2241, + "name": "sklearnserver" + }, + { + "id": 2242, + "name": "art" + }, + { + "id": 2243, + "name": "aif360" + }, + { + "id": 2244, + "name": "asgi_logger" + }, + { + "id": 2245, + "name": "pmmlserver" + }, + { + "id": 2246, + "name": "aix360" + }, + { + "id": 2247, + "name": "alibiexplainer" + }, + { + "id": 2248, + "name": "portforward" + }, + { + "id": 2249, + "name": "paddleserver" + }, + { + "id": 2250, + "name": "alibi" + }, + { + "id": 2251, + "name": "poetry" + }, + { + "id": 2252, + "name": "jpmml_evaluator" + }, + { + "id": 2253, + "name": "management_pb2" + }, + { + "id": 2254, + "name": "poco" + }, + { + "id": 2255, + "name": "appium" + }, + { + "id": 2256, + "name": "element_utils" + }, + { + "id": 2257, + "name": "airtest" + }, + { + "id": 2258, + "name": "aip" + }, + { + "id": 2259, + "name": "aircv" + }, + { + "id": 2260, + "name": "crontab" + }, + { + "id": 2261, + "name": "universal_build" + }, + { + "id": 2262, + "name": "netmiko" + }, + { + "id": 2263, + "name": "scrapli" + }, + { + "id": 2264, + "name": "favicons" + }, + { + "id": 2265, + "name": "project" + }, + { + "id": 2266, + "name": "books" + }, + { + "id": 2267, + "name": "captcha" + }, + { + "id": 2268, + "name": "poll" + }, + { + "id": 2269, + "name": "fapws" + }, + { + "id": 2270, + "name": "sshtunnel" + }, + { + "id": 2271, + "name": "flask_wtf" + }, + { + "id": 2272, + "name": "pusher" + }, + { + "id": 2273, + "name": "flask_praetorian" + }, + { + "id": 2274, + "name": "foodtracker" + }, + { + "id": 2275, + "name": "diesel" + }, + { + "id": 2276, + "name": "helloworld" + }, + { + "id": 2277, + "name": "flask_uploads" + }, + { + "id": 2278, + "name": "flask_mail" + }, + { + "id": 2279, + "name": "rocket" + }, + { + "id": 2280, + "name": "flup" + }, + { + "id": 2281, + "name": "flask_session" + }, + { + "id": 2282, + "name": "store" + }, + { + "id": 2283, + "name": "celery_progress" + }, + { + "id": 2284, + "name": "flask_mysqldb" + }, + { + "id": 2285, + "name": "wtforms_alchemy" + }, + { + "id": 2286, + "name": "flask_security" + }, + { + "id": 2287, + "name": "gspread" + }, + { + "id": 2288, + "name": "flask_qa" + }, + { + "id": 2289, + "name": "dj_database_url" + }, + { + "id": 2290, + "name": "flask_dance" + }, + { + "id": 2291, + "name": "wtforms_sqlalchemy" + }, + { + "id": 2292, + "name": "flask_restx" + }, + { + "id": 2293, + "name": "serializers" + }, + { + "id": 2294, + "name": "grpc_interceptor" + }, + { + "id": 2295, + "name": "rptodo" + }, + { + "id": 2296, + "name": "tic_tac_toe" + }, + { + "id": 2297, + "name": "csv_reader" + }, + { + "id": 2298, + "name": "data_repos" + }, + { + "id": 2299, + "name": "django_apscheduler" + }, + { + "id": 2300, + "name": "cython_example" + }, + { + "id": 2301, + "name": "pybind11_example" + }, + { + "id": 2302, + "name": "validators" + }, + { + "id": 2303, + "name": "browser" + }, + { + "id": 2304, + "name": "bpdb" + }, + { + "id": 2305, + "name": "arcade" + }, + { + "id": 2306, + "name": "pgzrun" + }, + { + "id": 2307, + "name": "kafka3" + }, + { + "id": 2308, + "name": "podcasts" + }, + { + "id": 2309, + "name": "blog" + }, + { + "id": 2310, + "name": "folium" + }, + { + "id": 2311, + "name": "mechanicalsoup" + }, + { + "id": 2312, + "name": "codetiming" + }, + { + "id": 2313, + "name": "django_heroku" + }, + { + "id": 2314, + "name": "microbit" + }, + { + "id": 2315, + "name": "wx" + }, + { + "id": 2316, + "name": "shops" + }, + { + "id": 2317, + "name": "textacy" + }, + { + "id": 2318, + "name": "marshmallow_sqlalchemy" + }, + { + "id": 2319, + "name": "terms" + }, + { + "id": 2320, + "name": "arcade_platformer" + }, + { + "id": 2321, + "name": "face_recognition" + }, + { + "id": 2322, + "name": "flask_marshmallow" + }, + { + "id": 2323, + "name": "pint" + }, + { + "id": 2324, + "name": "treelib" + }, + { + "id": 2325, + "name": "faker_commerce" + }, + { + "id": 2326, + "name": "graphene_django" + }, + { + "id": 2327, + "name": "pytest_unordered" + }, + { + "id": 2328, + "name": "PyQt6" + }, + { + "id": 2329, + "name": "snake_corp" + }, + { + "id": 2330, + "name": "eyed3" + }, + { + "id": 2331, + "name": "pypdf" + }, + { + "id": 2332, + "name": "cffi" + }, + { + "id": 2333, + "name": "rpchecker" + }, + { + "id": 2334, + "name": "cffi_example" + }, + { + "id": 2335, + "name": "feedparser" + }, + { + "id": 2336, + "name": "page_tracker" + }, + { + "id": 2337, + "name": "javascript" + }, + { + "id": 2338, + "name": "feedback" + }, + { + "id": 2339, + "name": "adventurelib" + }, + { + "id": 2340, + "name": "todo_app" + }, + { + "id": 2341, + "name": "cards" + }, + { + "id": 2342, + "name": "maze_solver" + }, + { + "id": 2343, + "name": "stomp" + }, + { + "id": 2344, + "name": "inventory" + }, + { + "id": 2345, + "name": "alibabacloud_dysmsapi20170525" + }, + { + "id": 2346, + "name": "cryptocode" + }, + { + "id": 2347, + "name": "saml2" + }, + { + "id": 2348, + "name": "requests_futures" + }, + { + "id": 2349, + "name": "extension" + }, + { + "id": 2350, + "name": "alibabacloud_tea_openapi" + }, + { + "id": 2351, + "name": "login_register_config" + }, + { + "id": 2352, + "name": "pyrad" + }, + { + "id": 2353, + "name": "webauthn" + }, + { + "id": 2354, + "name": "django_celery_beat" + }, + { + "id": 2355, + "name": "pyotp" + }, + { + "id": 2356, + "name": "kerberos" + }, + { + "id": 2357, + "name": "tenant" + }, + { + "id": 2358, + "name": "kedro_datasets" + }, + { + "id": 2359, + "name": "behave" + }, + { + "id": 2360, + "name": "features" + }, + { + "id": 2361, + "name": "kedro" + }, + { + "id": 2362, + "name": "demo_project" + }, + { + "id": 2363, + "name": "kedro_telemetry" + }, + { + "id": 2364, + "name": "secure" + }, + { + "id": 2365, + "name": "kedro_viz" + }, + { + "id": 2366, + "name": "watchgod" + }, + { + "id": 2367, + "name": "ZODB" + }, + { + "id": 2368, + "name": "transaction" + }, + { + "id": 2369, + "name": "python_advanced" + }, + { + "id": 2370, + "name": "hypothesis_jsonschema" + }, + { + "id": 2371, + "name": "pytest_subtests" + }, + { + "id": 2372, + "name": "hypothesis_graphql" + }, + { + "id": 2373, + "name": "curlify" + }, + { + "id": 2374, + "name": "pytest_httpserver" + }, + { + "id": 2375, + "name": "starlette_testclient" + }, + { + "id": 2376, + "name": "exceptiongroup" + }, + { + "id": 2377, + "name": "schemathesis" + }, + { + "id": 2378, + "name": "junit_xml" + }, + { + "id": 2379, + "name": "pyrate_limiter" + }, + { + "id": 2380, + "name": "gdown" + }, + { + "id": 2381, + "name": "mysql_helpers" + }, + { + "id": 2382, + "name": "milvus_helpers" + }, + { + "id": 2383, + "name": "towhee" + }, + { + "id": 2384, + "name": "bp" + }, + { + "id": 2385, + "name": "database" + }, + { + "id": 2386, + "name": "pyscagnostics" + }, + { + "id": 2387, + "name": "algorithms" + }, + { + "id": 2388, + "name": "dowhy" + }, + { + "id": 2389, + "name": "causallearn" + }, + { + "id": 2390, + "name": "qlient" + }, + { + "id": 2391, + "name": "tflite_support" + }, + { + "id": 2392, + "name": "tensorflowjs" + }, + { + "id": 2393, + "name": "model_bertabs" + }, + { + "id": 2394, + "name": "transformer_base" + }, + { + "id": 2395, + "name": "data_processing" + }, + { + "id": 2396, + "name": "transformer_details" + }, + { + "id": 2397, + "name": "mosestokenizer" + }, + { + "id": 2398, + "name": "utils_squad_evaluate" + }, + { + "id": 2399, + "name": "utils_squad" + }, + { + "id": 2400, + "name": "spacyface" + }, + { + "id": 2401, + "name": "open3d" + }, + { + "id": 2402, + "name": "pypistats" + }, + { + "id": 2403, + "name": "spaces" + }, + { + "id": 2404, + "name": "semantic_version" + }, + { + "id": 2405, + "name": "neon_tts_plugin_coqui" + }, + { + "id": 2406, + "name": "xyzservices" + }, + { + "id": 2407, + "name": "ffmpy" + }, + { + "id": 2408, + "name": "vega_datasets" + }, + { + "id": 2409, + "name": "gradio_client" + }, + { + "id": 2410, + "name": "hexlib" + }, + { + "id": 2411, + "name": "pycron" + }, + { + "id": 2412, + "name": "cupyx" + }, + { + "id": 2413, + "name": "nvjpeg" + }, + { + "id": 2414, + "name": "insightface" + }, + { + "id": 2415, + "name": "pycuda" + }, + { + "id": 2416, + "name": "exifread" + }, + { + "id": 2417, + "name": "backbone" + }, + { + "id": 2418, + "name": "av" + }, + { + "id": 2419, + "name": "bleu" + }, + { + "id": 2420, + "name": "meteor" + }, + { + "id": 2421, + "name": "wand" + }, + { + "id": 2422, + "name": "fastwer" + }, + { + "id": 2423, + "name": "pypapi" + }, + { + "id": 2424, + "name": "openaivae" + }, + { + "id": 2425, + "name": "gossip" + }, + { + "id": 2426, + "name": "vmz34" + }, + { + "id": 2427, + "name": "metrics" + }, + { + "id": 2428, + "name": "nn" + }, + { + "id": 2429, + "name": "geventwebsocket" + }, + { + "id": 2430, + "name": "vizseq" + }, + { + "id": 2431, + "name": "aml" + }, + { + "id": 2432, + "name": "ir_datasets" + }, + { + "id": 2433, + "name": "pycocoevalcap" + }, + { + "id": 2434, + "name": "markuplmft" + }, + { + "id": 2435, + "name": "eval_lm" + }, + { + "id": 2436, + "name": "generate" + }, + { + "id": 2437, + "name": "azureml" + }, + { + "id": 2438, + "name": "indicnlp" + }, + { + "id": 2439, + "name": "infinibatch" + }, + { + "id": 2440, + "name": "anyconfig" + }, + { + "id": 2441, + "name": "simuleval" + }, + { + "id": 2442, + "name": "xentropy_cuda" + }, + { + "id": 2443, + "name": "g2pc" + }, + { + "id": 2444, + "name": "dynamicconv_cuda" + }, + { + "id": 2445, + "name": "cnndm" + }, + { + "id": 2446, + "name": "validate" + }, + { + "id": 2447, + "name": "pytorch_pretrained_bert" + }, + { + "id": 2448, + "name": "kaldi" + }, + { + "id": 2449, + "name": "training" + }, + { + "id": 2450, + "name": "biunilm" + }, + { + "id": 2451, + "name": "cider" + }, + { + "id": 2452, + "name": "flashlight" + }, + { + "id": 2453, + "name": "preprocess" + }, + { + "id": 2454, + "name": "pytorch_transformers" + }, + { + "id": 2455, + "name": "speechproc" + }, + { + "id": 2456, + "name": "nlgeval" + }, + { + "id": 2457, + "name": "memory_profiler" + }, + { + "id": 2458, + "name": "submitit" + }, + { + "id": 2459, + "name": "s2s_ft" + }, + { + "id": 2460, + "name": "wav2letter" + }, + { + "id": 2461, + "name": "torchsnooper" + }, + { + "id": 2462, + "name": "nlu_finetune" + }, + { + "id": 2463, + "name": "tgt" + }, + { + "id": 2464, + "name": "hanziconv" + }, + { + "id": 2465, + "name": "mteb" + }, + { + "id": 2466, + "name": "interactive" + }, + { + "id": 2467, + "name": "videocnn" + }, + { + "id": 2468, + "name": "tutel" + }, + { + "id": 2469, + "name": "lightconv_cuda" + }, + { + "id": 2470, + "name": "npy_append_array" + }, + { + "id": 2471, + "name": "trainers" + }, + { + "id": 2472, + "name": "sacred" + }, + { + "id": 2473, + "name": "Levenshtein" + }, + { + "id": 2474, + "name": "cython" + }, + { + "id": 2475, + "name": "logger_config" + }, + { + "id": 2476, + "name": "dall_e" + }, + { + "id": 2477, + "name": "torchscale" + }, + { + "id": 2478, + "name": "pytrec_eval" + }, + { + "id": 2479, + "name": "phonemizer" + }, + { + "id": 2480, + "name": "examples" + }, + { + "id": 2481, + "name": "train" + }, + { + "id": 2482, + "name": "evaluations" + }, + { + "id": 2483, + "name": "palaas" + }, + { + "id": 2484, + "name": "mmcv_custom" + }, + { + "id": 2485, + "name": "alignment_train_cuda_binding" + }, + { + "id": 2486, + "name": "amp_C" + }, + { + "id": 2487, + "name": "munch" + }, + { + "id": 2488, + "name": "en_core_web_lg" + }, + { + "id": 2489, + "name": "pytorch_fid" + }, + { + "id": 2490, + "name": "unishox2" + }, + { + "id": 2491, + "name": "mmpt" + }, + { + "id": 2492, + "name": "gigaword" + }, + { + "id": 2493, + "name": "imagenetv2_pytorch" + }, + { + "id": 2494, + "name": "dp" + }, + { + "id": 2495, + "name": "alignment_train_cpu_binding" + }, + { + "id": 2496, + "name": "pyexpat" + }, + { + "id": 2497, + "name": "dapr" + }, + { + "id": 2498, + "name": "wasabi" + }, + { + "id": 2499, + "name": "thinc" + }, + { + "id": 2500, + "name": "spacy_streamlit" + }, + { + "id": 2501, + "name": "spacy_transformers" + }, + { + "id": 2502, + "name": "flair" + }, + { + "id": 2503, + "name": "spacy_experimental" + }, + { + "id": 2504, + "name": "compat" + }, + { + "id": 2505, + "name": "prodigy" + }, + { + "id": 2506, + "name": "srsly" + }, + { + "id": 2507, + "name": "wikid" + }, + { + "id": 2508, + "name": "floret" + }, + { + "id": 2509, + "name": "ufal" + }, + { + "id": 2510, + "name": "cfuzzyset" + }, + { + "id": 2511, + "name": "skweak" + }, + { + "id": 2512, + "name": "stanza" + }, + { + "id": 2513, + "name": "nebullvm" + }, + { + "id": 2514, + "name": "speedster" + }, + { + "id": 2515, + "name": "hjson" + }, + { + "id": 2516, + "name": "pydevd" + }, + { + "id": 2517, + "name": "pydevd_file_utils" + }, + { + "id": 2518, + "name": "pandas_datareader" + }, + { + "id": 2519, + "name": "sqlalchemy_aio" + }, + { + "id": 2520, + "name": "secp256k1" + }, + { + "id": 2521, + "name": "ecdsa" + }, + { + "id": 2522, + "name": "lnurl" + }, + { + "id": 2523, + "name": "bitstring" + }, + { + "id": 2524, + "name": "pyln" + }, + { + "id": 2525, + "name": "bech32" + }, + { + "id": 2526, + "name": "duty" + }, + { + "id": 2527, + "name": "aria2p" + }, + { + "id": 2528, + "name": "asciimatics" + }, + { + "id": 2529, + "name": "safety" + }, + { + "id": 2530, + "name": "git_changelog" + }, + { + "id": 2531, + "name": "appdirs" + }, + { + "id": 2532, + "name": "torch_snippets" + }, + { + "id": 2533, + "name": "geolib" + }, + { + "id": 2534, + "name": "clockdeco" + }, + { + "id": 2535, + "name": "curio" + }, + { + "id": 2536, + "name": "bruma" + }, + { + "id": 2537, + "name": "pytypes" + }, + { + "id": 2538, + "name": "classic_strategy" + }, + { + "id": 2539, + "name": "fibo_demo_lru" + }, + { + "id": 2540, + "name": "sumy" + }, + { + "id": 2541, + "name": "spamdetector" + }, + { + "id": 2542, + "name": "flaskext" + }, + { + "id": 2543, + "name": "flask_material" + }, + { + "id": 2544, + "name": "ghostscript" + }, + { + "id": 2545, + "name": "blockkit" + }, + { + "id": 2546, + "name": "sentry_asgi" + }, + { + "id": 2547, + "name": "sortedcontainers" + }, + { + "id": 2548, + "name": "slack_bolt" + }, + { + "id": 2549, + "name": "dispatch" + }, + { + "id": 2550, + "name": "msal" + }, + { + "id": 2551, + "name": "sqlalchemy_filters" + }, + { + "id": 2552, + "name": "pdpyras" + }, + { + "id": 2553, + "name": "duo_client" + }, + { + "id": 2554, + "name": "metatron" + }, + { + "id": 2555, + "name": "sh" + }, + { + "id": 2556, + "name": "atlassian" + }, + { + "id": 2557, + "name": "meraki" + }, + { + "id": 2558, + "name": "adal" + }, + { + "id": 2559, + "name": "pyinotify" + }, + { + "id": 2560, + "name": "pyasn1" + }, + { + "id": 2561, + "name": "activedirectory" + }, + { + "id": 2562, + "name": "recurring_ical_events" + }, + { + "id": 2563, + "name": "rrdtool" + }, + { + "id": 2564, + "name": "tinkerforge" + }, + { + "id": 2565, + "name": "apispec" + }, + { + "id": 2566, + "name": "win32evtlog" + }, + { + "id": 2567, + "name": "pysmi" + }, + { + "id": 2568, + "name": "omdlib" + }, + { + "id": 2569, + "name": "repoze" + }, + { + "id": 2570, + "name": "pyrfc" + }, + { + "id": 2571, + "name": "smb" + }, + { + "id": 2572, + "name": "dicttoxml" + }, + { + "id": 2573, + "name": "telnetlib3" + }, + { + "id": 2574, + "name": "dockerpty" + }, + { + "id": 2575, + "name": "exchangelib" + }, + { + "id": 2576, + "name": "snap7" + }, + { + "id": 2577, + "name": "pyghmi" + }, + { + "id": 2578, + "name": "mk_jolokia" + }, + { + "id": 2579, + "name": "marshmallow_oneofschema" + }, + { + "id": 2580, + "name": "opsgenie_sdk" + }, + { + "id": 2581, + "name": "agent_receiver" + }, + { + "id": 2582, + "name": "apispec_oneofschema" + }, + { + "id": 2583, + "name": "openapi_spec_validator" + }, + { + "id": 2584, + "name": "pydantic_factories" + }, + { + "id": 2585, + "name": "test_pb2" + }, + { + "id": 2586, + "name": "pipfile" + }, + { + "id": 2587, + "name": "h11" + }, + { + "id": 2588, + "name": "aiocache" + }, + { + "id": 2589, + "name": "scout_apm" + }, + { + "id": 2590, + "name": "migrate" + }, + { + "id": 2591, + "name": "cloudbridge" + }, + { + "id": 2592, + "name": "pykwalify" + }, + { + "id": 2593, + "name": "Image" + }, + { + "id": 2594, + "name": "daemonize" + }, + { + "id": 2595, + "name": "bioblend" + }, + { + "id": 2596, + "name": "pykube" + }, + { + "id": 2597, + "name": "fluent" + }, + { + "id": 2598, + "name": "bx" + }, + { + "id": 2599, + "name": "pyvirtualdisplay" + }, + { + "id": 2600, + "name": "shellescape" + }, + { + "id": 2601, + "name": "rpy" + }, + { + "id": 2602, + "name": "starlette_context" + }, + { + "id": 2603, + "name": "tuswsgi" + }, + { + "id": 2604, + "name": "a2wsgi" + }, + { + "id": 2605, + "name": "cwl_utils" + }, + { + "id": 2606, + "name": "social_core" + }, + { + "id": 2607, + "name": "galaxy_utils" + }, + { + "id": 2608, + "name": "seletools" + }, + { + "id": 2609, + "name": "webdavfs" + }, + { + "id": 2610, + "name": "rocrate" + }, + { + "id": 2611, + "name": "pylibmagic" + }, + { + "id": 2612, + "name": "edam_ontology" + }, + { + "id": 2613, + "name": "svgwrite" + }, + { + "id": 2614, + "name": "anvilfs" + }, + { + "id": 2615, + "name": "bdbag" + }, + { + "id": 2616, + "name": "tool_shed_client" + }, + { + "id": 2617, + "name": "whoosh" + }, + { + "id": 2618, + "name": "galaxy" + }, + { + "id": 2619, + "name": "h5grove" + }, + { + "id": 2620, + "name": "mrcfile" + }, + { + "id": 2621, + "name": "kamaki" + }, + { + "id": 2622, + "name": "lagom" + }, + { + "id": 2623, + "name": "mockssh" + }, + { + "id": 2624, + "name": "gxformat2" + }, + { + "id": 2625, + "name": "gravity" + }, + { + "id": 2626, + "name": "mir" + }, + { + "id": 2627, + "name": "galaxy_test" + }, + { + "id": 2628, + "name": "dictobj" + }, + { + "id": 2629, + "name": "tusclient" + }, + { + "id": 2630, + "name": "mercurial" + }, + { + "id": 2631, + "name": "cairo" + }, + { + "id": 2632, + "name": "custos" + }, + { + "id": 2633, + "name": "cloudauthz" + }, + { + "id": 2634, + "name": "pysam" + }, + { + "id": 2635, + "name": "isatools" + }, + { + "id": 2636, + "name": "ase" + }, + { + "id": 2637, + "name": "parsley" + }, + { + "id": 2638, + "name": "tool_shed" + }, + { + "id": 2639, + "name": "fs_gcsfs" + }, + { + "id": 2640, + "name": "cwltest" + }, + { + "id": 2641, + "name": "sqlalchemy_schemadisplay" + }, + { + "id": 2642, + "name": "refgenconf" + }, + { + "id": 2643, + "name": "schema_salad" + }, + { + "id": 2644, + "name": "irods" + }, + { + "id": 2645, + "name": "axe_selenium_python" + }, + { + "id": 2646, + "name": "conda_build" + }, + { + "id": 2647, + "name": "conda_package_streaming" + }, + { + "id": 2648, + "name": "Gnuplot" + }, + { + "id": 2649, + "name": "boltons" + }, + { + "id": 2650, + "name": "Bio" + }, + { + "id": 2651, + "name": "drmaa" + }, + { + "id": 2652, + "name": "anaconda_verify" + }, + { + "id": 2653, + "name": "functional" + }, + { + "id": 2654, + "name": "pkce" + }, + { + "id": 2655, + "name": "fs_basespace" + }, + { + "id": 2656, + "name": "cwltool" + }, + { + "id": 2657, + "name": "twill" + }, + { + "id": 2658, + "name": "past" + }, + { + "id": 2659, + "name": "pam" + }, + { + "id": 2660, + "name": "ntlm" + }, + { + "id": 2661, + "name": "masscan" + }, + { + "id": 2662, + "name": "win_inet_pton" + }, + { + "id": 2663, + "name": "tputil" + }, + { + "id": 2664, + "name": "thirdparty" + }, + { + "id": 2665, + "name": "cdx_toolkit" + }, + { + "id": 2666, + "name": "railroad" + }, + { + "id": 2667, + "name": "kazoo" + }, + { + "id": 2668, + "name": "tldextract" + }, + { + "id": 2669, + "name": "dnslog" + }, + { + "id": 2670, + "name": "pyDes" + }, + { + "id": 2671, + "name": "_string" + }, + { + "id": 2672, + "name": "greenlet" + }, + { + "id": 2673, + "name": "_yappi" + }, + { + "id": 2674, + "name": "affine" + }, + { + "id": 2675, + "name": "morecantile" + }, + { + "id": 2676, + "name": "rasterio" + }, + { + "id": 2677, + "name": "pystac" + }, + { + "id": 2678, + "name": "rioxarray" + }, + { + "id": 2679, + "name": "color_operations" + }, + { + "id": 2680, + "name": "logzero" + }, + { + "id": 2681, + "name": "calibration_module" + }, + { + "id": 2682, + "name": "fasttext_module" + }, + { + "id": 2683, + "name": "clumper" + }, + { + "id": 2684, + "name": "embetter" + }, + { + "id": 2685, + "name": "dedupe" + }, + { + "id": 2686, + "name": "spaczz" + }, + { + "id": 2687, + "name": "numerize" + }, + { + "id": 2688, + "name": "nrrd" + }, + { + "id": 2689, + "name": "giturlparse" + }, + { + "id": 2690, + "name": "SimpleITK" + }, + { + "id": 2691, + "name": "pydicom" + }, + { + "id": 2692, + "name": "varname" + }, + { + "id": 2693, + "name": "loaders" + }, + { + "id": 2694, + "name": "arel" + }, + { + "id": 2695, + "name": "skvideo" + }, + { + "id": 2696, + "name": "pascal_voc_writer" + }, + { + "id": 2697, + "name": "imgaug" + }, + { + "id": 2698, + "name": "bidict" + }, + { + "id": 2699, + "name": "emblaze" + }, + { + "id": 2700, + "name": "jinja2schema" + }, + { + "id": 2701, + "name": "redis_lock" + }, + { + "id": 2702, + "name": "puresnmp" + }, + { + "id": 2703, + "name": "names_generator" + }, + { + "id": 2704, + "name": "textfsm" + }, + { + "id": 2705, + "name": "ncclient" + }, + { + "id": 2706, + "name": "napalm" + }, + { + "id": 2707, + "name": "pytorch" + }, + { + "id": 2708, + "name": "libgravatar" + }, + { + "id": 2709, + "name": "stocks" + }, + { + "id": 2710, + "name": "labml_db" + }, + { + "id": 2711, + "name": "scp" + }, + { + "id": 2712, + "name": "labml" + }, + { + "id": 2713, + "name": "labml_remote" + }, + { + "id": 2714, + "name": "labml_dashboard" + }, + { + "id": 2715, + "name": "labml_helpers" + }, + { + "id": 2716, + "name": "labml_app" + }, + { + "id": 2717, + "name": "labml_fast_merge" + }, + { + "id": 2718, + "name": "aimrocks" + }, + { + "id": 2719, + "name": "segment" + }, + { + "id": 2720, + "name": "deeplake" + }, + { + "id": 2721, + "name": "unit_tests" + }, + { + "id": 2722, + "name": "kerastuner" + }, + { + "id": 2723, + "name": "aimstack" + }, + { + "id": 2724, + "name": "acme" + }, + { + "id": 2725, + "name": "aim_ui" + }, + { + "id": 2726, + "name": "pyximport" + }, + { + "id": 2727, + "name": "aimcore" + }, + { + "id": 2728, + "name": "asp" + }, + { + "id": 2729, + "name": "ignite" + }, + { + "id": 2730, + "name": "khash" + }, + { + "id": 2731, + "name": "hub" + }, + { + "id": 2732, + "name": "PyInstaller" + }, + { + "id": 2733, + "name": "pywebio_battery" + }, + { + "id": 2734, + "name": "percy" + }, + { + "id": 2735, + "name": "cutecharts" + }, + { + "id": 2736, + "name": "user_agents" + }, + { + "id": 2737, + "name": "sarif_om" + }, + { + "id": 2738, + "name": "jschema_to_python" + }, + { + "id": 2739, + "name": "reporter" + }, + { + "id": 2740, + "name": "hypercorn" + }, + { + "id": 2741, + "name": "parselmouth" + }, + { + "id": 2742, + "name": "nnmnkwii" + }, + { + "id": 2743, + "name": "jaconv" + }, + { + "id": 2744, + "name": "pysptk" + }, + { + "id": 2745, + "name": "pyloudnorm" + }, + { + "id": 2746, + "name": "utaupy" + }, + { + "id": 2747, + "name": "fastdtw" + }, + { + "id": 2748, + "name": "pysinsy" + }, + { + "id": 2749, + "name": "asyncssh" + }, + { + "id": 2750, + "name": "netconan" + }, + { + "id": 2751, + "name": "ciscoconfparse" + }, + { + "id": 2752, + "name": "st_aggrid" + }, + { + "id": 2753, + "name": "nubia" + }, + { + "id": 2754, + "name": "sgqlc" + }, + { + "id": 2755, + "name": "jraft" + }, + { + "id": 2756, + "name": "fastentrypoint" + }, + { + "id": 2757, + "name": "jcloud" + }, + { + "id": 2758, + "name": "hubble" + }, + { + "id": 2759, + "name": "tiny" + }, + { + "id": 2760, + "name": "pytest_kind" + }, + { + "id": 2761, + "name": "prometheus_api_client" + }, + { + "id": 2762, + "name": "abcdefg" + }, + { + "id": 2763, + "name": "ngt" + }, + { + "id": 2764, + "name": "titiler" + }, + { + "id": 2765, + "name": "rio_cogeo" + }, + { + "id": 2766, + "name": "rio_stac" + }, + { + "id": 2767, + "name": "geojson_pydantic" + }, + { + "id": 2768, + "name": "cogeo_mosaic" + }, + { + "id": 2769, + "name": "starlette_cramjam" + }, + { + "id": 2770, + "name": "aws_cdk" + }, + { + "id": 2771, + "name": "rio_tiler" + }, + { + "id": 2772, + "name": "constructs" + }, + { + "id": 2773, + "name": "tf_slim" + }, + { + "id": 2774, + "name": "inference" + }, + { + "id": 2775, + "name": "application" + }, + { + "id": 2776, + "name": "pymage_size" + }, + { + "id": 2777, + "name": "containers" + }, + { + "id": 2778, + "name": "domain" + }, + { + "id": 2779, + "name": "nbdler" + }, + { + "id": 2780, + "name": "jscaller" + }, + { + "id": 2781, + "name": "ultralytics" + }, + { + "id": 2782, + "name": "yolox" + }, + { + "id": 2783, + "name": "starlette_prometheus" + }, + { + "id": 2784, + "name": "modelhub_client" + }, + { + "id": 2785, + "name": "craft_mlt" + }, + { + "id": 2786, + "name": "drqa" + }, + { + "id": 2787, + "name": "pyserini" + }, + { + "id": 2788, + "name": "rocketqa" + }, + { + "id": 2789, + "name": "fbprophet" + }, + { + "id": 2790, + "name": "yfinance" + }, + { + "id": 2791, + "name": "paretoset" + }, + { + "id": 2792, + "name": "rllib_recsim" + }, + { + "id": 2793, + "name": "mlserver_alibi_detect" + }, + { + "id": 2794, + "name": "mlserver_lightgbm" + }, + { + "id": 2795, + "name": "aiohttp_retry" + }, + { + "id": 2796, + "name": "optimum" + }, + { + "id": 2797, + "name": "aiokafka" + }, + { + "id": 2798, + "name": "starlette_exporter" + }, + { + "id": 2799, + "name": "mlserver_mlflow" + }, + { + "id": 2800, + "name": "mlserver_alibi_explain" + }, + { + "id": 2801, + "name": "numpyro" + }, + { + "id": 2802, + "name": "py_grpc_prometheus" + }, + { + "id": 2803, + "name": "mlserver_xgboost" + }, + { + "id": 2804, + "name": "sphinx_material" + }, + { + "id": 2805, + "name": "pytest_cases" + }, + { + "id": 2806, + "name": "mlserver_sklearn" + }, + { + "id": 2807, + "name": "alibi_detect" + }, + { + "id": 2808, + "name": "mlserver_huggingface" + }, + { + "id": 2809, + "name": "simple_app" + }, + { + "id": 2810, + "name": "boddle" + }, + { + "id": 2811, + "name": "flask_sockets" + }, + { + "id": 2812, + "name": "oauth_app" + }, + { + "id": 2813, + "name": "cookiecutter" + }, + { + "id": 2814, + "name": "sparkocr" + }, + { + "id": 2815, + "name": "streamlit_apps_config" + }, + { + "id": 2816, + "name": "chatgpt_wrapper" + }, + { + "id": 2817, + "name": "sparknlp" + }, + { + "id": 2818, + "name": "sparknlp_display" + }, + { + "id": 2819, + "name": "SessionState" + }, + { + "id": 2820, + "name": "pyaml_env" + }, + { + "id": 2821, + "name": "streamlit_ner_output" + }, + { + "id": 2822, + "name": "sparknlp_jsl" + }, + { + "id": 2823, + "name": "shapefile" + }, + { + "id": 2824, + "name": "dcs" + }, + { + "id": 2825, + "name": "PySide6" + }, + { + "id": 2826, + "name": "lupa" + }, + { + "id": 2827, + "name": "mogrifier" + }, + { + "id": 2828, + "name": "nlpcda" + }, + { + "id": 2829, + "name": "model_base" + }, + { + "id": 2830, + "name": "icetk" + }, + { + "id": 2831, + "name": "data_helper" + }, + { + "id": 2832, + "name": "keybert" + }, + { + "id": 2833, + "name": "execjs" + }, + { + "id": 2834, + "name": "torchcrf" + }, + { + "id": 2835, + "name": "quantization" + }, + { + "id": 2836, + "name": "whylogs" + }, + { + "id": 2837, + "name": "whylogs_sketching" + }, + { + "id": 2838, + "name": "flask_pydantic" + }, + { + "id": 2839, + "name": "gcp_storage_emulator" + }, + { + "id": 2840, + "name": "flasgger" + }, + { + "id": 2841, + "name": "pybars" + }, + { + "id": 2842, + "name": "whylabs_client" + }, + { + "id": 2843, + "name": "deprecated" + }, + { + "id": 2844, + "name": "resnest" + }, + { + "id": 2845, + "name": "val" + }, + { + "id": 2846, + "name": "intel_extension_for_transformers" + }, + { + "id": 2847, + "name": "onnxruntime_extensions" + }, + { + "id": 2848, + "name": "ilit" + }, + { + "id": 2849, + "name": "ntsecuritycon" + }, + { + "id": 2850, + "name": "nnUNet" + }, + { + "id": 2851, + "name": "onnx_tf" + }, + { + "id": 2852, + "name": "intel_pytorch_extension" + }, + { + "id": 2853, + "name": "win32security" + }, + { + "id": 2854, + "name": "tensorboard_logger" + }, + { + "id": 2855, + "name": "org" + }, + { + "id": 2856, + "name": "nnunet" + }, + { + "id": 2857, + "name": "pretrainedmodels" + }, + { + "id": 2858, + "name": "functorch" + }, + { + "id": 2859, + "name": "lpot" + }, + { + "id": 2860, + "name": "mlperf_compliance" + }, + { + "id": 2861, + "name": "jiwer" + }, + { + "id": 2862, + "name": "intel_extension_for_tensorflow" + }, + { + "id": 2863, + "name": "xlsxwriter" + }, + { + "id": 2864, + "name": "_compat_pickle" + }, + { + "id": 2865, + "name": "batchgenerators" + }, + { + "id": 2866, + "name": "mlperf_logging" + }, + { + "id": 2867, + "name": "torch_ccl" + }, + { + "id": 2868, + "name": "tushare" + }, + { + "id": 2869, + "name": "deap" + }, + { + "id": 2870, + "name": "baostock" + }, + { + "id": 2871, + "name": "tqsdk" + }, + { + "id": 2872, + "name": "pyquery" + }, + { + "id": 2873, + "name": "pyfolio" + }, + { + "id": 2874, + "name": "rqdatac" + }, + { + "id": 2875, + "name": "WindPy" + }, + { + "id": 2876, + "name": "casbin_sqlalchemy_adapter" + }, + { + "id": 2877, + "name": "router" + }, + { + "id": 2878, + "name": "ahocorasick" + }, + { + "id": 2879, + "name": "motif_utils" + }, + { + "id": 2880, + "name": "process_pretrain_data" + }, + { + "id": 2881, + "name": "chalk" + }, + { + "id": 2882, + "name": "multiprocessing_logging" + }, + { + "id": 2883, + "name": "msrest" + }, + { + "id": 2884, + "name": "jsonpickle" + }, + { + "id": 2885, + "name": "model_registry" + }, + { + "id": 2886, + "name": "test_utils" + }, + { + "id": 2887, + "name": "experiment_tracking" + }, + { + "id": 2888, + "name": "vizier" + }, + { + "id": 2889, + "name": "tensorboard_plugin_profile" + }, + { + "id": 2890, + "name": "lit_nlp" + }, + { + "id": 2891, + "name": "explainable_ai_sdk" + }, + { + "id": 2892, + "name": "test_constants" + }, + { + "id": 2893, + "name": "grpc_testing" + }, + { + "id": 2894, + "name": "synthtool" + }, + { + "id": 2895, + "name": "CodeCarbon_template" + }, + { + "id": 2896, + "name": "dash_core_components" + }, + { + "id": 2897, + "name": "container" + }, + { + "id": 2898, + "name": "dash_table" + }, + { + "id": 2899, + "name": "layout" + }, + { + "id": 2900, + "name": "dash_bootstrap_components" + }, + { + "id": 2901, + "name": "fastapi_pagination" + }, + { + "id": 2902, + "name": "Database" + }, + { + "id": 2903, + "name": "API" + }, + { + "id": 2904, + "name": "jobs" + }, + { + "id": 2905, + "name": "ConfigCaller" + }, + { + "id": 2906, + "name": "ftw" + }, + { + "id": 2907, + "name": "libinjection" + }, + { + "id": 2908, + "name": "bunkerweb" + }, + { + "id": 2909, + "name": "words" + }, + { + "id": 2910, + "name": "ApiCaller" + }, + { + "id": 2911, + "name": "dashing" + }, + { + "id": 2912, + "name": "live_143" + }, + { + "id": 2913, + "name": "ezodf" + }, + { + "id": 2914, + "name": "astmonkey" + }, + { + "id": 2915, + "name": "srt" + }, + { + "id": 2916, + "name": "minha_outra_lib" + }, + { + "id": 2917, + "name": "aiometer" + }, + { + "id": 2918, + "name": "myproject" + }, + { + "id": 2919, + "name": "expects" + }, + { + "id": 2920, + "name": "pyramid_cornice" + }, + { + "id": 2921, + "name": "livros" + }, + { + "id": 2922, + "name": "pygubu" + }, + { + "id": 2923, + "name": "ttkthemes" + }, + { + "id": 2924, + "name": "cornice" + }, + { + "id": 2925, + "name": "_locust" + }, + { + "id": 2926, + "name": "ezdxf" + }, + { + "id": 2927, + "name": "kivy" + }, + { + "id": 2928, + "name": "minha_lib" + }, + { + "id": 2929, + "name": "hello_world" + }, + { + "id": 2930, + "name": "vosk" + }, + { + "id": 2931, + "name": "scapy" + }, + { + "id": 2932, + "name": "orm" + }, + { + "id": 2933, + "name": "sfp" + }, + { + "id": 2934, + "name": "bananas" + }, + { + "id": 2935, + "name": "trio" + }, + { + "id": 2936, + "name": "toga" + }, + { + "id": 2937, + "name": "qdarktheme" + }, + { + "id": 2938, + "name": "problemas" + }, + { + "id": 2939, + "name": "pdfminer" + }, + { + "id": 2940, + "name": "flask_pydantic_spec" + }, + { + "id": 2941, + "name": "bdd_tests" + }, + { + "id": 2942, + "name": "pathlib3x" + }, + { + "id": 2943, + "name": "mamba" + }, + { + "id": 2944, + "name": "rest_framework_swagger" + }, + { + "id": 2945, + "name": "ttkbootstrap" + }, + { + "id": 2946, + "name": "funcy" + }, + { + "id": 2947, + "name": "run" + }, + { + "id": 2948, + "name": "PySimpleGUI" + }, + { + "id": 2949, + "name": "bagulho" + }, + { + "id": 2950, + "name": "fausto" + }, + { + "id": 2951, + "name": "textual" + }, + { + "id": 2952, + "name": "PySimpleGUIWeb" + }, + { + "id": 2953, + "name": "kivymd" + }, + { + "id": 2954, + "name": "rocketry" + }, + { + "id": 2955, + "name": "streamlit_ace" + }, + { + "id": 2956, + "name": "ursina" + }, + { + "id": 2957, + "name": "parsel" + }, + { + "id": 2958, + "name": "eliot" + }, + { + "id": 2959, + "name": "aiopath" + }, + { + "id": 2960, + "name": "dash_html_components" + }, + { + "id": 2961, + "name": "simple_term_menu" + }, + { + "id": 2962, + "name": "piccolo" + }, + { + "id": 2963, + "name": "sqlakeyset" + }, + { + "id": 2964, + "name": "gino_starlette" + }, + { + "id": 2965, + "name": "bunnet" + }, + { + "id": 2966, + "name": "engine" + }, + { + "id": 2967, + "name": "checkers" + }, + { + "id": 2968, + "name": "restler_settings" + }, + { + "id": 2969, + "name": "test_servers" + }, + { + "id": 2970, + "name": "fastapi_restful" + }, + { + "id": 2971, + "name": "streamlit_app" + }, + { + "id": 2972, + "name": "jedi" + }, + { + "id": 2973, + "name": "hf_transfer" + }, + { + "id": 2974, + "name": "InquirerPy" + }, + { + "id": 2975, + "name": "spacy_huggingface_hub" + }, + { + "id": 2976, + "name": "humps" + }, + { + "id": 2977, + "name": "recipe_scrapers" + }, + { + "id": 2978, + "name": "text_unidecode" + }, + { + "id": 2979, + "name": "pydantic2ts" + }, + { + "id": 2980, + "name": "w3lib" + }, + { + "id": 2981, + "name": "extruct" + }, + { + "id": 2982, + "name": "thop" + }, + { + "id": 2983, + "name": "inplace_abn" + }, + { + "id": 2984, + "name": "yolov6" + }, + { + "id": 2985, + "name": "mnist" + }, + { + "id": 2986, + "name": "tflite_runtime" + }, + { + "id": 2987, + "name": "ecies" + }, + { + "id": 2988, + "name": "flamby" + }, + { + "id": 2989, + "name": "fedml" + }, + { + "id": 2990, + "name": "tools" + }, + { + "id": 2991, + "name": "idx2numpy" + }, + { + "id": 2992, + "name": "export" + }, + { + "id": 2993, + "name": "monai" + }, + { + "id": 2994, + "name": "onnxsim" + }, + { + "id": 2995, + "name": "ptflops" + }, + { + "id": 2996, + "name": "nvidia_smi" + }, + { + "id": 2997, + "name": "tensorflow_federated" + }, + { + "id": 2998, + "name": "data_preprocessing" + }, + { + "id": 2999, + "name": "coremltools" + }, + { + "id": 3000, + "name": "gitdb" + }, + { + "id": 3001, + "name": "simple_rest_client" + }, + { + "id": 3002, + "name": "curieconf" + }, + { + "id": 3003, + "name": "icedata" + }, + { + "id": 3004, + "name": "pytorch_forecasting" + }, + { + "id": 3005, + "name": "baal" + }, + { + "id": 3006, + "name": "classy_vision" + }, + { + "id": 3007, + "name": "cytoolz" + }, + { + "id": 3008, + "name": "assistant" + }, + { + "id": 3009, + "name": "pytorch_tabular" + }, + { + "id": 3010, + "name": "torch_ort" + }, + { + "id": 3011, + "name": "fastface" + }, + { + "id": 3012, + "name": "fiftyone" + }, + { + "id": 3013, + "name": "icevision" + }, + { + "id": 3014, + "name": "pystiche" + }, + { + "id": 3015, + "name": "vissl" + }, + { + "id": 3016, + "name": "torch_optimizer" + }, + { + "id": 3017, + "name": "segmentation_models_pytorch" + }, + { + "id": 3018, + "name": "pytorchvideo" + }, + { + "id": 3019, + "name": "cython_bbox" + }, + { + "id": 3020, + "name": "dataloaders" + }, + { + "id": 3021, + "name": "mindspore" + }, + { + "id": 3022, + "name": "autoapi" + }, + { + "id": 3023, + "name": "M3L" + }, + { + "id": 3024, + "name": "mindvision" + }, + { + "id": 3025, + "name": "plato" + }, + { + "id": 3026, + "name": "sedna" + }, + { + "id": 3027, + "name": "lap" + }, + { + "id": 3028, + "name": "mprofile" + }, + { + "id": 3029, + "name": "pypprof" + }, + { + "id": 3030, + "name": "ride_share" + }, + { + "id": 3031, + "name": "pyroscope" + }, + { + "id": 3032, + "name": "fastapi_websocket_rpc" + }, + { + "id": 3033, + "name": "easyrpc" + }, + { + "id": 3034, + "name": "easyschedule" + }, + { + "id": 3035, + "name": "fastapi_mail" + }, + { + "id": 3036, + "name": "easyadmin" + }, + { + "id": 3037, + "name": "pydbantic" + }, + { + "id": 3038, + "name": "python_jwt" + }, + { + "id": 3039, + "name": "tensorflow_io" + }, + { + "id": 3040, + "name": "facets_overview" + }, + { + "id": 3041, + "name": "model_archiver" + }, + { + "id": 3042, + "name": "pycaret" + }, + { + "id": 3043, + "name": "copier" + }, + { + "id": 3044, + "name": "compose" + }, + { + "id": 3045, + "name": "steps" + }, + { + "id": 3046, + "name": "dynamic_pipelines" + }, + { + "id": 3047, + "name": "monotonic" + }, + { + "id": 3048, + "name": "neptune" + }, + { + "id": 3049, + "name": "zenml" + }, + { + "id": 3050, + "name": "hooks" + }, + { + "id": 3051, + "name": "kfp_tekton" + }, + { + "id": 3052, + "name": "neuralprophet" + }, + { + "id": 3053, + "name": "distro" + }, + { + "id": 3054, + "name": "pyngrok" + }, + { + "id": 3055, + "name": "label_studio_sdk" + }, + { + "id": 3056, + "name": "analytics" + }, + { + "id": 3057, + "name": "kfp_server_api" + }, + { + "id": 3058, + "name": "imagesize" + }, + { + "id": 3059, + "name": "x_transformers" + }, + { + "id": 3060, + "name": "screeninfo" + }, + { + "id": 3061, + "name": "opal_common" + }, + { + "id": 3062, + "name": "pygit2" + }, + { + "id": 3063, + "name": "opal_server" + }, + { + "id": 3064, + "name": "rook" + }, + { + "id": 3065, + "name": "dpath" + }, + { + "id": 3066, + "name": "opal_client" + }, + { + "id": 3067, + "name": "fastapi_websocket_pubsub" + }, + { + "id": 3068, + "name": "codecarbon" + }, + { + "id": 3069, + "name": "autotrain" + }, + { + "id": 3070, + "name": "trl" + }, + { + "id": 3071, + "name": "DeepCT" + }, + { + "id": 3072, + "name": "tldr" + }, + { + "id": 3073, + "name": "awaits" + }, + { + "id": 3074, + "name": "mitmproxy" + }, + { + "id": 3075, + "name": "qcloud_cos" + }, + { + "id": 3076, + "name": "oss2" + }, + { + "id": 3077, + "name": "jsonpath" + }, + { + "id": 3078, + "name": "redlock" + }, + { + "id": 3079, + "name": "aioetcd3" + }, + { + "id": 3080, + "name": "pymock" + }, + { + "id": 3081, + "name": "grpc_requests" + }, + { + "id": 3082, + "name": "aioify" + }, + { + "id": 3083, + "name": "deepsparse" + }, + { + "id": 3084, + "name": "openpifpaf" + }, + { + "id": 3085, + "name": "haystack" + }, + { + "id": 3086, + "name": "numa" + }, + { + "id": 3087, + "name": "sparsezoo" + }, + { + "id": 3088, + "name": "twint" + }, + { + "id": 3089, + "name": "ndjson" + }, + { + "id": 3090, + "name": "thefuzz" + }, + { + "id": 3091, + "name": "hdx" + }, + { + "id": 3092, + "name": "pycountry_convert" + }, + { + "id": 3093, + "name": "geojson" + }, + { + "id": 3094, + "name": "pycountry" + }, + { + "id": 3095, + "name": "h3" + }, + { + "id": 3096, + "name": "pytrends" + }, + { + "id": 3097, + "name": "moment" + }, + { + "id": 3098, + "name": "python_utils" + }, + { + "id": 3099, + "name": "python_on_whales" + }, + { + "id": 3100, + "name": "opyrator" + }, + { + "id": 3101, + "name": "ISR" + }, + { + "id": 3102, + "name": "usb" + }, + { + "id": 3103, + "name": "developer_disk_image" + }, + { + "id": 3104, + "name": "pycrashreport" + }, + { + "id": 3105, + "name": "remotezip" + }, + { + "id": 3106, + "name": "aioquic_pmd3" + }, + { + "id": 3107, + "name": "cmd2" + }, + { + "id": 3108, + "name": "gnureadline" + }, + { + "id": 3109, + "name": "cmd2_ext_test" + }, + { + "id": 3110, + "name": "gpxpy" + }, + { + "id": 3111, + "name": "hyperframe" + }, + { + "id": 3112, + "name": "pytun_pmd3" + }, + { + "id": 3113, + "name": "asn1" + }, + { + "id": 3114, + "name": "pygnuutils" + }, + { + "id": 3115, + "name": "inquirer3" + }, + { + "id": 3116, + "name": "pykdebugparser" + }, + { + "id": 3117, + "name": "hexdump" + }, + { + "id": 3118, + "name": "bpylist2" + }, + { + "id": 3119, + "name": "construct" + }, + { + "id": 3120, + "name": "zeroconf" + }, + { + "id": 3121, + "name": "ifaddr" + }, + { + "id": 3122, + "name": "pcapy" + }, + { + "id": 3123, + "name": "srptools" + }, + { + "id": 3124, + "name": "opack" + }, + { + "id": 3125, + "name": "ipsw_parser" + }, + { + "id": 3126, + "name": "streamlit_tags" + }, + { + "id": 3127, + "name": "meme_generator" + }, + { + "id": 3128, + "name": "graia" + }, + { + "id": 3129, + "name": "noneprompt" + }, + { + "id": 3130, + "name": "unwind" + }, + { + "id": 3131, + "name": "PicImageSearch" + }, + { + "id": 3132, + "name": "dacite" + }, + { + "id": 3133, + "name": "pyzipper" + }, + { + "id": 3134, + "name": "creart" + }, + { + "id": 3135, + "name": "graiax" + }, + { + "id": 3136, + "name": "launart" + }, + { + "id": 3137, + "name": "server" + }, + { + "id": 3138, + "name": "pygls" + }, + { + "id": 3139, + "name": "h2o_wave" + }, + { + "id": 3140, + "name": "parso" + }, + { + "id": 3141, + "name": "h2o_lightwave_web" + }, + { + "id": 3142, + "name": "hatchling" + }, + { + "id": 3143, + "name": "h2o_lightwave" + }, + { + "id": 3144, + "name": "lsprotocol" + }, + { + "id": 3145, + "name": "h2o_wave_university" + }, + { + "id": 3146, + "name": "cyjupyter" + }, + { + "id": 3147, + "name": "wilds" + }, + { + "id": 3148, + "name": "minichain" + }, + { + "id": 3149, + "name": "gpt_index" + }, + { + "id": 3150, + "name": "voxel" + }, + { + "id": 3151, + "name": "manifest" + }, + { + "id": 3152, + "name": "domino" + }, + { + "id": 3153, + "name": "robustness" + }, + { + "id": 3154, + "name": "mocha" + }, + { + "id": 3155, + "name": "SampleData" + }, + { + "id": 3156, + "name": "sitkUtils" + }, + { + "id": 3157, + "name": "girder_client" + }, + { + "id": 3158, + "name": "ctk" + }, + { + "id": 3159, + "name": "numpymaxflow" + }, + { + "id": 3160, + "name": "mockserver_friendly" + }, + { + "id": 3161, + "name": "large_image" + }, + { + "id": 3162, + "name": "itk" + }, + { + "id": 3163, + "name": "MONAILabelReviewerLib" + }, + { + "id": 3164, + "name": "cli" + }, + { + "id": 3165, + "name": "openslide" + }, + { + "id": 3166, + "name": "qt" + }, + { + "id": 3167, + "name": "expiring_dict" + }, + { + "id": 3168, + "name": "vtkSegmentationCore" + }, + { + "id": 3169, + "name": "slicer" + }, + { + "id": 3170, + "name": "pydicom_seg" + }, + { + "id": 3171, + "name": "histomicstk" + }, + { + "id": 3172, + "name": "dicomweb_client" + }, + { + "id": 3173, + "name": "pyopenjtalk" + }, + { + "id": 3174, + "name": "data_converter" + }, + { + "id": 3175, + "name": "movinet" + }, + { + "id": 3176, + "name": "tf_agents" + }, + { + "id": 3177, + "name": "google3" + }, + { + "id": 3178, + "name": "video_util" + }, + { + "id": 3179, + "name": "eval_utils" + }, + { + "id": 3180, + "name": "params" + }, + { + "id": 3181, + "name": "keras_cv" + }, + { + "id": 3182, + "name": "prisma_cleanup" + }, + { + "id": 3183, + "name": "nodejs" + }, + { + "id": 3184, + "name": "rtoml" + }, + { + "id": 3185, + "name": "pytest_subprocess" + }, + { + "id": 3186, + "name": "prisma" + }, + { + "id": 3187, + "name": "hashids" + }, + { + "id": 3188, + "name": "cached_property" + }, + { + "id": 3189, + "name": "syrupy" + }, + { + "id": 3190, + "name": "win32serviceutil" + }, + { + "id": 3191, + "name": "servicemanager" + }, + { + "id": 3192, + "name": "biim" + }, + { + "id": 3193, + "name": "aerich" + }, + { + "id": 3194, + "name": "elevate" + }, + { + "id": 3195, + "name": "ariblib" + }, + { + "id": 3196, + "name": "win32service" + }, + { + "id": 3197, + "name": "py7zr" + }, + { + "id": 3198, + "name": "puremagic" + }, + { + "id": 3199, + "name": "pymediainfo" + }, + { + "id": 3200, + "name": "tweepy_authlib" + }, + { + "id": 3201, + "name": "itemadapter" + }, + { + "id": 3202, + "name": "user_manager" + }, + { + "id": 3203, + "name": "pysnooper" + }, + { + "id": 3204, + "name": "dlib" + }, + { + "id": 3205, + "name": "prison" + }, + { + "id": 3206, + "name": "job" + }, + { + "id": 3207, + "name": "wtforms_json" + }, + { + "id": 3208, + "name": "flask_talisman" + }, + { + "id": 3209, + "name": "flask_appbuilder" + }, + { + "id": 3210, + "name": "tensorflow_recommenders_addons" + }, + { + "id": 3211, + "name": "NER" + }, + { + "id": 3212, + "name": "sklearn_crfsuite" + }, + { + "id": 3213, + "name": "nni" + }, + { + "id": 3214, + "name": "pandarallel" + }, + { + "id": 3215, + "name": "darknetpy" + }, + { + "id": 3216, + "name": "myapp_config" + }, + { + "id": 3217, + "name": "webhooks" + }, + { + "id": 3218, + "name": "cubestudio" + }, + { + "id": 3219, + "name": "parsedatetime" + }, + { + "id": 3220, + "name": "flask_compress" + }, + { + "id": 3221, + "name": "contextlib2" + }, + { + "id": 3222, + "name": "pydruid" + }, + { + "id": 3223, + "name": "docker_registry_client_async" + }, + { + "id": 3224, + "name": "webflowpy" + }, + { + "id": 3225, + "name": "python_graphql_client" + }, + { + "id": 3226, + "name": "autoxgb" + }, + { + "id": 3227, + "name": "aiounittest" + }, + { + "id": 3228, + "name": "dbt_artifacts_parser" + }, + { + "id": 3229, + "name": "source_notion" + }, + { + "id": 3230, + "name": "ptsd_jbroll" + }, + { + "id": 3231, + "name": "data_export" + }, + { + "id": 3232, + "name": "spellchecker" + }, + { + "id": 3233, + "name": "source_iterable" + }, + { + "id": 3234, + "name": "jproperties" + }, + { + "id": 3235, + "name": "handlers" + }, + { + "id": 3236, + "name": "source_sftp_bulk" + }, + { + "id": 3237, + "name": "source_google_search_console" + }, + { + "id": 3238, + "name": "scrapbook" + }, + { + "id": 3239, + "name": "source_mixpanel" + }, + { + "id": 3240, + "name": "source_babelforce" + }, + { + "id": 3241, + "name": "source_hubplanner" + }, + { + "id": 3242, + "name": "clickhouse_grpc_pb2_grpc" + }, + { + "id": 3243, + "name": "tap_quickbooks" + }, + { + "id": 3244, + "name": "appstoreconnect" + }, + { + "id": 3245, + "name": "source_file" + }, + { + "id": 3246, + "name": "source_us_census" + }, + { + "id": 3247, + "name": "aes_encryption" + }, + { + "id": 3248, + "name": "source_genesys" + }, + { + "id": 3249, + "name": "graphlearn" + }, + { + "id": 3250, + "name": "source_pocket" + }, + { + "id": 3251, + "name": "ttsfrd" + }, + { + "id": 3252, + "name": "source_timely" + }, + { + "id": 3253, + "name": "source_aws_cloudtrail" + }, + { + "id": 3254, + "name": "source_youtube_analytics" + }, + { + "id": 3255, + "name": "princflags" + }, + { + "id": 3256, + "name": "source_yahoo_finance_price" + }, + { + "id": 3257, + "name": "rest_polymorphic" + }, + { + "id": 3258, + "name": "source_freshsales" + }, + { + "id": 3259, + "name": "normalization" + }, + { + "id": 3260, + "name": "flatten_dict" + }, + { + "id": 3261, + "name": "datadog_checks" + }, + { + "id": 3262, + "name": "source_adjust" + }, + { + "id": 3263, + "name": "finetune_glm" + }, + { + "id": 3264, + "name": "source_marketo" + }, + { + "id": 3265, + "name": "pyapacheatlas" + }, + { + "id": 3266, + "name": "connector_acceptance_test" + }, + { + "id": 3267, + "name": "shotdetect_scenedetect_lgss" + }, + { + "id": 3268, + "name": "jsonplus" + }, + { + "id": 3269, + "name": "source_rss" + }, + { + "id": 3270, + "name": "source_mailgun" + }, + { + "id": 3271, + "name": "tubemq_tdmsg" + }, + { + "id": 3272, + "name": "videofeatures_clipit" + }, + { + "id": 3273, + "name": "simdjson" + }, + { + "id": 3274, + "name": "source_zoho_crm" + }, + { + "id": 3275, + "name": "web" + }, + { + "id": 3276, + "name": "source_monday" + }, + { + "id": 3277, + "name": "lief" + }, + { + "id": 3278, + "name": "registry" + }, + { + "id": 3279, + "name": "clickhouse" + }, + { + "id": 3280, + "name": "source_zendesk_chat" + }, + { + "id": 3281, + "name": "kws_util" + }, + { + "id": 3282, + "name": "ci_changes_detection" + }, + { + "id": 3283, + "name": "requests_unixsocket" + }, + { + "id": 3284, + "name": "spec_linter" + }, + { + "id": 3285, + "name": "apify_client" + }, + { + "id": 3286, + "name": "opcua" + }, + { + "id": 3287, + "name": "schema_generator" + }, + { + "id": 3288, + "name": "ci_credentials" + }, + { + "id": 3289, + "name": "looker_sdk" + }, + { + "id": 3290, + "name": "dict2xml" + }, + { + "id": 3291, + "name": "source_kyriba" + }, + { + "id": 3292, + "name": "source_google_analytics_v4" + }, + { + "id": 3293, + "name": "source_facebook_pages" + }, + { + "id": 3294, + "name": "atlas_start" + }, + { + "id": 3295, + "name": "auto_labeling_pipeline" + }, + { + "id": 3296, + "name": "easycv" + }, + { + "id": 3297, + "name": "testflows" + }, + { + "id": 3298, + "name": "bingads" + }, + { + "id": 3299, + "name": "source_recharge" + }, + { + "id": 3300, + "name": "source_greenhouse" + }, + { + "id": 3301, + "name": "ci_code_validator" + }, + { + "id": 3302, + "name": "facebook_business" + }, + { + "id": 3303, + "name": "atlas_config" + }, + { + "id": 3304, + "name": "mdutils" + }, + { + "id": 3305, + "name": "pyhocon" + }, + { + "id": 3306, + "name": "destination_databend" + }, + { + "id": 3307, + "name": "source_webflow" + }, + { + "id": 3308, + "name": "nats" + }, + { + "id": 3309, + "name": "suds" + }, + { + "id": 3310, + "name": "source_dockerhub" + }, + { + "id": 3311, + "name": "source_typeform" + }, + { + "id": 3312, + "name": "requests_kerberos" + }, + { + "id": 3313, + "name": "source_chargify" + }, + { + "id": 3314, + "name": "source_railz" + }, + { + "id": 3315, + "name": "neptune_python_utils" + }, + { + "id": 3316, + "name": "destination_amazon_sqs" + }, + { + "id": 3317, + "name": "plaid" + }, + { + "id": 3318, + "name": "source_rd_station_marketing" + }, + { + "id": 3319, + "name": "tubemq_errcode" + }, + { + "id": 3320, + "name": "source_salesloft" + }, + { + "id": 3321, + "name": "source_hubspot" + }, + { + "id": 3322, + "name": "airbyte_cdk" + }, + { + "id": 3323, + "name": "sklearn2pmml" + }, + { + "id": 3324, + "name": "nacos" + }, + { + "id": 3325, + "name": "source_flexport" + }, + { + "id": 3326, + "name": "source_copper" + }, + { + "id": 3327, + "name": "firebolt" + }, + { + "id": 3328, + "name": "genson" + }, + { + "id": 3329, + "name": "source_confluence" + }, + { + "id": 3330, + "name": "source_chargebee" + }, + { + "id": 3331, + "name": "django_drf_filepond" + }, + { + "id": 3332, + "name": "function_service_pb2" + }, + { + "id": 3333, + "name": "source_convex" + }, + { + "id": 3334, + "name": "source_qualaroo" + }, + { + "id": 3335, + "name": "dask_sql" + }, + { + "id": 3336, + "name": "window_functions" + }, + { + "id": 3337, + "name": "sqllineage" + }, + { + "id": 3338, + "name": "unicore" + }, + { + "id": 3339, + "name": "destination_kvdb" + }, + { + "id": 3340, + "name": "pyaml" + }, + { + "id": 3341, + "name": "source_bing_ads" + }, + { + "id": 3342, + "name": "source_file_secure" + }, + { + "id": 3343, + "name": "source_primetric" + }, + { + "id": 3344, + "name": "k5test" + }, + { + "id": 3345, + "name": "source_auth0" + }, + { + "id": 3346, + "name": "sqlalchemy_redshift" + }, + { + "id": 3347, + "name": "source_bamboo_hr" + }, + { + "id": 3348, + "name": "datetime64_extended_range" + }, + { + "id": 3349, + "name": "source_braintree" + }, + { + "id": 3350, + "name": "grammarinator" + }, + { + "id": 3351, + "name": "source_appfollow" + }, + { + "id": 3352, + "name": "instaboostfast" + }, + { + "id": 3353, + "name": "map_type" + }, + { + "id": 3354, + "name": "source_zendesk_talk" + }, + { + "id": 3355, + "name": "source_airtable" + }, + { + "id": 3356, + "name": "recurly" + }, + { + "id": 3357, + "name": "textnas_final" + }, + { + "id": 3358, + "name": "integration_tests" + }, + { + "id": 3359, + "name": "atlasclient" + }, + { + "id": 3360, + "name": "source_zuora" + }, + { + "id": 3361, + "name": "source_alpha_vantage" + }, + { + "id": 3362, + "name": "source_harvest" + }, + { + "id": 3363, + "name": "tubemq_client" + }, + { + "id": 3364, + "name": "destination_duckdb" + }, + { + "id": 3365, + "name": "model_mommy" + }, + { + "id": 3366, + "name": "ranger_performance_tool" + }, + { + "id": 3367, + "name": "ci_sonar_qube" + }, + { + "id": 3368, + "name": "jsonref" + }, + { + "id": 3369, + "name": "destination_sqlite" + }, + { + "id": 3370, + "name": "source_firebolt" + }, + { + "id": 3371, + "name": "source_slack" + }, + { + "id": 3372, + "name": "databend_sqlalchemy" + }, + { + "id": 3373, + "name": "octavia_cli" + }, + { + "id": 3374, + "name": "learning_rates" + }, + { + "id": 3375, + "name": "generation_utils" + }, + { + "id": 3376, + "name": "source_amazon_ads" + }, + { + "id": 3377, + "name": "okta" + }, + { + "id": 3378, + "name": "client" + }, + { + "id": 3379, + "name": "openmetadata" + }, + { + "id": 3380, + "name": "source_sendgrid" + }, + { + "id": 3381, + "name": "alibabacloud_cs20151215" + }, + { + "id": 3382, + "name": "drf_yasg" + }, + { + "id": 3383, + "name": "teradatasql" + }, + { + "id": 3384, + "name": "test_library_bridge" + }, + { + "id": 3385, + "name": "jaydebeapi" + }, + { + "id": 3386, + "name": "tubemq_config" + }, + { + "id": 3387, + "name": "test_odbc_interaction" + }, + { + "id": 3388, + "name": "kfserving" + }, + { + "id": 3389, + "name": "alibabacloud_vpc20160428" + }, + { + "id": 3390, + "name": "_scproxy" + }, + { + "id": 3391, + "name": "deltalake" + }, + { + "id": 3392, + "name": "source_klaviyo" + }, + { + "id": 3393, + "name": "marshmallow3_annotations" + }, + { + "id": 3394, + "name": "amundsen_application" + }, + { + "id": 3395, + "name": "grpc_tools" + }, + { + "id": 3396, + "name": "source_github" + }, + { + "id": 3397, + "name": "dbt" + }, + { + "id": 3398, + "name": "kwsbp" + }, + { + "id": 3399, + "name": "modelscope" + }, + { + "id": 3400, + "name": "source_public_apis" + }, + { + "id": 3401, + "name": "cup" + }, + { + "id": 3402, + "name": "timeout_decorator" + }, + { + "id": 3403, + "name": "ci_connector_ops" + }, + { + "id": 3404, + "name": "source_pivotal_tracker" + }, + { + "id": 3405, + "name": "source_orbit" + }, + { + "id": 3406, + "name": "source_looker" + }, + { + "id": 3407, + "name": "source_zenefits" + }, + { + "id": 3408, + "name": "extended_precision_data_types" + }, + { + "id": 3409, + "name": "pattern" + }, + { + "id": 3410, + "name": "artist" + }, + { + "id": 3411, + "name": "source_gridly" + }, + { + "id": 3412, + "name": "xtcocotools" + }, + { + "id": 3413, + "name": "source_scaffold_source_http" + }, + { + "id": 3414, + "name": "globmatch" + }, + { + "id": 3415, + "name": "metadata" + }, + { + "id": 3416, + "name": "destination_meilisearch" + }, + { + "id": 3417, + "name": "flatten_json" + }, + { + "id": 3418, + "name": "pretrain_glm" + }, + { + "id": 3419, + "name": "source_gitlab" + }, + { + "id": 3420, + "name": "source_pipedrive" + }, + { + "id": 3421, + "name": "roles" + }, + { + "id": 3422, + "name": "kdcproxy" + }, + { + "id": 3423, + "name": "pyvi" + }, + { + "id": 3424, + "name": "source_lemlist" + }, + { + "id": 3425, + "name": "pandavro" + }, + { + "id": 3426, + "name": "dagster_graphql" + }, + { + "id": 3427, + "name": "schema_registry" + }, + { + "id": 3428, + "name": "pyexcel" + }, + { + "id": 3429, + "name": "graphscope" + }, + { + "id": 3430, + "name": "source_gnews" + }, + { + "id": 3431, + "name": "cvxopt" + }, + { + "id": 3432, + "name": "source_declarative_manifest" + }, + { + "id": 3433, + "name": "destination_firestore" + }, + { + "id": 3434, + "name": "antlr4" + }, + { + "id": 3435, + "name": "source_posthog" + }, + { + "id": 3436, + "name": "runtime" + }, + { + "id": 3437, + "name": "pyathena" + }, + { + "id": 3438, + "name": "source_shortio" + }, + { + "id": 3439, + "name": "source_pinterest" + }, + { + "id": 3440, + "name": "aerospike" + }, + { + "id": 3441, + "name": "source_s3" + }, + { + "id": 3442, + "name": "source_yandex_metrica" + }, + { + "id": 3443, + "name": "label_types" + }, + { + "id": 3444, + "name": "feathr" + }, + { + "id": 3445, + "name": "source_amazon_sqs" + }, + { + "id": 3446, + "name": "source_salesforce" + }, + { + "id": 3447, + "name": "source_linkedin_ads" + }, + { + "id": 3448, + "name": "source_outreach" + }, + { + "id": 3449, + "name": "odps" + }, + { + "id": 3450, + "name": "pydomo" + }, + { + "id": 3451, + "name": "jpype" + }, + { + "id": 3452, + "name": "source_snapchat_marketing" + }, + { + "id": 3453, + "name": "alps" + }, + { + "id": 3454, + "name": "apache_atlas" + }, + { + "id": 3455, + "name": "source_lever_hiring" + }, + { + "id": 3456, + "name": "apache_ranger" + }, + { + "id": 3457, + "name": "source_recurly" + }, + { + "id": 3458, + "name": "tubemq" + }, + { + "id": 3459, + "name": "ibm_db_dbi" + }, + { + "id": 3460, + "name": "bigquery_schema_generator" + }, + { + "id": 3461, + "name": "search_service" + }, + { + "id": 3462, + "name": "source_insightly" + }, + { + "id": 3463, + "name": "tsp_train" + }, + { + "id": 3464, + "name": "smartsheet" + }, + { + "id": 3465, + "name": "nlpaug" + }, + { + "id": 3466, + "name": "tubemq_return" + }, + { + "id": 3467, + "name": "source_square" + }, + { + "id": 3468, + "name": "destination_google_sheets" + }, + { + "id": 3469, + "name": "gscoordinator" + }, + { + "id": 3470, + "name": "gremlin_python" + }, + { + "id": 3471, + "name": "source_freshcaller" + }, + { + "id": 3472, + "name": "wcmatch" + }, + { + "id": 3473, + "name": "source_jira" + }, + { + "id": 3474, + "name": "ffmpegcv" + }, + { + "id": 3475, + "name": "airbyte_api_client" + }, + { + "id": 3476, + "name": "tableau_api_lib" + }, + { + "id": 3477, + "name": "neo4j" + }, + { + "id": 3478, + "name": "bmt_clipit" + }, + { + "id": 3479, + "name": "databuilder" + }, + { + "id": 3480, + "name": "source_datadog" + }, + { + "id": 3481, + "name": "source_strava" + }, + { + "id": 3482, + "name": "simple_salesforce" + }, + { + "id": 3483, + "name": "source_onesignal" + }, + { + "id": 3484, + "name": "dj_rest_auth" + }, + { + "id": 3485, + "name": "blocklm_utils" + }, + { + "id": 3486, + "name": "source_tiktok_marketing" + }, + { + "id": 3487, + "name": "source_linnworks" + }, + { + "id": 3488, + "name": "clickhouse_grpc_pb2" + }, + { + "id": 3489, + "name": "source_instagram" + }, + { + "id": 3490, + "name": "auto_labeling" + }, + { + "id": 3491, + "name": "gbqschema_converter" + }, + { + "id": 3492, + "name": "source_facebook_marketing" + }, + { + "id": 3493, + "name": "httpclient" + }, + { + "id": 3494, + "name": "mmengine" + }, + { + "id": 3495, + "name": "source_orb" + }, + { + "id": 3496, + "name": "undecorated" + }, + { + "id": 3497, + "name": "xmlrunner" + }, + { + "id": 3498, + "name": "source_mailchimp" + }, + { + "id": 3499, + "name": "source_google_analytics_data_api" + }, + { + "id": 3500, + "name": "chargebee" + }, + { + "id": 3501, + "name": "source_coda" + }, + { + "id": 3502, + "name": "source_zendesk_support" + }, + { + "id": 3503, + "name": "unicodedata2" + }, + { + "id": 3504, + "name": "looseversion" + }, + { + "id": 3505, + "name": "source_zendesk_sell" + }, + { + "id": 3506, + "name": "runenv" + }, + { + "id": 3507, + "name": "easynlp" + }, + { + "id": 3508, + "name": "nanoid" + }, + { + "id": 3509, + "name": "icdiff" + }, + { + "id": 3510, + "name": "alibabacloud_ecs20140526" + }, + { + "id": 3511, + "name": "source_qonto" + }, + { + "id": 3512, + "name": "source_fauna" + }, + { + "id": 3513, + "name": "deepke" + }, + { + "id": 3514, + "name": "gast" + }, + { + "id": 3515, + "name": "source_dv_360" + }, + { + "id": 3516, + "name": "couler" + }, + { + "id": 3517, + "name": "ai_lib" + }, + { + "id": 3518, + "name": "pyhdfs" + }, + { + "id": 3519, + "name": "pydolphinscheduler" + }, + { + "id": 3520, + "name": "source_commcare" + }, + { + "id": 3521, + "name": "destination_rabbitmq" + }, + { + "id": 3522, + "name": "vineyard" + }, + { + "id": 3523, + "name": "meilisearch" + }, + { + "id": 3524, + "name": "source_shopify" + }, + { + "id": 3525, + "name": "source_persistiq" + }, + { + "id": 3526, + "name": "source_fastbill" + }, + { + "id": 3527, + "name": "dataclasses_jsonschema" + }, + { + "id": 3528, + "name": "source_rki_covid" + }, + { + "id": 3529, + "name": "opt_einsum" + }, + { + "id": 3530, + "name": "flask_swagger_ui" + }, + { + "id": 3531, + "name": "source_my_hours" + }, + { + "id": 3532, + "name": "pygsheets" + }, + { + "id": 3533, + "name": "source_wrike" + }, + { + "id": 3534, + "name": "sqlflow_models" + }, + { + "id": 3535, + "name": "plotille" + }, + { + "id": 3536, + "name": "lakesoul" + }, + { + "id": 3537, + "name": "text2sql_lgesql" + }, + { + "id": 3538, + "name": "paiio" + }, + { + "id": 3539, + "name": "source_surveycto" + }, + { + "id": 3540, + "name": "MinDAEC" + }, + { + "id": 3541, + "name": "zhconv" + }, + { + "id": 3542, + "name": "openmetadata_managed_apis" + }, + { + "id": 3543, + "name": "braintree" + }, + { + "id": 3544, + "name": "source_openweather" + }, + { + "id": 3545, + "name": "requests_aws4auth" + }, + { + "id": 3546, + "name": "source_netsuite" + }, + { + "id": 3547, + "name": "pprintpp" + }, + { + "id": 3548, + "name": "typesense" + }, + { + "id": 3549, + "name": "mmcls" + }, + { + "id": 3550, + "name": "sqlalchemy_vertica" + }, + { + "id": 3551, + "name": "source_paypal_transaction" + }, + { + "id": 3552, + "name": "source_klarna" + }, + { + "id": 3553, + "name": "source_instatus" + }, + { + "id": 3554, + "name": "source_dixa" + }, + { + "id": 3555, + "name": "source_okta" + }, + { + "id": 3556, + "name": "sqlalchemy_bigquery" + }, + { + "id": 3557, + "name": "asana" + }, + { + "id": 3558, + "name": "source_drift" + }, + { + "id": 3559, + "name": "xlrd2" + }, + { + "id": 3560, + "name": "elftools" + }, + { + "id": 3561, + "name": "metadata_service" + }, + { + "id": 3562, + "name": "ssl_override_server_hostname" + }, + { + "id": 3563, + "name": "faunadb" + }, + { + "id": 3564, + "name": "redash_toolbelt" + }, + { + "id": 3565, + "name": "incremental" + }, + { + "id": 3566, + "name": "rbac" + }, + { + "id": 3567, + "name": "feathrcli" + }, + { + "id": 3568, + "name": "for_requests" + }, + { + "id": 3569, + "name": "soda" + }, + { + "id": 3570, + "name": "source_asana" + }, + { + "id": 3571, + "name": "spectate" + }, + { + "id": 3572, + "name": "amundsen_common" + }, + { + "id": 3573, + "name": "jsonpath_rw" + }, + { + "id": 3574, + "name": "kubeflow" + }, + { + "id": 3575, + "name": "mimesis" + }, + { + "id": 3576, + "name": "prance" + }, + { + "id": 3577, + "name": "types_pb2" + }, + { + "id": 3578, + "name": "function_service_pb2_grpc" + }, + { + "id": 3579, + "name": "source_tplcentral" + }, + { + "id": 3580, + "name": "source_trello" + }, + { + "id": 3581, + "name": "artifactory" + }, + { + "id": 3582, + "name": "source_paystack" + }, + { + "id": 3583, + "name": "source_stripe" + }, + { + "id": 3584, + "name": "imagecorruptions" + }, + { + "id": 3585, + "name": "source_younium" + }, + { + "id": 3586, + "name": "torch_scatter" + }, + { + "id": 3587, + "name": "teslafaas" + }, + { + "id": 3588, + "name": "source_retently" + }, + { + "id": 3589, + "name": "source_google_ads" + }, + { + "id": 3590, + "name": "destination_weaviate" + }, + { + "id": 3591, + "name": "source_intercom" + }, + { + "id": 3592, + "name": "source_braze" + }, + { + "id": 3593, + "name": "source_surveymonkey" + }, + { + "id": 3594, + "name": "users" + }, + { + "id": 3595, + "name": "typing_compat" + }, + { + "id": 3596, + "name": "clickhouse_sqlalchemy" + }, + { + "id": 3597, + "name": "ibm_db_sa" + }, + { + "id": 3598, + "name": "trino" + }, + { + "id": 3599, + "name": "source_exchange_rates" + }, + { + "id": 3600, + "name": "source_freshservice" + }, + { + "id": 3601, + "name": "furl" + }, + { + "id": 3602, + "name": "source_visma_economic" + }, + { + "id": 3603, + "name": "source_clockify" + }, + { + "id": 3604, + "name": "source_microsoft_dataverse" + }, + { + "id": 3605, + "name": "source_sentry" + }, + { + "id": 3606, + "name": "sqlalchemy_databricks" + }, + { + "id": 3607, + "name": "source_twilio" + }, + { + "id": 3608, + "name": "agate" + }, + { + "id": 3609, + "name": "source_azure_table" + }, + { + "id": 3610, + "name": "amundsen_rds" + }, + { + "id": 3611, + "name": "source_smartsheets" + }, + { + "id": 3612, + "name": "destination_firebolt" + }, + { + "id": 3613, + "name": "amundsen_gremlin" + }, + { + "id": 3614, + "name": "source_nasa" + }, + { + "id": 3615, + "name": "gql" + }, + { + "id": 3616, + "name": "destination_typesense" + }, + { + "id": 3617, + "name": "en_core_web_sm" + }, + { + "id": 3618, + "name": "jsonschema2md" + }, + { + "id": 3619, + "name": "ci_common_utils" + }, + { + "id": 3620, + "name": "source_amplitude" + }, + { + "id": 3621, + "name": "py_sound_connect" + }, + { + "id": 3622, + "name": "airflow_provider_openmetadata" + }, + { + "id": 3623, + "name": "java" + }, + { + "id": 3624, + "name": "autoscaling" + }, + { + "id": 3625, + "name": "server_entry" + }, + { + "id": 3626, + "name": "source_xkcd" + }, + { + "id": 3627, + "name": "services" + }, + { + "id": 3628, + "name": "source_glassfrog" + }, + { + "id": 3629, + "name": "tubemq_message" + }, + { + "id": 3630, + "name": "source_amazon_seller_partner" + }, + { + "id": 3631, + "name": "mpu" + }, + { + "id": 3632, + "name": "source_xero" + }, + { + "id": 3633, + "name": "source_faker" + }, + { + "id": 3634, + "name": "django_filters" + }, + { + "id": 3635, + "name": "pyomo" + }, + { + "id": 3636, + "name": "data_import" + }, + { + "id": 3637, + "name": "source_freshdesk" + }, + { + "id": 3638, + "name": "source_appsflyer" + }, + { + "id": 3639, + "name": "source_google_sheets" + }, + { + "id": 3640, + "name": "destination_sftp_json" + }, + { + "id": 3641, + "name": "labels" + }, + { + "id": 3642, + "name": "easyasr" + }, + { + "id": 3643, + "name": "source_weatherstack" + }, + { + "id": 3644, + "name": "common_utils" + }, + { + "id": 3645, + "name": "redislite" + }, + { + "id": 3646, + "name": "id_definition" + }, + { + "id": 3647, + "name": "monitor" + }, + { + "id": 3648, + "name": "update_1_1_0_to_2_0_0" + }, + { + "id": 3649, + "name": "ymir_exc" + }, + { + "id": 3650, + "name": "fastapi_health" + }, + { + "id": 3651, + "name": "yapi" + }, + { + "id": 3652, + "name": "pywebio" + }, + { + "id": 3653, + "name": "onnxoptimizer" + }, + { + "id": 3654, + "name": "transformer_deploy" + }, + { + "id": 3655, + "name": "torchdynamo" + }, + { + "id": 3656, + "name": "pytorch_quantization" + }, + { + "id": 3657, + "name": "encoder" + }, + { + "id": 3658, + "name": "lws" + }, + { + "id": 3659, + "name": "audioread" + }, + { + "id": 3660, + "name": "audio_recorder_streamlit" + }, + { + "id": 3661, + "name": "visdom" + }, + { + "id": 3662, + "name": "sounddevice" + }, + { + "id": 3663, + "name": "torch_complex" + }, + { + "id": 3664, + "name": "pydantic_extra_types" + }, + { + "id": 3665, + "name": "fast_query_parsers" + }, + { + "id": 3666, + "name": "piccolo_conf" + }, + { + "id": 3667, + "name": "auto_pytabs" + }, + { + "id": 3668, + "name": "piccolo_api" + }, + { + "id": 3669, + "name": "piccolo_admin" + }, + { + "id": 3670, + "name": "rich_click" + }, + { + "id": 3671, + "name": "jsbeautifier" + }, + { + "id": 3672, + "name": "httpx_sse" + }, + { + "id": 3673, + "name": "polyfactory" + }, + { + "id": 3674, + "name": "annotated_types" + }, + { + "id": 3675, + "name": "mktestdocs" + }, + { + "id": 3676, + "name": "trimesh" + }, + { + "id": 3677, + "name": "justext" + }, + { + "id": 3678, + "name": "pyi_splash" + }, + { + "id": 3679, + "name": "khoj" + }, + { + "id": 3680, + "name": "targets" + }, + { + "id": 3681, + "name": "frameworks" + }, + { + "id": 3682, + "name": "ovmsclient" + }, + { + "id": 3683, + "name": "jpeg4py" + }, + { + "id": 3684, + "name": "prodict" + }, + { + "id": 3685, + "name": "argilla" + }, + { + "id": 3686, + "name": "cleanlab" + }, + { + "id": 3687, + "name": "luqum" + }, + { + "id": 3688, + "name": "flyingsquid" + }, + { + "id": 3689, + "name": "resize_right" + }, + { + "id": 3690, + "name": "scaled_masked_softmax_cuda" + }, + { + "id": 3691, + "name": "jieba_fast" + }, + { + "id": 3692, + "name": "train_func" + }, + { + "id": 3693, + "name": "fengshen_inner" + }, + { + "id": 3694, + "name": "flash_attn_cuda" + }, + { + "id": 3695, + "name": "scaled_upper_triang_masked_softmax_cuda" + }, + { + "id": 3696, + "name": "private" + }, + { + "id": 3697, + "name": "assignments" + }, + { + "id": 3698, + "name": "efficientnet_pytorch" + }, + { + "id": 3699, + "name": "ft_mha" + }, + { + "id": 3700, + "name": "clu" + }, + { + "id": 3701, + "name": "github3" + }, + { + "id": 3702, + "name": "alpa_serve" + }, + { + "id": 3703, + "name": "sphinx_gallery" + }, + { + "id": 3704, + "name": "bazel_tools" + }, + { + "id": 3705, + "name": "torch4keras" + }, + { + "id": 3706, + "name": "cchess" + }, + { + "id": 3707, + "name": "streamsync" + }, + { + "id": 3708, + "name": "revChatGPT" + }, + { + "id": 3709, + "name": "brevitas" + }, + { + "id": 3710, + "name": "mwparserfromhell" + }, + { + "id": 3711, + "name": "CLIP" + }, + { + "id": 3712, + "name": "text_generation" + }, + { + "id": 3713, + "name": "iree" + }, + { + "id": 3714, + "name": "brevitas_examples" + }, + { + "id": 3715, + "name": "shark_tuner" + }, + { + "id": 3716, + "name": "torch_mlir_e2e_test" + }, + { + "id": 3717, + "name": "profanity_check" + }, + { + "id": 3718, + "name": "diffusion" + }, + { + "id": 3719, + "name": "MEGABYTE_pytorch" + }, + { + "id": 3720, + "name": "cuda" + }, + { + "id": 3721, + "name": "torchrec" + }, + { + "id": 3722, + "name": "finetune" + }, + { + "id": 3723, + "name": "requests_file" + }, + { + "id": 3724, + "name": "tensorflow_models" + }, + { + "id": 3725, + "name": "mwxml" + }, + { + "id": 3726, + "name": "lit" + }, + { + "id": 3727, + "name": "torch_mlir" + }, + { + "id": 3728, + "name": "shark_hf_opt" + }, + { + "id": 3729, + "name": "h2oaicore" + }, + { + "id": 3730, + "name": "gpt_langchain" + }, + { + "id": 3731, + "name": "metaspore" + }, + { + "id": 3732, + "name": "metaspore_pb2" + }, + { + "id": 3733, + "name": "hf_preprocessor" + }, + { + "id": 3734, + "name": "findspark" + }, + { + "id": 3735, + "name": "synapse" + }, + { + "id": 3736, + "name": "metasporeflow" + }, + { + "id": 3737, + "name": "metaspore_pb2_grpc" + }, + { + "id": 3738, + "name": "mkl" + }, + { + "id": 3739, + "name": "losses" + }, + { + "id": 3740, + "name": "indexing" + }, + { + "id": 3741, + "name": "file_read_backwards" + }, + { + "id": 3742, + "name": "dstack" + }, + { + "id": 3743, + "name": "rich_argparse" + }, + { + "id": 3744, + "name": "cursor" + }, + { + "id": 3745, + "name": "msrestazure" + }, + { + "id": 3746, + "name": "danmakuC" + }, + { + "id": 3747, + "name": "pymp4" + }, + { + "id": 3748, + "name": "m3u8" + }, + { + "id": 3749, + "name": "strictyaml" + }, + { + "id": 3750, + "name": "pytorch_pretrained_biggan" + }, + { + "id": 3751, + "name": "wikipediaapi" + }, + { + "id": 3752, + "name": "audioplayer" + }, + { + "id": 3753, + "name": "vosk_tts" + }, + { + "id": 3754, + "name": "win32clipboard" + }, + { + "id": 3755, + "name": "simpleaudio" + }, + { + "id": 3756, + "name": "rhvoice_wrapper" + }, + { + "id": 3757, + "name": "async_lru" + }, + { + "id": 3758, + "name": "migrations" + }, + { + "id": 3759, + "name": "aioresponses" + }, + { + "id": 3760, + "name": "pydantic_argparse" + }, + { + "id": 3761, + "name": "lru" + }, + { + "id": 3762, + "name": "fastapi_versioning" + }, + { + "id": 3763, + "name": "pytest_docker_fixtures" + }, + { + "id": 3764, + "name": "kubernetes_asyncio" + }, + { + "id": 3765, + "name": "mrflagly" + }, + { + "id": 3766, + "name": "tikv_client" + }, + { + "id": 3767, + "name": "nucliadb_contributor_assets" + }, + { + "id": 3768, + "name": "py_progress_tracker" + }, + { + "id": 3769, + "name": "grequests" + }, + { + "id": 3770, + "name": "keyring" + }, + { + "id": 3771, + "name": "skops" + }, + { + "id": 3772, + "name": "semantic_release" + }, + { + "id": 3773, + "name": "clear_module" + }, + { + "id": 3774, + "name": "concrete" + }, + { + "id": 3775, + "name": "skorch" + }, + { + "id": 3776, + "name": "qrcode_terminal" + }, + { + "id": 3777, + "name": "load_tests" + }, + { + "id": 3778, + "name": "pennylane" + }, + { + "id": 3779, + "name": "qbittorrentapi" + }, + { + "id": 3780, + "name": "pgml" + }, + { + "id": 3781, + "name": "ctransformers" + }, + { + "id": 3782, + "name": "bmtrain" + }, + { + "id": 3783, + "name": "bminf" + }, + { + "id": 3784, + "name": "adan" + }, + { + "id": 3785, + "name": "localAttention" + }, + { + "id": 3786, + "name": "lion_pytorch" + }, + { + "id": 3787, + "name": "kernels" + }, + { + "id": 3788, + "name": "nlp" + }, + { + "id": 3789, + "name": "colbert" + }, + { + "id": 3790, + "name": "yagmail" + }, + { + "id": 3791, + "name": "logdna" + }, + { + "id": 3792, + "name": "flask_profiler" + }, + { + "id": 3793, + "name": "pygryphon" + }, + { + "id": 3794, + "name": "brotlicffi" + }, + { + "id": 3795, + "name": "dummyserver" + }, + { + "id": 3796, + "name": "flask_meld" + }, + { + "id": 3797, + "name": "geoacumen_city" + }, + { + "id": 3798, + "name": "aiotask_context" + }, + { + "id": 3799, + "name": "raygun4py" + }, + { + "id": 3800, + "name": "somelib" + }, + { + "id": 3801, + "name": "fields" + }, + { + "id": 3802, + "name": "cmarkgfm" + }, + { + "id": 3803, + "name": "sanic_routing" + }, + { + "id": 3804, + "name": "jinja2_simple_tags" + }, + { + "id": 3805, + "name": "CTFd" + }, + { + "id": 3806, + "name": "giteacasc" + }, + { + "id": 3807, + "name": "eel" + }, + { + "id": 3808, + "name": "towncrier" + }, + { + "id": 3809, + "name": "process_tests" + }, + { + "id": 3810, + "name": "sphinx_py3doc_enhanced_theme" + }, + { + "id": 3811, + "name": "xdist" + }, + { + "id": 3812, + "name": "kyoukai" + }, + { + "id": 3813, + "name": "rollbar" + }, + { + "id": 3814, + "name": "missingno" + }, + { + "id": 3815, + "name": "pyaztro" + }, + { + "id": 3816, + "name": "jenkinsapi" + }, + { + "id": 3817, + "name": "wheezy" + }, + { + "id": 3818, + "name": "premailer" + }, + { + "id": 3819, + "name": "win32_setctime" + }, + { + "id": 3820, + "name": "meld_test_project" + }, + { + "id": 3821, + "name": "docs_src" + }, + { + "id": 3822, + "name": "whichcraft" + }, + { + "id": 3823, + "name": "pybluemonday" + }, + { + "id": 3824, + "name": "flask_debugtoolbar" + }, + { + "id": 3825, + "name": "gdb" + }, + { + "id": 3826, + "name": "trampoline_module" + }, + { + "id": 3827, + "name": "cpp" + }, + { + "id": 3828, + "name": "rknn" + }, + { + "id": 3829, + "name": "widget_module" + }, + { + "id": 3830, + "name": "fuse_gtest_files" + }, + { + "id": 3831, + "name": "pybind11_tests" + }, + { + "id": 3832, + "name": "paddlejslite" + }, + { + "id": 3833, + "name": "test_cmake_build" + }, + { + "id": 3834, + "name": "gtest_test_utils" + }, + { + "id": 3835, + "name": "x2paddle" + }, + { + "id": 3836, + "name": "pybind11_cross_module_tests" + }, + { + "id": 3837, + "name": "paddlespeech" + }, + { + "id": 3838, + "name": "fast_tokenizer" + }, + { + "id": 3839, + "name": "bqplot_image_gl" + }, + { + "id": 3840, + "name": "pymdownx" + }, + { + "id": 3841, + "name": "pytest_playwright" + }, + { + "id": 3842, + "name": "micropip" + }, + { + "id": 3843, + "name": "solara_enterprise" + }, + { + "id": 3844, + "name": "react_ipywidgets" + }, + { + "id": 3845, + "name": "pixelmatch" + }, + { + "id": 3846, + "name": "model_wrapper" + }, + { + "id": 3847, + "name": "my_pytorch_model" + }, + { + "id": 3848, + "name": "single_source" + }, + { + "id": 3849, + "name": "test_folder" + }, + { + "id": 3850, + "name": "nemo" + }, + { + "id": 3851, + "name": "base64_utils" + }, + { + "id": 3852, + "name": "dalle_mini" + }, + { + "id": 3853, + "name": "vqgan_jax" + }, + { + "id": 3854, + "name": "atri_core" + }, + { + "id": 3855, + "name": "pipenv" + }, + { + "id": 3856, + "name": "atri_components" + }, + { + "id": 3857, + "name": "win32pipe" + }, + { + "id": 3858, + "name": "win32file" + }, + { + "id": 3859, + "name": "atri" + }, + { + "id": 3860, + "name": "streamlit_nested_layout" + }, + { + "id": 3861, + "name": "k" + }, + { + "id": 3862, + "name": "i" + }, + { + "id": 3863, + "name": "voice_changer" + }, + { + "id": 3864, + "name": "transformer_f0" + }, + { + "id": 3865, + "name": "downloader" + }, + { + "id": 3866, + "name": "const" + }, + { + "id": 3867, + "name": "mods" + }, + { + "id": 3868, + "name": "sio" + }, + { + "id": 3869, + "name": "local_attention" + }, + { + "id": 3870, + "name": "Exceptions" + }, + { + "id": 3871, + "name": "restapi" + }, + { + "id": 3872, + "name": "fast_transformers" + }, + { + "id": 3873, + "name": "torchcrepe" + }, + { + "id": 3874, + "name": "pix2tex" + }, + { + "id": 3875, + "name": "cnocr" + }, + { + "id": 3876, + "name": "cnstd" + }, + { + "id": 3877, + "name": "numerizer" + }, + { + "id": 3878, + "name": "defopt" + }, + { + "id": 3879, + "name": "rouge_metric" + }, + { + "id": 3880, + "name": "merge_args" + }, + { + "id": 3881, + "name": "fvalues" + }, + { + "id": 3882, + "name": "linode_api4" + }, + { + "id": 3883, + "name": "cftool" + }, + { + "id": 3884, + "name": "cflearn" + }, + { + "id": 3885, + "name": "cfclient" + }, + { + "id": 3886, + "name": "pdfkit" + }, + { + "id": 3887, + "name": "language_tool_python" + }, + { + "id": 3888, + "name": "instaloader" + }, + { + "id": 3889, + "name": "pyshorteners" + }, + { + "id": 3890, + "name": "aspose" + }, + { + "id": 3891, + "name": "pyfiglet" + }, + { + "id": 3892, + "name": "validate_email_address" + }, + { + "id": 3893, + "name": "VideoFileClip" + }, + { + "id": 3894, + "name": "flask_bcrypt" + }, + { + "id": 3895, + "name": "easyocr" + }, + { + "id": 3896, + "name": "twython" + }, + { + "id": 3897, + "name": "PyPDF4" + }, + { + "id": 3898, + "name": "chat" + }, + { + "id": 3899, + "name": "email_scraper" + }, + { + "id": 3900, + "name": "speedtest" + }, + { + "id": 3901, + "name": "wikipedia" + }, + { + "id": 3902, + "name": "pynotifier" + }, + { + "id": 3903, + "name": "pyyoutube" + }, + { + "id": 3904, + "name": "password_strength" + }, + { + "id": 3905, + "name": "docx2pdf" + }, + { + "id": 3906, + "name": "PyDictionary" + }, + { + "id": 3907, + "name": "google_trans_new" + }, + { + "id": 3908, + "name": "zstd" + }, + { + "id": 3909, + "name": "oci" + }, + { + "id": 3910, + "name": "torchsparse" + }, + { + "id": 3911, + "name": "leres" + }, + { + "id": 3912, + "name": "film_interpolation" + }, + { + "id": 3913, + "name": "deforum_api_models" + }, + { + "id": 3914, + "name": "deforum_api" + }, + { + "id": 3915, + "name": "rife" + }, + { + "id": 3916, + "name": "pydantic_requests" + }, + { + "id": 3917, + "name": "clipseg" + }, + { + "id": 3918, + "name": "plyfile" + }, + { + "id": 3919, + "name": "evaluation_utils" + }, + { + "id": 3920, + "name": "py3d_tools" + }, + { + "id": 3921, + "name": "webui" + }, + { + "id": 3922, + "name": "infer" + }, + { + "id": 3923, + "name": "deforum_helpers" + }, + { + "id": 3924, + "name": "fonts" + }, + { + "id": 3925, + "name": "deepdanbooru" + }, + { + "id": 3926, + "name": "multilingual_clip" + }, + { + "id": 3927, + "name": "marqo" + }, + { + "id": 3928, + "name": "pyannote" + }, + { + "id": 3929, + "name": "yt_dlp" + }, + { + "id": 3930, + "name": "krita" + }, + { + "id": 3931, + "name": "rembg" + }, + { + "id": 3932, + "name": "transforms3d" + }, + { + "id": 3933, + "name": "MiDaS" + }, + { + "id": 3934, + "name": "imageio_ffmpeg" + }, + { + "id": 3935, + "name": "vispy" + }, + { + "id": 3936, + "name": "cynetworkx" + }, + { + "id": 3937, + "name": "discord_webhook" + }, + { + "id": 3938, + "name": "dadaptation" + }, + { + "id": 3939, + "name": "mlxu" + }, + { + "id": 3940, + "name": "vaderSentiment" + }, + { + "id": 3941, + "name": "serpapi" + }, + { + "id": 3942, + "name": "flashtext" + }, + { + "id": 3943, + "name": "holidays" + }, + { + "id": 3944, + "name": "LeXmo" + }, + { + "id": 3945, + "name": "modelcards" + }, + { + "id": 3946, + "name": "doc_builder" + }, + { + "id": 3947, + "name": "OmegaConf" + }, + { + "id": 3948, + "name": "alibabacloud_ha3engine" + }, + { + "id": 3949, + "name": "llm_adapter" + }, + { + "id": 3950, + "name": "vulcan" + }, + { + "id": 3951, + "name": "extractor" + }, + { + "id": 3952, + "name": "Tea" + }, + { + "id": 3953, + "name": "embedding" + }, + { + "id": 3954, + "name": "build_service" + }, + { + "id": 3955, + "name": "setup" + }, + { + "id": 3956, + "name": "arpc" + }, + { + "id": 3957, + "name": "spliter" + }, + { + "id": 3958, + "name": "text_analysis_tools" + }, + { + "id": 3959, + "name": "aspect_based_sentiment_analysis" + }, + { + "id": 3960, + "name": "duckpy" + }, + { + "id": 3961, + "name": "llm_kira" + }, + { + "id": 3962, + "name": "tweetnlp" + }, + { + "id": 3963, + "name": "blip" + }, + { + "id": 3964, + "name": "pycorrector" + }, + { + "id": 3965, + "name": "telebot" + }, + { + "id": 3966, + "name": "pvporcupine" + }, + { + "id": 3967, + "name": "pyflink" + }, + { + "id": 3968, + "name": "deepface" + }, + { + "id": 3969, + "name": "deepl" + }, + { + "id": 3970, + "name": "rpyc" + }, + { + "id": 3971, + "name": "fastapi_responses" + }, + { + "id": 3972, + "name": "jdk" + }, + { + "id": 3973, + "name": "nbdev_mkdocs" + }, + { + "id": 3974, + "name": "asyncer" + }, + { + "id": 3975, + "name": "nbdev" + }, + { + "id": 3976, + "name": "xorbits" + }, + { + "id": 3977, + "name": "pydantic_v1" + }, + { + "id": 3978, + "name": "fauna" + }, + { + "id": 3979, + "name": "bilibili_api" + }, + { + "id": 3980, + "name": "clickhouse_connect" + }, + { + "id": 3981, + "name": "clarifai_grpc" + }, + { + "id": 3982, + "name": "pipeline" + }, + { + "id": 3983, + "name": "vespa" + }, + { + "id": 3984, + "name": "guardrails" + }, + { + "id": 3985, + "name": "getcontext" + }, + { + "id": 3986, + "name": "steamship" + }, + { + "id": 3987, + "name": "esprima" + }, + { + "id": 3988, + "name": "jsonformer" + }, + { + "id": 3989, + "name": "awadb" + }, + { + "id": 3990, + "name": "pyairtable" + }, + { + "id": 3991, + "name": "infinopy" + }, + { + "id": 3992, + "name": "momento" + }, + { + "id": 3993, + "name": "lancedb" + }, + { + "id": 3994, + "name": "zep_python" + }, + { + "id": 3995, + "name": "wolframalpha" + }, + { + "id": 3996, + "name": "listparser" + }, + { + "id": 3997, + "name": "langsmith" + }, + { + "id": 3998, + "name": "arize" + }, + { + "id": 3999, + "name": "bagel" + }, + { + "id": 4000, + "name": "dashscope" + }, + { + "id": 4001, + "name": "pinecone_text" + }, + { + "id": 4002, + "name": "bibtexparser" + }, + { + "id": 4003, + "name": "tigrisdb" + }, + { + "id": 4004, + "name": "pytest_socket" + }, + { + "id": 4005, + "name": "arcgis" + }, + { + "id": 4006, + "name": "psychicapi" + }, + { + "id": 4007, + "name": "alibabacloud_tea_util" + }, + { + "id": 4008, + "name": "arango" + }, + { + "id": 4009, + "name": "telethon" + }, + { + "id": 4010, + "name": "promptlayer" + }, + { + "id": 4011, + "name": "extract_msg" + }, + { + "id": 4012, + "name": "googlemaps" + }, + { + "id": 4013, + "name": "doctran" + }, + { + "id": 4014, + "name": "dingodb" + }, + { + "id": 4015, + "name": "cassio" + }, + { + "id": 4016, + "name": "arthurai" + }, + { + "id": 4017, + "name": "cerebrium" + }, + { + "id": 4018, + "name": "metal_sdk" + }, + { + "id": 4019, + "name": "rellm" + }, + { + "id": 4020, + "name": "openapi_schema_pydantic" + }, + { + "id": 4021, + "name": "banana_dev" + }, + { + "id": 4022, + "name": "aleph_alpha_client" + }, + { + "id": 4023, + "name": "kuzu" + }, + { + "id": 4024, + "name": "obs" + }, + { + "id": 4025, + "name": "nucliadb_protos" + }, + { + "id": 4026, + "name": "jq" + }, + { + "id": 4027, + "name": "pysrt" + }, + { + "id": 4028, + "name": "sodapy" + }, + { + "id": 4029, + "name": "xinference" + }, + { + "id": 4030, + "name": "pyowm" + }, + { + "id": 4031, + "name": "rdflib" + }, + { + "id": 4032, + "name": "singlestoredb" + }, + { + "id": 4033, + "name": "runhouse" + }, + { + "id": 4034, + "name": "youtube_search" + }, + { + "id": 4035, + "name": "baseten" + }, + { + "id": 4036, + "name": "langkit" + }, + { + "id": 4037, + "name": "multion" + }, + { + "id": 4038, + "name": "amadeus" + }, + { + "id": 4039, + "name": "nebula3" + }, + { + "id": 4040, + "name": "xoscar" + }, + { + "id": 4041, + "name": "rockset" + }, + { + "id": 4042, + "name": "cnosdb_connector" + }, + { + "id": 4043, + "name": "O365" + }, + { + "id": 4044, + "name": "textractcaller" + }, + { + "id": 4045, + "name": "octoai" + }, + { + "id": 4046, + "name": "document_processors" + }, + { + "id": 4047, + "name": "hubspot" + }, + { + "id": 4048, + "name": "connectors" + }, + { + "id": 4049, + "name": "appstatestore" + }, + { + "id": 4050, + "name": "strenum" + }, + { + "id": 4051, + "name": "chunker" + }, + { + "id": 4052, + "name": "polygraphy" + }, + { + "id": 4053, + "name": "onnx_graphsurgeon" + }, + { + "id": 4054, + "name": "lycoris" + }, + { + "id": 4055, + "name": "semanticscholar" + }, + { + "id": 4056, + "name": "KalturaClient" + }, + { + "id": 4057, + "name": "ebooklib" + }, + { + "id": 4058, + "name": "prepline_sec_filings" + }, + { + "id": 4059, + "name": "feedly" + }, + { + "id": 4060, + "name": "zulip" + }, + { + "id": 4061, + "name": "pandasai" + }, + { + "id": 4062, + "name": "chatminer" + }, + { + "id": 4063, + "name": "snscrape" + }, + { + "id": 4064, + "name": "trello" + }, + { + "id": 4065, + "name": "pydrive" + }, + { + "id": 4066, + "name": "shopify" + }, + { + "id": 4067, + "name": "deepdoctection" + }, + { + "id": 4068, + "name": "arxiv" + }, + { + "id": 4069, + "name": "couchdb3" + }, + { + "id": 4070, + "name": "yelpapi" + }, + { + "id": 4071, + "name": "spotipy" + }, + { + "id": 4072, + "name": "trafilatura" + }, + { + "id": 4073, + "name": "geopy" + }, + { + "id": 4074, + "name": "opendal" + }, + { + "id": 4075, + "name": "ratelimit" + }, + { + "id": 4076, + "name": "gkeepapi" + }, + { + "id": 4077, + "name": "osmxtract" + }, + { + "id": 4078, + "name": "mediawiki" + }, + { + "id": 4079, + "name": "supplement" + }, + { + "id": 4080, + "name": "flappy_bird_gym" + }, + { + "id": 4081, + "name": "img2pdf" + }, + { + "id": 4082, + "name": "Shortener" + }, + { + "id": 4083, + "name": "panns_inference" + }, + { + "id": 4084, + "name": "flask_ngrok" + }, + { + "id": 4085, + "name": "chatterbot" + }, + { + "id": 4086, + "name": "ecapture" + }, + { + "id": 4087, + "name": "pymunk" + }, + { + "id": 4088, + "name": "clipboard" + }, + { + "id": 4089, + "name": "quote" + }, + { + "id": 4090, + "name": "customtkinter" + }, + { + "id": 4091, + "name": "pyrebase" + }, + { + "id": 4092, + "name": "pdfrw" + }, + { + "id": 4093, + "name": "audio" + }, + { + "id": 4094, + "name": "colorgram" + }, + { + "id": 4095, + "name": "gmplot" + }, + { + "id": 4096, + "name": "notify2" + }, + { + "id": 4097, + "name": "clint" + }, + { + "id": 4098, + "name": "cecmap" + }, + { + "id": 4099, + "name": "resizeimage" + }, + { + "id": 4100, + "name": "neat" + }, + { + "id": 4101, + "name": "RPi" + }, + { + "id": 4102, + "name": "englisttohindi" + }, + { + "id": 4103, + "name": "fixtool" + }, + { + "id": 4104, + "name": "iocextract" + }, + { + "id": 4105, + "name": "ping3" + }, + { + "id": 4106, + "name": "demoji" + }, + { + "id": 4107, + "name": "pylab" + }, + { + "id": 4108, + "name": "wallpaper" + }, + { + "id": 4109, + "name": "magenta" + }, + { + "id": 4110, + "name": "neologdn" + }, + { + "id": 4111, + "name": "mrcnn" + }, + { + "id": 4112, + "name": "simplefix" + }, + { + "id": 4113, + "name": "nasapy" + }, + { + "id": 4114, + "name": "pdf2docx" + }, + { + "id": 4115, + "name": "lyricsgenius" + }, + { + "id": 4116, + "name": "tv" + }, + { + "id": 4117, + "name": "tkhtmlview" + }, + { + "id": 4118, + "name": "awstesting" + }, + { + "id": 4119, + "name": "html2md" + }, + { + "id": 4120, + "name": "alpha_vantage" + }, + { + "id": 4121, + "name": "pyppdf" + }, + { + "id": 4122, + "name": "stegano" + }, + { + "id": 4123, + "name": "newsapi" + }, + { + "id": 4124, + "name": "private_settings" + }, + { + "id": 4125, + "name": "benchmark" + }, + { + "id": 4126, + "name": "ucall" + }, + { + "id": 4127, + "name": "ucp" + }, + { + "id": 4128, + "name": "embedbase_internet_search" + }, + { + "id": 4129, + "name": "pydantic_yaml" + }, + { + "id": 4130, + "name": "embedbase_client" + }, + { + "id": 4131, + "name": "helicone" + }, + { + "id": 4132, + "name": "lockfile" + }, + { + "id": 4133, + "name": "datefinder" + }, + { + "id": 4134, + "name": "logmine_pkg" + }, + { + "id": 4135, + "name": "grafana_api" + }, + { + "id": 4136, + "name": "cat" + }, + { + "id": 4137, + "name": "hiq" + }, + { + "id": 4138, + "name": "gptq" + }, + { + "id": 4139, + "name": "paths" + }, + { + "id": 4140, + "name": "mammoth" + }, + { + "id": 4141, + "name": "persistqueue" + }, + { + "id": 4142, + "name": "db_engine" + }, + { + "id": 4143, + "name": "data_source" + }, + { + "id": 4144, + "name": "rocketchat_API" + }, + { + "id": 4145, + "name": "mattermostdriver" + }, + { + "id": 4146, + "name": "queues" + }, + { + "id": 4147, + "name": "search_logic" + }, + { + "id": 4148, + "name": "telemetry" + }, + { + "id": 4149, + "name": "aiocron" + }, + { + "id": 4150, + "name": "fastapi_users" + }, + { + "id": 4151, + "name": "videocrafter" + }, + { + "id": 4152, + "name": "t2v_helpers" + }, + { + "id": 4153, + "name": "stable_lora" + }, + { + "id": 4154, + "name": "samplers" + }, + { + "id": 4155, + "name": "auditwheel" + }, + { + "id": 4156, + "name": "nvtx" + }, + { + "id": 4157, + "name": "tritongrpcclient" + }, + { + "id": 4158, + "name": "tritonclientutils" + }, + { + "id": 4159, + "name": "elevenlabs" + }, + { + "id": 4160, + "name": "call_transcript_utils" + }, + { + "id": 4161, + "name": "TTS" + }, + { + "id": 4162, + "name": "vonage" + }, + { + "id": 4163, + "name": "pygpt4all" + }, + { + "id": 4164, + "name": "miniaudio" + }, + { + "id": 4165, + "name": "janus" + }, + { + "id": 4166, + "name": "bark" + }, + { + "id": 4167, + "name": "nylas" + }, + { + "id": 4168, + "name": "nls" + }, + { + "id": 4169, + "name": "zh_langchain" + }, + { + "id": 4170, + "name": "manim" + }, + { + "id": 4171, + "name": "latex2mathml" + }, + { + "id": 4172, + "name": "rarfile" + }, + { + "id": 4173, + "name": "ptrace" + }, + { + "id": 4174, + "name": "sqlglot" + }, + { + "id": 4175, + "name": "hyperscript" + }, + { + "id": 4176, + "name": "redshift_connector" + }, + { + "id": 4177, + "name": "helper" + }, + { + "id": 4178, + "name": "textract" + }, + { + "id": 4179, + "name": "xturing" + }, + { + "id": 4180, + "name": "epub2txt" + }, + { + "id": 4181, + "name": "stream_zip" + }, + { + "id": 4182, + "name": "marvin_recipes" + }, + { + "id": 4183, + "name": "marvin" + }, + { + "id": 4184, + "name": "ansi2html" + }, + { + "id": 4185, + "name": "jittor_utils" + }, + { + "id": 4186, + "name": "userlib" + }, + { + "id": 4187, + "name": "jittor" + }, + { + "id": 4188, + "name": "autopep8" + }, + { + "id": 4189, + "name": "lsh" + }, + { + "id": 4190, + "name": "pretrain_gpt2" + }, + { + "id": 4191, + "name": "pretrain_bert" + }, + { + "id": 4192, + "name": "message_pb2" + }, + { + "id": 4193, + "name": "pamqp" + }, + { + "id": 4194, + "name": "typing_extension" + }, + { + "id": 4195, + "name": "fast_depends" + }, + { + "id": 4196, + "name": "quart_cors" + }, + { + "id": 4197, + "name": "chainfury_server" + }, + { + "id": 4198, + "name": "celery_singleton" + }, + { + "id": 4199, + "name": "channels_graphql_ws" + }, + { + "id": 4200, + "name": "cfcreator" + }, + { + "id": 4201, + "name": "cacheflow" + }, + { + "id": 4202, + "name": "langflow" + }, + { + "id": 4203, + "name": "metaphor_python" + }, + { + "id": 4204, + "name": "psd_tools" + }, + { + "id": 4205, + "name": "binpacking" + }, + { + "id": 4206, + "name": "tables" + }, + { + "id": 4207, + "name": "blobfile" + }, + { + "id": 4208, + "name": "traces" + }, + { + "id": 4209, + "name": "refact_enterprise" + }, + { + "id": 4210, + "name": "cdifflib" + }, + { + "id": 4211, + "name": "simpleeval" + }, + { + "id": 4212, + "name": "detect_secrets" + }, + { + "id": 4213, + "name": "pysc2" + }, + { + "id": 4214, + "name": "retro" + }, + { + "id": 4215, + "name": "gym_super_mario_bros" + }, + { + "id": 4216, + "name": "treevalue" + }, + { + "id": 4217, + "name": "omniisaacgymenvs" + }, + { + "id": 4218, + "name": "nes_py" + }, + { + "id": 4219, + "name": "s2clientprotocol" + }, + { + "id": 4220, + "name": "trueskill" + }, + { + "id": 4221, + "name": "dmc2gym" + }, + { + "id": 4222, + "name": "mlc_chat" + }, + { + "id": 4223, + "name": "BingImageCreator" + }, + { + "id": 4224, + "name": "EdgeGPT" + }, + { + "id": 4225, + "name": "bmtools" + }, + { + "id": 4226, + "name": "aliyunsdkalimt" + }, + { + "id": 4227, + "name": "kor" + }, + { + "id": 4228, + "name": "tiktoken_async" + }, + { + "id": 4229, + "name": "response" + }, + { + "id": 4230, + "name": "jarvis" + }, + { + "id": 4231, + "name": "superagent" + }, + { + "id": 4232, + "name": "fastllm_pytools" + }, + { + "id": 4233, + "name": "CMMLU" + }, + { + "id": 4234, + "name": "fastllm" + }, + { + "id": 4235, + "name": "danswer" + }, + { + "id": 4236, + "name": "chainlit" + }, + { + "id": 4237, + "name": "syncer" + }, + { + "id": 4238, + "name": "auth0" + }, + { + "id": 4239, + "name": "uptrace" + }, + { + "id": 4240, + "name": "polar" + }, + { + "id": 4241, + "name": "githubkit" + }, + { + "id": 4242, + "name": "sat" + }, + { + "id": 4243, + "name": "cacheout" + }, + { + "id": 4244, + "name": "cf_clearance" + }, + { + "id": 4245, + "name": "transmission_rpc" + }, + { + "id": 4246, + "name": "anitopy" + }, + { + "id": 4247, + "name": "tvdb_api" + }, + { + "id": 4248, + "name": "tailer" + }, + { + "id": 4249, + "name": "torrentool" + }, + { + "id": 4250, + "name": "python_hosts" + }, + { + "id": 4251, + "name": "modeling_chatglm" + }, + { + "id": 4252, + "name": "convert" + }, + { + "id": 4253, + "name": "erdantic" + }, + { + "id": 4254, + "name": "dynaconf" + }, + { + "id": 4255, + "name": "litellm" + }, + { + "id": 4256, + "name": "md2pdf" + }, + { + "id": 4257, + "name": "texttable" + }, + { + "id": 4258, + "name": "aiohttp_sse_client" + }, + { + "id": 4259, + "name": "webargs" + }, + { + "id": 4260, + "name": "retakesearch" + }, + { + "id": 4261, + "name": "xid" + }, + { + "id": 4262, + "name": "llm_engine_server" + }, + { + "id": 4263, + "name": "kubeconfig" + }, + { + "id": 4264, + "name": "llmengine" + }, + { + "id": 4265, + "name": "json_log_formatter" + }, + { + "id": 4266, + "name": "testing" + }, + { + "id": 4267, + "name": "mypy_boto3_sqs" + }, + { + "id": 4268, + "name": "attn_and_long_ctx_patches" + }, + { + "id": 4269, + "name": "ds1000" + }, + { + "id": 4270, + "name": "chatglm_cpp" + }, + { + "id": 4271, + "name": "lanarky" + }, + { + "id": 4272, + "name": "scrapingbee" + }, + { + "id": 4273, + "name": "reworkd_platform" + }, + { + "id": 4274, + "name": "llava" + }, + { + "id": 4275, + "name": "agixtsdk" + }, + { + "id": 4276, + "name": "g4f" + }, + { + "id": 4277, + "name": "Bard" + }, + { + "id": 4278, + "name": "Memories" + }, + { + "id": 4279, + "name": "DBConnection" + }, + { + "id": 4280, + "name": "Extensions" + }, + { + "id": 4281, + "name": "hugchat" + }, + { + "id": 4282, + "name": "Providers" + }, + { + "id": 4283, + "name": "jqdatasdk" + }, + { + "id": 4284, + "name": "configure" + }, + { + "id": 4285, + "name": "easytrader" + }, + { + "id": 4286, + "name": "wxpy" + }, + { + "id": 4287, + "name": "backtrader_ctp_api" + }, + { + "id": 4288, + "name": "easyquotation" + }, + { + "id": 4289, + "name": "pync" + }, + { + "id": 4290, + "name": "ddddocr" + }, + { + "id": 4291, + "name": "get_data" + }, + { + "id": 4292, + "name": "rlkit" + }, + { + "id": 4293, + "name": "plot_line" + }, + { + "id": 4294, + "name": "AlgoPlus" + }, + { + "id": 4295, + "name": "easyquant" + }, + { + "id": 4296, + "name": "jqdata" + }, + { + "id": 4297, + "name": "akshare" + }, + { + "id": 4298, + "name": "datacompy" + }, + { + "id": 4299, + "name": "qlib" + }, + { + "id": 4300, + "name": "mpl_finance" + }, + { + "id": 4301, + "name": "backtest_strategies" + }, + { + "id": 4302, + "name": "backtest" + }, + { + "id": 4303, + "name": "efinance" + }, + { + "id": 4304, + "name": "backtrader" + }, + { + "id": 4305, + "name": "quant_project" + }, + { + "id": 4306, + "name": "kline" + }, + { + "id": 4307, + "name": "alphalens" + }, + { + "id": 4308, + "name": "dump_bin" + }, + { + "id": 4309, + "name": "data_formatters" + }, + { + "id": 4310, + "name": "xalpha" + }, + { + "id": 4311, + "name": "transformers_stream_generator" + }, + { + "id": 4312, + "name": "llmtuner" + }, + { + "id": 4313, + "name": "scholarly" + }, + { + "id": 4314, + "name": "truss" + }, + { + "id": 4315, + "name": "storage3" + }, + { + "id": 4316, + "name": "directory_tree" + }, + { + "id": 4317, + "name": "meilisearch_python_async" + }, + { + "id": 4318, + "name": "ripgrepy" + }, + { + "id": 4319, + "name": "tiktoken_ext" + }, + { + "id": 4320, + "name": "toolbar" + }, + { + "id": 4321, + "name": "streamlit_sparrow_labeling" + }, + { + "id": 4322, + "name": "donut" + }, + { + "id": 4323, + "name": "toolbar_main" + }, + { + "id": 4324, + "name": "streamlit_option_menu" + }, + { + "id": 4325, + "name": "doctr" + }, + { + "id": 4326, + "name": "streamlit_javascript" + }, + { + "id": 4327, + "name": "gpt4pandas" + }, + { + "id": 4328, + "name": "petals" + }, + { + "id": 4329, + "name": "providers" + }, + { + "id": 4330, + "name": "llama_cpp_cuda" + }, + { + "id": 4331, + "name": "langchainhub" + }, + { + "id": 4332, + "name": "vmware" + }, + { + "id": 4333, + "name": "pyVmomi" + }, + { + "id": 4334, + "name": "pyVim" + }, + { + "id": 4335, + "name": "happyx" + }, + { + "id": 4336, + "name": "faster_fifo" + }, + { + "id": 4337, + "name": "lazify" + }, + { + "id": 4338, + "name": "ApiClient" + }, + { + "id": 4339, + "name": "scipdf" + }, + { + "id": 4340, + "name": "macros" + }, + { + "id": 4341, + "name": "streamlit_chatbox" + }, + { + "id": 4342, + "name": "tree_sitter" + }, + { + "id": 4343, + "name": "robotexclusionrulesparser" + }, + { + "id": 4344, + "name": "e2b" + }, + { + "id": 4345, + "name": "StraCtaUnitTest" + }, + { + "id": 4346, + "name": "DualThrust" + }, + { + "id": 4347, + "name": "Strategies" + }, + { + "id": 4348, + "name": "HftStraDemo" + }, + { + "id": 4349, + "name": "DualThrust_Sel" + }, + { + "id": 4350, + "name": "T1" + }, + { + "id": 4351, + "name": "syftcli" + }, + { + "id": 4352, + "name": "paddlenlp_ops" + }, + { + "id": 4353, + "name": "custom" + }, + { + "id": 4354, + "name": "redbaron" + }, + { + "id": 4355, + "name": "Xlib" + }, + { + "id": 4356, + "name": "AppKit" + }, + { + "id": 4357, + "name": "Quartz" + }, + { + "id": 4358, + "name": "pydocstyle" + }, + { + "id": 4359, + "name": "virtualbox" + }, + { + "id": 4360, + "name": "pythoncom" + }, + { + "id": 4361, + "name": "winerror" + }, + { + "id": 4362, + "name": "pyHook" + }, + { + "id": 4363, + "name": "tesserocr" + }, + { + "id": 4364, + "name": "lmfit" + }, + { + "id": 4365, + "name": "win32event" + }, + { + "id": 4366, + "name": "xpcom" + }, + { + "id": 4367, + "name": "VirtualBox_wrappers" + }, + { + "id": 4368, + "name": "creds" + }, + { + "id": 4369, + "name": "gui" + }, + { + "id": 4370, + "name": "llama_hub" + }, + { + "id": 4371, + "name": "camelot" + }, + { + "id": 4372, + "name": "source_gong" + }, + { + "id": 4373, + "name": "bigframes" + }, + { + "id": 4374, + "name": "pyfakefs" + }, + { + "id": 4375, + "name": "environ" + }, + { + "id": 4376, + "name": "ain" + }, + { + "id": 4377, + "name": "pyepsilla" + }, + { + "id": 4378, + "name": "ifnude" + }, + { + "id": 4379, + "name": "model_engine_server" + }, + { + "id": 4380, + "name": "tree_sitter_languages" + }, + { + "id": 4381, + "name": "office365" + }, + { + "id": 4382, + "name": "bytetracker" + }, + { + "id": 4383, + "name": "pytorch_sphinx_theme" + }, + { + "id": 4384, + "name": "SwissArmyTransformer" + }, + { + "id": 4385, + "name": "generation" + }, + { + "id": 4386, + "name": "human_eval" + }, + { + "id": 4387, + "name": "initialize" + }, + { + "id": 4388, + "name": "grafanalib" + }, + { + "id": 4389, + "name": "flet_core" + }, + { + "id": 4390, + "name": "flet_js" + }, + { + "id": 4391, + "name": "repath" + }, + { + "id": 4392, + "name": "flet_runtime" + }, + { + "id": 4393, + "name": "pefile" + }, + { + "id": 4394, + "name": "jurigged" + }, + { + "id": 4395, + "name": "flappy_bird_gymnasium" + }, + { + "id": 4396, + "name": "sandbox" + }, + { + "id": 4397, + "name": "starlette_csrf" + }, + { + "id": 4398, + "name": "endpoints" + }, + { + "id": 4399, + "name": "datahub_classify" + }, + { + "id": 4400, + "name": "pydeequ" + }, + { + "id": 4401, + "name": "click_spinner" + }, + { + "id": 4402, + "name": "tableauserverclient" + }, + { + "id": 4403, + "name": "sqlalchemy_pytds" + }, + { + "id": 4404, + "name": "sqlmypy" + }, + { + "id": 4405, + "name": "sql_metadata" + }, + { + "id": 4406, + "name": "mypy_boto3_glue" + }, + { + "id": 4407, + "name": "datahub_actions" + }, + { + "id": 4408, + "name": "lkml" + }, + { + "id": 4409, + "name": "docgen" + }, + { + "id": 4410, + "name": "click_default_group" + }, + { + "id": 4411, + "name": "tableschema" + }, + { + "id": 4412, + "name": "geoalchemy2" + }, + { + "id": 4413, + "name": "datahub" + }, + { + "id": 4414, + "name": "datahub_provider" + }, + { + "id": 4415, + "name": "databricks_dbapi" + }, + { + "id": 4416, + "name": "expandvars" + }, + { + "id": 4417, + "name": "requests_wrapper" + }, + { + "id": 4418, + "name": "avrogen" + }, + { + "id": 4419, + "name": "mixpanel" + }, + { + "id": 4420, + "name": "mypy_boto3_sts" + }, + { + "id": 4421, + "name": "requests_ntlm" + }, + { + "id": 4422, + "name": "humanfriendly" + }, + { + "id": 4423, + "name": "mypy_boto3_sagemaker" + }, + { + "id": 4424, + "name": "airflow_local_settings" + }, + { + "id": 4425, + "name": "jsoncomparison" + }, + { + "id": 4426, + "name": "pytest_docker" + }, + { + "id": 4427, + "name": "iceberg" + }, + { + "id": 4428, + "name": "hyppo" + }, + { + "id": 4429, + "name": "spacy_llm" + }, + { + "id": 4430, + "name": "stable_diffusion_inference" + }, + { + "id": 4431, + "name": "slack_command_bot" + }, + { + "id": 4432, + "name": "gluon_meson_components" + }, + { + "id": 4433, + "name": "spatial" + }, + { + "id": 4434, + "name": "mlstacks" + }, + { + "id": 4435, + "name": "exllama_lib" + }, + { + "id": 4436, + "name": "fps_auth_jupyterhub" + }, + { + "id": 4437, + "name": "presidio_anonymizer" + }, + { + "id": 4438, + "name": "presidio_analyzer" + }, + { + "id": 4439, + "name": "pages" + }, + { + "id": 4440, + "name": "lora_patches" + }, + { + "id": 4441, + "name": "gym_pybullet_drones" + }, + { + "id": 4442, + "name": "erniebot" + }, + { + "id": 4443, + "name": "navi_default_loader" + }, + { + "id": 4444, + "name": "file_loader" + }, + { + "id": 4445, + "name": "sql_utils" + }, + { + "id": 4446, + "name": "hape_libs" + }, + { + "id": 4447, + "name": "swift" + }, + { + "id": 4448, + "name": "entry_loader" + }, + { + "id": 4449, + "name": "snakebite" + }, + { + "id": 4450, + "name": "sql_envs" + }, + { + "id": 4451, + "name": "zhipuai" + }, + { + "id": 4452, + "name": "pylsp" + }, + { + "id": 4453, + "name": "qh3" + }, + { + "id": 4454, + "name": "olefile" + }, + { + "id": 4455, + "name": "modeling_baichuan" + }, + { + "id": 4456, + "name": "sqlite_vss" + }, + { + "id": 4457, + "name": "pants_explorer" + }, + { + "id": 4458, + "name": "C_MTEB" + }, + { + "id": 4459, + "name": "artifacts" + }, + { + "id": 4460, + "name": "pinecone_datasets" + }, + { + "id": 4461, + "name": "absenteeism" + }, + { + "id": 4462, + "name": "function_modules" + }, + { + "id": 4463, + "name": "pandera" + }, + { + "id": 4464, + "name": "components" + }, + { + "id": 4465, + "name": "python_transforms" + }, + { + "id": 4466, + "name": "pennylane_qiskit" + }, + { + "id": 4467, + "name": "mpire" + }, + { + "id": 4468, + "name": "braket" + }, + { + "id": 4469, + "name": "lmdbm" + }, + { + "id": 4470, + "name": "qiskit_ibm_runtime" + }, + { + "id": 4471, + "name": "qiskit" + }, + { + "id": 4472, + "name": "otter_ai" + }, + { + "id": 4473, + "name": "flamingo" + }, + { + "id": 4474, + "name": "airflow_states_collector" + }, + { + "id": 4475, + "name": "predictor" + }, + { + "id": 4476, + "name": "django_tenants" + }, + { + "id": 4477, + "name": "celery_worker" + }, + { + "id": 4478, + "name": "celery_task" + }, + { + "id": 4479, + "name": "agbenchmark_config" + }, + { + "id": 4480, + "name": "openapi_python_client" + }, + { + "id": 4481, + "name": "battleship" + }, + { + "id": 4482, + "name": "url_shortener" + }, + { + "id": 4483, + "name": "password_generator" + }, + { + "id": 4484, + "name": "agent_protocol" + }, + { + "id": 4485, + "name": "forge" + }, + { + "id": 4486, + "name": "agbenchmark" + }, + { + "id": 4487, + "name": "sample_code" + }, + { + "id": 4488, + "name": "charset_normalizer" + }, + { + "id": 4489, + "name": "autogpt" + }, + { + "id": 4490, + "name": "pylatexenc" + }, + { + "id": 4491, + "name": "PROMPT" + }, + { + "id": 4492, + "name": "gradio_base" + }, + { + "id": 4493, + "name": "myutils" + }, + { + "id": 4494, + "name": "myagent" + }, + { + "id": 4495, + "name": "cmd_outline" + }, + { + "id": 4496, + "name": "LLM" + }, + { + "id": 4497, + "name": "agents" + }, + { + "id": 4498, + "name": "Component" + }, + { + "id": 4499, + "name": "Action" + }, + { + "id": 4500, + "name": "gradio_config" + }, + { + "id": 4501, + "name": "Prompt" + }, + { + "id": 4502, + "name": "Memory" + }, + { + "id": 4503, + "name": "chromedriver_autoinstaller" + }, + { + "id": 4504, + "name": "kaldifeat" + }, + { + "id": 4505, + "name": "icefall" + }, + { + "id": 4506, + "name": "warp_rnnt" + }, + { + "id": 4507, + "name": "torch_quant" + }, + { + "id": 4508, + "name": "pynini" + }, + { + "id": 4509, + "name": "tacotron_cleaner" + }, + { + "id": 4510, + "name": "jamo" + }, + { + "id": 4511, + "name": "lhotse" + }, + { + "id": 4512, + "name": "paraformer_pb2_grpc" + }, + { + "id": 4513, + "name": "rotary_embedding_torch" + }, + { + "id": 4514, + "name": "_kaldifeat" + }, + { + "id": 4515, + "name": "paraformer_pb2" + }, + { + "id": 4516, + "name": "g2pk" + }, + { + "id": 4517, + "name": "num2words" + }, + { + "id": 4518, + "name": "edit_distance" + }, + { + "id": 4519, + "name": "pb_chime5" + }, + { + "id": 4520, + "name": "fast_rnnt" + }, + { + "id": 4521, + "name": "kaldi_native_fbank" + }, + { + "id": 4522, + "name": "pb_bss" + }, + { + "id": 4523, + "name": "warpctc_pytorch" + }, + { + "id": 4524, + "name": "vietnamese_cleaner" + }, + { + "id": 4525, + "name": "pytorch_wpe" + }, + { + "id": 4526, + "name": "vnpy" + }, + { + "id": 4527, + "name": "demjson" + }, + { + "id": 4528, + "name": "xcsc_tushare" + }, + { + "id": 4529, + "name": "nougat" + }, + { + "id": 4530, + "name": "helloworld_pb2_grpc" + }, + { + "id": 4531, + "name": "tokentrim" + }, + { + "id": 4532, + "name": "helloworld_pb2" + }, + { + "id": 4533, + "name": "llm_services" + }, + { + "id": 4534, + "name": "prompts" + }, + { + "id": 4535, + "name": "db_services" + }, + { + "id": 4536, + "name": "bisheng" + }, + { + "id": 4537, + "name": "bisheng_langchain" + }, + { + "id": 4538, + "name": "soupsieve" + }, + { + "id": 4539, + "name": "fuzzysearch" + }, + { + "id": 4540, + "name": "htmlmin" + }, + { + "id": 4541, + "name": "sconf" + }, + { + "id": 4542, + "name": "sphinx_fontawesome" + }, + { + "id": 4543, + "name": "dparse" + }, + { + "id": 4544, + "name": "django_stubs_ext" + }, + { + "id": 4545, + "name": "minimetrics" + }, + { + "id": 4546, + "name": "outcome" + }, + { + "id": 4547, + "name": "_overlapped" + }, + { + "id": 4548, + "name": "_winapi" + }, + { + "id": 4549, + "name": "peewee_async" + }, + { + "id": 4550, + "name": "maskrcnn_benchmark" + }, + { + "id": 4551, + "name": "csHelpers" + }, + { + "id": 4552, + "name": "detectron" + }, + { + "id": 4553, + "name": "bencode" + }, + { + "id": 4554, + "name": "linear_q4_0" + }, + { + "id": 4555, + "name": "tensorflow_recommenders" + }, + { + "id": 4556, + "name": "friesian" + }, + { + "id": 4557, + "name": "neural_compressor" + }, + { + "id": 4558, + "name": "nets" + }, + { + "id": 4559, + "name": "oneccl_bindings_for_pytorch" + }, + { + "id": 4560, + "name": "bigdl" + }, + { + "id": 4561, + "name": "pl_examples" + }, + { + "id": 4562, + "name": "tsfresh" + }, + { + "id": 4563, + "name": "sigfig" + }, + { + "id": 4564, + "name": "testsuite" + }, + { + "id": 4565, + "name": "dmlc_tracker" + }, + { + "id": 4566, + "name": "pl_bolts" + }, + { + "id": 4567, + "name": "opencv_transforms" + }, + { + "id": 4568, + "name": "deepctr_torch" + }, + { + "id": 4569, + "name": "stable_diffusion" + }, + { + "id": 4570, + "name": "tensorflow_estimator" + }, + { + "id": 4571, + "name": "nn_service_pb2" + }, + { + "id": 4572, + "name": "inotify_simple" + }, + { + "id": 4573, + "name": "tensorflow_ranking" + }, + { + "id": 4574, + "name": "caffe" + }, + { + "id": 4575, + "name": "zoo" + }, + { + "id": 4576, + "name": "nlp_architect" + }, + { + "id": 4577, + "name": "tensorflow_examples" + }, + { + "id": 4578, + "name": "benchmark_util" + }, + { + "id": 4579, + "name": "deepctr" + }, + { + "id": 4580, + "name": "theano" + }, + { + "id": 4581, + "name": "minijinja" + }, + { + "id": 4582, + "name": "pywebpush" + }, + { + "id": 4583, + "name": "py_vapid" + }, + { + "id": 4584, + "name": "nuclia" + }, + { + "id": 4585, + "name": "qianfan" + }, + { + "id": 4586, + "name": "deepeval" + }, + { + "id": 4587, + "name": "nucliadb_models" + }, + { + "id": 4588, + "name": "hdbscan" + }, + { + "id": 4589, + "name": "peacasso" + }, + { + "id": 4590, + "name": "llmx" + }, + { + "id": 4591, + "name": "langfuse" + }, + { + "id": 4592, + "name": "sec_edgar_downloader" + }, + { + "id": 4593, + "name": "pytickersymbols" + }, + { + "id": 4594, + "name": "polygon" + }, + { + "id": 4595, + "name": "fibmodule" + }, + { + "id": 4596, + "name": "streamlit_extras" + }, + { + "id": 4597, + "name": "easygui" + }, + { + "id": 4598, + "name": "squarify" + }, + { + "id": 4599, + "name": "pywaffle" + }, + { + "id": 4600, + "name": "parakeet" + }, + { + "id": 4601, + "name": "soundcard" + }, + { + "id": 4602, + "name": "itn" + }, + { + "id": 4603, + "name": "cjieba" + }, + { + "id": 4604, + "name": "inscriptis" + }, + { + "id": 4605, + "name": "arclet" + }, + { + "id": 4606, + "name": "redbeat" + }, + { + "id": 4607, + "name": "SOP" + }, + { + "id": 4608, + "name": "Agent" + }, + { + "id": 4609, + "name": "Environment" + }, + { + "id": 4610, + "name": "decoders" + }, + { + "id": 4611, + "name": "model_separable_rnnt" + }, + { + "id": 4612, + "name": "sox" + }, + { + "id": 4613, + "name": "parts" + }, + { + "id": 4614, + "name": "advanced_alchemy" + }, + { + "id": 4615, + "name": "torch_npu" + }, + { + "id": 4616, + "name": "kaleido" + }, + { + "id": 4617, + "name": "keras_core" + }, + { + "id": 4618, + "name": "kshingle" + }, + { + "id": 4619, + "name": "rl_zoo3" + }, + { + "id": 4620, + "name": "merge_lora_params" + }, + { + "id": 4621, + "name": "msgpackrpc" + }, + { + "id": 4622, + "name": "exllama_kernels" + }, + { + "id": 4623, + "name": "hyperdx" + }, + { + "id": 4624, + "name": "drain3" + }, + { + "id": 4625, + "name": "timescale_vector" + }, + { + "id": 4626, + "name": "vearch_cluster" + }, + { + "id": 4627, + "name": "javelin_sdk" + }, + { + "id": 4628, + "name": "fast_vector_similarity" + }, + { + "id": 4629, + "name": "Models" + }, + { + "id": 4630, + "name": "Interactions" + }, + { + "id": 4631, + "name": "Defaults" + }, + { + "id": 4632, + "name": "whispercpp" + }, + { + "id": 4633, + "name": "Embedding" + }, + { + "id": 4634, + "name": "Chains" + }, + { + "id": 4635, + "name": "exllamav2" + }, + { + "id": 4636, + "name": "soxr" + }, + { + "id": 4637, + "name": "langchain_debugger" + }, + { + "id": 4638, + "name": "base" + }, + { + "id": 4639, + "name": "llamaindex_observer" + }, + { + "id": 4640, + "name": "experiment_tracker" + }, + { + "id": 4641, + "name": "huaweicloudsdkcore" + }, + { + "id": 4642, + "name": "huaweicloudsdkmoderation" + }, + { + "id": 4643, + "name": "colossal_eval" + }, + { + "id": 4644, + "name": "bolt11" + }, + { + "id": 4645, + "name": "gradientai" + }, + { + "id": 4646, + "name": "pytest_lazy_fixtures" + }, + { + "id": 4647, + "name": "py_markdown" + }, + { + "id": 4648, + "name": "toga_flask" + }, + { + "id": 4649, + "name": "polyscript" + }, + { + "id": 4650, + "name": "_pyscript" + }, + { + "id": 4651, + "name": "freedom" + }, + { + "id": 4652, + "name": "pyscript" + }, + { + "id": 4653, + "name": "arrr" + }, + { + "id": 4654, + "name": "micrograd" + }, + { + "id": 4655, + "name": "_pyscript_js" + }, + { + "id": 4656, + "name": "py_tutor" + }, + { + "id": 4657, + "name": "pyweb" + }, + { + "id": 4658, + "name": "metlo" + }, + { + "id": 4659, + "name": "pybase64" + }, + { + "id": 4660, + "name": "elasticache_auto_discovery" + }, + { + "id": 4661, + "name": "fastapi_cprofile" + }, + { + "id": 4662, + "name": "anton" + }, + { + "id": 4663, + "name": "d20" + }, + { + "id": 4664, + "name": "descope" + }, + { + "id": 4665, + "name": "flwr" + }, + { + "id": 4666, + "name": "openml" + }, + { + "id": 4667, + "name": "sky" + }, + { + "id": 4668, + "name": "aws_profile_manager" + }, + { + "id": 4669, + "name": "aioredlock" + }, + { + "id": 4670, + "name": "vit_jax" + }, + { + "id": 4671, + "name": "tfvision" + }, + { + "id": 4672, + "name": "local_llm" + }, + { + "id": 4673, + "name": "safeexecute" + }, + { + "id": 4674, + "name": "mlserver_catboost" + }, + { + "id": 4675, + "name": "nvitop" + }, + { + "id": 4676, + "name": "permchain" + }, + { + "id": 4677, + "name": "tavily" + }, + { + "id": 4678, + "name": "volcengine" + }, + { + "id": 4679, + "name": "pytorch_optimizer" + }, + { + "id": 4680, + "name": "ace" + }, + { + "id": 4681, + "name": "agentforge" + }, + { + "id": 4682, + "name": "media" + }, + { + "id": 4683, + "name": "actions" + }, + { + "id": 4684, + "name": "httpx_cache" + }, + { + "id": 4685, + "name": "base36" + }, + { + "id": 4686, + "name": "base58" + }, + { + "id": 4687, + "name": "aios_kernel" + }, + { + "id": 4688, + "name": "package_manager" + }, + { + "id": 4689, + "name": "aioimaplib" + }, + { + "id": 4690, + "name": "daemon" + }, + { + "id": 4691, + "name": "agent_manager" + }, + { + "id": 4692, + "name": "knowledge" + }, + { + "id": 4693, + "name": "mailparser" + }, + { + "id": 4694, + "name": "ndn_client" + }, + { + "id": 4695, + "name": "hupper" + }, + { + "id": 4696, + "name": "todo" + }, + { + "id": 4697, + "name": "ariadne" + }, + { + "id": 4698, + "name": "starlette_graphene3" + }, + { + "id": 4699, + "name": "asteval" + }, + { + "id": 4700, + "name": "____project_name_identifier" + }, + { + "id": 4701, + "name": "trubrics" + }, + { + "id": 4702, + "name": "dynamodb_encryption_sdk" + }, + { + "id": 4703, + "name": "langserve" + }, + { + "id": 4704, + "name": "fastapi_cache" + }, + { + "id": 4705, + "name": "app_utils" + }, + { + "id": 4706, + "name": "controlnet" + }, + { + "id": 4707, + "name": "cubit" + }, + { + "id": 4708, + "name": "scalecodec" + }, + { + "id": 4709, + "name": "substrateinterface" + }, + { + "id": 4710, + "name": "ansible" + }, + { + "id": 4711, + "name": "bip39" + }, + { + "id": 4712, + "name": "ansible_vault" + }, + { + "id": 4713, + "name": "ddt" + }, + { + "id": 4714, + "name": "mergedeep" + }, + { + "id": 4715, + "name": "st_card_component" + }, + { + "id": 4716, + "name": "rllib_bandit" + }, + { + "id": 4717, + "name": "rllib_es" + }, + { + "id": 4718, + "name": "rllib_qmix" + }, + { + "id": 4719, + "name": "rllib_simple_q" + }, + { + "id": 4720, + "name": "rllib_slate_q" + }, + { + "id": 4721, + "name": "rllib_apex_ddpg" + }, + { + "id": 4722, + "name": "rllib_pg" + }, + { + "id": 4723, + "name": "rllib_crr" + }, + { + "id": 4724, + "name": "rllib_alpha_star" + }, + { + "id": 4725, + "name": "rllib_alpha_zero" + }, + { + "id": 4726, + "name": "rllib_dt" + }, + { + "id": 4727, + "name": "rllib_mbmpo" + }, + { + "id": 4728, + "name": "rllib_td3" + }, + { + "id": 4729, + "name": "rllib_leela_chess_zero" + }, + { + "id": 4730, + "name": "rllib_apex_dqn" + }, + { + "id": 4731, + "name": "rllib_ars" + }, + { + "id": 4732, + "name": "rllib_maddpg" + }, + { + "id": 4733, + "name": "teradata" + }, + { + "id": 4734, + "name": "splunk" + }, + { + "id": 4735, + "name": "gmpy2" + }, + { + "id": 4736, + "name": "impacket" + }, + { + "id": 4737, + "name": "metasploit" + }, + { + "id": 4738, + "name": "killerbee" + }, + { + "id": 4739, + "name": "cmk_metrics" + }, + { + "id": 4740, + "name": "assemblyai" + }, + { + "id": 4741, + "name": "vowpal_wabbit_next" + }, + { + "id": 4742, + "name": "gguf" + }, + { + "id": 4743, + "name": "rllib_ddppo" + }, + { + "id": 4744, + "name": "numpydoc" + }, + { + "id": 4745, + "name": "process_sql" + }, + { + "id": 4746, + "name": "exec_eval" + }, + { + "id": 4747, + "name": "init_path" + }, + { + "id": 4748, + "name": "m2r" + }, + { + "id": 4749, + "name": "_turbomind" + }, + { + "id": 4750, + "name": "ooba" + }, + { + "id": 4751, + "name": "whisper_cpp" + }, + { + "id": 4752, + "name": "cmk_graphing" + }, + { + "id": 4753, + "name": "werks" + }, + { + "id": 4754, + "name": "smacv2" + }, + { + "id": 4755, + "name": "includes" + }, + { + "id": 4756, + "name": "aistudio_sdk" + }, + { + "id": 4757, + "name": "flask_mailman" + }, + { + "id": 4758, + "name": "AI_Cn" + }, + { + "id": 4759, + "name": "cleantext" + }, + { + "id": 4760, + "name": "train_search" + }, + { + "id": 4761, + "name": "web_agent_site" + }, + { + "id": 4762, + "name": "alfworld" + }, + { + "id": 4763, + "name": "textworld" + }, + { + "id": 4764, + "name": "transfer" + }, + { + "id": 4765, + "name": "SPARQLWrapper" + }, + { + "id": 4766, + "name": "aimrecords" + }, + { + "id": 4767, + "name": "memory" + }, + { + "id": 4768, + "name": "halo" + }, + { + "id": 4769, + "name": "continuedev" + }, + { + "id": 4770, + "name": "rayyan" + }, + { + "id": 4771, + "name": "imdb" + }, + { + "id": 4772, + "name": "thirdai" + }, + { + "id": 4773, + "name": "torch_int" + }, + { + "id": 4774, + "name": "pystray" + }, + { + "id": 4775, + "name": "linear_fp16_esimd" + }, + { + "id": 4776, + "name": "rspace_client" + }, + { + "id": 4777, + "name": "speechkit" + }, + { + "id": 4778, + "name": "baidu_bos_file" + }, + { + "id": 4779, + "name": "upstash_redis" + }, + { + "id": 4780, + "name": "alibabacloud_ha3engine_vector" + }, + { + "id": 4781, + "name": "simsimd" + }, + { + "id": 4782, + "name": "predibase" + }, + { + "id": 4783, + "name": "engineio" + }, + { + "id": 4784, + "name": "socketio_app" + }, + { + "id": 4785, + "name": "molotov" + }, + { + "id": 4786, + "name": "pathvalidate" + }, + { + "id": 4787, + "name": "logtail" + }, + { + "id": 4788, + "name": "ipinfo" + }, + { + "id": 4789, + "name": "google_cloud_pipeline_components" + }, + { + "id": 4790, + "name": "tfx" + }, + { + "id": 4791, + "name": "model_card_toolkit" + }, + { + "id": 4792, + "name": "tensorflow_data_validation" + }, + { + "id": 4793, + "name": "ml_metadata" + }, + { + "id": 4794, + "name": "tensorflow_model_analysis" + }, + { + "id": 4795, + "name": "toolshed" + } + ] +} diff --git a/dependency.md b/dependency.md deleted file mode 100644 index 94ad15b..0000000 --- a/dependency.md +++ /dev/null @@ -1,533 +0,0 @@ -| Project | Dependencies | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -|[2020_slowdelivery_take](https://github.com/zekaio/2020_slowdelivery_take ) |aiohttp, pytest, tortoise | -|[AI-Service](https://github.com/eHelply/AI-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[African_Wildlife_Classifier](https://github.com/peterbacalso/African_Wildlife_Classifier ) |aiohttp, fastai, torch | -|[Auth-Service](https://github.com/eHelply/Auth-Service ) |kombu, requests, setuptools, passlib, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, jwt, socketio, src, bson | -|[BenchmarkRoundOne](https://github.com/peterdeme/BenchmarkRoundOne ) |aiohttp | -|[Benchmarker](https://github.com/vutran1710/Benchmarker ) |apis | -|[Blog](https://github.com/elbruno/Blog ) |face_recognition, imutils, PIL, flask, cv2 | -|[CCTO](https://github.com/SnarferX/CCTO ) |sets, SimpleHTTPSErver, requests, dircache, ovm_lib, jarray, pip, httplib, urllib3, SockerServer, ansible, hello, java, ovmclient | -|[CFE_30D.PY](https://github.com/torredefarol24/CFE_30D.PY ) |formatting, flask, scrape, logger, requests, pandas, download_util, requests_html | -|[COVID-19API](https://github.com/zeroday0619/COVID-19API ) |aiohttp, ujson, async_lru, API, scrapy, fastapi_plugins, aioredis, bs4 | -|[COVID-QA](https://github.com/deepset-ai/COVID-QA ) |elasticapm, eval, sentence_transformers, sklearn, elasticsearch, tqdm, scrapy, requests, backend, nltk, haystack, preprocess, farm, langid, datasources, torch, tfidf_train, covid_nlp | -|[CUCM-Phone-Info](https://github.com/jsteinberg1/CUCM-Phone-Info ) |rq, cryptography, zeep, requests, redis, lxml, lib, apscheduler, api, OpenSSL, sqlalchemy, jwt, bs4 | -|[Chatbot](https://github.com/aramakus/Chatbot ) |nltk, chatterbot, sklearn, requests, tqdm, chatbot | -|[ChatiChatou](https://github.com/auredentan/ChatiChatou ) |chat, aioredis | -|[CheckersAI](https://github.com/HuiiBuh/CheckersAI ) |pytest, aiohttp, game, api, conftest, checkers | -|[Cloud_APS1](https://github.com/ehrhardt98/Cloud_APS1 ) |pymongo, requests | -|[CryptoViz](https://github.com/MohanVashist1/CryptoViz ) |bs4, requests, pyti, pymongo, lib, binance, dateutil, cryptocalculator, channelfinder, dotenv, flask, boto3, click, fastapi_users | -|[DS-API](https://github.com/BW-Post-Here-06-2020/DS-API ) |dotenv, praw | -|[Daft](https://github.com/mpalka31/DaftAcademyCourse ) |main, queries, schemas, pytest, jose, database, crud | -|[Daims_FastAPI](https://github.com/GeorgeMiao219/Daims_FastAPI ) |auth, dns, dataset, config, url, utils, database | -|[Data-Engineering](https://github.com/De-Dash/Data-Engineering ) |nltk, aiohttp, api | -|[Docker-Builder](https://github.com/Javier162380/Docker-Builder ) |rq, pytest, endpoints, requests, redis, builder, docker, settings, docker_builder, models, worker, middlewares, router | -|[DockerImageResNet50](https://github.com/OrenLeung/DockerImageResNet50 ) |redis, PIL, locust, keras | -|[Downotifier](https://github.com/herbzhao/Downotifier ) |twilio, bs4, requests, URLChecker, TwilioWhatsapp | -|[ExcelTools](https://github.com/xx2life/ExcelTools ) |motor, databases | -|[ExpenseAPI](https://github.com/MushroomMaula/ExpenseAPI ) |pytest, faker, sqlalchemy, myapp, fastapi_login, alembic, dotenv | -|[FAAS](https://github.com/jacksonhenry3/FAAS ) |flask | -|[Fast-API-Starter](https://github.com/khaman1/Fast-API-Starter ) |shared, urls | -|[Fast-Project](https://github.com/alex-2201/Fast-Project ) |redis, conn, cassandra, apis, pymysql, logzero, models, utils, middlewares | -|[FastAPI-Auth](https://github.com/Madpilot0/FastAPI-Auth ) |bcrypt, lib, routes, yaml, jwt, MySQLdb | -|[FastAPI-CRUD](https://github.com/Mr-Manna/FastAPI-CRUD ) |databases, sqlalchemy, post, config | -|[FastAPI-Demo](https://github.com/JPMike/FastAPI-Demo ) |requests | -|[FastAPI-Example](https://github.com/gauravgola96/FastAPI-Example ) |botocore, aiobotocore, dotenv, s3_events, boto3, utils | -|[FastAPI-Learning-Example](https://github.com/oinsd/FastAPI-Learning-Example ) |main, main_b, jwt, routers, sqlalchemy, database, passlib | -|[FastAPI-React-PostgreSQL_Full-Stack](https://github.com/scionoftech/FastAPI-React-PostgreSQL_Full-Stack ) |db, setuptools, logs, passlib, utils, sqlalchemy, conf, routes, auth, jwt | -|[FastAPITutorial](https://github.com/HeywoodKing/FastAPITutorial ) |invoke, config | -|[FastAPI_Tortoise_template](https://github.com/GoddessEyes/FastAPI_Tortoise_template ) |celery, jwt, tortoise, template, passlib, emails | -|[FastAPI_Vue](https://github.com/quietking0312/FastAPI_Vue ) |pymongo, apps | -|[FastAPI_app1](https://github.com/Sai-Vamsi-Ogety/FastAPI_app1 ) |spacy | -|[FastAPI_proto](https://github.com/bartomo/FastAPI_proto ) |controllers, urls, sqlalchemy, db, models | -|[FastAdmin](https://github.com/CoderCharm/FastAdmin ) |passlib, loguru, sqlalchemy, myapp, jose, alembic | -|[Fastapi](https://github.com/xyz25/Fastapi ) |router_app, sqlalchemy | -|[FastapiLearn](https://github.com/xuqm/FastapiLearn ) |part4, part11, part7, part8, part15, part2, part10, application, part14, part12, part9, part13, part3, part16, part1, part5, part6 | -|[Fusion-Vision](https://github.com/sdhnshu/Fusion-Vision ) |wandb, pytest, sklearn, requests, tqdm, torch, text_classification | -|[GET_POST](https://github.com/mitsumushibayama/GET_POST ) |MySQLdb | -|[GraphQLAPI](https://github.com/webjunkie01/GraphQLAPI ) |graphene, cryptacular, pytest, graphene_sqlalchemy, sqlalchemy | -|[Gringotts](https://github.com/cning112/Gringotts ) |werkzeug, requests, flask_restplus, typing_extensions, apis, flask_cors, libs, flask, routers, models | -|[HjwzwApi](https://github.com/k1dave6412/HjwzwApi ) |backend, requests, aiohttp, asyncpg, loguru, sqlalchemy, myapp, alembic, databases, bs4 | -|[Image-Diff-back](https://github.com/filipe-guerra/Image-Diff-back ) |imutils, skimage, imageDiff, cv2 | -|[Item-Xref](https://github.com/Roselingit/Item-Xref ) |psycopg2 | -|[KOARCH](https://github.com/janstrohschein/KOARCH ) |classes, emotion_recognition_master, pydash, sklearn, requests, tweepy, scipy, kafka, yaml, psycopg2, emotion_predictor, avro, keras | -|[Logging-Service](https://github.com/eHelply/Logging-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[MLServer](https://github.com/SeldonIO/MLServer ) |orjson, grpc, click, pytest, mlserver, google, setuptools | -|[MallAPI](https://github.com/CoderCharm/MallAPI ) |alembic, loguru, sqlalchemy, extensions, setting, myapp, api, utils | -|[MealCare](https://github.com/hack4impact-mcgill/MealCare ) |pony, passlib, config, tests, sqlalchemy, psycopg2, jwt | -|[MetodoClasificacionTexto](https://github.com/talend-Erick/MetodoClasificacionTexto ) |gensim, nltk, spacy, src, pandas | -|[MyChild](https://github.com/YunusovSamat/MyChild ) |passlib, asyncpg, tortoise, sqlalchemy, alembic, databases, jwt | -|[MyNotes](https://github.com/wq758511990/MyNotes ) |serial, werkzeug, flask_sqlalchemy, flask_httpauth, sqlalchemy, wtforms, pytz, webapp, flask, itsdangerous | -|[NIMSPARQL](https://github.com/Ningensei848/NIMSPARQL ) |elasticapm, sqlalchemy, elasticsearch, db, api | -|[NT118](https://github.com/maivanhung33/NT118 ) |request, kombu, common, elasticsearch, geopy, requests, injector, pymongo, redis, consul, boltons, cachetools, controller, elasticsearch_dsl, sqlalchemy, service, pytz, response | -|[News-Summarizer](https://github.com/CYBINT-IN/News-Summarizer ) |scipy, sentence_transformers, flask, sklearn, torch, requests, transformers, pyLDAvis, bs4 | -|[Notification-Service](https://github.com/eHelply/Notification-Service ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[Pycharm](https://github.com/godori004/Pycharm ) |urllib3, flask_restful, flask, src, pandas, google | -|[Python-example](https://github.com/hzjsea/Python-example ) |netmiko, static_files, requests, basedb, sqlalchemy, ansible, zabbix_info | -|[Python3Test](https://github.com/hjslovehr/Python3Test ) |requests, redis, openpyxl, sqlhelper, pymssql, md5_helper, flask, helpers, bs4 | -|[PythonFastApi](https://github.com/kbeaugrand/PythonFastApi ) |win32service, win32event, servicemanager, win32serviceutil, yaml | -|[RemoteVP-Npc](https://github.com/viccom/RemoteVP-Npc ) |win32serviceutil, serial, requests, apps, pythoncom, cores, helper, ping3, bases, hbmqtt, conf, Crypto, wmi | -|[RestFramework](https://github.com/rakesh4real/RestFramework ) |django, streamapp, rest_framework, other_app, jwt, senddata, my_app, passlib | -|[SOA](https://github.com/FisnikL/SOA ) |prometheus_client, sqlalchemy, sqlalchemy_utils, database | -|[Semester-Stats](https://github.com/Rushyanth111/Semester-Stats ) |playhouse, faker, setuptools, peewee, mailmerge, docx | -|[Service-Template](https://github.com/eHelply/Service-Template ) |kombu, setuptools, pymongo, redis, sentry_asgi, sentry_sdk, pymlconf, socketio, src | -|[SpotifyAPI](https://github.com/dixneuf19/SpotifyAPI ) |spotipy, dotenv, src | -|[StanleyIpkiss](https://github.com/JimmiBram/StanleyIpkiss ) |tests, sibase | -|[Studium-ds](https://github.com/Lambda-School-Labs/Studium-ds ) |retrieve_definition, gauge_plot, requests, calendar_heatmap, inflect | -|[TT_COVID19_API_site_and_emailer](https://github.com/VSpectrum/TT_COVID19_API_site_and_emailer ) |email_validator, requests, config, emailer | -|[TaskXenter](https://github.com/CoolSpring8/TaskXenter ) |celery, sentry_sdk, loguru, databases, jwt, tortoise, passlib, httpx | -|[Telegram-BusBot-DataManager](https://github.com/David-Lor/Telegram-BusBot-DataManager ) |pymongo, motor, busbot_data_manager | -|[WAM_server_API_template](https://github.com/rl-institut/WAM_server_API_template ) |flask_app, celery, flask, pytest, worker, sphinx_rtd_theme | -|[WEB](https://github.com/maivanhung33/WEB ) |request, kombu, common, elasticsearch, geopy, requests, injector, pymongo, redis, consul, boltons, cachetools, controller, elasticsearch_dsl, sqlalchemy, service, pytz, response | -|[WFM](https://github.com/unegade/WFM ) |pika, aio_pika, BSSAPI, locust | -|[WebApp-PhoneClassifier](https://github.com/minh-dg/WebApp-PhoneClassifier ) |fastai | -|[WitnessMe](https://github.com/byt3bl33d3r/WitnessMe ) |xmltodict, imgcat, pytest, pyppeteer, jinja2, terminaltables, prompt_toolkit, pkg_resources, aiosqlite, yaml, witnessme | -|[Words_record](https://github.com/LMFrank/Words_record ) |databases, pytest, pymysql, sqlalchemy, requests | -|[Workspace](https://github.com/AYCHSPACE/Workspace ) |tqdm, jupyter_core, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[YoutubeBackup](https://github.com/FratStar/YoutubeBackup ) |google_auth_oauthlib, zeep, googleapiclient, spyne, google | -|[Zulu](https://github.com/OSS-team-zulu/Zulu ) |requests, passlib, pymongo, geojson, tests, zulu, dynaconf, jwt, bson, pytest | -|[ai-dungeon](https://github.com/AntonNeld/ai-dungeon ) |errors, test_utils, typing_extensions, pytest, models, api, dungeon | -|[aioprometheus](https://github.com/claws/aioprometheus ) |setuptools, aiohttp, alabaster, quart, psutil, asynctest, sphinx, aioprometheus, quantile, prometheus_metrics_proto | -|[aita](https://github.com/logan-connolly/aita ) |pytest, requests, tqdm, aiohttp, asyncpg, aita, loguru, orm, typer, sqlalchemy, databases, praw | -|[alda-online](https://github.com/JesseChua94/alda-online ) |models, alda | -|[alg_interface_fastapi_project](https://github.com/wuzaipei/alg_interface_fastapi_project ) |system_file, pymysql, sqlalchemy, data_model | -|[alice-yamaha-skill](https://github.com/toshka/alice-yamaha-skill ) |exceptions, auth, yaml, capabilities, routers, rxv, config, httpx | -|[allay-ds](https://github.com/Lambda-School-Labs/allay-ds ) |wandb, spacy, sklearn, requests, scrapy, process_data, fastapi_app, tensorflow, numpy, indeed, en_core_web_sm, dotenv | -|[allure_reporter](https://github.com/penguinlav/allure_reporter ) |jinja2, requests, allure_reporter, loguru, aiofiles, async_generator, pytest | -|[andrewhou-zonar](https://github.com/amhou/andrewhou-zonar ) |main, requests, util | -|[apex-tracker](https://github.com/Timzan/apex-tracker ) |routers, requests, config | -|[api](https://github.com/wuzaipei/alg_interface_fastapi_project ) |pyazo_api, alembic, dotenv, jwt, sqlalchemy, passlib | -|[api-ocr](https://github.com/dzakyputra/api-ocr ) |tesserocr, PIL, cv2, modules | -|[api-poc](https://github.com/igorfarias30/fastapi-poc ) |sklearn | -|[api.authentication](https://github.com/jrhuerta/api.authentication ) |api_authentication | -|[api_works](https://github.com/omrylcn/api_works ) |PIL, requests | -|[apiestas](https://github.com/franloza/apiestas ) |crawling, scrapy, fuzzywuzzy, loguru, slugify, api, js2xml, dateparser, typer, twisted, pytz, motor | -|[apitoolbox](https://github.com/zuarbase/apitoolbox ) |pytest, setuptools, passlib, sqlalchemy_filters, tests, sqlalchemy, ordered_uuid, tzlocal, pytz, jwt, apitoolbox, itsdangerous | -|[arcas](https://github.com/maialogic/arcas ) |graphene, snapshottest | -|[asgi-server-timing-middleware](https://github.com/sm-Fifteen/asgi-server-timing-middleware ) |yappi, asgi_server_timing, setuptools | -|[asu-schedule](https://github.com/skhortiuk/asu-schedule ) |aiohttp, src, validators, bs4 | -|[async_django_session](https://github.com/imbolc/async_django_session ) |setuptools, aiohttp, asyncpg, async_django_session, cfg, django, databases | -|[authal-poc](https://github.com/michal-nakoneczny/authal-poc ) |authal, asynctest, pytest, bson, requests, tests, httpx | -|[auto_populate](https://github.com/NealWhitlock/auto_populate ) |psycopg2, getter | -|[autoloadtest](https://github.com/hkiang01/autoloadtest ) |locust, hypothesis | -|[automagic_hashtag](https://github.com/MarianMalvin/automagic_hashtag ) |utils, google | -|[b0mb3r](https://github.com/crinny/b0mb3r ) |setuptools, sentry_sdk, loguru, pkg_resources, b0mb3r, phonenumbers, click, httpx | -|[b2blue-challenge](https://github.com/lfvilella/b2blue-challenge ) |pydantic_sqlalchemy, sqlalchemy | -|[b3ta](https://github.com/nm17/b3ta ) |setuptools, sentry_sdk, loguru, pkg_resources, service, b0mb3r, phonenumbers, click, httpx | -|[backend](https://github.com/ElusiveSpirit/fbd-backend ) |asynctest, transliterate | -|[backend-skeleton](https://github.com/dmontagu/backend-skeleton ) |pytest, requests, typing_extensions, sqlalchemy_utils, tests, sqlalchemy, myapp, alembic, tenacity | -|[balikobot_tmp_2](https://github.com/Horac-Bouthon/balikobot_tmp_2 ) |logger_wrapper, databases, schemas, sqlalchemy, conf, routers, sql_factory | -|[base-fastapi-postgresql](https://github.com/alldevic/base-fastapi-postgresql ) |alembic, arq, sqlalchemy, sqlalchemy_utils, gino | -|[basic-python-postgis-docker](https://github.com/stephenhillier/basic-python-postgis-docker ) |alembic, tenacity, sqlalchemy, myapp | -|[bc_rates](https://github.com/MRobalinho/bc_rates ) |bc | -|[belajar-fastapi](https://github.com/aansubarkah/belajar-fastapi ) |yfinance, sqlalchemy, models, config, tutorial, database | -|[bench-rest-api-frameworks](https://github.com/py4mac/bench-rest-api-frameworks ) |sanic, locust, aiohttp, tornado, api, main, core | -|[biomedical-computing-project-backend](https://github.com/SinaKhalili/biomedical-computing-project-backend ) |extra, xlrd, CoronaAnalysis | -|[blog](https://github.com/deagle-z/blog ) |blog, loguru, jwt, sqlalchemy | -|[blog-posts](https://github.com/tiangolo/blog-posts ) |pytest, sqlalchemy, jose, passlib | -|[bluesky](https://github.com/paulorodriguesxv/bluesky ) |pytest, passlib, aiohttp, decouple, sqlalchemy_utils, sqlalchemy, myapp, alembic, jwt | -|[boilerplate](https://github.com/pmcarlos/fast-api-boilerplate ) |utils, config | -|[book-graphics](https://github.com/kamartem/book-graphics ) |alembic, sentry_sdk, asyncpg, loguru, sqlalchemy, gino | -|[bplustogether](https://github.com/wborbajr/bplustogether ) |dynaconf, databases, loguru, sqlalchemy, bpapi | -|[bracket_install](https://github.com/mobjack/bracket_install ) |six, flask, requests, colorama | -|[bread-app](https://github.com/aidan-mcbride/bread-app ) |pyArango, pytest, jwt, routers, api, tests, passlib | -|[bridgeapp](https://github.com/jasujm/bridgeapp ) |click, orjson, bridgeapp, click_log, pytest, zmq | -|[budget-blocks-ds](https://github.com/Lambda-School-Labs/budget-blocks-ds ) |DB, geopy, transactionhist, mainhelp, census, main, psycopg2, dotenv, routers | -|[bullshit-website](https://github.com/kaylynn234/bullshit-website ) |corporate_bullshit | -|[burriking](https://github.com/txemac/burriking ) |infrastructure, dependency_injector, werkzeug, requests, pymongo, freezegun, tests, config, main, user_interface, application, database, flask, bson, pytest, flasgger, domain | -|[bw3_attempt](https://github.com/worldwidekatie/bw3_attempt ) |dotenv, sklearn, requests, joblib | -|[c4p2n](https://github.com/piterpy-meetup/c4p2n ) |c4p2n, fastapi_security_typeform, notion, ppm_telegram_bot_client | -|[cah-v2](https://github.com/Mdellit110/cah-v2 ) |graphene, schema, graphene_sqlalchemy, sqlalchemy, models, config, schema_blackcards, database, schema_whitecards | -|[calculator](https://github.com/ch0c01ate/calculator ) |pymongo, calculator, requests, dbsetup | -|[canvote](https://github.com/alvintangz/canvote ) |jinja2, requests, passlib, sqlalchemy_pagination, humps, sqlalchemy, myapp, pytz, alembic, secure, jwt | -|[cashflow](https://github.com/VSpectrum/cashflow ) |pytest, config | -|[ccrbackend](https://github.com/danieldominguete/ccrbackend ) |six, dotenv, dynamorm, mangum, src, jose, marshmallow | -|[challenge](https://github.com/Creditas/challenge ) |iris_classifier, sklearn | -|[chapushillo](https://github.com/maxipavlovic/chapushillo ) |pusher, dotenv, pusher_client | -|[checkmarx](https://github.com/zetkin/checkmarx ) |scanner, checkmarx, pytest, pyzbar, setuptools | -|[chinook_fastapi](https://github.com/sandervandorsten/chinook_fastapi ) |dotenv, setuptools, chinook_fastapi | -|[cloudrun-fastapi](https://github.com/anthcor/cloudrun-fastapi ) |pytest, actions, passlib, sqlalchemy_utils, config, tests, main, sqlalchemy, myapp, database, google, alembic, schemas, jwt, routers, gunicorn_config, models | -|[cnapp-fastapi](https://github.com/cnapp/cnapp-fastapi ) |sanic, daiquiri, jinja2, prometheus_client, cnapps, starlette_prometheus | -|[code_example_fastapi](https://github.com/d-tamirlan/code_example_fastapi ) |tortoise, src, envparse, fastapi_users | -|[codewars-watchdog](https://github.com/uriyyo/codewars-watchdog ) |git | -|[coding-challenges](https://github.com/fjemi/coding-challenges ) |password_generator, tqdm, jsbeautifier, dateutil, matplotlib, flask_api, word_square_check, flask | -|[concurrency](https://github.com/Jorricks/concurrency ) |PIL, setuptools, redis, dataclasses_json, src, asgiref, click | -|[contact-form](https://github.com/k4ssyi/contact-form ) |dotenv, controllers, urls, settings, utils, request_body | -|[cookiecutter-python](https://github.com/ValentinCalomme/cookiecutter-python ) |typer | -|[cookiecutter-simcore-py-fastapi](https://github.com/pcrespov/cookiecutter-simcore-py-fastapi ) |cryptography, pytest, servicelib, setuptools, simcore_service_catalog, aiohttp, pkg_resources, attr, ptvsd, aiopg, sqlalchemy, tenacity, yarl, httpx | -|[coronavirus-tg-api](https://github.com/egbakou/coronavirus-tg-api ) |aiohttp, invoke, asyncmock, dateparser, async_asgi_testclient, async_generator, dotenv, pytest, bs4 | -|[coursera-ibm-ai-workflow-submission](https://github.com/eightBEC/coursera-ibm-ai-workflow-submission ) |loguru, sklearn, pytest, joblib | -|[coursework](https://github.com/algorithm-ssau/coursework ) |dotenv, databases, motor | -|[covid-19-Chile](https://github.com/RentadroneCL/covid-19-Chile ) |orator, dotenv, routes, pendulum, covid_19_chile, config, database | -|[covid-19-dashboard-api](https://github.com/zeshuaro/covid-19-dashboard-api ) |sortedcontainers, dotenv, jwt, pycountry, requests, google, passlib | -|[covid19-id](https://github.com/anzharip/covid19-id ) |selenium, requests | -|[covidfaq](https://github.com/dialoguemd/covidfaq ) |pytest, spacy, sklearn, tqdm, requests, covidfaq, selenium, bert_reranker, structlog, spacy_langdetect, yaml, html2text, boto3, torch, transformers, bs4 | -|[covidsage](https://github.com/chancey-gardener/covidsage ) |spacy, data_loader, requests, backends, nlu_client, numpy, matplotlib, plotter, rasa, rasa_sdk, pymysql, discourse | -|[cpython3-fastapi](https://github.com/phongln/cpython3-fastapi ) |blog, admin | -|[custom-actions-app-python](https://github.com/Frameio/custom-actions-app-python ) |pytest, requests, custom_actions | -|[daftacademy-python-levelup](https://github.com/holdenkold/daftacademy-python-levelup ) |main, pytest | -|[daiei-backend](https://github.com/a-nakajima-at-shokuryu/daiei-backend ) |fastapi_server, dotenv, models, utils, dateutil, settings | -|[daizu-online-judge-backend](https://github.com/SoyBeansLab/daizu-online-judge-backend ) |psycopg2, infrastructure, marshmallow_dataclass, interface, marshmallow, domain | -|[dask-remote](https://github.com/octoenergy/dask-remote ) |distributed, typing_extensions, pytest, requests, dask_remote, setuptools | -|[datarepo](https://github.com/PUG-PB-Traducao/datarepo ) |bcrypt, dotenv, fastapi_sqlalchemy, sqlalchemy | -|[debitcard](https://github.com/xpnewmedia/debitcard ) |debitcard | -|[debts](https://github.com/afonasev/debts ) |pytest, locust, factory, passlib, sentry_asgi, sentry_sdk, contextvars_executor, server, context_logging, sqlalchemy, alembic, jwt | -|[decentralized-news-publishing](https://github.com/teddymarkov/decentralized-news-publishing ) |ariadne | -|[demo-dms](https://github.com/gucharbon/demo-dms ) |urllib3, typer, pytest, minio, backend | -|[deploy](https://github.com/pcmalves/codeploy-teste ) |main | -|[devops-assignment](https://github.com/fokinpv/devops-assignment ) |asynctest, pytest, service, pulp | -|[devs-conn-api](https://github.com/txemac/devs-conn-api ) |github, pytest, sqlalchemy, sqlalchemy_utils, data, twitter, tests | -|[dfstore](https://github.com/Exhor/dfstore ) |requests, src, tests, feather | -|[dig-bioindex](https://github.com/broadinstitute/dig-bioindex ) |requests, colorama, orjson, lib, enlighten, sqlalchemy, dotenv, boto3, click | -|[django-fastapi-example](https://github.com/jordaneremieff/django-fastapi-example ) |django, api | -|[docker-fastapi-demo](https://github.com/pylixm/docker-fastapi-demo ) |alembic, loguru, databases, core, sqlalchemy, service, myapp, api | -|[docker-workshop](https://github.com/blairdrummond/docker-workshop ) |scipy, PIL, dash, flask, inference, sklearn, requests, numpy, joblib, flask_caching | -|[downloads_statistics](https://github.com/mmidu/downloads_statistics ) |redis, main, seeds, controllers, DownloadSeeder, requests, models, config, utils, DownloadsController | -|[dreamcatcher](https://github.com/sbathgate/dreamcatcher ) |pytest, passlib, sqlalchemy, myapp, jose, alembic, celery, tenacity, raven, emails | -|[duke](https://github.com/jamescurtin/duke ) |duke, PIL, pytest | -|[eXchangeAPI-PY](https://github.com/wborbajr/eXchangeAPI-PY ) |pymongo, dynaconf, exchangeapi, motor | -|[educator_api](https://github.com/wycliffogembo87/educator_api ) |pony, requests, passlib, loguru, api, settings, schemas, core, models, util | -|[effortless_fast_api](https://github.com/davideasaf/effortless_fast_api ) |requests, passlib, invoke, config, utils, main, sqlalchemy, schemas, jwt, models, services, pytest | -|[embl_python_software_engineer_test](https://github.com/yusra-haider/embl_python_software_engineer_test ) |sqlalchemy, requests | -|[eml_analyzer](https://github.com/ninoseki/eml_analyzer ) |async_timeout, pytest, eml_parser, compressed_rtf, arrow, compoundfiles, olefile, loguru, fastapi_utils, tests, dateparser, asynctest, magic, aiospamc, ioc_finder, respx, httpx | -|[entroprise-api](https://github.com/peterdeepsix/entroprise-api ) |simpletransformers, service, models, api | -|[eu-taxation-customs-api](https://github.com/aditya-08/eu-taxation-customs-api ) |main, zeep, requests | -|[events-api](https://github.com/txemac/events-api ) |pytz, xmltodict, pytest, sqlalchemy, sqlalchemy_utils, apscheduler, data, requests, tests | -|[example-fastapi-sqlachemy-pytest](https://github.com/timhughes/example-fastapi-sqlachemy-pytest ) |example, pytest, sqlalchemy | -|[excerpt-formatter](https://github.com/cmckillop/excerpt-formatter ) |text_formatter, slack_manager, requests, models | -|[fake-news-game](https://github.com/jsandovalc/fake-news-game ) |databases | -|[fantasy-fencing](https://github.com/Innoviox/fantasy-fencing ) |colorlog, selenium, click, scrape, requests, logs, bs4 | -|[fapi](https://github.com/glebofff/fapi ) |api, sqlalchemy, myapp, alembic, fastapi_sqlalchemy, core, models, click | -|[fast](https://github.com/foobar8675/fastai-bite ) |routers, user | -|[fast-api-asyncdb](https://github.com/tsadimas/fast-api-asyncdb ) |dotenv, databases, sqlalchemy, settings, fastapi_users | -|[fast-api-boilerplate](https://github.com/pmcarlos/fast-api-boilerplate ) |alembic, dotenv, fastapi_sqlalchemy, core, sqlalchemy, myapp | -|[fast-api-rest](https://github.com/javier-lopez/fast-api-rest ) |config, bjoern | -|[fast-api-sql-template](https://github.com/Jonatha-Varjao/fast-api-sql-template ) |pytest, googletrans, requests, passlib, sqlalchemy_utils, sqlalchemy, alembic, jwt, emails | -|[fast-elm](https://github.com/yuzebin/fast-elm ) |bcrypt, fmmodel, requests, fmsecurity, passlib, fmdb, slugify, fmcrud, fmapi, databases, motor, jwt, fmtoken, bson | -|[fastAPI-be](https://github.com/BonneC/fastAPI-be ) |alembic, dotenv, sqlalchemy, models, api, config, myapp, crud | -|[fastApi](https://github.com/fionasummer/fastApiSelf ) |my_super_project, graphene, projetStage, sqlalchemy | -|[fastApiSelf](https://github.com/fionasummer/fastApiSelf ) |pytest, rr, sqlalchemy, websocket, fackApi, app1 | -|[fastApiSimple](https://github.com/marirs/fastApiSimple ) |pymongo, geoip2, motor, server | -|[fastAppAppointment](https://github.com/EdvinaNakos/fastAppAppointment ) |main, controller, databases, sqlalchemy, db, service | -|[fast_api](https://github.com/davideasaf/effortless_fast_api ) |app_utils, bcrypt, schemas, jwt, sqlalchemy, models, database, crud | -|[fast_api_camelcase_example](https://github.com/ahmednafies/fast_api_camelcase_example ) |humps, models | -|[fast_api_self_study](https://github.com/cuongld2/fast_api_self_study ) |bcrypt, jwt, sqlalchemy, sql_app | -|[fastaaps](https://github.com/sergio-chumacero/fastaaps ) |pymongo, celery, motor | -|[fastai-bite](https://github.com/foobar8675/fastai-bite ) |PIL, graphene, my_utils, fastai2, cv2, httpx | -|[fastapi-GraphQL-full-stack-docker-github-actions-graphene-test-client-template](https://github.com/gaylonalfano/fastapi-GraphQL-full-stack-docker-github-actions-graphene-test-client-template )|graphene, pytest, sqlalchemy, graphql, snapshottest | -|[fastapi-GraphQL-full-stack-docker-travisci-starlette-test-client-template](https://github.com/gaylonalfano/fastapi-GraphQL-full-stack-docker-travisci-starlette-test-client-template ) |graphene, pytest | -|[fastapi-admin](https://github.com/long2ice/fastapi-admin ) |colorama, passlib, fastapi_admin, prompt_toolkit, tortoise, module, xlsxwriter, jwt | -|[fastapi-auth](https://github.com/dmontagu/fastapi-auth ) |argon2, bcrypt, pytest, requests, typing_extensions, fastapi_auth, tests, sqlalchemy, jwt | -|[fastapi-backend](https://github.com/dev-courses/fastapi-backend ) |bcrypt, pytest, passlib, asyncpg, loguru, slugify, tests, asgi_lifespan, sqlalchemy, docker, alembic, psycopg2, databases, jwt, httpx | -|[fastapi-boilerplate](https://github.com/teamhide/fastapi-boilerplate ) |alembic, jwt, sqlalchemy, core, myapp | -|[fastapi-celery](https://github.com/GregaVrbancic/fastapi-celery ) |worker, celery | -|[fastapi-celery-redis-rabbitmq](https://github.com/karthikasasanka/fastapi-celery-redis-rabbitmq ) |redis, celery, shopping | -|[fastapi-cool](https://github.com/genchsusu/fastapi-cool ) |kombu, aiosmtplib, tortoise, yaml, settings, celery, jwt, ldap3 | -|[fastapi-crud](https://github.com/sophiabrandt/fastapi-crud ) |databases, pytest, sqlalchemy, db | -|[fastapi-crud-sync](https://github.com/testdrivenio/fastapi-crud-sync ) |pytest, sqlalchemy | -|[fastapi-demo](https://github.com/sonhal/fastapi-demo ) |rethinkdb, fastapi_demo | -|[fastapi-discovery](https://github.com/DenisOH/fastapi-discovery ) |sqlalchemy, fastapi_discovery | -|[fastapi-docs-cn](https://github.com/apachecn/fastapi-docs-cn ) |graphene, passlib, peewee, couchbase, sqlalchemy, flask, databases, jwt | -|[fastapi-esf-demo](https://github.com/hightfly/fastapi-esf-demo ) |databases, sqlalchemy, sqlalchemy_utils | -|[fastapi-etag](https://github.com/steinitzu/fastapi-etag ) |pytest, requests, fastapi_etag | -|[fastapi-exploring](https://github.com/manjurulhoque/fastapi-exploring ) |alembic, dotenv, fastapi_sqlalchemy, sqlalchemy, myapp | -|[fastapi-for-firebase](https://github.com/attakei/fastapi-for-firebase ) |fastapi_for_firebase, pytest | -|[fastapi-fullstack](https://github.com/lfvilella/fastapi-fullstack ) |pytest, sqlalchemy, validate_docbr | -|[fastapi-healthcheck](https://github.com/jeffsiver/fastapi-healthcheck ) |healthcheck, setuptools | -|[fastapi-helloworld](https://github.com/yashwanthl/fastapi-helloworld ) |nltk, sklearn, modules | -|[fastapi-hero](https://github.com/Hedde/fastapi-heroku-test ) |dotenv, motor, core, db, bson, models, api | -|[fastapi-hex-boilerplate](https://github.com/GArmane/fastapi-hex-boilerplate ) |factory, toolz, tests, sqlalchemy, myapp, alembic, dotenv, databases, pytest | -|[fastapi-jsonrpc](https://github.com/smagafurov/fastapi-jsonrpc ) |fastapi_jsonrpc, aiojobs, pytest, setuptools | -|[fastapi-jwt](https://github.com/carminati-marco/fastapi-jwt ) |ms_auth, auth, jwt, passlib | -|[fastapi-layered-architecture](https://github.com/teamhide/fastapi-layered-architecture ) |alembic, pythondi, jwt, sqlalchemy, core, myapp | -|[fastapi-login](https://github.com/parsd/fastapi-login ) |pytest, requests, setuptools, fastapi_login, assertpy | -|[fastapi-mako](https://github.com/LouisYZK/fastapi-mako ) |mako, setuptools | -|[fastapi-mangum-example](https://github.com/chgangaraju/fastapi-mangum-example ) |mangum | -|[fastapi-microblog](https://github.com/vkhnychenko/fastapi-microblog ) |alembic, core, sqlalchemy, microblog, myapp, user | -|[fastapi-ml-scaffolding](https://github.com/jmeisele/fastapi-ml-scaffolding ) |loguru, pytest, fastapi_scaffolding, joblib | -|[fastapi-ml-skeleton](https://github.com/eightBEC/fastapi-ml-skeleton ) |loguru, pytest, fastapi_skeleton, joblib | -|[fastapi-mount](https://github.com/Midnighter/fastapi-mount ) |mount_demo | -|[fastapi-nuxt-blog](https://github.com/tokusumi/fastapi-nuxt-blog ) |PIL, passlib, sqlalchemy_utils, sqlalchemy, myapp, sendgrid, pytz, alembic, jwt, boto3, pytest | -|[fastapi-permissions](https://github.com/holgi/fastapi-permissions ) |pytest, jwt, fastapi_permissions, passlib | -|[fastapi-playground](https://github.com/FlorianBorn/fastapi-playground ) |PIL, fastai | -|[fastapi-plugins](https://github.com/madkote/fastapi-plugins ) |fastapi_plugins, setuptools, aioredis, tenacity, aiojobs, pytest | -|[fastapi-poc](https://github.com/igorfarias30/fastapi-poc ) |main, data, models, todo | -|[fastapi-postgres-aws-lambda](https://github.com/KurtKline/fastapi-postgres-aws-lambda ) |mangum, sqlalchemy | -|[fastapi-realworld-example-app-mysql](https://github.com/xiaozl/fastapi-realworld-example-app-mysql ) |bcrypt, passlib, asyncpg, loguru, aiomysql, tests, asgi_lifespan, docker, psycopg2, databases, jwt, pytest, httpx | -|[fastapi-route](https://github.com/franodos/fastapi-route ) |response, setuptools | -|[fastapi-satella-metrics](https://github.com/piotrmaslanka/fastapi-satella-metrics ) |fastapi_satella_metrics, requests, setuptools, satella | -|[fastapi-scaffold](https://github.com/ibegyourpardon/fastapi-scaffold ) |xuan | -|[fastapi-simple-cachecontrol](https://github.com/attakei/fastapi-simple-cachecontrol ) |fastapi_simple_cachecontrol, pytest | -|[fastapi-simple-template](https://github.com/MushroomMaula/fastapi-simple-template ) |alembic, dotenv, pytest, faker, sqlalchemy, myapp, fastapi_login | -|[fastapi-snippets](https://github.com/hhatto/fastapi-snippets ) |caches, fastapi_plugins, aioredis | -|[fastapi-sqlalchemy](https://github.com/zuarbase/fastapi-sqlalchemy-example ) |pytest, setuptools, passlib, sqlalchemy_filters, tests, sqlalchemy, ordered_uuid, tzlocal, pytz, fastapi_sqlalchemy, jwt, itsdangerous | -|[fastapi-sqlalchemy-example](https://github.com/zuarbase/fastapi-sqlalchemy-example ) |alembic, itsdangerous, fastapi_sqlalchemy, pytest, fastapi_sqlalchemy_example, sqlalchemy, myapp, click, setuptools | -|[fastapi-starter-kit](https://github.com/Shinichi-Nakagawa/fastapi-starter-kit ) |book, pytest, sqlalchemy, db | -|[fastapi-tdd-docker](https://github.com/pmcarlos/fastapi-tdd-docker ) |pytest, tortoise | -|[fastapi-template](https://github.com/jefmud/fastapi-templates ) |pytest, setuptools, passlib, sentry_sdk, sqlalchemy_utils, gino, sqlalchemy, jose, alembic, fastapi_template, migrations | -|[fastapi-test](https://github.com/jrwalk/fastapi-test ) |pytest, pandas | -|[fastapi-tools](https://github.com/so1n/fastapi-tools ) |fastapi_tools, prometheus_client, httpx | -|[fastapi-tortoise](https://github.com/prostomarkeloff/fastapi-tortoise ) |loguru, pytest, tortoise, requests, tests | -|[fastapi-users](https://github.com/frankie567/fastapi-users ) |passlib, tortoise, tests, asynctest, asgi_lifespan, sqlalchemy, httpx_oauth, makefun, databases, motor, jwt, fastapi_users, pytest, httpx | -|[fastapi-utils](https://github.com/dmontagu/fastapi-utils ) |pytest, fastapi_utils, tests, sqlalchemy | -|[fastapi-uvicorn-gunicorn-nginx-supervisor-boilerplate](https://github.com/sumitsk20/fastapi-uvicorn-gunicorn-nginx-supervisor-boilerplate ) |orjson, motor, core, server, bson, apps, utils | -|[fastapi-versioning](https://github.com/DeanWay/fastapi-versioning ) |example, typing_extensions, fastapi_versioning, setuptools | -|[fastapi-vue-test](https://github.com/abreumatheus/fastapi-vue-test ) |PIL, sqlalchemy, myapp, pytz, alembic, boto3 | -|[fastapi-websockets](https://github.com/natanael-silvamt/fastapi-websockets ) |api | -|[fastapi-whisper-rest-api](https://github.com/BolajiOlajide/fastapi-whisper-rest-api ) |api | -|[fastapi_admin](https://github.com/Chise1/fastapi_admin ) |apps, setuptools, passlib, fastapi_admin, sqlalchemy, settings, databases, pymysql, jwt | -|[fastapi_catchup](https://github.com/Kamihara/fastapi_catchup ) |intro | -|[fastapi_douyin](https://github.com/bigdataboy2020/fastapi_douyin ) |routers, requests, settings, exceptions, spiders | -|[fastapi_gino](https://github.com/pengyejun/fastapi_gino ) |gino_starlette, pytest, gino_fastapi_demo, sqlalchemy, myapp, aioredis, alembic, poetry, urllib2 | -|[fastapi_microblog](https://github.com/mrworksome/fastapi_microblog ) |alembic, databases, core, sqlalchemy, microblog, myapp, user, passlib, fastapi_users | -|[fastapi_mock](https://github.com/superxuu/fastapi_mock ) |apis, yaml, common | -|[fastapi_model](https://github.com/Nathanlauga/fastapi_model ) |loguru, joblib | -|[fastapi_playground](https://github.com/Rurson/fastapi_playground ) |pony, db | -|[fastapi_preset](https://github.com/cln-m4rie/fastapi_preset ) |setuptools | -|[fastapi_router](https://github.com/christopherzimmerman/fastapi_router ) |fastapi_router, trimport, setuptools | -|[fastapi_serviceutils](https://github.com/skallfass/fastapi_serviceutils_template ) |pytest, requests, setuptools, toolz, loguru, fastapi_serviceutils, yaml, cookiecutter, sqlalchemy, databases | -|[fastapi_serviceutils_template](https://github.com/skallfass/fastapi_serviceutils_template ) |fastapi_serviceutils | -|[fastapi_stu](https://github.com/Thousandhack/fastapi_stu ) |aliyunsdkcore, jwt, sqlalchemy, passlib | -|[fastapi_template](https://github.com/ytxfate/fastapi_template ) |pymongo, redis, jwt, minio, project | -|[fastapi_todo_hex](https://github.com/josemlp91/fastapi_todo_hex ) |factory, toolz, pytest_factoryboy, tests, sqlalchemy, myapp, alembic, dotenv, databases, pytest, todolist | -|[fastbroker](https://github.com/cetanu/fastbroker ) |pkg_resources, ujson, fastbroker, jsonschema, setuptools | -|[fastrf](https://github.com/iancleary/fastrf ) |asgi_lifespan, pytest, fastrf, httpx | -|[fbd-backend](https://github.com/ElusiveSpirit/fbd-backend ) |redis, pytest_mock, celery, loguru, ujson, pytest, tests | -|[finance-api](https://github.com/rennerocha/finance-api ) |finance_api, dynaconf, pytest, requests | -|[first_fastapi](https://github.com/vittorduartte/first_fastapi ) |routes, ext, schemas, sqlalchemy, rules, models | -|[firstderm_demo](https://github.com/polyrand/firstderm_demo ) |requests | -|[foreign-subs](https://github.com/joe-eklund/foreign-subs ) |fsubs, setuptools, pymongo, typer, jwt, bson | -|[frontapp](https://github.com/Blasterai/frontapp ) |decorator, frontapp, requests, envparse, attr | -|[fullasync](https://github.com/lipengsh/fullasync ) |celery, tasks, core, api | -|[fullstack-fastapi-elasticsearch](https://github.com/cleobulo/fullstack-fastapi-elasticsearch ) |core, elasticsearch, db, models, api | -|[fuzzy-octo-funicular](https://github.com/mattkatz/fuzzy-octo-funicular ) |main | -|[gaia-fastapi-demo](https://github.com/muslax/gaia-fastapi-demo ) |email_validator, passlib, pymongo, sentry_sdk, motor, jwt, bson, emails | -|[gaki-server](https://github.com/shitangdama/gaki-server ) |alembic, jwt, sqlalchemy, myapp, passlib | -|[galicea-odoo-addons-ecosystem](https://github.com/galicea/galicea-odoo-addons-ecosystem ) |cryptography, werkzeug, jwcrypto, odoo, git | -|[game](https://github.com/jsandovalc/fake-news-game ) |basegame | -|[gateway-microservice](https://github.com/anforaProject/gateway-microservice ) |aiohttp, v1 | -|[gerenciador-tarefas](https://github.com/matheuspsouza/gerenciador-tarefas ) |gerenciador_tarefas | -|[gfw-tile-cache](https://github.com/wri/gfw-tile-cache ) |gino_starlette, mercantile, pytest, pendulum, async_lru, requests, shapely, cachetools, sqlalchemy, aenum | -|[gifter_api](https://github.com/zhanymkanov/gifter_api ) |pytest, jwt, sqlalchemy, tests, passlib | -|[gigscovery_backend](https://github.com/martijnboers/gigscovery_backend ) |functions, sklearn, bandsintown, spotipy | -|[gino-admin](https://github.com/xnuinside/gino-admin ) |sanic, pytest, click, jinja2, db, requests, passlib, expiring_dict, gino_admin, asyncpg, dsnparse, sqlalchemy_utils, gino, urllib3, aiofiles, yaml, sqlalchemy, sanic_jwt, sanic_jinja2 | -|[gino-starlette](https://github.com/python-gino/gino-starlette ) |requests, gino_fastapi_demo, asyncpg, gino, urllib3, importlib_metadata, sqlalchemy, alembic, pytest, click | -|[girandole](https://github.com/bartkl/girandole ) |beets, plugin, girandole, yaml | -|[girias.json](https://github.com/kvnol/girias.json ) |tinydb | -|[gitea-dispatcher](https://github.com/Trim21/gitea-dispatcher ) |httpx | -|[gke-cicd-sandbox](https://github.com/mana-ysh/gke-cicd-sandbox ) |exampleapp, pytest | -|[glittr-fastapi](https://github.com/kellischeuble/glittr-fastapi ) |glittr, sqlalchemy | -|[graph-server](https://github.com/ZettaAI/graph-server ) |pychunkedgraph, numpy | -|[graphql-python-server](https://github.com/apoveda25/graphql-python-server ) |env, gql, dotenv, schemas, ariadne, models, database, arango | -|[graphql-tutorial](https://github.com/jcremona/graphql-tutorial ) |schema, graphene | -|[grocery-stores-home-delivery](https://github.com/dz-experts/grocery-stores-home-delivery ) |db, app_factory, setuptools, crud, api, typer, sqlalchemy, myapp, alembic, constans, schemas, core, models | -|[guid_tracker](https://github.com/nwcell/guid_tracker ) |alembic, databases, aiocache, guid, pytest, sqlalchemy, sqlalchemy_utils, myapp | -|[hackaton-berlin-legal-tech-2020](https://github.com/jjanczur/hackaton-berlin-legal-tech-2020 ) |pytest, sklearn, joblib, nltk, loguru, cleaner, config, fastapi_skeleton, bs4 | -|[hello-world-fastapi](https://github.com/benhid/hello-world-fastapi ) |fastapp, setuptools, rich | -|[henry](https://github.com/jacksonhenry3/FAAS ) |infrastructure, interface, sqlalchemy | -|[heroku-google-translate-api](https://github.com/fawazahmed0/heroku-google-translate-api ) |googletrans | -|[hh_parser](https://github.com/Kuzyashin/hh_parser ) |passlib, aiohttp, tortoise, template, celery, jwt, emails | -|[home_recruiters](https://github.com/Mohamed-Kaizen/home_recruiters ) |users, pendulum, passlib, jobs, tortoise, typer, usernames, jwt, core, confusable_homoglyphs, username | -|[http-battle](https://github.com/MihaiAnei/http-battle ) |flask_restful, flask, python_flask | -|[hvilkenfisk](https://github.com/David-IL/hvilkenfisk ) |imutils, fish_utils, sklearn, h5py, cv2, keras, img_preprocess, model_utils | -|[iam_working](https://github.com/carlosporta/iam_working ) |iam_working | -|[iem-web-services](https://github.com/akrherz/iem-web-services ) |setuptools, pyiem, shapely, metpy, pytz, pygrib, pyproj, pandas, geopandas, pytest | -|[ihan-productizer-example](https://github.com/digitalliving/ihan-productizer-example ) |aiohttp, ujson, settings_local, settings | -|[image_capabilities_backend](https://github.com/alejgo06/image_capabilities_backend ) |PIL, cv2 | -|[image_classifier_backend](https://github.com/alejgo06/image_classifier_backend ) |PIL, cv2 | -|[image_detector_backend](https://github.com/alejgo06/image_detector_backend ) |PIL, torch, utils, torchvision, pycocotools, models, cv2 | -|[img-filter-api](https://github.com/RaRhAeu/img-filter-api ) |aiohttp, cv2, api, requests, pytest | -|[ingaia_app](https://github.com/higaooliveira/ingaia_app ) |pytest, sqlalchemy, resources, requests, config, spotipy, domain | -|[innovativeproject-photographers-portfolio](https://github.com/nokia-wroclaw/innovativeproject-photographers-portfolio ) |fastapi_mail, jwt, sqlalchemy, src, database, passlib | -|[inpainting_backen](https://github.com/kaikai03/inpainting_backen ) |tinydb | -|[introduction-to-async-await](https://github.com/ci42/introduction-to-async-await ) |unsync, unsyncable, colorama | -|[iter8-analytics](https://github.com/iter8-tools/iter8-analytics ) |analytics_namespace, requests, flask_restplus, setuptools, experiment_namespace, yaml, jsonschema, iter8_analytics, django, flask, requests_mock | -|[jjs](https://github.com/jjs-dev/jjs ) |bcrypt, pytest, api_models, pymongo, db_models, routes, auth, db_connect | -|[jobsearch_statistics](https://github.com/JobtechSwe/jobsearch_statistics ) |certifi, searchstatistics, elasticsearch | -|[json-fastapi](https://github.com/stocky37/json-fastapi ) |json_fastapi, tinydb, slugify, link_header, util | -|[juice-box](https://github.com/dannytannertantrum/juice-box ) |tests | -|[jupyter_fastapi](https://github.com/Zsailer/jupyter_fastapi ) |jupyter_server, tornado, hypothesis, pytest, jupyter_fastapi, hypothesis_jsonschema, setuptools | -|[k8s-traefik-example](https://github.com/Hedde/k8s-traefik-example ) |flask | -|[kartu-beckend](https://github.com/AntonKristiono/kartu-beckend ) |PIL, config, yaml, autocrop, routes, motor, bson, cv2 | -|[koalachat](https://github.com/therumbler/koalachat ) |koalachat, aiofiles | -|[koalastream](https://github.com/therumbler/koalastream ) |aiofiles, koalastream | -|[kritika](https://github.com/Egnod/kritika ) |alembic, sitri, slugify, sqlalchemy, myapp, kritika | -|[kubeflow-containers-desktop](https://github.com/StatCan/kubeflow-containers-desktop ) |tqdm, jupyter_core, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[kubernetes-experiments](https://github.com/richard-to/kubernetes-experiments ) |redis, alembic, sqlalchemy, myapp, passlib | -|[kuma](https://github.com/deepalikumar/sync_async_compare ) |bcrypt, docstring_parser, passlib, orjson, loguru, sqlalchemy, myapp, jupyter_client, alembic, databases, jwt, nbformat | -|[kvmail](https://github.com/la9ran9e/kvmail ) |tarantool, dotenv, settings | -|[lab_monitor](https://github.com/nutanix-japan/lab_monitor ) |pymongo, requests, schedule, client | -|[lagom](https://github.com/meadsteve/lagom ) |sybil, pytest, lagom, typing_extensions, tests, django, flask | -|[lang-python](https://github.com/tim-barnes/lang-python ) |submod2, worker_a, etcd3, rabbit, worker_b, optmod1, psutil, mongoengine, pika, test_pb2, grpc, google, optmod2, submod1, celery, flask, models, pytest | -|[league-manager](https://github.com/Project-SRC/league-manager ) |jwt, src, environs, passlib | -|[learn-kubernetes](https://github.com/quan-vu/learn-kubernetes ) |flask, flask_restful | -|[lgbsttracker_api](https://github.com/py4mac/lgbsttracker_api ) |lgbsttracker, lgbsttracker_api | -|[lightgbm-project-demo](https://github.com/raywu60kg/lightgbm-project-demo ) |psycopg2, sklearn, src, tests, ray | -|[linkalong-pre-inteview-task](https://github.com/pydevd/linkalong-pre-inteview-task ) |decouple, linkalong | -|[love-alarm](https://github.com/dl-eric/love-alarm ) |pymongo, redis, nexmo, jwt, boto3, bson, passlib | -|[maale-map-bot](https://github.com/kudanai/maale-map-bot ) |pyngrok, dotenv, discord, bots, viberbot, models, settings, fuzzywuzzy, telegram | -|[manageme-api](https://github.com/managemeapp/manageme-api ) |mangum, today_app, setuptools | -|[mangum-fastapi-aws-test](https://github.com/dan-danciu/mangum-fastapi-aws-test ) |mangum | -|[mars-rover](https://github.com/rSkogeby/mars-rover ) |models, views | -|[memefly-ds](https://github.com/Lambda-School-Labs/memefly-ds ) |wandb, memefly, requests, pymongo, decouple, api, tensorflow, dotenv, boto3, click | -|[metabot](https://github.com/vasyukvv42/metabot ) |metabot, requests, fastapi_metabot, setuptools, aiohttp, pymongo, help, typing_extensions, feedback, aioredis, vacations, slackers, motor, mockaioredis, bson, slack, pytest, httpx | -|[micro-data-lake](https://github.com/abxda/micro-data-lake ) |sklearn, newspaper, altair, airflow, sqlalchemy, IPython, minio, setproctitle | -|[microservices](https://github.com/hugosteixeira/microservices ) |requests | -|[mironov_blog_pwa](https://github.com/yuriymironov96/mironov_blog_pwa ) |alembic, dotenv, sqlalchemy, myapp, apps | -|[ml-project-template](https://github.com/raywu60kg/ml-project-template ) |psycopg2, src, tests, ray | -|[ml-workspace](https://github.com/DennisRasey/ml-workspace ) |jupyter_core, tqdm, setuptools, tornado, crontab, pip, psutil, IPython, git, notebook | -|[modelo-fast-api](https://github.com/knienkotter/modelo-fast-api ) |pytest, gerenciador_tarefas | -|[moneyTransfer](https://github.com/williamsyb/moneyTransfer ) |faker, db, app_factory, passlib, apis, config, utils, main, sqlalchemy, auth, schemas, jwt, pytest | -|[mongodb_admin](https://github.com/ArtemZaitsev1994/mongodb_admin ) |trafaret_config, envparse, pymongo, base, motor, jwt, bson | -|[mri_image_reconstruction](https://github.com/Pradhy729/mri_image_reconstruction ) |utils, config | -|[msys2-web](https://github.com/msys2/msys2-web ) |pytest, pgpdump, jinja2, fastapi_etag, respx, httpx | -|[musixfy_service](https://github.com/divyam234/musixfy_service ) |requests, Cryptodome | -|[mv-backend](https://github.com/Sreerajta/mv-backend ) |cassandra, requests, passlib, redis, fnc, global_config, sqlalchemy, jwt, greenstalk | -|[mvp-metric](https://github.com/DjaPy/mvp-metric ) |databases, sqlalchemy, dateutil | -|[mvs_eland_api](https://github.com/rl-institut/mvs_eland_api ) |celery, pytest, worker, mvs_eland_tool, sphinx_rtd_theme | -|[my-notes-app](https://github.com/jgabriel1/my-notes-app ) |databases, pytest, jwt, sqlalchemy, passlib | -|[mychef](https://github.com/logan-connolly/mychef ) |spacy, requests, scrapy, tqdm, aiohttp, asyncpg, loguru, orm, reddit, scraper, sqlalchemy, databases, praw, pytest, jsonlines, bs4 | -|[nasa_neo](https://github.com/cmmarti/nasa_neo ) |repo, requests | -|[nereid](https://github.com/Geosyntec/nereid ) |nereid, pytest, redis, typing_extensions, numpy, matplotlib, scipy, yaml, pint, celery, pandas | -|[ners](https://github.com/cedricconol/ners ) |utils, config | -|[netpalm](https://github.com/tbotnz/netpalm ) |xmltodict, rq, netmiko, pytest, jinja2, backend, netpalm_pinned_worker, requests, jinja2schema, redis, lxml, tests, jsonschema, ncclient, routers, napalm | -|[next-word-sentence-pred-api](https://github.com/rakesh4real/next-word-sentence-pred-api ) |tree, sqlalchemy, models, database | -|[nile-api](https://github.com/mattgeiger/nile-api ) |alembic, bcrypt, databases, jwt, sqlalchemy, api | -|[nlp_api](https://github.com/rdenadai/nlp_api ) |nltk, decouple, spacy, utils | -|[nmdc-server](https://github.com/microbiomedata/nmdc-server ) |pytest, faker, factory, requests, setuptools, pkg_resources, sqlalchemy, alembic, nmdc_server | -|[nomine](https://github.com/gzzo/nomine ) |graphql_sqlalchemy, ariadne, sqlalchemy, nomine, graphql | -|[nurse-schedule](https://github.com/csabex94/nurse-schedule ) |spital_routes, mongoengine, nurse_routes, jwt, models, utils, passlib | -|[oasis](https://github.com/instedd/oasis ) |users, bcrypt, pytest, stories, requests, mysql, flask_cors, sqlalchemy, myapp, sigfig, database, jenkspy, alembic, flask, auth, jwt, router, emails | -|[ocfapi](https://github.com/nikhiljha/ocfapi ) |ocflib | -|[oreMeet](https://github.com/mfortini/oreMeet ) |ics, worker | -|[owi_Result-Collector](https://github.com/JensGe/owi_Result-Collector ) |sqlalchemy, tests | -|[page-visitor-counter](https://github.com/trapflag/page-visitor-counter ) |redis | -|[paste.bin](https://github.com/magiskboy/paste.bin ) |pymongo, redis, gridfs, bson | -| |PIL, PyPDF4 | -|[perfume-ai](https://github.com/gurutaka/perfume-ai ) |PIL, torchvision, predict, cv2, torch | -|[persistent-identifier-service](https://github.com/OpertusMundi/persistent-identifier-service ) |ompid, yaml, sqlalchemy | -|[personal-learning](https://github.com/hoangthienan95/personal-learning ) |pyimagesearch, sklearn, calculator, cv2, keras | -|[pi-camera-hardware-server](https://github.com/NSnietol/pi-camera-hardware-server ) |loguru, picamera, requests, src | -|[piccolo_api](https://github.com/piccolo-orm/piccolo_api ) |setuptools, asyncpg, test_session, piccolo, livereload, jwt, piccolo_api, asgiref | -|[plarin_task](https://github.com/jjoskey/plarin_task ) |pymongo, main, employees, pytest, faker, bson, settings | -|[plonkowski.b-gmail.com](https://github.com/Raroog/plonkowski.b-gmail.com ) |main | -|[plotly-graphene](https://github.com/mdpham/plotly-graphene ) |pymongo, mutation, graphene, schema, minio, loompy, bson, query, minio_client | -|[pneumoniadetection](https://github.com/aalikadic/pneumoniadetection ) |kaggle, PIL, classifier, keras | -|[pol](https://github.com/RedHatInsights/policies-notifications ) |pytest, requests, aioresponses, etc, orjson, aiohttp, redis, sentry_sdk, tests, sqlalchemy, myapp, aioredis, pytz, alembic, databases, aiologger | -|[policies-notifications](https://github.com/RedHatInsights/policies-notifications ) |pytest, jinja2, aiokafka, aiohttp, asyncpg, prometheus_client, apscheduler, gino, tests, sqlalchemy, myapp, starlette_prometheus, alembic | -|[poll-app](https://github.com/jgabriel1/poll-app ) |pymongo, dotenv, selenium, pytest, flask_testing, tests, config | -|[ppm-telegram-bot](https://github.com/piterpy-meetup/ppm-telegram-bot ) |pip, aiogram, fastapi_security_telegram_webhook, ppm_telegram_bot | -|[ppr](https://github.com/bcgov/ppr ) |pytest, endpoints, requests, setuptools, sentry_sdk, freezegun, config, main, repository, sqlalchemy, myapp, datedelta, pytz, alembic, dotenv, schemas, models | -|[practical-python](https://github.com/sudharsan2020/practical-python ) |redis, celery_with_fastapi, celery | -|[programs](https://github.com/deta/programs ) |deta, jinja2, colors, svgs, passlib | -|[projects](https://github.com/hungd25/projects ) |sklearn, lrsgd, utils, numpy, matplotlib, nose, models_partc, src, phonenumbers | -|[property-prediction](https://github.com/solanyn/property-prediction ) |botocore, psycopg2, pytest, catboost, sklearn, hello_world, boto3, requests | -|[proxmox-slack-bot](https://github.com/PlenusPyramis/proxmox-slack-bot ) |slack_model, requests, slack | -|[proxy-checker](https://github.com/infaticaio/proxy-checker ) |aiohttp, main, checker, aiosocks | -|[py-cidemia-security](https://github.com/cidemia/py-cidemia-security ) |werkzeug, requests, setuptools, passlib, yaml, cidemiasecurity, jwt | -|[pyBets](https://github.com/GabrielCappelli/pyBets ) |error_messages, db_models, views, sqlalchemy, application, database, app_logging, models, services, pytest | -|[pyapi](https://github.com/srghosh29/pyapi ) |apis | -|[pycon2020-FastAPI](https://github.com/gloriasky/pycon2020-FastAPI ) |schemas, sqlalchemy, models, api, database | -|[pyctuator](https://github.com/SolarEdgeTech/pyctuator ) |werkzeug, multidict, requests, aiohttp, redis, tests, psutil, pyctuator, sqlalchemy, flask, pytest | -|[pydantic-ddd-exploration](https://github.com/allgreed/pydantic-ddd-exploration ) |sqlalchemy, src | -|[pyml](https://github.com/dockerian/pyml ) |PIL, pytest, setuptools, gevent, h5py, tests, numpy, dateutil, matplotlib, scipy, mock, connexion, yaml, google, jsonpickle, flask, ml, asgiref | -|[pypis](https://github.com/jurelou/pypis ) |packaging, setuptools, asyncpg, loguru, pkg_resources, sqlalchemy, stdlib_list, dynaconf, pypis, httpx | -|[python](https://github.com/jijinggang/test_python ) |requests, requests_html, unidecode, lxml, openpyxl, send_mail, download_util, formatting, settings, templates, flask | -|[python-api-template](https://github.com/mana-ysh/python-api-template ) |pytest | -|[python-asyncio-crud](https://github.com/aleimu/python-asyncio-crud ) |sanic, six, uvloop, muggle_ocr, redis, flask_sqlalchemy, aiomysql, sqlalchemy, aioredis, flask | -|[python-crash-course](https://github.com/cyberinsane/python-crash-course ) |tinydb, schema, pandas, requests | -|[python-deployment-samples](https://github.com/edisga/python-deployment-samples ) |aiohttp, webtest, django, pyramidsite, flask, pyramid, flask_cors, my_app, setuptools, other_app | -|[python-fastapi-hex-todo](https://github.com/GArmane/python-fastapi-hex-todo ) |pytest, faker, factory, passlib, toolz, asyncpg, pytest_factoryboy, tests, sqlalchemy, myapp, alembic, dotenv, databases, jwt, todolist | -|[python-graphql](https://github.com/tsungchih/python-graphql ) |graphene, aiohttp, loguru, ujson, psutil, graphql | -|[python-ml-service-template](https://github.com/paramoshin/python-ml-service-template ) |yaml, joblib, starlette_prometheus | -|[python-playground](https://github.com/tgmti/python-playground ) |flask_restful, flask, sqlalchemy | -|[python-poetry-docker-example](https://github.com/michael0liver/python-poetry-docker-example ) |pytest | -|[python-private-service-layout](https://github.com/U-Company/python-private-service-layout ) |fire, loguru, prometheus_client, pytest, vault_client, info, clients, tests, setuptools | -|[python_benchmark](https://github.com/T4D3K/python_benchmark ) |fastapi_frm, locust, sqlalchemy, tortoise, falcon, gino, falcon_frm | -|[python_common_tools](https://github.com/CheungChan/python_common_tools ) |requests, setuptools, redis, python_common_tools, paramiko, stackprinter, DBUtils, pymysql | -|[python_fastapi](https://github.com/playwhyyza/python_fastapi ) |jwt, passlib | -|[qa-api](https://github.com/venuraja79/qa-api ) |elasticapm, controller, haystack, config | -|[qhub-home](https://github.com/Quansight/qhub-home ) |toml, flit, setuptools | -|[qr-generator](https://github.com/gosha20777/qr-generator ) |qrcode | -|[rakm](https://github.com/emanuelaguna/rakm ) |pytest, requests, aiohttp, asyncache, invoke, asyncmock, tests, dateutil, cachetools, async_asgi_testclient, async_generator, dotenv | -|[random_projects](https://github.com/thepartisan101/random_projects ) |flask_restful, graphene, extraction, selenium, flask, flask_graphql, schema, sqlalchemy, requests | -|[recommender_fastapi](https://github.com/gjorgjinac/recommender_fastapi ) |repository, pybreaker, helper, sqlalchemy, default_ad_listener, requests, web, defaults | -|[recommender_server](https://github.com/gjorgjinac/recommender_server ) |repository, pybreaker, helper, sqlalchemy, default_ad_listener, requests, web, defaults | -|[ref-final-project-backend](https://github.com/Reyvel/ref-final-project-backend ) |faust, kafka, msgpack, settings, utils | -|[repost-fastapi](https://github.com/pckv/repost-fastapi ) |dotenv, jwt, sqlalchemy, repost, passlib | -|[responsive-layout-part](https://github.com/lmacchiavelli/responsive-layout-part ) |PIL | -|[rest_api_docker_mongo_aws](https://github.com/RodrigoMachado9/rest_api_docker_mongo_aws ) |pymongo, six, bottle_resource, beartype, bottle, spacy, passlib | -|[restbot](https://github.com/cwerner/restbot ) |restbot, loguru, pytest, joblib | -|[reternal-backend](https://github.com/d3vzer0/reternal-backend ) |pymongo, redis, flask_restful, flask_jwt_extended, sigma, workers, mongoengine, yaml, environment, database, pytz, flask_socketio, celery, flask, jwt, bson | -|[reverse-geocoder](https://github.com/claws/reverse-geocoder ) |databases, sqlalchemy, geoalchemy2 | -|[rjgtoys-xc](https://github.com/bobgautier/rjgtoys-xc ) |pytest, jinja2, requests, rjgtoys, apierrors, sphinx, sphinx_autodoc_typehints | -|[rn-fastapi-app](https://github.com/cloudeyes/rn-fastapi-app ) |sample, psycopg2, fastapi_login, MySQLdb, sqlalchemy, fastalchemy, passlib | -|[runn](https://github.com/alex-2201/runn ) |requests, passlib, tests, utils, sqlalchemy, jwt, logzero, pytest, emails | -|[sauti-fastapi](https://github.com/taycurran/sauti-fastapi ) |dotenv, pstgres, sqlalchemy | -|[sauti-monitor-ds-api](https://github.com/taycurran/sauti-monitor-ds-api ) |dotenv, sqlalchemy | -|[scaling-spoon](https://github.com/bloomingmath/scaling-spoon ) |email_validator, pony, bcrypt, pytest, extensions, passlib, pymongo, selenium, blinker, main, async_asgi_testclient, dotenv, motor, schemas, routers, bson, models | -|[sensehat-fastapi](https://github.com/cmlccie/sensehat-fastapi ) |sense_hat, senseapi | -|[server-open-alpr](https://github.com/NSnietol/server-open-alpr ) |openalpr, loguru, src | -|[serverless-fastapi-cdk](https://github.com/jaehyeon-kim/serverless-fastapi-cdk ) |mangum, resources, src, aws_cdk | -|[show-tell-api](https://github.com/team-eyespace/show-tell-api ) |nltk, PIL, TensorBoardCaption, NIC, evaluate, flask, jwt, preprocessing, keras, utils | -|[signal-cli-rest-api](https://github.com/SebastianLuebke/signal-cli-rest-api ) |pyqrcode, requests, signal_cli_rest_api | -|[simple-kp](https://github.com/ranking-agent/simple-kp ) |aiosqlite, pytest, simple_kp, reasoner_pydantic, data, setuptools | -|[simple-messenger](https://github.com/IvanDubrowin/simple-messenger ) |server | -|[simple-report-data-table-vuetify](https://github.com/shizidushu/simple-report-data-table-vuetify ) |bcrypt, dotenv, mongoengine, jwt, pypandoc, bson, casbin, passlib | -|[simpleapp-aws-fargate](https://github.com/kbaafi/simpleapp-aws-fargate ) |controllers, databases, sqlalchemy, boto3, data, config, services, settings, requests | -|[siso-library](https://github.com/nfowl/siso-library ) |databases, sqlalchemy | -|[sklearn-docker-api](https://github.com/crocopie/sklearn-docker-api ) |sklearn, service, joblib | -|[slowapi](https://github.com/laurentS/slowapi ) |limits, redis, slowapi, tests, hiro, mock | -|[smart-social-distancing](https://github.com/neuralet/smart-social-distancing ) |openvino, tflite_runtime, invoke, ui, tools, wget, scipy, libs | -|[sms_gateway](https://github.com/arxell/sms_gateway ) |passlib, aiohttp, sentry_sdk, aiopg, sqlalchemy, myapp, grpc, google, alembic, psycopg2, jwt, click, grpclib | -|[social-insights](https://github.com/dsc-umass/social-insights ) |sklearn, requests, joblib, nltk, tweepy, numpy, firebase_admin, twitter_credentials, scipy, spellchecker, get_tweets, google, flask, keras, xgboost, suggest | -|[sociallyhigh](https://github.com/NikhilSharmay/sociallyhigh ) |pkg_resources, sociallyhigh | -|[sparky](https://github.com/perfecto25/sparky ) |sparky, config | -|[speechRecognition_api](https://github.com/X-CCS/speechRecognition_api ) |librosa, sklearn, aukit, aip, Django_jianlong, videototextapp, videoaddsubtitleapp, myapp, IPython, my_app, other_app, djcelery, django, celery, video2audio_noiseReduction, keras | -|[start-fastapi](https://github.com/utmhikari/start-fastapi ) |model, middleware, controller, service, application, dotenv | -|[startapp](https://github.com/marlin-dev/startapp ) |extensions, marshmallow, setuptools, passlib, flask_env, flask_jwt_extended, sentry_sdk, flask_sqlalchemy, sqlalchemy_utils, gino, sqlalchemy, flask_marshmallow, takeaway, settings, flask_migrate, starlette_prometheus, flask, app_init, core| -|[statsfy](https://github.com/skmatz/statsfy ) |spotifier | -|[stock-tracker](https://github.com/jgabriel1/stock-tracker ) |pymongo, aiohttp, dotenv, pytest, jwt, server, requests, passlib | -|[stores](https://github.com/dz-experts/grocery-stores-home-delivery ) |stores, pytest, api, util | -|[storyboard_renderer](https://github.com/Weltii/storyboard_renderer ) |render_job, layouts, bridge, statics, layout_bridge, utils | -|[summaries](https://github.com/bradstimpson/summaries ) |nltk, newspaper, pytest, tortoise | -|[summarize-api](https://github.com/gary23w/summarize-api ) |nltk, newspaper, pytest, tortoise | -|[surfacescan](https://github.com/vbogretsov/surfacescan ) |networkx, pytest, faker, atomiclong, locust, surfacescan, pkg_resources, tests | -|[sweetHome](https://github.com/zkity/sweetHome ) |serial, lib | -|[sync_async_compare](https://github.com/deepalikumar/sync_async_compare ) |blog, faker, marshmallow, flask_sqlalchemy, sqlalchemy_utils, flask_apispec, commands, sqlalchemy, myapp, resources, settings, flask_migrate, alembic, dotenv, flask, databases, pytest | -|[takeAction-Backend](https://github.com/AndyKChen/takeAction-Backend ) |ml_controller, googlesearch, sklearn, getURL, bs4, keras, utils, numpy | -|[tariffengineapi](https://github.com/SofieneEnnaoui/tariffengineapi ) |memory_profiler, redis, numba, tariffs_modules, tests, api_fastapi, memory | -|[task_manager](https://github.com/VladOsiichuk/task_manager ) |passlib, gino, sqlalchemy, myapp, alembic, jwt | -|[taskriptor-web](https://github.com/nasuka/taskriptor-web ) |alembic, sqlalchemy, myapp | -|[tdd-fastapi-template](https://github.com/markusntz/tdd-fastapi-template ) |fastapi_tdd_docker, pytest, tortoise | -|[teached](https://github.com/Mohamed-Kaizen/teached ) |pytest, pendulum, requests, passlib, loguru, tortoise, teached, typer, importlib_metadata, nox, usernames, dropbox, jwt, confusable_homoglyphs, username | -|[techsoulai_backend](https://github.com/zhanymkanov/techsoulai_backend ) |pytest, jamspell, jwt, sqlalchemy, pymystem3, passlib | -|[temperature-web](https://github.com/sj175/temperature-web ) |board, dotenv, adafruit_dht, boto3, requests | -|[test_fastapi](https://github.com/leblancfg/test_fastapi ) |PIL, magic, fastapi_versioning, autocrop, cv2, requests, google | -|[test_shop](https://github.com/Ayaks7/test_shop ) |requests, passlib, peewee, user_orders, my_app, other_app, django, yoyo, catalog, auth, jwt, pytest, peewee_async, tastypie | -|[testfastapi](https://github.com/18438655078/testfastapi ) |tortoise, boto3 | -|[todo-list-fastapi](https://github.com/mcauto/todo-list-fastapi ) |aiofiles, pytest, jwt, sqlalchemy, src, passlib | -|[todoapp](https://github.com/prashunchitkr/todoapp ) |alembic, jwt, sqlalchemy, myapp, passlib | -|[trainee_mi](https://github.com/goncharov-roman/trainee_mi ) |pymongo | -|[transactions_api](https://github.com/txemac/transactions_api ) |pytest, sqlalchemy, sqlalchemy_utils, database | -|[transformers](https://github.com/raphtlw/transformers ) |aitextgen | -|[translator](https://github.com/eightytwo/translator ) |translator, schemas, api, httpx | -|[try-fast-api](https://github.com/kayshcache/try-fast-api ) |dotenv | -|[users-service](https://github.com/falled10/users-service ) |werkzeug, pytest, oauth2client, sqlalchemy_utils, api, config, main, repository, humps, sqlalchemy, myapp, alembic, jwt, routers, authlib, services | -|[uvicorn-gunicorn-fastapi](https://github.com/dshadow/uvicorn-gunicorn-fastapi-docker ) |test_utils, docker, requests, pytest | -|[vollmacht](https://github.com/ogeller/vollmacht ) |fitz | -|[volunteer-database](https://github.com/crowdsourcemedical/volunteer-database ) |alembic, pytest, jwt, sqlalchemy, myapp, passlib | -|[wamedex2](https://github.com/gwf-uwaterloo/wamedex2 ) |pytest, pyserini, hnswlib, pkg_resources, helper, freezegun, dateparser | -|[wazo-router-calld](https://github.com/wazo-platform/wazo-router-calld ) |wazo_router_calld, consul, click, sqlalchemy, setuptools | -|[web-api](https://github.com/aroio/web-api ) |exceptions, yaml, auth, jwt, routers, models, data | -|[web-avatarify](https://github.com/charlielito/web-avatarify ) |PIL, afy, skimage, moviepy, requests, imageio, tqdm, animate, sync_batchnorm, ffmpeg, torch, matplotlib, scipy, face_alignment, yaml, python_path, cv2, modules | -|[web-frameworks-benchmark](https://github.com/kesha1225/web-frameworks-benchmark ) |muffin, sanic, pyramid, falcon, requests, bottle, aiohttp, bobo, quart, hug, japronto, request_bench, my_app, other_app, django, flask, cherrypy, kumquat, freezy | -|[web_speedtest](https://github.com/Kulikovpavel/web_speedtest ) |flask | -|[weblink-downloader](https://github.com/cortexin/weblink-downloader ) |passlib, asyncpg, tests, link_downloader, databases, pytest, httpx | -|[xo_back](https://github.com/octomen/xo_back ) |pytest, api | -|[xpublish](https://github.com/xarray-contrib/xpublish ) |xarray, pytest, cachey, xpublish, setuptools, pkg_resources, h5py, netCDF4, numcodecs, dask, zarr | -|[xraysink](https://github.com/garyd203/xraysink ) |aiohttp, jsonpickle, xraysink, async_asgi_testclient, aws_xray_sdk, requests, pytest | -|[yappfm-backend](https://github.com/yappfm/yappfm-backend ) |alembic, sqlalchemy, myapp, yappfm, gino | -|[yatsm](https://github.com/danielmartins/yatsm ) |dramatiq, walrus, pytest, pendulum, passlib, apscheduler, typer, assertpy, pytz, jwt, yatsm | -|[yumemi_intern_API](https://github.com/tkrk1209/yumemi_intern_API ) |aiohttp, sqlalchemy, myapp, google, alembic | -|[zo](https://github.com/wazo-platform/wazo-router-calld ) |PIL, requests, ssdb, setuptools, loguru, urllib3, zo, munch | diff --git a/env b/env deleted file mode 100644 index 9a18193..0000000 --- a/env +++ /dev/null @@ -1,2 +0,0 @@ -USERNAME=YOUR_USERNAME -PASSWORD=YOUR_PASSWORD diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000..974c21d --- /dev/null +++ b/frontend/.env @@ -0,0 +1 @@ +NEXT_PUBLIC_PROJECT_REPO_URL="https://github.com/Kludex/awesome-fastapi-projects" diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 0000000..4d765f2 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["next/core-web-vitals", "prettier"] +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..8f322f0 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000..9215de6 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,3 @@ +out +.next +next-env.d.ts diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..99a5669 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,19 @@ +{ + "arrowParens": "always", + "bracketSameLine": false, + "bracketSpacing": true, + "semi": true, + "singleQuote": false, + "jsxSingleQuote": false, + "quoteProps": "as-needed", + "trailingComma": "all", + "htmlWhitespaceSensitivity": "css", + "vueIndentScriptAndStyle": false, + "proseWrap": "preserve", + "insertPragma": false, + "printWidth": 80, + "requirePragma": false, + "tabWidth": 2, + "useTabs": false, + "embeddedLanguageFormatting": "auto" +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..f4da3c4 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..556d973 --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 0000000..da993e6 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,22 @@ +/** @type {import('next').NextConfig} */ + +const pkg = require("./package.json"); + +// starts a command line process to get the git hash +const commitHash = require("child_process") + .execSync('git log --pretty=format:"%h" -n1') + .toString() + .trim(); + +const nextConfig = { + output: "export", + basePath: + // TODO: Change to load from env variable + process.env.NODE_ENV === "production" ? "/awesome-fastapi-projects" : "", + env: { + commitHash, + frontendAppVersion: pkg.version, + }, +}; + +module.exports = nextConfig; diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..12d7ca4 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,47 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "prettier:lint": "prettier --check .", + "prettier:format": "prettier --write ." + }, + "dependencies": { + "@hookform/resolvers": "^3.3.1", + "@orama/orama": "^1.2.3", + "@radix-ui/react-avatar": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.4", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-slot": "^1.0.2", + "@tanstack/react-table": "^8.9.3", + "@tanstack/react-virtual": "3.0.0-alpha.0", + "@types/node": "20.5.1", + "@types/react": "18.2.20", + "@types/react-dom": "18.2.7", + "autoprefixer": "10.4.15", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", + "cmdk": "^0.2.0", + "eslint": "8.47.0", + "eslint-config-next": "13.4.18", + "lucide-react": "^0.269.0", + "next": "13.4.18", + "postcss": "8.4.28", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.46.1", + "tailwind-merge": "^1.14.0", + "tailwindcss": "3.3.3", + "tailwindcss-animate": "^1.0.6", + "typescript": "5.1.6", + "zod": "^3.21.4" + }, + "devDependencies": { + "eslint-config-prettier": "^9.0.0", + "prettier": "^3.0.3" + } +} diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..6d0854f --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,4475 @@ +lockfileVersion: "6.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + "@hookform/resolvers": + specifier: ^3.3.1 + version: 3.3.1(react-hook-form@7.46.1) + "@orama/orama": + specifier: ^1.2.3 + version: 1.2.3 + "@radix-ui/react-avatar": + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-dialog": + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-label": + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-slot": + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.20)(react@18.2.0) + "@tanstack/react-table": + specifier: ^8.9.3 + version: 8.9.3(react-dom@18.2.0)(react@18.2.0) + "@tanstack/react-virtual": + specifier: 3.0.0-alpha.0 + version: 3.0.0-alpha.0(react@18.2.0) + "@types/node": + specifier: 20.5.1 + version: 20.5.1 + "@types/react": + specifier: 18.2.20 + version: 18.2.20 + "@types/react-dom": + specifier: 18.2.7 + version: 18.2.7 + autoprefixer: + specifier: 10.4.15 + version: 10.4.15(postcss@8.4.28) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + cmdk: + specifier: ^0.2.0 + version: 0.2.0(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + eslint: + specifier: 8.47.0 + version: 8.47.0 + eslint-config-next: + specifier: 13.4.18 + version: 13.4.18(eslint@8.47.0)(typescript@5.1.6) + lucide-react: + specifier: ^0.269.0 + version: 0.269.0(react@18.2.0) + next: + specifier: 13.4.18 + version: 13.4.18(react-dom@18.2.0)(react@18.2.0) + postcss: + specifier: 8.4.28 + version: 8.4.28 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.46.1 + version: 7.46.1(react@18.2.0) + tailwind-merge: + specifier: ^1.14.0 + version: 1.14.0 + tailwindcss: + specifier: 3.3.3 + version: 3.3.3 + tailwindcss-animate: + specifier: ^1.0.6 + version: 1.0.6(tailwindcss@3.3.3) + typescript: + specifier: 5.1.6 + version: 5.1.6 + zod: + specifier: ^3.21.4 + version: 3.21.4 + +devDependencies: + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.0.0(eslint@8.47.0) + prettier: + specifier: ^3.0.3 + version: 3.0.3 + +packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: + { + integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, + } + engines: { node: ">=0.10.0" } + + /@alloc/quick-lru@5.2.0: + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } + dev: false + + /@babel/runtime@7.22.10: + resolution: + { + integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==, + } + engines: { node: ">=6.9.0" } + dependencies: + regenerator-runtime: 0.14.0 + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.47.0): + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.47.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.6.2: + resolution: + { + integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + /@eslint/eslintrc@2.1.2: + resolution: + { + integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.21.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.47.0: + resolution: + { + integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + /@hookform/resolvers@3.3.1(react-hook-form@7.46.1): + resolution: + { + integrity: sha512-K7KCKRKjymxIB90nHDQ7b9nli474ru99ZbqxiqDAWYsYhOsU3/4qLxW91y+1n04ic13ajjZ66L3aXbNef8PELQ==, + } + peerDependencies: + react-hook-form: ^7.0.0 + dependencies: + react-hook-form: 7.46.1(react@18.2.0) + dev: false + + /@humanwhocodes/config-array@0.11.10: + resolution: + { + integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==, + } + engines: { node: ">=10.10.0" } + dependencies: + "@humanwhocodes/object-schema": 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } + + /@humanwhocodes/object-schema@1.2.1: + resolution: + { + integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, + } + + /@jridgewell/gen-mapping@0.3.3: + resolution: + { + integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, + } + engines: { node: ">=6.0.0" } + dependencies: + "@jridgewell/set-array": 1.1.2 + "@jridgewell/sourcemap-codec": 1.4.15 + "@jridgewell/trace-mapping": 0.3.19 + dev: false + + /@jridgewell/resolve-uri@3.1.1: + resolution: + { + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, + } + engines: { node: ">=6.0.0" } + dev: false + + /@jridgewell/set-array@1.1.2: + resolution: + { + integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, + } + engines: { node: ">=6.0.0" } + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } + dev: false + + /@jridgewell/trace-mapping@0.3.19: + resolution: + { + integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, + } + dependencies: + "@jridgewell/resolve-uri": 3.1.1 + "@jridgewell/sourcemap-codec": 1.4.15 + dev: false + + /@next/env@13.4.18: + resolution: + { + integrity: sha512-ZUG5Y/KSSerggdeD2LIYgiYziKTuSE9oE2RnW8bhNw6WunA8MrVfrWaCDTYSx/UG8qzPpSF+BiZNiHUiALxCdA==, + } + dev: false + + /@next/eslint-plugin-next@13.4.18: + resolution: + { + integrity: sha512-GlOmUjZYYTjKl782mKk5a0bYEmKaouGaxPhi6t9yDILqrppU7JTIyONzLKQPszRXDCVZge0NFd4gwRs1ARZsMg==, + } + dependencies: + glob: 7.1.7 + dev: false + + /@next/swc-darwin-arm64@13.4.18: + resolution: + { + integrity: sha512-d/73jvZe7dNTjLugDsIIy2AdQrwE2dFC9/QRr7yHmFm8mS5EiIHeDKzaqIsv9+JXKD9ZB1i/c0x7+F0PlKo1vQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.4.18: + resolution: + { + integrity: sha512-PwfvxgxG5rvUJppF02IdVAVx4HTtbZrS/Nz9qHfYfeFOQ9a+PijL8Xr9BJ21jiIS+dPQjwzvpsOdsC+DOrlzhg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.4.18: + resolution: + { + integrity: sha512-Nayn6yFeox9wKaRTLaWRvO3DjB8xEM3BnXu7QnQeZb0AgD484XmdxK13TYZW4jdNy3VJ5OyYIpL4mhkgWEVq/A==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.4.18: + resolution: + { + integrity: sha512-sQzJ5DFPvGlKjI97R17v2RxKJYYzHw4lJZ4xhK6wvyYJYYcn9JfIMyKCvLtfLgpU1tOUcbkmx7i8XC28sB1BsQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.4.18: + resolution: + { + integrity: sha512-zqCLvGdz+T0V+set8zRHbkl3PQq0quUp5Dtuj1yGw0N9htp3beL1RVyhfSusbgxT82TRTXJe94IREgM8iYq6wg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.4.18: + resolution: + { + integrity: sha512-V/+dWy32eo3iiWkro+0M4/vNp1anGrVzNp90teVKG5tl5t5qNGc/qWOgmgTG8JhowdJAxj7+fp+WltrcezqsDA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.4.18: + resolution: + { + integrity: sha512-anytZjyD1tAgfA/crOrVcUlm0yrSNKYKpg53NQ+Y83nAungrghBthZZiA1/QvmIs1Igu0Rqw/O6hqCOH63o8pw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.4.18: + resolution: + { + integrity: sha512-lgsZDjbU0FQQH2pDSYeKIbVX9g8dqA7fUtgcAcwbj4eEuVW/K41rKFQceMM1kt0ktVUZ4uF2qOHsgebOWpDJIw==, + } + engines: { node: ">= 10" } + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.4.18: + resolution: + { + integrity: sha512-cS72bVNqICglP/uEzqNy26lfRH30zf4AbqnnhPhe+UxRg6d+OTtRQpFX7C4xtBP09FKA+MSSflNVkrn2ZfaWrA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + /@nodelib/fs.walk@1.2.8: + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.15.0 + + /@orama/orama@1.2.3: + resolution: + { + integrity: sha512-KJ4lzTDluQOJu6l2xsmDjKdhU6EvldmshvsQgAvDORn/Db+EXaWOKSK4XdvUNIcpUeSbFAdkRB26NLlfSpWRGg==, + } + engines: { node: ">= 16.0.0" } + dev: false + + /@radix-ui/primitive@1.0.0: + resolution: + { + integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==, + } + dependencies: + "@babel/runtime": 7.22.10 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: + { + integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==, + } + dependencies: + "@babel/runtime": 7.22.10 + dev: false + + /@radix-ui/react-avatar@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-9ToF7YNex3Ste45LrAeTlKtONI9yVRt/zOS158iilIkW5K/Apeyb/TUQlcEFTEFvWr8Kzdi2ZYrm1/suiXPajQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-context": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-use-callback-ref": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-use-layout-effect": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + react: 18.2.0 + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-dialog@1.0.0(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-compose-refs": 1.0.0(react@18.2.0) + "@radix-ui/react-context": 1.0.0(react@18.2.0) + "@radix-ui/react-dismissable-layer": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-focus-guards": 1.0.0(react@18.2.0) + "@radix-ui/react-focus-scope": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-id": 1.0.0(react@18.2.0) + "@radix-ui/react-portal": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-presence": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-primitive": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-slot": 1.0.0(react@18.2.0) + "@radix-ui/react-use-controllable-state": 1.0.0(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.20)(react@18.2.0) + transitivePeerDependencies: + - "@types/react" + dev: false + + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-context": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-dismissable-layer": 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-focus-guards": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-focus-scope": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-id": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-portal": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-presence": 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-slot": 1.0.2(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-use-controllable-state": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.20)(react@18.2.0) + dev: false + + /@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-compose-refs": 1.0.0(react@18.2.0) + "@radix-ui/react-primitive": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-use-callback-ref": 1.0.0(react@18.2.0) + "@radix-ui/react-use-escape-keydown": 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-use-callback-ref": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-use-escape-keydown": 1.0.3(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.0(react@18.2.0) + "@radix-ui/react-primitive": 1.0.0(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-use-callback-ref": 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@radix-ui/react-use-callback-ref": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-layout-effect": 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-layout-effect": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-primitive": 1.0.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-primitive": 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.0(react@18.2.0) + "@radix-ui/react-use-layout-effect": 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@radix-ui/react-use-layout-effect": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-slot": 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-slot": 1.0.2(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + "@types/react-dom": 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-compose-refs": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-callback-ref": 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-callback-ref": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-callback-ref": 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@radix-ui/react-use-callback-ref": 1.0.1(@types/react@18.2.20)(react@18.2.0) + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): + resolution: + { + integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==, + } + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + "@babel/runtime": 7.22.10 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@babel/runtime": 7.22.10 + "@types/react": 18.2.20 + react: 18.2.0 + dev: false + + /@reach/observe-rect@1.2.0: + resolution: + { + integrity: sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==, + } + dev: false + + /@rushstack/eslint-patch@1.3.3: + resolution: + { + integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==, + } + dev: false + + /@swc/helpers@0.5.1: + resolution: + { + integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==, + } + dependencies: + tslib: 2.6.2 + dev: false + + /@tanstack/react-table@8.9.3(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-Ng9rdm3JPoSCi6cVZvANsYnF+UoGVRxflMb270tVj0+LjeT/ZtZ9ckxF6oLPLcKesza6VKBqtdF9mQ+vaz24Aw==, + } + engines: { node: ">=12" } + peerDependencies: + react: ">=16" + react-dom: ">=16" + dependencies: + "@tanstack/table-core": 8.9.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@tanstack/react-virtual@3.0.0-alpha.0(react@18.2.0): + resolution: + { + integrity: sha512-WpHU/dt34NwZZ8qtiE05TF+nX/b1W6qrWZarO+s8jJFpPVicrTbJKp5Bjt4eSJuk7aYw272oEfsH3ABBRgj+3A==, + } + engines: { node: ">=12" } + peerDependencies: + react: ">=16" + dependencies: + "@babel/runtime": 7.22.10 + "@reach/observe-rect": 1.2.0 + react: 18.2.0 + dev: false + + /@tanstack/table-core@8.9.3: + resolution: + { + integrity: sha512-NpHZBoHTfqyJk0m/s/+CSuAiwtebhYK90mDuf5eylTvgViNOujiaOaxNDxJkQQAsVvHWZftUGAx1EfO1rkKtLg==, + } + engines: { node: ">=12" } + dev: false + + /@types/json5@0.0.29: + resolution: + { + integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, + } + dev: false + + /@types/node@20.5.1: + resolution: + { + integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==, + } + dev: false + + /@types/prop-types@15.7.5: + resolution: + { + integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==, + } + dev: false + + /@types/react-dom@18.2.7: + resolution: + { + integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==, + } + dependencies: + "@types/react": 18.2.20 + dev: false + + /@types/react@18.2.20: + resolution: + { + integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==, + } + dependencies: + "@types/prop-types": 15.7.5 + "@types/scheduler": 0.16.3 + csstype: 3.1.2 + dev: false + + /@types/scheduler@0.16.3: + resolution: + { + integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==, + } + dev: false + + /@typescript-eslint/parser@6.4.0(eslint@8.47.0)(typescript@5.1.6): + resolution: + { + integrity: sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==, + } + engines: { node: ^16.0.0 || >=18.0.0 } + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + dependencies: + "@typescript-eslint/scope-manager": 6.4.0 + "@typescript-eslint/types": 6.4.0 + "@typescript-eslint/typescript-estree": 6.4.0(typescript@5.1.6) + "@typescript-eslint/visitor-keys": 6.4.0 + debug: 4.3.4 + eslint: 8.47.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/scope-manager@6.4.0: + resolution: + { + integrity: sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==, + } + engines: { node: ^16.0.0 || >=18.0.0 } + dependencies: + "@typescript-eslint/types": 6.4.0 + "@typescript-eslint/visitor-keys": 6.4.0 + dev: false + + /@typescript-eslint/types@6.4.0: + resolution: + { + integrity: sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==, + } + engines: { node: ^16.0.0 || >=18.0.0 } + dev: false + + /@typescript-eslint/typescript-estree@6.4.0(typescript@5.1.6): + resolution: + { + integrity: sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==, + } + engines: { node: ^16.0.0 || >=18.0.0 } + peerDependencies: + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + dependencies: + "@typescript-eslint/types": 6.4.0 + "@typescript-eslint/visitor-keys": 6.4.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/visitor-keys@6.4.0: + resolution: + { + integrity: sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==, + } + engines: { node: ^16.0.0 || >=18.0.0 } + dependencies: + "@typescript-eslint/types": 6.4.0 + eslint-visitor-keys: 3.4.3 + dev: false + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + + /acorn@8.10.0: + resolution: + { + integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + /ajv@6.12.6: + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + + /ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + dependencies: + color-convert: 2.0.1 + + /any-promise@1.3.0: + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, + } + dev: false + + /anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: ">= 8" } + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@5.0.2: + resolution: + { + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, + } + dev: false + + /argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + /aria-hidden@1.2.3: + resolution: + { + integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==, + } + engines: { node: ">=10" } + dependencies: + tslib: 2.6.2 + dev: false + + /aria-query@5.3.0: + resolution: + { + integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, + } + dependencies: + dequal: 2.0.3 + dev: false + + /array-buffer-byte-length@1.0.0: + resolution: + { + integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, + } + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: false + + /array-includes@3.1.6: + resolution: + { + integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: false + + /array-union@2.1.0: + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, + } + engines: { node: ">=8" } + dev: false + + /array.prototype.findlastindex@1.2.2: + resolution: + { + integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false + + /array.prototype.flat@1.3.1: + resolution: + { + integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.flatmap@1.3.1: + resolution: + { + integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.tosorted@1.1.1: + resolution: + { + integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false + + /arraybuffer.prototype.slice@1.0.1: + resolution: + { + integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==, + } + engines: { node: ">= 0.4" } + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: false + + /ast-types-flow@0.0.7: + resolution: + { + integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==, + } + dev: false + + /asynciterator.prototype@1.0.0: + resolution: + { + integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==, + } + dependencies: + has-symbols: 1.0.3 + dev: false + + /autoprefixer@10.4.15(postcss@8.4.28): + resolution: + { + integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==, + } + engines: { node: ^10 || ^12 || >=14 } + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.10 + caniuse-lite: 1.0.30001521 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.28 + postcss-value-parser: 4.2.0 + dev: false + + /available-typed-arrays@1.0.5: + resolution: + { + integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, + } + engines: { node: ">= 0.4" } + dev: false + + /axe-core@4.7.2: + resolution: + { + integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==, + } + engines: { node: ">=4" } + dev: false + + /axobject-query@3.2.1: + resolution: + { + integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==, + } + dependencies: + dequal: 2.0.3 + dev: false + + /balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + /binary-extensions@2.2.0: + resolution: + { + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, + } + engines: { node: ">=8" } + dev: false + + /brace-expansion@1.1.11: + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, + } + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /braces@3.0.2: + resolution: + { + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, + } + engines: { node: ">=8" } + dependencies: + fill-range: 7.0.1 + dev: false + + /browserslist@4.21.10: + resolution: + { + integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + dependencies: + caniuse-lite: 1.0.30001521 + electron-to-chromium: 1.4.496 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: false + + /busboy@1.6.0: + resolution: + { + integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, + } + engines: { node: ">=10.16.0" } + dependencies: + streamsearch: 1.1.0 + dev: false + + /call-bind@1.0.2: + resolution: + { + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, + } + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: false + + /callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } + + /camelcase-css@2.0.1: + resolution: + { + integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, + } + engines: { node: ">= 6" } + dev: false + + /caniuse-lite@1.0.30001521: + resolution: + { + integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==, + } + dev: false + + /chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chokidar@3.5.3: + resolution: + { + integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, + } + engines: { node: ">= 8.10.0" } + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /class-variance-authority@0.7.0: + resolution: + { + integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==, + } + dependencies: + clsx: 2.0.0 + dev: false + + /client-only@0.0.1: + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } + dev: false + + /clsx@2.0.0: + resolution: + { + integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==, + } + engines: { node: ">=6" } + dev: false + + /cmdk@0.2.0(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw==, + } + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + "@radix-ui/react-dialog": 1.0.0(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + command-score: 0.1.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - "@types/react" + dev: false + + /color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + /command-score@0.1.2: + resolution: + { + integrity: sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w==, + } + dev: false + + /commander@4.1.1: + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, + } + engines: { node: ">= 6" } + dev: false + + /concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } + + /cross-spawn@7.0.3: + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, + } + engines: { node: ">= 8" } + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /cssesc@3.0.0: + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, + } + engines: { node: ">=4" } + hasBin: true + dev: false + + /csstype@3.1.2: + resolution: + { + integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, + } + dev: false + + /damerau-levenshtein@1.0.8: + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, + } + dev: false + + /debug@3.2.7: + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + + /debug@4.3.4: + resolution: + { + integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } + + /define-properties@1.2.0: + resolution: + { + integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, + } + engines: { node: ">= 0.4" } + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false + + /dequal@2.0.3: + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } + dev: false + + /detect-node-es@1.1.0: + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } + dev: false + + /didyoumean@1.2.2: + resolution: + { + integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, + } + dev: false + + /dir-glob@3.0.1: + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, + } + engines: { node: ">=8" } + dependencies: + path-type: 4.0.0 + dev: false + + /dlv@1.1.3: + resolution: + { + integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, + } + dev: false + + /doctrine@2.1.0: + resolution: + { + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, + } + engines: { node: ">=0.10.0" } + dependencies: + esutils: 2.0.3 + dev: false + + /doctrine@3.0.0: + resolution: + { + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, + } + engines: { node: ">=6.0.0" } + dependencies: + esutils: 2.0.3 + + /electron-to-chromium@1.4.496: + resolution: + { + integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==, + } + dev: false + + /emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + dev: false + + /enhanced-resolve@5.15.0: + resolution: + { + integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, + } + engines: { node: ">=10.13.0" } + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: false + + /es-abstract@1.22.1: + resolution: + { + integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==, + } + engines: { node: ">= 0.4" } + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: false + + /es-iterator-helpers@1.0.13: + resolution: + { + integrity: sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==, + } + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-set-tostringtag: 2.0.1 + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + iterator.prototype: 1.1.0 + safe-array-concat: 1.0.0 + dev: false + + /es-set-tostringtag@2.0.1: + resolution: + { + integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, + } + engines: { node: ">= 0.4" } + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: false + + /es-shim-unscopables@1.0.0: + resolution: + { + integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==, + } + dependencies: + has: 1.0.3 + dev: false + + /es-to-primitive@1.2.1: + resolution: + { + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, + } + engines: { node: ">= 0.4" } + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + + /escalade@3.1.1: + resolution: + { + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, + } + engines: { node: ">=6" } + dev: false + + /escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } + + /eslint-config-next@13.4.18(eslint@8.47.0)(typescript@5.1.6): + resolution: + { + integrity: sha512-G15CYbsIHwV6Fzoly5SXo/Mj3pNqNkOzbf+wQcPod3LgVNviWVYlb9czjdiREXHq2VF6oV79Kv0Wunguj6RMEw==, + } + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true + dependencies: + "@next/eslint-plugin-next": 13.4.18 + "@rushstack/eslint-patch": 1.3.3 + "@typescript-eslint/parser": 6.4.0(eslint@8.47.0)(typescript@5.1.6) + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.0)(eslint@8.47.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.47.0) + eslint-plugin-react: 7.33.2(eslint@8.47.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.47.0) + typescript: 5.1.6 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-config-prettier@9.0.0(eslint@8.47.0): + resolution: + { + integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==, + } + hasBin: true + peerDependencies: + eslint: ">=7.0.0" + dependencies: + eslint: 8.47.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: + { + integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, + } + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.0)(eslint@8.47.0): + resolution: + { + integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.47.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.0 + is-core-module: 2.13.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - "@typescript-eslint/parser" + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + resolution: + { + integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, + } + engines: { node: ">=4" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: "*" + eslint-import-resolver-node: "*" + eslint-import-resolver-typescript: "*" + eslint-import-resolver-webpack: "*" + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + "@typescript-eslint/parser": 6.4.0(eslint@8.47.0)(typescript@5.1.6) + debug: 3.2.7 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.0)(eslint@8.47.0) + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + resolution: + { + integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==, + } + engines: { node: ">=4" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + dependencies: + "@typescript-eslint/parser": 6.4.0(eslint@8.47.0)(typescript@5.1.6) + array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.2 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + has: 1.0.3 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.0 + object.values: 1.1.6 + resolve: 1.22.4 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.47.0): + resolution: + { + integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==, + } + engines: { node: ">=4.0" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + "@babel/runtime": 7.22.10 + aria-query: 5.3.0 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + ast-types-flow: 0.0.7 + axe-core: 4.7.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.47.0 + has: 1.0.3 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.1 + dev: false + + /eslint-plugin-react-hooks@4.6.0(eslint@8.47.0): + resolution: + { + integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, + } + engines: { node: ">=10" } + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.47.0 + dev: false + + /eslint-plugin-react@7.33.2(eslint@8.47.0): + resolution: + { + integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==, + } + engines: { node: ">=4" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.13 + eslint: 8.47.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.8 + dev: false + + /eslint-scope@7.2.2: + resolution: + { + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + /eslint@8.47.0: + resolution: + { + integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + hasBin: true + dependencies: + "@eslint-community/eslint-utils": 4.4.0(eslint@8.47.0) + "@eslint-community/regexpp": 4.6.2 + "@eslint/eslintrc": 2.1.2 + "@eslint/js": 8.47.0 + "@humanwhocodes/config-array": 0.11.10 + "@humanwhocodes/module-importer": 1.0.1 + "@nodelib/fs.walk": 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.21.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + + /esquery@1.5.0: + resolution: + { + integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, + } + engines: { node: ">=0.10" } + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } + dependencies: + estraverse: 5.3.0 + + /estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + + /esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + + /fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + /fast-glob@3.3.1: + resolution: + { + integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + } + engines: { node: ">=8.6.0" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + + /fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + /fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + + /fastq@1.15.0: + resolution: + { + integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, + } + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: + { + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, + } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flat-cache: 3.0.4 + + /fill-range@7.0.1: + resolution: + { + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, + } + engines: { node: ">=8" } + dependencies: + to-regex-range: 5.0.1 + dev: false + + /find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.0.4: + resolution: + { + integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, + } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + + /flatted@3.2.7: + resolution: + { + integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, + } + + /for-each@0.3.3: + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, + } + dependencies: + is-callable: 1.2.7 + dev: false + + /fraction.js@4.2.0: + resolution: + { + integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, + } + dev: false + + /fs.realpath@1.0.0: + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } + + /fsevents@2.3.2: + resolution: + { + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.1: + resolution: + { + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, + } + dev: false + + /function.prototype.name@1.1.5: + resolution: + { + integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + dev: false + + /get-intrinsic@1.2.1: + resolution: + { + integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, + } + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: false + + /get-nonce@1.0.1: + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: ">=6" } + dev: false + + /get-symbol-description@1.0.0: + resolution: + { + integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: false + + /get-tsconfig@4.7.0: + resolution: + { + integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==, + } + dependencies: + resolve-pkg-maps: 1.0.0 + dev: false + + /glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } + dependencies: + is-glob: 4.0.3 + + /glob-to-regexp@0.4.1: + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, + } + dev: false + + /glob@7.1.6: + resolution: + { + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==, + } + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.1.7: + resolution: + { + integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==, + } + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.2.3: + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals@13.21.0: + resolution: + { + integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==, + } + engines: { node: ">=8" } + dependencies: + type-fest: 0.20.2 + + /globalthis@1.0.3: + resolution: + { + integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, + } + engines: { node: ">= 0.4" } + dependencies: + define-properties: 1.2.0 + dev: false + + /globby@11.1.0: + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, + } + engines: { node: ">=10" } + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + + /gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } + dependencies: + get-intrinsic: 1.2.1 + dev: false + + /graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + dev: false + + /graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } + + /has-bigints@1.0.2: + resolution: + { + integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, + } + dev: false + + /has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } + + /has-property-descriptors@1.0.0: + resolution: + { + integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, + } + dependencies: + get-intrinsic: 1.2.1 + dev: false + + /has-proto@1.0.1: + resolution: + { + integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, + } + engines: { node: ">= 0.4" } + dev: false + + /has-symbols@1.0.3: + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, + } + engines: { node: ">= 0.4" } + dev: false + + /has-tostringtag@1.0.0: + resolution: + { + integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, + } + engines: { node: ">= 0.4" } + dependencies: + has-symbols: 1.0.3 + dev: false + + /has@1.0.3: + resolution: + { + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, + } + engines: { node: ">= 0.4.0" } + dependencies: + function-bind: 1.1.1 + dev: false + + /ignore@5.2.4: + resolution: + { + integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, + } + engines: { node: ">= 4" } + + /import-fresh@3.3.0: + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, + } + engines: { node: ">=6" } + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } + + /inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + + /internal-slot@1.0.5: + resolution: + { + integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, + } + engines: { node: ">= 0.4" } + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: false + + /invariant@2.2.4: + resolution: + { + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, + } + dependencies: + loose-envify: 1.4.0 + dev: false + + /is-array-buffer@3.0.2: + resolution: + { + integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + + /is-async-function@2.0.0: + resolution: + { + integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-bigint@1.0.4: + resolution: + { + integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, + } + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path@2.1.0: + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, + } + engines: { node: ">=8" } + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: + { + integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + dev: false + + /is-core-module@2.13.0: + resolution: + { + integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, + } + dependencies: + has: 1.0.3 + dev: false + + /is-date-object@1.0.5: + resolution: + { + integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + /is-finalizationregistry@1.0.2: + resolution: + { + integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==, + } + dependencies: + call-bind: 1.0.2 + dev: false + + /is-generator-function@1.0.10: + resolution: + { + integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + dependencies: + is-extglob: 2.1.1 + + /is-map@2.0.2: + resolution: + { + integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, + } + dev: false + + /is-negative-zero@2.0.2: + resolution: + { + integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, + } + engines: { node: ">= 0.4" } + dev: false + + /is-number-object@1.0.7: + resolution: + { + integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + dev: false + + /is-path-inside@3.0.3: + resolution: + { + integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, + } + engines: { node: ">=8" } + + /is-regex@1.1.4: + resolution: + { + integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-set@2.0.2: + resolution: + { + integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, + } + dev: false + + /is-shared-array-buffer@1.0.2: + resolution: + { + integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, + } + dependencies: + call-bind: 1.0.2 + dev: false + + /is-string@1.0.7: + resolution: + { + integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol@1.0.4: + resolution: + { + integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, + } + engines: { node: ">= 0.4" } + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array@1.1.12: + resolution: + { + integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, + } + engines: { node: ">= 0.4" } + dependencies: + which-typed-array: 1.1.11 + dev: false + + /is-weakmap@2.0.1: + resolution: + { + integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==, + } + dev: false + + /is-weakref@1.0.2: + resolution: + { + integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, + } + dependencies: + call-bind: 1.0.2 + dev: false + + /is-weakset@2.0.2: + resolution: + { + integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: false + + /isarray@2.0.5: + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } + dev: false + + /isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + /iterator.prototype@1.1.0: + resolution: + { + integrity: sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==, + } + dependencies: + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + has-tostringtag: 1.0.0 + reflect.getprototypeof: 1.0.3 + dev: false + + /jiti@1.19.3: + resolution: + { + integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==, + } + hasBin: true + dev: false + + /js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + dev: false + + /js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + /json5@1.0.2: + resolution: + { + integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, + } + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /jsx-ast-utils@3.3.5: + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, + } + engines: { node: ">=4.0" } + dependencies: + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + object.assign: 4.1.4 + object.values: 1.1.6 + dev: false + + /language-subtag-registry@0.3.22: + resolution: + { + integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==, + } + dev: false + + /language-tags@1.0.5: + resolution: + { + integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==, + } + dependencies: + language-subtag-registry: 0.3.22 + dev: false + + /levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /lilconfig@2.1.0: + resolution: + { + integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, + } + engines: { node: ">=10" } + dev: false + + /lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + dev: false + + /locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } + dependencies: + p-locate: 5.0.0 + + /lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + /loose-envify@1.4.0: + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lru-cache@6.0.0: + resolution: + { + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, + } + engines: { node: ">=10" } + dependencies: + yallist: 4.0.0 + dev: false + + /lucide-react@0.269.0(react@18.2.0): + resolution: + { + integrity: sha512-+ViEb/2eJJt43/CtxpTfvqu/8gzK49cSUdeuqRuFYiZmX9AvwfumtETM4plhXHymfHb6/mVbHg9uIlc13y+uew==, + } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } + dev: false + + /micromatch@4.0.5: + resolution: + { + integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, + } + engines: { node: ">=8.6" } + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + + /minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + dependencies: + brace-expansion: 1.1.11 + + /minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } + dev: false + + /ms@2.1.2: + resolution: + { + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, + } + + /ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + dev: false + + /mz@2.7.0: + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, + } + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nanoid@3.3.6: + resolution: + { + integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + dev: false + + /natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } + + /next@13.4.18(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-V/IIFA/znYYnOFlZQegrlhlWRpyIuCLXLGuH6pzCjwyxThNBZl4ItqoE3ffUyYY9f0X6XIQ2dX6UUBpNVSKZ8A==, + } + engines: { node: ">=16.8.0" } + hasBin: true + peerDependencies: + "@opentelemetry/api": ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + sass: + optional: true + dependencies: + "@next/env": 13.4.18 + "@swc/helpers": 0.5.1 + busboy: 1.6.0 + caniuse-lite: 1.0.30001521 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + zod: 3.21.4 + optionalDependencies: + "@next/swc-darwin-arm64": 13.4.18 + "@next/swc-darwin-x64": 13.4.18 + "@next/swc-linux-arm64-gnu": 13.4.18 + "@next/swc-linux-arm64-musl": 13.4.18 + "@next/swc-linux-x64-gnu": 13.4.18 + "@next/swc-linux-x64-musl": 13.4.18 + "@next/swc-win32-arm64-msvc": 13.4.18 + "@next/swc-win32-ia32-msvc": 13.4.18 + "@next/swc-win32-x64-msvc": 13.4.18 + transitivePeerDependencies: + - "@babel/core" + - babel-plugin-macros + dev: false + + /node-releases@2.0.13: + resolution: + { + integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, + } + dev: false + + /normalize-path@3.0.0: + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: ">=0.10.0" } + dev: false + + /normalize-range@0.1.2: + resolution: + { + integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, + } + engines: { node: ">=0.10.0" } + dev: false + + /object-assign@4.1.1: + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: ">=0.10.0" } + dev: false + + /object-hash@3.0.0: + resolution: + { + integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, + } + engines: { node: ">= 6" } + dev: false + + /object-inspect@1.12.3: + resolution: + { + integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, + } + dev: false + + /object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + dev: false + + /object.assign@4.1.4: + resolution: + { + integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.entries@1.1.6: + resolution: + { + integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /object.fromentries@2.0.6: + resolution: + { + integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /object.groupby@1.0.0: + resolution: + { + integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + dev: false + + /object.hasown@1.1.2: + resolution: + { + integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==, + } + dependencies: + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /object.values@1.1.6: + resolution: + { + integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + dependencies: + wrappy: 1.0.2 + + /optionator@0.9.3: + resolution: + { + integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, + } + engines: { node: ">= 0.8.0" } + dependencies: + "@aashutoshrathi/word-wrap": 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } + dependencies: + yocto-queue: 0.1.0 + + /p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } + dependencies: + p-limit: 3.1.0 + + /parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } + dependencies: + callsites: 3.1.0 + + /path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } + + /path-is-absolute@1.0.1: + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: ">=0.10.0" } + + /path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + /path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + dev: false + + /path-type@4.0.0: + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: ">=8" } + dev: false + + /picocolors@1.0.0: + resolution: + { + integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, + } + dev: false + + /picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + dev: false + + /pify@2.3.0: + resolution: + { + integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, + } + engines: { node: ">=0.10.0" } + dev: false + + /pirates@4.0.6: + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, + } + engines: { node: ">= 6" } + dev: false + + /postcss-import@15.1.0(postcss@8.4.28): + resolution: + { + integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.28 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.4 + dev: false + + /postcss-js@4.0.1(postcss@8.4.28): + resolution: + { + integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, + } + engines: { node: ^12 || ^14 || >= 16 } + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.28 + dev: false + + /postcss-load-config@4.0.1(postcss@8.4.28): + resolution: + { + integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, + } + engines: { node: ">= 14" } + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.28 + yaml: 2.3.1 + dev: false + + /postcss-nested@6.0.1(postcss@8.4.28): + resolution: + { + integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==, + } + engines: { node: ">=12.0" } + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.28 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-selector-parser@6.0.13: + resolution: + { + integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, + } + engines: { node: ">=4" } + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-value-parser@4.2.0: + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, + } + dev: false + + /postcss@8.4.14: + resolution: + { + integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==, + } + engines: { node: ^10 || ^12 || >=14 } + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /postcss@8.4.28: + resolution: + { + integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==, + } + engines: { node: ^10 || ^12 || >=14 } + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } + + /prettier@3.0.3: + resolution: + { + integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, + } + engines: { node: ">=14" } + hasBin: true + dev: true + + /prop-types@15.8.1: + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, + } + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /punycode@2.3.0: + resolution: + { + integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, + } + engines: { node: ">=6" } + + /queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + /react-dom@18.2.0(react@18.2.0): + resolution: + { + integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, + } + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-hook-form@7.46.1(react@18.2.0): + resolution: + { + integrity: sha512-0GfI31LRTBd5tqbXMGXT1Rdsv3rnvy0FjEk8Gn9/4tp6+s77T7DPZuGEpBRXOauL+NhyGT5iaXzdIM2R6F/E+w==, + } + engines: { node: ">=12.22.0" } + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + + /react-is@16.13.1: + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, + } + dev: false + + /react-remove-scroll-bar@2.3.4(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.4(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.20)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.20)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.20)(react@18.2.0) + dev: false + + /react-remove-scroll@2.5.5(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.20)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.20)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.20)(react@18.2.0) + dev: false + + /react-style-singleton@2.2.1(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /react@18.2.0: + resolution: + { + integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, + } + engines: { node: ">=0.10.0" } + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: + { + integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, + } + dependencies: + pify: 2.3.0 + dev: false + + /readdirp@3.6.0: + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, + } + engines: { node: ">=8.10.0" } + dependencies: + picomatch: 2.3.1 + dev: false + + /reflect.getprototypeof@1.0.3: + resolution: + { + integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: false + + /regenerator-runtime@0.14.0: + resolution: + { + integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, + } + dev: false + + /regexp.prototype.flags@1.5.0: + resolution: + { + integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: false + + /resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } + + /resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } + dev: false + + /resolve@1.22.4: + resolution: + { + integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, + } + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /resolve@2.0.0-next.4: + resolution: + { + integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, + } + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /reusify@1.0.4: + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + + /rimraf@3.0.2: + resolution: + { + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, + } + hasBin: true + dependencies: + glob: 7.2.3 + + /run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.0.0: + resolution: + { + integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==, + } + engines: { node: ">=0.4" } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: false + + /safe-regex-test@1.0.0: + resolution: + { + integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: false + + /scheduler@0.23.0: + resolution: + { + integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, + } + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + dev: false + + /semver@7.5.4: + resolution: + { + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, + } + engines: { node: ">=10" } + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + /side-channel@1.0.4: + resolution: + { + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: false + + /slash@3.0.0: + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: ">=8" } + dev: false + + /source-map-js@1.0.2: + resolution: + { + integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, + } + engines: { node: ">=0.10.0" } + dev: false + + /streamsearch@1.1.0: + resolution: + { + integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, + } + engines: { node: ">=10.0.0" } + dev: false + + /string.prototype.matchall@4.0.8: + resolution: + { + integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 + dev: false + + /string.prototype.trim@1.2.7: + resolution: + { + integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /string.prototype.trimend@1.0.6: + resolution: + { + integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /string.prototype.trimstart@1.0.6: + resolution: + { + integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: false + + /strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: ">=4" } + dev: false + + /strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } + + /styled-jsx@5.1.1(react@18.2.0): + resolution: + { + integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==, + } + engines: { node: ">= 12.0.0" } + peerDependencies: + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /sucrase@3.34.0: + resolution: + { + integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==, + } + engines: { node: ">=8" } + hasBin: true + dependencies: + "@jridgewell/gen-mapping": 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: false + + /supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + dev: false + + /tailwind-merge@1.14.0: + resolution: + { + integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==, + } + dev: false + + /tailwindcss-animate@1.0.6(tailwindcss@3.3.3): + resolution: + { + integrity: sha512-4WigSGMvbl3gCCact62ZvOngA+PRqhAn7si3TQ3/ZuPuQZcIEtVap+ENSXbzWhpojKB8CpvnIsrwBu8/RnHtuw==, + } + peerDependencies: + tailwindcss: ">=3.0.0 || insiders" + dependencies: + tailwindcss: 3.3.3 + dev: false + + /tailwindcss@3.3.3: + resolution: + { + integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==, + } + engines: { node: ">=14.0.0" } + hasBin: true + dependencies: + "@alloc/quick-lru": 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.19.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.28 + postcss-import: 15.1.0(postcss@8.4.28) + postcss-js: 4.0.1(postcss@8.4.28) + postcss-load-config: 4.0.1(postcss@8.4.28) + postcss-nested: 6.0.1(postcss@8.4.28) + postcss-selector-parser: 6.0.13 + resolve: 1.22.4 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable@2.2.1: + resolution: + { + integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, + } + engines: { node: ">=6" } + dev: false + + /text-table@0.2.0: + resolution: + { + integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, + } + + /thenify-all@1.6.0: + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, + } + engines: { node: ">=0.8" } + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, + } + dependencies: + any-promise: 1.3.0 + dev: false + + /to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + dependencies: + is-number: 7.0.0 + dev: false + + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: + { + integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==, + } + engines: { node: ">=16.13.0" } + peerDependencies: + typescript: ">=4.2.0" + dependencies: + typescript: 5.1.6 + dev: false + + /ts-interface-checker@0.1.13: + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } + dev: false + + /tsconfig-paths@3.14.2: + resolution: + { + integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==, + } + dependencies: + "@types/json5": 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + + /tslib@2.6.2: + resolution: + { + integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, + } + dev: false + + /type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } + dependencies: + prelude-ls: 1.2.1 + + /type-fest@0.20.2: + resolution: + { + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, + } + engines: { node: ">=10" } + + /typed-array-buffer@1.0.0: + resolution: + { + integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-length@1.0.0: + resolution: + { + integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-offset@1.0.0: + resolution: + { + integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, + } + engines: { node: ">= 0.4" } + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-length@1.0.4: + resolution: + { + integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, + } + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: false + + /typescript@5.1.6: + resolution: + { + integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==, + } + engines: { node: ">=14.17" } + hasBin: true + dev: false + + /unbox-primitive@1.0.2: + resolution: + { + integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, + } + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + + /update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: + { + integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, + } + hasBin: true + peerDependencies: + browserslist: ">= 4.21.0" + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + + /uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + dependencies: + punycode: 2.3.0 + + /use-callback-ref@1.3.0(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sidecar@1.1.2(@types/react@18.2.20)(react@18.2.0): + resolution: + { + integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + dependencies: + "@types/react": 18.2.20 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /util-deprecate@1.0.2: + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } + dev: false + + /watchpack@2.4.0: + resolution: + { + integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, + } + engines: { node: ">=10.13.0" } + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: + { + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, + } + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-builtin-type@1.1.3: + resolution: + { + integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==, + } + engines: { node: ">= 0.4" } + dependencies: + function.prototype.name: 1.1.5 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + dev: false + + /which-collection@1.0.1: + resolution: + { + integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, + } + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: false + + /which-typed-array@1.1.11: + resolution: + { + integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==, + } + engines: { node: ">= 0.4" } + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: false + + /which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } + hasBin: true + dependencies: + isexe: 2.0.0 + + /wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } + + /yallist@4.0.0: + resolution: + { + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, + } + dev: false + + /yaml@2.3.1: + resolution: + { + integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==, + } + engines: { node: ">= 14" } + dev: false + + /yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } + + /zod@3.21.4: + resolution: + { + integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==, + } + dev: false diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..12a703d --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/frontend/public/next.svg b/frontend/public/next.svg new file mode 100644 index 0000000..5bb00d4 --- /dev/null +++ b/frontend/public/next.svg @@ -0,0 +1 @@ + diff --git a/frontend/public/vercel.svg b/frontend/public/vercel.svg new file mode 100644 index 0000000..1aeda7d --- /dev/null +++ b/frontend/public/vercel.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/app/columns.tsx b/frontend/src/app/columns.tsx new file mode 100644 index 0000000..ba06803 --- /dev/null +++ b/frontend/src/app/columns.tsx @@ -0,0 +1,94 @@ +"use client"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Repo } from "@/lib/schemas"; +import { ColumnDef } from "@tanstack/react-table"; +import { ArrowUpDown, MoreHorizontal } from "lucide-react"; + +export const columns: ColumnDef[] = [ + { + accessorKey: "url", + header: function () { + return ( +
+ Project + + 🚀 + +
+ ); + }, + cell: function ({ row }) { + return ( + + ); + }, + }, + { + accessorKey: "description", + header: function () { + return ( +
+ Description + + ✍️ + +
+ ); + }, + cell: function ({ row }) { + return ( +

+ {row.getValue("description") || "No description"} +

+ ); + }, + }, + { + accessorKey: "stars", + header: function ({ column }) { + return ( + + ); + }, + cell: function ({ row }) { + return ( + + {row.getValue("stars").toLocaleString("en-US")} + + ); + }, + }, +]; diff --git a/frontend/src/app/data-table.tsx b/frontend/src/app/data-table.tsx new file mode 100644 index 0000000..60af73a --- /dev/null +++ b/frontend/src/app/data-table.tsx @@ -0,0 +1,118 @@ +"use client"; + +import { + ColumnDef, + SortingState, + flexRender, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Button } from "@/components/ui/button"; +import { useState } from "react"; + +interface DataTableProps { + columns: ColumnDef[]; + data: TData[]; +} + +export function DataTable({ + columns, + data, +}: DataTableProps) { + const [sorting, setSorting] = useState([]); + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting, + }, + }); + + return ( +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ + +
+
+ ); +} diff --git a/frontend/src/app/dependencies-search-provider.tsx b/frontend/src/app/dependencies-search-provider.tsx new file mode 100644 index 0000000..8a32e5d --- /dev/null +++ b/frontend/src/app/dependencies-search-provider.tsx @@ -0,0 +1,31 @@ +"use client"; +import { + createDependenciesOrama, + prepareDependenciesOramaIndex, + DependenciesOramaContext, +} from "@/lib/search"; +import { PropsWithChildren } from "react"; +import { SearchProvider } from "./search-provider"; +import { DependenciesIndex } from "@/lib/schemas"; + +export function DependenciesSearchProvider({ + children, + dependencies, +}: PropsWithChildren<{ + dependencies: DependenciesIndex["dependencies"]; +}>) { + const prepareOramaIndex = async () => { + const orama = await createDependenciesOrama(); + await prepareDependenciesOramaIndex(orama, dependencies); + return orama; + }; + + return ( + + {children} + + ); +} diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico new file mode 100644 index 0000000..718d6fe Binary files /dev/null and b/frontend/src/app/favicon.ico differ diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css new file mode 100644 index 0000000..f647461 --- /dev/null +++ b/frontend/src/app/globals.css @@ -0,0 +1,59 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 142.1 76.2% 36.3%; + --primary-foreground: 355.7 100% 97.3%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 142.1 76.2% 36.3%; + --radius: 0.5rem; + } + + .dark { + --background: 20 14.3% 4.1%; + --foreground: 0 0% 95%; + --card: 24 9.8% 10%; + --card-foreground: 0 0% 95%; + --popover: 0 0% 9%; + --popover-foreground: 0 0% 95%; + --primary: 142.1 70.6% 45.3%; + --primary-foreground: 144.9 80.4% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 15%; + --muted-foreground: 240 5% 64.9%; + --accent: 12 6.5% 15.1%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 142.4 71.8% 29.2%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx new file mode 100644 index 0000000..ebcf30b --- /dev/null +++ b/frontend/src/app/layout.tsx @@ -0,0 +1,147 @@ +import { cn } from "@/lib/utils"; +import "./globals.css"; +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import { buttonVariants } from "@/components/ui/button"; +import { Icons } from "@/components/ui/icons"; +import Link from "next/link"; +import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; +import { FolderGit, Rocket } from "lucide-react"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata: Metadata = { + title: "Awesome FastAPI projects", + description: "An automatically generated list of awesome FastAPI projects", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + +
+
+
+ +
+
+
+
+

+ Awesome FastAPI projects{" "} + + 🎉 + +

+ {children} +
+
+ +
+ + + ); +} +// TODO: improve pagination - sync with the URL, add a "go to page" input +// TODO: refactor the layout and the components diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 0000000..c27b37c --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,22 @@ +import { + loadDependenciesIndexServerOnly, + loadReposIndexServerOnly, +} from "@/lib/indexes"; +import { ReposTable } from "./repos-table"; +import { ReposSearchProvider } from "./repos-search-provider"; +import { DependenciesSearchProvider } from "./dependencies-search-provider"; + +export default async function Home() { + const { repos } = await loadReposIndexServerOnly(); + const { dependencies } = await loadDependenciesIndexServerOnly(); + // refactor repos and dependencies to be loaded from the context + return ( +
+ + + + + +
+ ); +} diff --git a/frontend/src/app/repos-search-provider.tsx b/frontend/src/app/repos-search-provider.tsx new file mode 100644 index 0000000..465b7a9 --- /dev/null +++ b/frontend/src/app/repos-search-provider.tsx @@ -0,0 +1,31 @@ +"use client"; +import { + createReposOrama, + prepareReposOramaIndex, + ReposOramaContext, +} from "@/lib/search"; +import { PropsWithChildren } from "react"; +import { SearchProvider } from "./search-provider"; +import { RepoIndex } from "@/lib/schemas"; + +export function ReposSearchProvider({ + children, + repos, +}: PropsWithChildren<{ + repos: RepoIndex["repos"]; +}>) { + const prepareOramaIndex = async () => { + const orama = await createReposOrama(); + await prepareReposOramaIndex(orama, repos); + return orama; + }; + + return ( + + {children} + + ); +} diff --git a/frontend/src/app/repos-table.tsx b/frontend/src/app/repos-table.tsx new file mode 100644 index 0000000..482552c --- /dev/null +++ b/frontend/src/app/repos-table.tsx @@ -0,0 +1,82 @@ +"use client"; +import { Repo, Dependency } from "@/lib/schemas"; +import { search } from "@orama/orama"; +import { SearchForm } from "./search-form"; +import { columns } from "./columns"; +import { DataTable } from "./data-table"; +import { useReposOrama } from "@/lib/search"; +import { useState } from "react"; +import { useQuerySearchFormData } from "@/lib/hooks"; +import React from "react"; + +export function ReposTable({ + repos, + dependencies, +}: { + repos: Repo[]; + dependencies: Dependency[]; +}) { + const reposOrama = useReposOrama(); + const [searchedRepos, setSearchedRepos] = useState(repos); + const { searchQueryFromQueryParam, dependenciesQueryFromQueryParam } = + useQuerySearchFormData(dependencies); + + const onSearchSubmit = React.useCallback( + async ({ + search: description, + dependencies, + }: { + search: string; + dependencies: Dependency[]; + }) => { + if (!reposOrama.isIndexed || !reposOrama.orama) { + throw new Error("Repos Orama is not initialized"); + } + const results = await search(reposOrama.orama, { + term: description, + properties: ["description"], + limit: repos.length, + }); + const searchedRepos = results.hits.map((hit) => hit.document as Repo); + // Workaround because Orama doesn't support filtering by properties of objects in arrays + const filteredRepos = searchedRepos.filter((repo) => { + return dependencies.every((dependency) => { + return repo.dependencies.some( + (repoDependency) => repoDependency.id === dependency.id, + ); + }); + }); + setSearchedRepos(filteredRepos); + }, + [repos, reposOrama.isIndexed, reposOrama.orama], + ); + + const _ref = React.useCallback( + (node: HTMLDivElement | null) => { + if (node !== null) { + if (reposOrama.isIndexed && reposOrama.orama) { + onSearchSubmit({ + search: searchQueryFromQueryParam(), + dependencies: dependenciesQueryFromQueryParam(), + }); + } + } + }, + [ + dependenciesQueryFromQueryParam, + onSearchSubmit, + reposOrama.isIndexed, + reposOrama.orama, + searchQueryFromQueryParam, + ], + ); + + return ( + <> +
+ +
+ + + ); +} diff --git a/frontend/src/app/search-form.tsx b/frontend/src/app/search-form.tsx new file mode 100644 index 0000000..19849e5 --- /dev/null +++ b/frontend/src/app/search-form.tsx @@ -0,0 +1,125 @@ +"use client"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; +import * as z from "zod"; + +import { Button } from "@/components/ui/button"; +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { MultiSelect } from "@/components/ui/multiselect"; +import { Dependency, dependencySchema } from "@/lib/schemas"; +import { useSearchParams, useRouter, usePathname } from "next/navigation"; +import React from "react"; +import { useQuerySearchFormData } from "@/lib/hooks"; + +const FormSchema = z.object({ + search: z + .string() + .min(0) + .max(256, { message: "Search must be less than 256 characters" }) + .default(""), + dependencies: z.array(dependencySchema).default(() => []), +}); + +export interface SearchFormProps { + onSubmit: (data: z.infer) => void; + dependencies: Dependency[]; +} + +export function SearchForm({ onSubmit, dependencies }: SearchFormProps) { + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + + const { + searchQueryFromQueryParam, + searchQueryToQueryParam, + dependenciesQueryFromQueryParam, + dependenciesQueryToQueryParam, + } = useQuerySearchFormData(dependencies); + + const form = useForm>({ + resolver: zodResolver(FormSchema), + defaultValues: { + search: searchQueryFromQueryParam(), + dependencies: dependenciesQueryFromQueryParam(), + }, + }); + + const createQueryString = React.useCallback( + ({ + searchQueryValue, + dependenciesQueryValue, + }: { + searchQueryValue: string; + dependenciesQueryValue: Dependency[]; + }) => { + const params = new URLSearchParams(searchParams); + params.set("search", searchQueryToQueryParam(searchQueryValue)); + params.set( + "dependencies", + dependenciesQueryToQueryParam(dependenciesQueryValue), + ); + + return params.toString(); + }, + [dependenciesQueryToQueryParam, searchParams, searchQueryToQueryParam], + ); + + const onSubmitWrapper = (data: z.infer) => { + onSubmit(data); + // update URL search params + const queryString = createQueryString({ + searchQueryValue: data.search, + dependenciesQueryValue: data.dependencies, + }); + router.replace(`${pathname}?${queryString}`); + }; + return ( +
+ + ( + + Search for a repository + + + + + The search is performed on the repository description. + + + + )} + /> + ( + + Dependencies + + + + + Filter by dependencies used in the repository. + + + + )} + /> + + + + ); +} diff --git a/frontend/src/app/search-provider.tsx b/frontend/src/app/search-provider.tsx new file mode 100644 index 0000000..e89a68d --- /dev/null +++ b/frontend/src/app/search-provider.tsx @@ -0,0 +1,38 @@ +"use client"; +import { IOramaContext } from "@/lib/search"; +import { Context, PropsWithChildren, useEffect, useState } from "react"; + +import { Orama, ProvidedTypes as OramaProvidedTypes } from "@orama/orama"; + +export type SearchProviderProps< + OramaParameters extends Partial = any, +> = PropsWithChildren<{ + OramaContext: Context>; + createIndex: () => Promise>; +}>; + +export function SearchProvider< + OramaParameters extends Partial, +>({ + children, + OramaContext, + createIndex, +}: SearchProviderProps) { + const [orama, setOrama] = useState | null>(null); + const [isIndexed, setIsIndexed] = useState(false); + + useEffect(() => { + async function initializeOrama() { + setIsIndexed(false); + await createIndex().then(setOrama); + setIsIndexed(true); + } + initializeOrama(); + }, [createIndex]); + + return ( + + {children} + + ); +} diff --git a/frontend/src/components/ui/badge.tsx b/frontend/src/components/ui/badge.tsx new file mode 100644 index 0000000..d3d5d60 --- /dev/null +++ b/frontend/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 0000000..29123a7 --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + }, +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx new file mode 100644 index 0000000..dc3b01d --- /dev/null +++ b/frontend/src/components/ui/card.tsx @@ -0,0 +1,86 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent, +}; diff --git a/frontend/src/components/ui/command.tsx b/frontend/src/components/ui/command.tsx new file mode 100644 index 0000000..ee27a1a --- /dev/null +++ b/frontend/src/components/ui/command.tsx @@ -0,0 +1,155 @@ +"use client"; + +import * as React from "react"; +import { DialogProps } from "@radix-ui/react-dialog"; +import { Command as CommandPrimitive } from "cmdk"; +import { Search } from "lucide-react"; + +import { cn } from "@/lib/utils"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Command.displayName = CommandPrimitive.displayName; + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ); +}; + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)); + +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)); + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ); +}; +CommandShortcut.displayName = "CommandShortcut"; + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +}; diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx new file mode 100644 index 0000000..aca1068 --- /dev/null +++ b/frontend/src/components/ui/dialog.tsx @@ -0,0 +1,123 @@ +"use client"; + +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = ({ + className, + ...props +}: DialogPrimitive.DialogPortalProps) => ( + +); +DialogPortal.displayName = DialogPrimitive.Portal.displayName; + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DialogHeader.displayName = "DialogHeader"; + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DialogFooter.displayName = "DialogFooter"; + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; diff --git a/frontend/src/components/ui/form.tsx b/frontend/src/components/ui/form.tsx new file mode 100644 index 0000000..497718a --- /dev/null +++ b/frontend/src/components/ui/form.tsx @@ -0,0 +1,177 @@ +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; +import { Slot } from "@radix-ui/react-slot"; +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from "react-hook-form"; + +import { cn } from "@/lib/utils"; +import { Label } from "@/components/ui/label"; + +const Form = FormProvider; + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath, +> = { + name: TName; +}; + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue, +); + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath, +>({ + ...props +}: ControllerProps) => { + return ( + + + + ); +}; + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext); + const itemContext = React.useContext(FormItemContext); + const { getFieldState, formState } = useFormContext(); + + const fieldState = getFieldState(fieldContext.name, formState); + + if (!fieldContext) { + throw new Error("useFormField should be used within "); + } + + const { id } = itemContext; + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + }; +}; + +type FormItemContextValue = { + id: string; +}; + +const FormItemContext = React.createContext( + {} as FormItemContextValue, +); + +const FormItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const id = React.useId(); + + return ( + +
+ + ); +}); +FormItem.displayName = "FormItem"; + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField(); + + return ( +