feat: indie status page MVP -- FastAPI + SQLite
- 8 DB models (services, incidents, monitors, subscribers, etc.) - Full CRUD API for services, incidents, monitors - Public status page with live data - Incident detail page with timeline - API key authentication - Uptime monitoring scheduler - 13 tests passing - TECHNICAL_DESIGN.md with full spec
This commit is contained in:
commit
902133edd3
4655 changed files with 1342691 additions and 0 deletions
328
venv/lib/python3.11/site-packages/mypy/stubinfo.py
Normal file
328
venv/lib/python3.11/site-packages/mypy/stubinfo.py
Normal file
|
|
@ -0,0 +1,328 @@
|
|||
from __future__ import annotations
|
||||
|
||||
|
||||
def is_module_from_legacy_bundled_package(module: str) -> bool:
|
||||
top_level = module.split(".", 1)[0]
|
||||
return top_level in legacy_bundled_packages
|
||||
|
||||
|
||||
def stub_distribution_name(module: str) -> str | None:
|
||||
top_level = module.split(".", 1)[0]
|
||||
|
||||
dist = legacy_bundled_packages.get(top_level)
|
||||
if dist:
|
||||
return dist
|
||||
dist = non_bundled_packages_flat.get(top_level)
|
||||
if dist:
|
||||
return dist
|
||||
|
||||
if top_level in non_bundled_packages_namespace:
|
||||
namespace = non_bundled_packages_namespace[top_level]
|
||||
components = module.split(".")
|
||||
for i in range(len(components), 0, -1):
|
||||
module = ".".join(components[:i])
|
||||
dist = namespace.get(module)
|
||||
if dist:
|
||||
return dist
|
||||
|
||||
return None
|
||||
|
||||
|
||||
# Stubs for these third-party packages used to be shipped with mypy.
|
||||
#
|
||||
# Map package name to PyPI stub distribution name.
|
||||
legacy_bundled_packages: dict[str, str] = {
|
||||
"aiofiles": "types-aiofiles",
|
||||
"bleach": "types-bleach",
|
||||
"cachetools": "types-cachetools",
|
||||
"click_spinner": "types-click-spinner",
|
||||
"croniter": "types-croniter",
|
||||
"dateparser": "types-dateparser",
|
||||
"dateutil": "types-python-dateutil",
|
||||
"decorator": "types-decorator",
|
||||
"deprecated": "types-Deprecated",
|
||||
"docutils": "types-docutils",
|
||||
"first": "types-first",
|
||||
"markdown": "types-Markdown",
|
||||
"mock": "types-mock",
|
||||
"paramiko": "types-paramiko",
|
||||
"polib": "types-polib",
|
||||
"pycurl": "types-pycurl",
|
||||
"pymysql": "types-PyMySQL",
|
||||
"pyrfc3339": "types-pyRFC3339",
|
||||
"pytz": "types-pytz",
|
||||
"requests": "types-requests",
|
||||
"retry": "types-retry",
|
||||
"simplejson": "types-simplejson",
|
||||
"singledispatch": "types-singledispatch",
|
||||
"six": "types-six",
|
||||
"tabulate": "types-tabulate",
|
||||
"toml": "types-toml",
|
||||
"ujson": "types-ujson",
|
||||
"waitress": "types-waitress",
|
||||
"yaml": "types-PyYAML",
|
||||
}
|
||||
|
||||
# Map package name to PyPI stub distribution name from typeshed.
|
||||
# Stubs for these packages were never bundled with mypy. Don't
|
||||
# include packages that have a release that includes PEP 561 type
|
||||
# information.
|
||||
#
|
||||
# Note that these packages are omitted for now:
|
||||
# pika: typeshed's stubs are on PyPI as types-pika-ts.
|
||||
# types-pika already exists on PyPI, and is more complete in many ways,
|
||||
# but is a non-typeshed stubs package.
|
||||
non_bundled_packages_flat: dict[str, str] = {
|
||||
"_cffi_backend": "types-cffi",
|
||||
"_jsonnet": "types-jsonnet",
|
||||
"_win32typing": "types-pywin32",
|
||||
"antlr4": "types-antlr4-python3-runtime",
|
||||
"assertpy": "types-assertpy",
|
||||
"atheris": "types-atheris",
|
||||
"auth0": "types-auth0-python",
|
||||
"authlib": "types-Authlib",
|
||||
"aws_xray_sdk": "types-aws-xray-sdk",
|
||||
"binaryornot": "types-binaryornot",
|
||||
"boltons": "types-boltons",
|
||||
"braintree": "types-braintree",
|
||||
"bugbear": "types-flake8-bugbear",
|
||||
"capturer": "types-capturer",
|
||||
"cffi": "types-cffi",
|
||||
"channels": "types-channels",
|
||||
"chevron": "types-chevron",
|
||||
"click_default_group": "types-click-default-group",
|
||||
"click_log": "types-click-log",
|
||||
"click_shell": "types-click-shell",
|
||||
"click_web": "types-click-web",
|
||||
"colorama": "types-colorama",
|
||||
"colorful": "types-colorful",
|
||||
"commctrl": "types-pywin32",
|
||||
"consolemenu": "types-console-menu",
|
||||
"convertdate": "types-convertdate",
|
||||
"cronlog": "types-python-crontab",
|
||||
"crontab": "types-python-crontab",
|
||||
"crontabs": "types-python-crontab",
|
||||
"dateparser_data": "types-dateparser",
|
||||
"dde": "types-pywin32",
|
||||
"defusedxml": "types-defusedxml",
|
||||
"dirhash": "types-dirhash",
|
||||
"django_filters": "types-django-filter",
|
||||
"docker": "types-docker",
|
||||
"dockerfile_parse": "types-dockerfile-parse",
|
||||
"editdistance": "types-editdistance",
|
||||
"entrypoints": "types-entrypoints",
|
||||
"ephem": "types-ephem",
|
||||
"et_xmlfile": "types-et_xmlfile",
|
||||
"fanstatic": "types-fanstatic",
|
||||
"farmhash": "types-pyfarmhash",
|
||||
"flake8_builtins": "types-flake8-builtins",
|
||||
"flake8_docstrings": "types-flake8-docstrings",
|
||||
"flake8_rst_docstrings": "types-flake8-rst-docstrings",
|
||||
"flake8_simplify": "types-flake8-simplify",
|
||||
"flake8_typing_imports": "types-flake8-typing-imports",
|
||||
"flake8": "types-flake8",
|
||||
"flask_cors": "types-Flask-Cors",
|
||||
"flask_migrate": "types-Flask-Migrate",
|
||||
"flask_socketio": "types-Flask-SocketIO",
|
||||
"fpdf": "types-fpdf2",
|
||||
"gdb": "types-gdb",
|
||||
"geopandas": "types-geopandas",
|
||||
"gevent": "types-gevent",
|
||||
"greenlet": "types-greenlet",
|
||||
"grpc_channelz": "types-grpcio-channelz",
|
||||
"grpc_health": "types-grpcio-health-checking",
|
||||
"grpc_reflection": "types-grpcio-reflection",
|
||||
"grpc_status": "types-grpcio-status",
|
||||
"grpc": "types-grpcio",
|
||||
"gunicorn": "types-gunicorn",
|
||||
"hdbcli": "types-hdbcli",
|
||||
"hnswlib": "types-hnswlib",
|
||||
"html5lib": "types-html5lib",
|
||||
"httplib2": "types-httplib2",
|
||||
"hvac": "types-hvac",
|
||||
"ibm_db": "types-ibm-db",
|
||||
"icalendar": "types-icalendar",
|
||||
"import_export": "types-django-import-export",
|
||||
"inifile": "types-inifile",
|
||||
"isapi": "types-pywin32",
|
||||
"jack": "types-JACK-Client",
|
||||
"jenkins": "types-python-jenkins",
|
||||
"Jetson": "types-Jetson.GPIO",
|
||||
"jks": "types-pyjks",
|
||||
"jmespath": "types-jmespath",
|
||||
"jose": "types-python-jose",
|
||||
"jsonschema": "types-jsonschema",
|
||||
"jwcrypto": "types-jwcrypto",
|
||||
"keyboard": "types-keyboard",
|
||||
"ldap3": "types-ldap3",
|
||||
"lunardate": "types-lunardate",
|
||||
"lupa": "types-lupa",
|
||||
"lzstring": "types-lzstring",
|
||||
"m3u8": "types-m3u8",
|
||||
"management": "types-django-import-export",
|
||||
"mmapfile": "types-pywin32",
|
||||
"mmsystem": "types-pywin32",
|
||||
"mypy_extensions": "types-mypy-extensions",
|
||||
"MySQLdb": "types-mysqlclient",
|
||||
"nanoid": "types-nanoid",
|
||||
"nanoleafapi": "types-nanoleafapi",
|
||||
"netaddr": "types-netaddr",
|
||||
"netifaces": "types-netifaces",
|
||||
"networkx": "types-networkx",
|
||||
"nmap": "types-python-nmap",
|
||||
"ntsecuritycon": "types-pywin32",
|
||||
"oauthlib": "types-oauthlib",
|
||||
"objgraph": "types-objgraph",
|
||||
"odbc": "types-pywin32",
|
||||
"olefile": "types-olefile",
|
||||
"openpyxl": "types-openpyxl",
|
||||
"opentracing": "types-opentracing",
|
||||
"parsimonious": "types-parsimonious",
|
||||
"passlib": "types-passlib",
|
||||
"passpy": "types-passpy",
|
||||
"peewee": "types-peewee",
|
||||
"pep8ext_naming": "types-pep8-naming",
|
||||
"perfmon": "types-pywin32",
|
||||
"pexpect": "types-pexpect",
|
||||
"playhouse": "types-peewee",
|
||||
"pony": "types-pony",
|
||||
"portpicker": "types-portpicker",
|
||||
"psutil": "types-psutil",
|
||||
"psycopg2": "types-psycopg2",
|
||||
"punq": "types-punq",
|
||||
"pyasn1": "types-pyasn1",
|
||||
"pyaudio": "types-pyaudio",
|
||||
"pyautogui": "types-PyAutoGUI",
|
||||
"pycocotools": "types-pycocotools",
|
||||
"pyflakes": "types-pyflakes",
|
||||
"pygments": "types-Pygments",
|
||||
"pyi_splash": "types-pyinstaller",
|
||||
"PyInstaller": "types-pyinstaller",
|
||||
"pyluach": "types-pyluach",
|
||||
"pymeeus": "types-PyMeeus",
|
||||
"pynput": "types-pynput",
|
||||
"pyperclip": "types-pyperclip",
|
||||
"pyscreeze": "types-PyScreeze",
|
||||
"pysftp": "types-pysftp",
|
||||
"pytest_lazyfixture": "types-pytest-lazy-fixture",
|
||||
"python_http_client": "types-python-http-client",
|
||||
"pythoncom": "types-pywin32",
|
||||
"pythonwin": "types-pywin32",
|
||||
"pywintypes": "types-pywin32",
|
||||
"qrbill": "types-qrbill",
|
||||
"qrcode": "types-qrcode",
|
||||
"ratelimit": "types-ratelimit",
|
||||
"regex": "types-regex",
|
||||
"regutil": "types-pywin32",
|
||||
"reportlab": "types-reportlab",
|
||||
"requests_oauthlib": "types-requests-oauthlib",
|
||||
"rfc3339_validator": "types-rfc3339-validator",
|
||||
"RPi": "types-RPi.GPIO",
|
||||
"s2clientprotocol": "types-s2clientprotocol",
|
||||
"sass": "types-libsass",
|
||||
"sassutils": "types-libsass",
|
||||
"seaborn": "types-seaborn",
|
||||
"send2trash": "types-Send2Trash",
|
||||
"serial": "types-pyserial",
|
||||
"servicemanager": "types-pywin32",
|
||||
"setuptools": "types-setuptools",
|
||||
"shapely": "types-shapely",
|
||||
"simple_websocket": "types-simple-websocket",
|
||||
"slumber": "types-slumber",
|
||||
"socks": "types-PySocks",
|
||||
"sockshandler": "types-PySocks",
|
||||
"sspicon": "types-pywin32",
|
||||
"str2bool": "types-str2bool",
|
||||
"tensorflow": "types-tensorflow",
|
||||
"tgcrypto": "types-TgCrypto",
|
||||
"timer": "types-pywin32",
|
||||
"toposort": "types-toposort",
|
||||
"tqdm": "types-tqdm",
|
||||
"translationstring": "types-translationstring",
|
||||
"ttkthemes": "types-ttkthemes",
|
||||
"tzdata": "types-tzdata",
|
||||
"unidiff": "types-unidiff",
|
||||
"untangle": "types-untangle",
|
||||
"usersettings": "types-usersettings",
|
||||
"uwsgi": "types-uWSGI",
|
||||
"uwsgidecorators": "types-uWSGI",
|
||||
"vobject": "types-vobject",
|
||||
"watchpoints": "types-watchpoints",
|
||||
"webencodings": "types-webencodings",
|
||||
"webob": "types-WebOb",
|
||||
"whatthepatch": "types-whatthepatch",
|
||||
"win2kras": "types-pywin32",
|
||||
"win32": "types-pywin32",
|
||||
"win32api": "types-pywin32",
|
||||
"win32clipboard": "types-pywin32",
|
||||
"win32com": "types-pywin32",
|
||||
"win32comext": "types-pywin32",
|
||||
"win32con": "types-pywin32",
|
||||
"win32console": "types-pywin32",
|
||||
"win32cred": "types-pywin32",
|
||||
"win32crypt": "types-pywin32",
|
||||
"win32cryptcon": "types-pywin32",
|
||||
"win32event": "types-pywin32",
|
||||
"win32evtlog": "types-pywin32",
|
||||
"win32evtlogutil": "types-pywin32",
|
||||
"win32file": "types-pywin32",
|
||||
"win32gui_struct": "types-pywin32",
|
||||
"win32gui": "types-pywin32",
|
||||
"win32help": "types-pywin32",
|
||||
"win32inet": "types-pywin32",
|
||||
"win32inetcon": "types-pywin32",
|
||||
"win32job": "types-pywin32",
|
||||
"win32lz": "types-pywin32",
|
||||
"win32net": "types-pywin32",
|
||||
"win32netcon": "types-pywin32",
|
||||
"win32pdh": "types-pywin32",
|
||||
"win32pdhquery": "types-pywin32",
|
||||
"win32pipe": "types-pywin32",
|
||||
"win32print": "types-pywin32",
|
||||
"win32process": "types-pywin32",
|
||||
"win32profile": "types-pywin32",
|
||||
"win32ras": "types-pywin32",
|
||||
"win32security": "types-pywin32",
|
||||
"win32service": "types-pywin32",
|
||||
"win32serviceutil": "types-pywin32",
|
||||
"win32timezone": "types-pywin32",
|
||||
"win32trace": "types-pywin32",
|
||||
"win32transaction": "types-pywin32",
|
||||
"win32ts": "types-pywin32",
|
||||
"win32ui": "types-pywin32",
|
||||
"win32uiole": "types-pywin32",
|
||||
"win32verstamp": "types-pywin32",
|
||||
"win32wnet": "types-pywin32",
|
||||
"winerror": "types-pywin32",
|
||||
"winioctlcon": "types-pywin32",
|
||||
"winnt": "types-pywin32",
|
||||
"winperf": "types-pywin32",
|
||||
"winxpgui": "types-pywin32",
|
||||
"winxptheme": "types-pywin32",
|
||||
"workalendar": "types-workalendar",
|
||||
"wtforms": "types-WTForms",
|
||||
"wurlitzer": "types-wurlitzer",
|
||||
"www_authenticate": "types-www-authenticate",
|
||||
"xdg": "types-pyxdg",
|
||||
"xdgenvpy": "types-xdgenvpy",
|
||||
"Xlib": "types-python-xlib",
|
||||
"xlrd": "types-xlrd",
|
||||
"xmldiff": "types-xmldiff",
|
||||
"xmltodict": "types-xmltodict",
|
||||
"yt_dlp": "types-yt-dlp",
|
||||
"zstd": "types-zstd",
|
||||
"zxcvbn": "types-zxcvbn",
|
||||
# Stub packages that are not from typeshed
|
||||
# Since these can be installed automatically via --install-types, we have a high trust bar
|
||||
# for additions here
|
||||
"pandas": "pandas-stubs", # https://github.com/pandas-dev/pandas-stubs
|
||||
"lxml": "lxml-stubs", # https://github.com/lxml/lxml-stubs
|
||||
"scipy": "scipy-stubs", # https://github.com/scipy/scipy-stubs
|
||||
}
|
||||
|
||||
|
||||
non_bundled_packages_namespace: dict[str, dict[str, str]] = {
|
||||
"backports": {"backports.ssl_match_hostname": "types-backports.ssl_match_hostname"},
|
||||
"google": {"google.cloud.ndb": "types-google-cloud-ndb", "google.protobuf": "types-protobuf"},
|
||||
"paho": {"paho.mqtt": "types-paho-mqtt"},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue