Metadata-Version: 2.4
Name: cybersecure-easy
Version: 0.2.0
Summary: Optional Python package adapters, sandboxed iframe HTML, and security helpers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Provides-Extra: network
Requires-Dist: scapy; extra == "network"
Requires-Dist: python-nmap; extra == "network"
Provides-Extra: web
Requires-Dist: requests; extra == "web"
Requires-Dist: beautifulsoup4; extra == "web"
Provides-Extra: crypto
Requires-Dist: pycryptodome>=3.19; extra == "crypto"
Provides-Extra: yara
Requires-Dist: yara-python; extra == "yara"
Provides-Extra: pkg-httpx
Requires-Dist: httpx; extra == "pkg-httpx"
Provides-Extra: pkg-aiohttp
Requires-Dist: aiohttp; extra == "pkg-aiohttp"
Provides-Extra: pkg-urllib3
Requires-Dist: urllib3; extra == "pkg-urllib3"
Provides-Extra: pkg-h11
Requires-Dist: h11; extra == "pkg-h11"
Provides-Extra: pkg-h2
Requires-Dist: h2; extra == "pkg-h2"
Provides-Extra: pkg-httptools
Requires-Dist: httptools; extra == "pkg-httptools"
Provides-Extra: pkg-requests-cache
Requires-Dist: requests-cache; extra == "pkg-requests-cache"
Provides-Extra: pkg-requests-toolbelt
Requires-Dist: requests-toolbelt; extra == "pkg-requests-toolbelt"
Provides-Extra: pkg-tenacity
Requires-Dist: tenacity; extra == "pkg-tenacity"
Provides-Extra: pkg-backoff
Requires-Dist: backoff; extra == "pkg-backoff"
Provides-Extra: pkg-lxml
Requires-Dist: lxml; extra == "pkg-lxml"
Provides-Extra: pkg-html5lib
Requires-Dist: html5lib; extra == "pkg-html5lib"
Provides-Extra: pkg-cssselect
Requires-Dist: cssselect; extra == "pkg-cssselect"
Provides-Extra: pkg-soupsieve
Requires-Dist: soupsieve; extra == "pkg-soupsieve"
Provides-Extra: pkg-selectolax
Requires-Dist: selectolax; extra == "pkg-selectolax"
Provides-Extra: pkg-bleach
Requires-Dist: bleach; extra == "pkg-bleach"
Provides-Extra: pkg-nh3
Requires-Dist: nh3; extra == "pkg-nh3"
Provides-Extra: pkg-markdown-it-py
Requires-Dist: markdown-it-py; extra == "pkg-markdown-it-py"
Provides-Extra: pkg-mistune
Requires-Dist: mistune; extra == "pkg-mistune"
Provides-Extra: pkg-jinja2
Requires-Dist: Jinja2; extra == "pkg-jinja2"
Provides-Extra: pkg-pydantic
Requires-Dist: pydantic; extra == "pkg-pydantic"
Provides-Extra: pkg-jsonschema
Requires-Dist: jsonschema; extra == "pkg-jsonschema"
Provides-Extra: pkg-marshmallow
Requires-Dist: marshmallow; extra == "pkg-marshmallow"
Provides-Extra: pkg-attrs
Requires-Dist: attrs; extra == "pkg-attrs"
Provides-Extra: pkg-cattrs
Requires-Dist: cattrs; extra == "pkg-cattrs"
Provides-Extra: pkg-cerberus
Requires-Dist: cerberus; extra == "pkg-cerberus"
Provides-Extra: pkg-voluptuous
Requires-Dist: voluptuous; extra == "pkg-voluptuous"
Provides-Extra: pkg-email-validator
Requires-Dist: email-validator; extra == "pkg-email-validator"
Provides-Extra: pkg-validators
Requires-Dist: validators; extra == "pkg-validators"
Provides-Extra: pkg-referencing
Requires-Dist: referencing; extra == "pkg-referencing"
Provides-Extra: pkg-cryptography
Requires-Dist: cryptography; extra == "pkg-cryptography"
Provides-Extra: pkg-bcrypt
Requires-Dist: bcrypt; extra == "pkg-bcrypt"
Provides-Extra: pkg-argon2-cffi
Requires-Dist: argon2-cffi; extra == "pkg-argon2-cffi"
Provides-Extra: pkg-pynacl
Requires-Dist: PyNaCl; extra == "pkg-pynacl"
Provides-Extra: pkg-pyjwt
Requires-Dist: PyJWT; extra == "pkg-pyjwt"
Provides-Extra: pkg-itsdangerous
Requires-Dist: itsdangerous; extra == "pkg-itsdangerous"
Provides-Extra: pkg-pyopenssl
Requires-Dist: pyOpenSSL; extra == "pkg-pyopenssl"
Provides-Extra: pkg-pyotp
Requires-Dist: pyotp; extra == "pkg-pyotp"
Provides-Extra: pkg-keyring
Requires-Dist: keyring; extra == "pkg-keyring"
Provides-Extra: pkg-zxcvbn
Requires-Dist: zxcvbn; extra == "pkg-zxcvbn"
Provides-Extra: pkg-dnspython
Requires-Dist: dnspython; extra == "pkg-dnspython"
Provides-Extra: pkg-netaddr
Requires-Dist: netaddr; extra == "pkg-netaddr"
Provides-Extra: pkg-psutil
Requires-Dist: psutil; extra == "pkg-psutil"
Provides-Extra: pkg-ifaddr
Requires-Dist: ifaddr; extra == "pkg-ifaddr"
Provides-Extra: pkg-paramiko
Requires-Dist: paramiko; extra == "pkg-paramiko"
Provides-Extra: pkg-asyncssh
Requires-Dist: asyncssh; extra == "pkg-asyncssh"
Provides-Extra: pkg-fabric
Requires-Dist: fabric; extra == "pkg-fabric"
Provides-Extra: pkg-invoke
Requires-Dist: invoke; extra == "pkg-invoke"
Provides-Extra: pkg-websocket-client
Requires-Dist: websocket-client; extra == "pkg-websocket-client"
Provides-Extra: pkg-websockets
Requires-Dist: websockets; extra == "pkg-websockets"
Provides-Extra: pkg-numpy
Requires-Dist: numpy; extra == "pkg-numpy"
Provides-Extra: pkg-pandas
Requires-Dist: pandas; extra == "pkg-pandas"
Provides-Extra: pkg-polars
Requires-Dist: polars; extra == "pkg-polars"
Provides-Extra: pkg-pyarrow
Requires-Dist: pyarrow; extra == "pkg-pyarrow"
Provides-Extra: pkg-orjson
Requires-Dist: orjson; extra == "pkg-orjson"
Provides-Extra: pkg-ujson
Requires-Dist: ujson; extra == "pkg-ujson"
Provides-Extra: pkg-simplejson
Requires-Dist: simplejson; extra == "pkg-simplejson"
Provides-Extra: pkg-msgpack
Requires-Dist: msgpack; extra == "pkg-msgpack"
Provides-Extra: pkg-pyyaml
Requires-Dist: PyYAML; extra == "pkg-pyyaml"
Provides-Extra: pkg-tomlkit
Requires-Dist: tomlkit; extra == "pkg-tomlkit"
Provides-Extra: pkg-sqlalchemy
Requires-Dist: SQLAlchemy; extra == "pkg-sqlalchemy"
Provides-Extra: pkg-aiosqlite
Requires-Dist: aiosqlite; extra == "pkg-aiosqlite"
Provides-Extra: pkg-asyncpg
Requires-Dist: asyncpg; extra == "pkg-asyncpg"
Provides-Extra: pkg-psycopg
Requires-Dist: psycopg; extra == "pkg-psycopg"
Provides-Extra: pkg-pymysql
Requires-Dist: PyMySQL; extra == "pkg-pymysql"
Provides-Extra: pkg-redis
Requires-Dist: redis; extra == "pkg-redis"
Provides-Extra: pkg-pymongo
Requires-Dist: pymongo; extra == "pkg-pymongo"
Provides-Extra: pkg-peewee
Requires-Dist: peewee; extra == "pkg-peewee"
Provides-Extra: pkg-sqlparse
Requires-Dist: sqlparse; extra == "pkg-sqlparse"
Provides-Extra: pkg-duckdb
Requires-Dist: duckdb; extra == "pkg-duckdb"
Provides-Extra: pkg-click
Requires-Dist: click; extra == "pkg-click"
Provides-Extra: pkg-typer
Requires-Dist: typer; extra == "pkg-typer"
Provides-Extra: pkg-rich
Requires-Dist: rich; extra == "pkg-rich"
Provides-Extra: pkg-colorama
Requires-Dist: colorama; extra == "pkg-colorama"
Provides-Extra: pkg-tqdm
Requires-Dist: tqdm; extra == "pkg-tqdm"
Provides-Extra: pkg-loguru
Requires-Dist: loguru; extra == "pkg-loguru"
Provides-Extra: pkg-structlog
Requires-Dist: structlog; extra == "pkg-structlog"
Provides-Extra: pkg-python-dotenv
Requires-Dist: python-dotenv; extra == "pkg-python-dotenv"
Provides-Extra: pkg-platformdirs
Requires-Dist: platformdirs; extra == "pkg-platformdirs"
Provides-Extra: pkg-tabulate
Requires-Dist: tabulate; extra == "pkg-tabulate"
Provides-Extra: pkg-pillow
Requires-Dist: Pillow; extra == "pkg-pillow"
Provides-Extra: pkg-pypdf
Requires-Dist: pypdf; extra == "pkg-pypdf"
Provides-Extra: pkg-openpyxl
Requires-Dist: openpyxl; extra == "pkg-openpyxl"
Provides-Extra: pkg-xlsxwriter
Requires-Dist: XlsxWriter; extra == "pkg-xlsxwriter"
Provides-Extra: pkg-python-docx
Requires-Dist: python-docx; extra == "pkg-python-docx"
Provides-Extra: pkg-python-pptx
Requires-Dist: python-pptx; extra == "pkg-python-pptx"
Provides-Extra: pkg-defusedxml
Requires-Dist: defusedxml; extra == "pkg-defusedxml"
Provides-Extra: pkg-filelock
Requires-Dist: filelock; extra == "pkg-filelock"
Provides-Extra: pkg-watchdog
Requires-Dist: watchdog; extra == "pkg-watchdog"
Provides-Extra: pkg-pathspec
Requires-Dist: pathspec; extra == "pkg-pathspec"
Provides-Extra: pkg-pytest
Requires-Dist: pytest; extra == "pkg-pytest"
Provides-Extra: pkg-hypothesis
Requires-Dist: hypothesis; extra == "pkg-hypothesis"
Provides-Extra: pkg-coverage
Requires-Dist: coverage; extra == "pkg-coverage"
Provides-Extra: pkg-mypy
Requires-Dist: mypy; extra == "pkg-mypy"
Provides-Extra: pkg-pylint
Requires-Dist: pylint; extra == "pkg-pylint"
Provides-Extra: pkg-flake8
Requires-Dist: flake8; extra == "pkg-flake8"
Provides-Extra: pkg-black
Requires-Dist: black; extra == "pkg-black"
Provides-Extra: pkg-isort
Requires-Dist: isort; extra == "pkg-isort"
Provides-Extra: pkg-autopep8
Requires-Dist: autopep8; extra == "pkg-autopep8"
Provides-Extra: pkg-radon
Requires-Dist: radon; extra == "pkg-radon"
Provides-Extra: pkg-fastapi
Requires-Dist: fastapi; extra == "pkg-fastapi"
Provides-Extra: pkg-starlette
Requires-Dist: starlette; extra == "pkg-starlette"
Provides-Extra: pkg-flask
Requires-Dist: Flask; extra == "pkg-flask"
Provides-Extra: pkg-werkzeug
Requires-Dist: Werkzeug; extra == "pkg-werkzeug"
Provides-Extra: pkg-django
Requires-Dist: Django; extra == "pkg-django"
Provides-Extra: pkg-uvicorn
Requires-Dist: uvicorn; extra == "pkg-uvicorn"
Provides-Extra: pkg-hypercorn
Requires-Dist: hypercorn; extra == "pkg-hypercorn"
Provides-Extra: pkg-tornado
Requires-Dist: tornado; extra == "pkg-tornado"
Provides-Extra: pkg-sanic
Requires-Dist: sanic; extra == "pkg-sanic"
Provides-Extra: pkg-falcon
Requires-Dist: falcon; extra == "pkg-falcon"
Provides-Extra: pkg-packaging
Requires-Dist: packaging; extra == "pkg-packaging"
Provides-Extra: pkg-python-dateutil
Requires-Dist: python-dateutil; extra == "pkg-python-dateutil"
Provides-Extra: pkg-pendulum
Requires-Dist: pendulum; extra == "pkg-pendulum"
Provides-Extra: pkg-arrow
Requires-Dist: arrow; extra == "pkg-arrow"
Provides-Extra: pkg-humanize
Requires-Dist: humanize; extra == "pkg-humanize"
Provides-Extra: pkg-cachetools
Requires-Dist: cachetools; extra == "pkg-cachetools"
Provides-Extra: pkg-diskcache
Requires-Dist: diskcache; extra == "pkg-diskcache"
Provides-Extra: pkg-more-itertools
Requires-Dist: more-itertools; extra == "pkg-more-itertools"
Provides-Extra: pkg-sortedcontainers
Requires-Dist: sortedcontainers; extra == "pkg-sortedcontainers"
Provides-Extra: pkg-boltons
Requires-Dist: boltons; extra == "pkg-boltons"
Provides-Extra: integrations-cli
Requires-Dist: click; extra == "integrations-cli"
Requires-Dist: typer; extra == "integrations-cli"
Requires-Dist: rich; extra == "integrations-cli"
Requires-Dist: colorama; extra == "integrations-cli"
Requires-Dist: tqdm; extra == "integrations-cli"
Requires-Dist: loguru; extra == "integrations-cli"
Requires-Dist: structlog; extra == "integrations-cli"
Requires-Dist: python-dotenv; extra == "integrations-cli"
Requires-Dist: platformdirs; extra == "integrations-cli"
Requires-Dist: tabulate; extra == "integrations-cli"
Provides-Extra: integrations-crypto
Requires-Dist: cryptography; extra == "integrations-crypto"
Requires-Dist: bcrypt; extra == "integrations-crypto"
Requires-Dist: argon2-cffi; extra == "integrations-crypto"
Requires-Dist: PyNaCl; extra == "integrations-crypto"
Requires-Dist: PyJWT; extra == "integrations-crypto"
Requires-Dist: itsdangerous; extra == "integrations-crypto"
Requires-Dist: pyOpenSSL; extra == "integrations-crypto"
Requires-Dist: pyotp; extra == "integrations-crypto"
Requires-Dist: keyring; extra == "integrations-crypto"
Requires-Dist: zxcvbn; extra == "integrations-crypto"
Provides-Extra: integrations-data
Requires-Dist: numpy; extra == "integrations-data"
Requires-Dist: pandas; extra == "integrations-data"
Requires-Dist: polars; extra == "integrations-data"
Requires-Dist: pyarrow; extra == "integrations-data"
Requires-Dist: orjson; extra == "integrations-data"
Requires-Dist: ujson; extra == "integrations-data"
Requires-Dist: simplejson; extra == "integrations-data"
Requires-Dist: msgpack; extra == "integrations-data"
Requires-Dist: PyYAML; extra == "integrations-data"
Requires-Dist: tomlkit; extra == "integrations-data"
Provides-Extra: integrations-database
Requires-Dist: SQLAlchemy; extra == "integrations-database"
Requires-Dist: aiosqlite; extra == "integrations-database"
Requires-Dist: asyncpg; extra == "integrations-database"
Requires-Dist: psycopg; extra == "integrations-database"
Requires-Dist: PyMySQL; extra == "integrations-database"
Requires-Dist: redis; extra == "integrations-database"
Requires-Dist: pymongo; extra == "integrations-database"
Requires-Dist: peewee; extra == "integrations-database"
Requires-Dist: sqlparse; extra == "integrations-database"
Requires-Dist: duckdb; extra == "integrations-database"
Provides-Extra: integrations-files
Requires-Dist: Pillow; extra == "integrations-files"
Requires-Dist: pypdf; extra == "integrations-files"
Requires-Dist: openpyxl; extra == "integrations-files"
Requires-Dist: XlsxWriter; extra == "integrations-files"
Requires-Dist: python-docx; extra == "integrations-files"
Requires-Dist: python-pptx; extra == "integrations-files"
Requires-Dist: defusedxml; extra == "integrations-files"
Requires-Dist: filelock; extra == "integrations-files"
Requires-Dist: watchdog; extra == "integrations-files"
Requires-Dist: pathspec; extra == "integrations-files"
Provides-Extra: integrations-http
Requires-Dist: httpx; extra == "integrations-http"
Requires-Dist: aiohttp; extra == "integrations-http"
Requires-Dist: urllib3; extra == "integrations-http"
Requires-Dist: h11; extra == "integrations-http"
Requires-Dist: h2; extra == "integrations-http"
Requires-Dist: httptools; extra == "integrations-http"
Requires-Dist: requests-cache; extra == "integrations-http"
Requires-Dist: requests-toolbelt; extra == "integrations-http"
Requires-Dist: tenacity; extra == "integrations-http"
Requires-Dist: backoff; extra == "integrations-http"
Provides-Extra: integrations-network
Requires-Dist: dnspython; extra == "integrations-network"
Requires-Dist: netaddr; extra == "integrations-network"
Requires-Dist: psutil; extra == "integrations-network"
Requires-Dist: ifaddr; extra == "integrations-network"
Requires-Dist: paramiko; extra == "integrations-network"
Requires-Dist: asyncssh; extra == "integrations-network"
Requires-Dist: fabric; extra == "integrations-network"
Requires-Dist: invoke; extra == "integrations-network"
Requires-Dist: websocket-client; extra == "integrations-network"
Requires-Dist: websockets; extra == "integrations-network"
Provides-Extra: integrations-quality
Requires-Dist: pytest; extra == "integrations-quality"
Requires-Dist: hypothesis; extra == "integrations-quality"
Requires-Dist: coverage; extra == "integrations-quality"
Requires-Dist: mypy; extra == "integrations-quality"
Requires-Dist: pylint; extra == "integrations-quality"
Requires-Dist: flake8; extra == "integrations-quality"
Requires-Dist: black; extra == "integrations-quality"
Requires-Dist: isort; extra == "integrations-quality"
Requires-Dist: autopep8; extra == "integrations-quality"
Requires-Dist: radon; extra == "integrations-quality"
Provides-Extra: integrations-services
Requires-Dist: fastapi; extra == "integrations-services"
Requires-Dist: starlette; extra == "integrations-services"
Requires-Dist: Flask; extra == "integrations-services"
Requires-Dist: Werkzeug; extra == "integrations-services"
Requires-Dist: Django; extra == "integrations-services"
Requires-Dist: uvicorn; extra == "integrations-services"
Requires-Dist: hypercorn; extra == "integrations-services"
Requires-Dist: tornado; extra == "integrations-services"
Requires-Dist: sanic; extra == "integrations-services"
Requires-Dist: falcon; extra == "integrations-services"
Provides-Extra: integrations-utilities
Requires-Dist: packaging; extra == "integrations-utilities"
Requires-Dist: python-dateutil; extra == "integrations-utilities"
Requires-Dist: pendulum; extra == "integrations-utilities"
Requires-Dist: arrow; extra == "integrations-utilities"
Requires-Dist: humanize; extra == "integrations-utilities"
Requires-Dist: cachetools; extra == "integrations-utilities"
Requires-Dist: diskcache; extra == "integrations-utilities"
Requires-Dist: more-itertools; extra == "integrations-utilities"
Requires-Dist: sortedcontainers; extra == "integrations-utilities"
Requires-Dist: boltons; extra == "integrations-utilities"
Provides-Extra: integrations-validation
Requires-Dist: pydantic; extra == "integrations-validation"
Requires-Dist: jsonschema; extra == "integrations-validation"
Requires-Dist: marshmallow; extra == "integrations-validation"
Requires-Dist: attrs; extra == "integrations-validation"
Requires-Dist: cattrs; extra == "integrations-validation"
Requires-Dist: cerberus; extra == "integrations-validation"
Requires-Dist: voluptuous; extra == "integrations-validation"
Requires-Dist: email-validator; extra == "integrations-validation"
Requires-Dist: validators; extra == "integrations-validation"
Requires-Dist: referencing; extra == "integrations-validation"
Provides-Extra: integrations-web
Requires-Dist: lxml; extra == "integrations-web"
Requires-Dist: html5lib; extra == "integrations-web"
Requires-Dist: cssselect; extra == "integrations-web"
Requires-Dist: soupsieve; extra == "integrations-web"
Requires-Dist: selectolax; extra == "integrations-web"
Requires-Dist: bleach; extra == "integrations-web"
Requires-Dist: nh3; extra == "integrations-web"
Requires-Dist: markdown-it-py; extra == "integrations-web"
Requires-Dist: mistune; extra == "integrations-web"
Requires-Dist: Jinja2; extra == "integrations-web"
Provides-Extra: all
Requires-Dist: scapy; extra == "all"
Requires-Dist: python-nmap; extra == "all"
Requires-Dist: requests; extra == "all"
Requires-Dist: beautifulsoup4; extra == "all"
Requires-Dist: pycryptodome>=3.19; extra == "all"
Requires-Dist: yara-python; extra == "all"
Requires-Dist: httpx; extra == "all"
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: urllib3; extra == "all"
Requires-Dist: h11; extra == "all"
Requires-Dist: h2; extra == "all"
Requires-Dist: httptools; extra == "all"
Requires-Dist: requests-cache; extra == "all"
Requires-Dist: requests-toolbelt; extra == "all"
Requires-Dist: tenacity; extra == "all"
Requires-Dist: backoff; extra == "all"
Requires-Dist: lxml; extra == "all"
Requires-Dist: html5lib; extra == "all"
Requires-Dist: cssselect; extra == "all"
Requires-Dist: soupsieve; extra == "all"
Requires-Dist: selectolax; extra == "all"
Requires-Dist: bleach; extra == "all"
Requires-Dist: nh3; extra == "all"
Requires-Dist: markdown-it-py; extra == "all"
Requires-Dist: mistune; extra == "all"
Requires-Dist: Jinja2; extra == "all"
Requires-Dist: pydantic; extra == "all"
Requires-Dist: jsonschema; extra == "all"
Requires-Dist: marshmallow; extra == "all"
Requires-Dist: attrs; extra == "all"
Requires-Dist: cattrs; extra == "all"
Requires-Dist: cerberus; extra == "all"
Requires-Dist: voluptuous; extra == "all"
Requires-Dist: email-validator; extra == "all"
Requires-Dist: validators; extra == "all"
Requires-Dist: referencing; extra == "all"
Requires-Dist: cryptography; extra == "all"
Requires-Dist: bcrypt; extra == "all"
Requires-Dist: argon2-cffi; extra == "all"
Requires-Dist: PyNaCl; extra == "all"
Requires-Dist: PyJWT; extra == "all"
Requires-Dist: itsdangerous; extra == "all"
Requires-Dist: pyOpenSSL; extra == "all"
Requires-Dist: pyotp; extra == "all"
Requires-Dist: keyring; extra == "all"
Requires-Dist: zxcvbn; extra == "all"
Requires-Dist: dnspython; extra == "all"
Requires-Dist: netaddr; extra == "all"
Requires-Dist: psutil; extra == "all"
Requires-Dist: ifaddr; extra == "all"
Requires-Dist: paramiko; extra == "all"
Requires-Dist: asyncssh; extra == "all"
Requires-Dist: fabric; extra == "all"
Requires-Dist: invoke; extra == "all"
Requires-Dist: websocket-client; extra == "all"
Requires-Dist: websockets; extra == "all"
Requires-Dist: numpy; extra == "all"
Requires-Dist: pandas; extra == "all"
Requires-Dist: polars; extra == "all"
Requires-Dist: pyarrow; extra == "all"
Requires-Dist: orjson; extra == "all"
Requires-Dist: ujson; extra == "all"
Requires-Dist: simplejson; extra == "all"
Requires-Dist: msgpack; extra == "all"
Requires-Dist: PyYAML; extra == "all"
Requires-Dist: tomlkit; extra == "all"
Requires-Dist: SQLAlchemy; extra == "all"
Requires-Dist: aiosqlite; extra == "all"
Requires-Dist: asyncpg; extra == "all"
Requires-Dist: psycopg; extra == "all"
Requires-Dist: PyMySQL; extra == "all"
Requires-Dist: redis; extra == "all"
Requires-Dist: pymongo; extra == "all"
Requires-Dist: peewee; extra == "all"
Requires-Dist: sqlparse; extra == "all"
Requires-Dist: duckdb; extra == "all"
Requires-Dist: click; extra == "all"
Requires-Dist: typer; extra == "all"
Requires-Dist: rich; extra == "all"
Requires-Dist: colorama; extra == "all"
Requires-Dist: tqdm; extra == "all"
Requires-Dist: loguru; extra == "all"
Requires-Dist: structlog; extra == "all"
Requires-Dist: python-dotenv; extra == "all"
Requires-Dist: platformdirs; extra == "all"
Requires-Dist: tabulate; extra == "all"
Requires-Dist: Pillow; extra == "all"
Requires-Dist: pypdf; extra == "all"
Requires-Dist: openpyxl; extra == "all"
Requires-Dist: XlsxWriter; extra == "all"
Requires-Dist: python-docx; extra == "all"
Requires-Dist: python-pptx; extra == "all"
Requires-Dist: defusedxml; extra == "all"
Requires-Dist: filelock; extra == "all"
Requires-Dist: watchdog; extra == "all"
Requires-Dist: pathspec; extra == "all"
Requires-Dist: pytest; extra == "all"
Requires-Dist: hypothesis; extra == "all"
Requires-Dist: coverage; extra == "all"
Requires-Dist: mypy; extra == "all"
Requires-Dist: pylint; extra == "all"
Requires-Dist: flake8; extra == "all"
Requires-Dist: black; extra == "all"
Requires-Dist: isort; extra == "all"
Requires-Dist: autopep8; extra == "all"
Requires-Dist: radon; extra == "all"
Requires-Dist: fastapi; extra == "all"
Requires-Dist: starlette; extra == "all"
Requires-Dist: Flask; extra == "all"
Requires-Dist: Werkzeug; extra == "all"
Requires-Dist: Django; extra == "all"
Requires-Dist: uvicorn; extra == "all"
Requires-Dist: hypercorn; extra == "all"
Requires-Dist: tornado; extra == "all"
Requires-Dist: sanic; extra == "all"
Requires-Dist: falcon; extra == "all"
Requires-Dist: packaging; extra == "all"
Requires-Dist: python-dateutil; extra == "all"
Requires-Dist: pendulum; extra == "all"
Requires-Dist: arrow; extra == "all"
Requires-Dist: humanize; extra == "all"
Requires-Dist: cachetools; extra == "all"
Requires-Dist: diskcache; extra == "all"
Requires-Dist: more-itertools; extra == "all"
Requires-Dist: sortedcontainers; extra == "all"
Requires-Dist: boltons; extra == "all"

# Cybersecure Easy 0.2.0

Complete source package with the existing security helpers, 120 lazy optional
package adapters, and Virtual_Frame for generating iframe HTML.
Requires Python 3.10 or newer.

## Publish from Windows PowerShell

1. Extract this ZIP and open the cybersecure-easy-0.2.0 folder.
2. Check your project's current version at https://pypi.org/project/cybersecure-easy/.
   This package uses 0.2.0 as a proposed version; the current live version could not
   be verified when this ZIP was prepared. If necessary, choose a higher unused
   version in pyproject.toml before building. The extracted folder name need not change.
3. If you have an existing project, preserve its license, author information,
   project URLs, and other release metadata. This reconstructed configuration does
   not assign a license or invent author metadata.
4. Open PowerShell in this folder. Run:

```powershell
powershell -ExecutionPolicy Bypass -File .\publish.ps1
```

The script installs build tools, runs local checks, removes only the build/dist
folders here, builds fresh archives, checks their metadata, and uploads with Twine.
When Twine prompts for a password, enter your project-scoped PyPI API token.
The token is not hardcoded or stored by this script. If an upload partly succeeds,
check PyPI before retrying; uploaded filenames cannot be reused.

To build and check without publishing:

```powershell
powershell -ExecutionPolicy Bypass -File .\publish.ps1 -BuildOnly
```

Or run the commands manually, stopping on any failure:

```powershell
python -m pip install --upgrade build twine
python selftest.py
python -m build
python -m twine check dist/*
python -m twine upload --username __token__ dist/*
```

After publishing:

```powershell
python -m pip install --upgrade cybersecure-easy
```

## Install optional integrations

The base package has no mandatory third-party dependencies. Install only what you use:

```powershell
python -m pip install "cybersecure-easy[pkg-httpx,pkg-numpy]"
python -m pip install "cybersecure-easy[integrations-validation]"
python -m pip install "cybersecure-easy[network,web,crypto,yara]"
```

The `all` extra requests the original dependencies plus all 120 adapters. This is
large and may need platform-specific tools or fail dependency resolution on some
platforms. The complete dependency matrix has not been installation-tested.
Individual extras are named `pkg-<adapter-name-with-hyphens>`; category extras are
`integrations-<category>`. See PACKAGE_LIST.md.

## Virtual_Frame

```python
from pathlib import Path
from cybersecure import Cybersecure, Yes, No

frame = Cybersecure.Virtual_Frame(URL="https://example.com", Interactive=Yes)
Path("frame.html").write_text(frame.document(), encoding="utf-8")

# For a noninteractive frame:
readonly = Cybersecure.Virtual_Frame(URL="https://example.com", Interactive=No)
```

`frame` is an HTML string with a notebook HTML representation. The call does not
open a browser or fetch the page. Open frame.html in a browser or use the HTML in
a web template. Keyword arguments use `=` (not `:`).

Interactive frames use sandbox="allow-scripts allow-forms" by default. Read-only
frames use an inert wrapper, disable pointer events/focus, and block scripts/forms.
The sandbox can affect login, storage, or other website behavior. Websites can
refuse embedding with CSP or X-Frame-Options; this helper does not bypass that.
Custom Sandbox tokens grant extra capabilities explicitly for trusted content.

## Package adapters

```python
from cybersecure import Cybersecure

print(Cybersecure.packages())
print(Cybersecure.package_info("httpx"))
httpx = Cybersecure.httpx()  # lazy import; package must already be installed
array = Cybersecure.numpy("array", [1, 2, 3])
image = Cybersecure.pillow("Image.open", "photo.png")
print(Cybersecure.help())
```

Adapters expose native public attributes and callables, not simplified,
security-reviewed replacements. Native return values and exceptions remain;
async APIs still need to be awaited. Packages are never automatically installed.
The original private-IP restrictions apply to send_packet/scan_ports, not to
upstream APIs called through adapters. Only test systems you are authorized to test.

Existing audit helpers need Bandit installed separately; npm auditing requires
Node.js/npm; port scanning needs the Nmap application. Packet sending can require
administrator privileges and packet drivers.

## Verification

Run `python selftest.py`. It checks iframe escaping, validation and interaction
controls; dispatch for all 120 adapters with mock modules; missing-dependency
errors; and an existing hashing helper. It also performs native smoke checks for
Packaging, NumPy and PyYAML if installed. Passing these tests does not certify all
120 upstream packages or their combinations.
