diff options
| author | adamjanovsky | 2022-12-09 17:10:19 +0100 |
|---|---|---|
| committer | GitHub | 2022-12-09 17:10:19 +0100 |
| commit | 73b3b0c361f9545450fa188bec50606d64bb1afd (patch) | |
| tree | 0a1f9034c309ba88e5f72a31634b014c23a57df5 | |
| parent | 19338dc9fd9ab257c36cfa277994abe202e97de2 (diff) | |
| download | sec-certs-73b3b0c361f9545450fa188bec50606d64bb1afd.tar.gz sec-certs-73b3b0c361f9545450fa188bec50606d64bb1afd.tar.zst sec-certs-73b3b0c361f9545450fa188bec50606d64bb1afd.zip | |
flat -> src layout (#294)
- Some mypy fixes
- Flat layout -> src layout
- Ditch `setup.py` and `setup.cfg` in favour of `pyproject.toml`
- Non-pinned requirements moved from `requirements/*.in` to `pyproject.toml`
| -rw-r--r-- | .flake8 | 5 | ||||
| -rw-r--r-- | .github/workflows/tests.yml | 2 | ||||
| -rw-r--r-- | .gitignore | 13 | ||||
| -rw-r--r-- | CONTRIBUTING.md | 3 | ||||
| -rw-r--r-- | codecov.yml | 1 | ||||
| -rw-r--r-- | docs/api/dataset.md | 2 | ||||
| -rw-r--r-- | docs/index.md | 2 | ||||
| -rw-r--r-- | notebooks/cc/temporal_trends.ipynb | 5 | ||||
| -rw-r--r-- | notebooks/examples/fips_iut.ipynb | 19 | ||||
| -rw-r--r-- | notebooks/examples/fips_mip.ipynb | 4 | ||||
| -rw-r--r-- | pyproject.toml | 133 | ||||
| -rwxr-xr-x | requirements/compile.sh | 6 | ||||
| -rw-r--r-- | requirements/dev_requirements.in | 20 | ||||
| -rw-r--r-- | requirements/dev_requirements.txt | 431 | ||||
| -rw-r--r-- | requirements/requirements.in | 30 | ||||
| -rw-r--r-- | requirements/requirements.txt | 319 | ||||
| -rw-r--r-- | requirements/test_requirements.in | 3 | ||||
| -rw-r--r-- | requirements/test_requirements.txt | 327 | ||||
| -rw-r--r-- | setup.py | 38 | ||||
| -rw-r--r-- | src/sec_certs/__init__.py (renamed from sec_certs/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/__main__.py (renamed from sec_certs/__main__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/cert_rules.py (renamed from sec_certs/cert_rules.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/cli.py (renamed from sec_certs/cli.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/config/__init__.py (renamed from sec_certs/config/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/config/configuration.py (renamed from sec_certs/config/configuration.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/config/settings-schema.json (renamed from sec_certs/config/settings-schema.json) | 0 | ||||
| -rw-r--r-- | src/sec_certs/config/settings.yaml (renamed from sec_certs/config/settings.yaml) | 0 | ||||
| -rw-r--r-- | src/sec_certs/constants.py (renamed from sec_certs/constants.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/__init__.py (renamed from sec_certs/dataset/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/common_criteria.py (renamed from sec_certs/dataset/common_criteria.py) | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/cpe.py (renamed from sec_certs/dataset/cpe.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/cve.py (renamed from sec_certs/dataset/cve.py) | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/dataset.py (renamed from sec_certs/dataset/dataset.py) | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips.py (renamed from sec_certs/dataset/fips.py) | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips_algorithm.py (renamed from sec_certs/dataset/fips_algorithm.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips_iut.py (renamed from sec_certs/dataset/fips_iut.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips_mip.py (renamed from sec_certs/dataset/fips_mip.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/json_path_dataset.py (renamed from sec_certs/dataset/json_path_dataset.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/dataset/protection_profile.py (renamed from sec_certs/dataset/protection_profile.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/__init__.py (renamed from sec_certs/model/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/cpe_matching.py (renamed from sec_certs/model/cpe_matching.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/evaluation.py (renamed from sec_certs/model/evaluation.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/reference_finder.py (renamed from sec_certs/model/reference_finder.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/sar_transformer.py (renamed from sec_certs/model/sar_transformer.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/model/transitive_vulnerability_finder.py (renamed from sec_certs/model/transitive_vulnerability_finder.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/rules.yaml (renamed from sec_certs/rules.yaml) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/__init__.py (renamed from sec_certs/sample/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/cc_certificate_id.py (renamed from sec_certs/sample/cc_certificate_id.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/cc_maintenance_update.py (renamed from sec_certs/sample/cc_maintenance_update.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/certificate.py (renamed from sec_certs/sample/certificate.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/common_criteria.py (renamed from sec_certs/sample/common_criteria.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/cpe.py (renamed from sec_certs/sample/cpe.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/cve.py (renamed from sec_certs/sample/cve.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips.py (renamed from sec_certs/sample/fips.py) | 7 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips_algorithm.py (renamed from sec_certs/sample/fips_algorithm.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips_iut.py (renamed from sec_certs/sample/fips_iut.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips_mip.py (renamed from sec_certs/sample/fips_mip.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/protection_profile.py (renamed from sec_certs/sample/protection_profile.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/sample/sar.py (renamed from sec_certs/sample/sar.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/serialization/__init__.py (renamed from sec_certs/serialization/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/serialization/json.py (renamed from sec_certs/serialization/json.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/serialization/pandas.py (renamed from sec_certs/serialization/pandas.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/__init__.py (renamed from sec_certs/utils/__init__.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/extract.py (renamed from sec_certs/utils/extract.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/helpers.py (renamed from sec_certs/utils/helpers.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/pandas.py (renamed from sec_certs/utils/pandas.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/parallel_processing.py (renamed from sec_certs/utils/parallel_processing.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/pdf.py (renamed from sec_certs/utils/pdf.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/sanitization.py (renamed from sec_certs/utils/sanitization.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/tables.py (renamed from sec_certs/utils/tables.py) | 0 | ||||
| -rw-r--r-- | src/sec_certs/utils/tqdm.py (renamed from sec_certs/utils/tqdm.py) | 0 |
71 files changed, 913 insertions, 465 deletions
@@ -11,11 +11,6 @@ exclude = scratches, max-complexity = 10 -# Ignore complexity for CLI -per-file-ignores = - cc_cli.py: C901, - fips_cli.py: C901 - ignore = # line length, should be handleded by black E501, diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 255b6cac..8f2a037c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,6 +20,8 @@ jobs: run: | pip install -r requirements/requirements.txt pip install -r requirements/test_requirements.txt + - name: Install sec-certs + run: pip install -e . - name: Run tests run: pytest --cov=sec_certs tests - name: Code coverage upload @@ -6,7 +6,7 @@ results*/ # version file by setuptools-scm -sec_certs/_version.py +src/sec_certs/_version.py # Byte-compiled / optimized / DLL files __pycache__/ @@ -116,20 +116,9 @@ virt/ # mypy .mypy_cache/ -# fips dataset -fips_dataset/ -fips_test_dataset/ - -# output pdfs -*connections* -*single* - # log cert_processing_log.txt ./cc_processing_log.txt -# Example script may dump classification report into the folder -examples/classification_report.json - # Experiment results produced by notebooks notebooks/cc/results/
\ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d95b2ef9..958ba073 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,8 +15,7 @@ For complete list of system dependencies, see [docs/installation](https://seccer ### Requirements Requirements are maintained with [pip-tools](https://github.com/jazzband/pip-tools). The main ideas are: -- List actual dependencies in `.in` files inside [requirements](https://github.com/crocs-muni/sec-certs/blob/main/requirements) folder without pinning them. -- Those dependencies are loaded into [setup.py](https://github.com/crocs-muni/sec-certs/blob/main/setup.py) file. +- List actual dependencies in [pyproject.toml](https://github.com/crocs-muni/sec-certs/blob/main/pyproject.toml) without pinning them. - Additionally, [compile.sh](https://github.com/crocs-muni/sec-certs/blob/main/requirements/compile.sh) script is used to compile pinned versions of requirements that reside in `.txt` files in the same folder. - Tests, linting and Docker all run against this reproducible environment of pinned requirements. diff --git a/codecov.yml b/codecov.yml index 5bf2bbe4..5c664ea1 100644 --- a/codecov.yml +++ b/codecov.yml @@ -5,4 +5,3 @@ coverage: ignore: - "test/**/*.py" - - "setup.py"
\ No newline at end of file diff --git a/docs/api/dataset.md b/docs/api/dataset.md index 17ec943c..27a77e79 100644 --- a/docs/api/dataset.md +++ b/docs/api/dataset.md @@ -14,7 +14,7 @@ The examples related to this package can be found at [common criteria notebook]( ## CCDataset ```{eval-rst} -.. currentmodule:: sec_certs.dataset +.. currentmodule:: sec_certs.dataset.dataset .. autoclass:: Dataset :members: ``` diff --git a/docs/index.md b/docs/index.md index c52706c2..f9d58fb6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -46,6 +46,8 @@ configuration.md notebooks/examples/common_criteria.ipynb notebooks/examples/fips.ipynb notebooks/examples/model.ipynb +notebooks/examples/fips_iut.ipynb +notebooks/examples/fips_mip.ipynb ``` ```{toctree} diff --git a/notebooks/cc/temporal_trends.ipynb b/notebooks/cc/temporal_trends.ipynb index d7d69ca9..754d494e 100644 --- a/notebooks/cc/temporal_trends.ipynb +++ b/notebooks/cc/temporal_trends.ipynb @@ -91,11 +91,10 @@ "data = [n_certs.loc[n_certs.popular_categories == c, \"size\"].tolist()[:-1] for c in cats]\n", "\n", "palette = sns.color_palette(\"Spectral\", 5).as_hex()\n", - "colors = ','.join(palette)\n", "\n", - "plt.style.use(\"seaborn-white\")\n", + "plt.style.use(\"seaborn-v0_8-white\")\n", "plt.figure(figsize=(7,4))\n", - "plt.stackplot(years, data, labels=cats, colors=colors)\n", + "plt.stackplot(years, data, labels=cats, colors=palette)\n", "plt.legend(loc='upper left')\n", "plt.ylabel(\"Number of issued certificates\")\n", "plt.xlabel(\"Year of certification\")\n", diff --git a/notebooks/examples/fips_iut.ipynb b/notebooks/examples/fips_iut.ipynb index 77138282..506c114f 100644 --- a/notebooks/examples/fips_iut.ipynb +++ b/notebooks/examples/fips_iut.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Parse FIPS 'Implementation Under Test' pages.\n", + "## FIPS 'Implementation Under Test'\n", "\n", - "To use, download pages from the URL: https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/IUT-List\n", + "Functionality to parse FIPS 'Implementation Under Test' webpage. To use, download pages from the URL: [https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/IUT-List](https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/IUT-List)\n", "into a `directory` and name them `fips_iut_<iso-timestamp>.html`.\n", "\n", "Then run the cells below" @@ -35,10 +35,21 @@ } ], "metadata": { + "kernelspec": { + "display_name": "Python 3.8.13 ('venv': venv)", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "name": "python", + "version": "3.8.13" }, - "orig_nbformat": 4 + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "a5b8c5b127d2cfe5bc3a1c933e197485eb9eba25154c3661362401503b4ef9d4" + } + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/notebooks/examples/fips_mip.ipynb b/notebooks/examples/fips_mip.ipynb index 7955a32f..f46ba23a 100644 --- a/notebooks/examples/fips_mip.ipynb +++ b/notebooks/examples/fips_mip.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Parse FIPS 'Modules In Process' pages.\n", + "## FIPS 'Modules In Process'\n", "\n", - "To use, download pages from the URL: https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/Modules-In-Process-List into a `directory` and name them `fips_mip_<iso-timestamp>.html`.\n", + "Functionality to parse FIPS 'Modules In Process' webpage. To use, download pages from the URL: [https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/Modules-In-Process-List](https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/Modules-In-Process-List) into a `directory` and name them `fips_mip_<iso-timestamp>.html`.\n", "\n", "Then run the following cells" ] diff --git a/pyproject.toml b/pyproject.toml index 2804889f..266b4dd5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,111 @@ [build-system] -requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2", "wheel"] + requires = ["setuptools>=61.0", "setuptools_scm[toml]>=6.2", "wheel"] + build-backend = "setuptools.build_meta" + +[project] + name = "sec-certs" + authors = [ + { name = "Adam Janovsky", email = "adamjanovsky@mail.muni.cz" }, + { name = "Jan Jancar" }, + { name = "Petr Svenda" }, + { name = "Jiri Michalik" }, + { name = "Stanislav Bobon" }, + ] + description = "A tool for data scraping and analysis of security certificates from Common Criteria and FIPS 140-2/3 frameworks" + readme = "README.md" + license = { "text" = "MIT" } + classifiers = [ + "Development Status :: 3 - Alpha", + "License :: OSI Approved :: MIT License", + "Topic :: Security", + "Topic :: Security :: Cryptography", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + ] + requires-python = ">=3.8" + dynamic = ["version"] + dependencies = [ + "beautifulsoup4", + "billiard", + "click", + "html5lib", + "jsonschema", + "lxml", + "matplotlib", + "numpy", + "pandas", + "pdftotext", + "pikepdf", + "Pillow>=9.2.0", + "PyPDF2", + "python-dateutil", + "PyYAML", + "rapidfuzz", + "requests", + "scikit-learn", + "tabula-py", + "tqdm", + "setuptools-scm", + "ipykernel", + "ipywidgets", + "spacy", + "en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz", + "pkgconfig", + "seaborn", + "pySankeyBeta", + "scipy>=1.9.0", + "networkx", + ] + + [project.optional-dependencies] + dev = [ + "mypy", + "types-PyYAML", + "types-python-dateutil", + "types-requests", + "pytest", + "pytest-cov", + "pytest-monitor", + "pytest-profiling", + "black", + "isort", + "flake8", + "pre-commit", + "pip-tools", + "sphinx", + "myst-nb>=0.14", + "sphinx-book-theme", + "sphinx-design", + "sphinx-copybutton", + "pyupgrade", + "flake8-future-annotations", + "ipython!=8.7.0", + ] + test = ["pytest", "coverage", "pytest-cov"] + + [project.urls] + Homepage = "https://seccerts.org" + GitHub = "https://github.com/crocs-muni/sec-certs/" + Documentation = "https://seccerts.org/docs" + + [project.scripts] + sec-certs = "sec_certs.cli:main" + +[tool.setuptools.package-data] + "*" = ["*.yaml", "*.json"] + [tool.setuptools_scm] -write_to = "sec_certs/_version.py" -version_scheme = "no-guess-dev" + write_to = "src/sec_certs/_version.py" + version_scheme = "no-guess-dev" [tool.black] -line-length = 120 -exclude = ''' + line-length = 120 + exclude = ''' /( \.git | \.mypy_cache @@ -19,23 +117,24 @@ exclude = ''' | buck-out | build | dist + | src/sec_certs/_version.py )/ ''' [tool.isort] -multi_line_output = 3 -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true -ensure_newline_before_comments = true -line_length = 120 -skip = ["certsvenv", "build"] + multi_line_output = 3 + include_trailing_comma = true + force_grid_wrap = 0 + use_parentheses = true + ensure_newline_before_comments = true + line_length = 120 + skip = ["certsvenv", "build"] [tool.mypy] -plugins = ["numpy.typing.mypy_plugin"] -ignore_missing_imports = true -exclude = "build/" + plugins = ["numpy.typing.mypy_plugin"] + ignore_missing_imports = true + exclude = "build/" [tool.pytest.ini_options] -markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"] -addopts = "--cov sec_certs" + markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"] + addopts = "--cov sec_certs" diff --git a/requirements/compile.sh b/requirements/compile.sh index 8910b72d..70783aee 100755 --- a/requirements/compile.sh +++ b/requirements/compile.sh @@ -2,6 +2,6 @@ # See CONTRIBUTING.md for description -pip-compile requirements.in --no-header -pip-compile dev_requirements.in --no-header -pip-compile test_requirements.in --no-header +pip-compile --no-header --resolver=backtracking --output-file=requirements.txt ./../pyproject.toml +pip-compile --no-header --resolver=backtracking --extra dev -o dev_requirements.txt ./../pyproject.toml +pip-compile --no-header --resolver=backtracking --extra test -o test_requirements.txt ./../pyproject.toml diff --git a/requirements/dev_requirements.in b/requirements/dev_requirements.in deleted file mode 100644 index 5071c08e..00000000 --- a/requirements/dev_requirements.in +++ /dev/null @@ -1,20 +0,0 @@ -mypy -types-PyYAML -types-python-dateutil -types-requests -pytest -pytest-cov -pytest-monitor -pytest-profiling -black -isort -flake8 -pre-commit -pip-tools -sphinx -myst-nb>=0.14 -sphinx-book-theme -sphinx-design -sphinx-copybutton -pyupgrade -flake8-future-annotations diff --git a/requirements/dev_requirements.txt b/requirements/dev_requirements.txt index 2002ded7..e174d11b 100644 --- a/requirements/dev_requirements.txt +++ b/requirements/dev_requirements.txt @@ -1,172 +1,300 @@ alabaster==0.7.12 # via sphinx -asttokens==2.0.5 +appnope==0.1.3 + # via + # ipykernel + # ipython +asttokens==2.2.1 # via stack-data -attrs==21.4.0 +attrs==22.1.0 # via # jsonschema # jupyter-cache - # markdown-it-py # pytest -babel==2.10.1 +babel==2.11.0 # via sphinx backcall==0.2.0 # via ipython beautifulsoup4==4.11.1 - # via pydata-sphinx-theme -black==22.3.0 - # via -r dev_requirements.in + # via + # pydata-sphinx-theme + # sec-certs (./../pyproject.toml) +billiard==4.0.2 + # via sec-certs (./../pyproject.toml) +black==22.10.0 + # via sec-certs (./../pyproject.toml) +blis==0.7.9 + # via thinc +build==0.9.0 + # via pip-tools +catalogue==2.0.8 + # via + # spacy + # srsly + # thinc certifi==2022.12.7 # via requests cfgv==3.3.1 # via pre-commit -charset-normalizer==2.0.12 +charset-normalizer==2.1.1 # via requests -click==8.1.2 +click==8.1.3 # via # black # jupyter-cache # pip-tools -coverage[toml]==6.3.2 + # sec-certs (./../pyproject.toml) + # typer +comm==0.1.2 + # via ipykernel +confection==0.0.3 + # via thinc +contourpy==1.0.6 + # via matplotlib +coverage[toml]==6.5.0 # via pytest-cov -debugpy==1.6.0 +cycler==0.11.0 + # via matplotlib +cymem==2.0.7 + # via + # preshed + # spacy + # thinc +debugpy==1.6.4 # via ipykernel decorator==5.1.1 # via ipython -distlib==0.3.4 +deprecation==2.1.0 + # via pikepdf +distlib==0.3.6 # via virtualenv +distro==1.8.0 + # via tabula-py docutils==0.17.1 # via - # myst-nb # myst-parser # pydata-sphinx-theme # sphinx - # sphinx-togglebutton +en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz + # via sec-certs (./../pyproject.toml) entrypoints==0.4 # via jupyter-client -executing==0.8.3 +exceptiongroup==1.0.4 + # via pytest +executing==1.2.0 # via stack-data -fastjsonschema==2.15.3 +fastjsonschema==2.16.2 # via nbformat -filelock==3.6.0 +filelock==3.8.2 # via virtualenv -flake8==4.0.1 +flake8==6.0.0 # via - # -r dev_requirements.in # flake8-future-annotations + # sec-certs (./../pyproject.toml) flake8-future-annotations==1.0.0 - # via -r dev_requirements.in -gprof2dot==2021.2.21 + # via sec-certs (./../pyproject.toml) +fonttools==4.38.0 + # via matplotlib +gprof2dot==2022.7.29 # via pytest-profiling -greenlet==1.1.2 +greenlet==2.0.1 # via sqlalchemy -identify==2.4.12 +html5lib==1.1 + # via sec-certs (./../pyproject.toml) +identify==2.5.9 # via pre-commit -idna==3.3 +idna==3.4 # via requests -imagesize==1.3.0 +imagesize==1.4.1 # via sphinx -importlib-metadata==4.11.3 +importlib-metadata==5.1.0 # via # jupyter-cache # myst-nb + # sphinx +importlib-resources==5.10.1 + # via jsonschema iniconfig==1.1.1 # via pytest -ipykernel==6.13.0 - # via myst-nb -ipython==8.2.0 +ipykernel==6.19.1 + # via + # ipywidgets + # myst-nb + # sec-certs (./../pyproject.toml) +ipython==8.6.0 # via # ipykernel + # ipywidgets # myst-nb + # sec-certs (./../pyproject.toml) +ipywidgets==8.0.3 + # via sec-certs (./../pyproject.toml) isort==5.10.1 - # via -r dev_requirements.in -jedi==0.18.1 + # via sec-certs (./../pyproject.toml) +jedi==0.18.2 # via ipython -jinja2==3.1.1 +jinja2==3.1.2 # via # myst-parser + # spacy # sphinx -jsonschema==4.4.0 - # via nbformat +joblib==1.2.0 + # via scikit-learn +jsonschema==4.17.3 + # via + # nbformat + # sec-certs (./../pyproject.toml) jupyter-cache==0.5.0 # via myst-nb -jupyter-client==7.2.2 +jupyter-client==7.4.8 # via # ipykernel # nbclient -jupyter-core==4.10.0 +jupyter-core==5.1.0 # via # jupyter-client # nbformat -markdown-it-py==1.1.0 +jupyterlab-widgets==3.0.4 + # via ipywidgets +kiwisolver==1.4.4 + # via matplotlib +langcodes==3.3.0 + # via spacy +lxml==4.9.1 + # via + # pikepdf + # sec-certs (./../pyproject.toml) +markdown-it-py==2.1.0 # via # mdit-py-plugins # myst-parser markupsafe==2.1.1 # via jinja2 -matplotlib-inline==0.1.3 +matplotlib==3.6.2 + # via + # pysankeybeta + # seaborn + # sec-certs (./../pyproject.toml) +matplotlib-inline==0.1.6 # via # ipykernel # ipython -mccabe==0.6.1 +mccabe==0.7.0 # via flake8 -mdit-py-plugins==0.3.0 +mdit-py-plugins==0.3.3 # via myst-parser -memory-profiler==0.60.0 +mdurl==0.1.2 + # via markdown-it-py +memory-profiler==0.61.0 # via pytest-monitor -mypy==0.942 - # via -r dev_requirements.in +murmurhash==1.0.9 + # via + # preshed + # spacy + # thinc +mypy==0.991 + # via sec-certs (./../pyproject.toml) mypy-extensions==0.4.3 # via # black # mypy -myst-nb==0.14.0 - # via -r dev_requirements.in -myst-parser==0.17.2 +myst-nb==0.17.1 + # via sec-certs (./../pyproject.toml) +myst-parser==0.18.1 # via myst-nb nbclient==0.5.13 - # via jupyter-cache -nbformat==5.3.0 + # via + # jupyter-cache + # myst-nb +nbformat==5.7.0 # via # jupyter-cache # myst-nb # nbclient -nest-asyncio==1.5.5 +nest-asyncio==1.5.6 # via # ipykernel # jupyter-client # nbclient -nodeenv==1.6.0 +networkx==2.8.8 + # via sec-certs (./../pyproject.toml) +nodeenv==1.7.0 # via pre-commit -packaging==21.3 +numpy==1.23.5 + # via + # blis + # contourpy + # matplotlib + # pandas + # pysankeybeta + # scikit-learn + # scipy + # seaborn + # sec-certs (./../pyproject.toml) + # spacy + # tabula-py + # thinc +packaging==22.0 # via + # build + # deprecation # ipykernel + # matplotlib + # pikepdf # pydata-sphinx-theme # pytest + # setuptools-scm + # spacy # sphinx +pandas==1.5.2 + # via + # pysankeybeta + # seaborn + # sec-certs (./../pyproject.toml) + # tabula-py parso==0.8.3 # via jedi -pathspec==0.9.0 +pathspec==0.10.2 # via black -pep517==0.12.0 - # via pip-tools +pathy==0.10.1 + # via spacy +pdftotext==2.2.2 + # via sec-certs (./../pyproject.toml) +pep517==0.13.0 + # via build pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pip-tools==6.5.1 - # via -r dev_requirements.in -platformdirs==2.5.1 +pikepdf==6.2.5 + # via sec-certs (./../pyproject.toml) +pillow==9.3.0 + # via + # matplotlib + # pikepdf + # sec-certs (./../pyproject.toml) +pip-tools==6.11.0 + # via sec-certs (./../pyproject.toml) +pkgconfig==1.5.5 + # via sec-certs (./../pyproject.toml) +pkgutil-resolve-name==1.3.10 + # via jsonschema +platformdirs==2.6.0 # via # black + # jupyter-core # virtualenv pluggy==1.0.0 # via pytest -pre-commit==2.18.1 - # via -r dev_requirements.in -prompt-toolkit==3.0.29 +pre-commit==2.20.0 + # via sec-certs (./../pyproject.toml) +preshed==3.0.8 + # via + # spacy + # thinc +prompt-toolkit==3.0.36 # via ipython -psutil==5.9.0 +psutil==5.9.4 # via # ipykernel # memory-profiler @@ -175,81 +303,120 @@ ptyprocess==0.7.0 # via pexpect pure-eval==0.2.2 # via stack-data -py==1.11.0 - # via pytest -pycodestyle==2.8.0 +pycodestyle==2.10.0 # via flake8 +pydantic==1.10.2 + # via + # confection + # spacy + # thinc pydata-sphinx-theme==0.8.1 # via sphinx-book-theme -pyflakes==2.4.0 +pyflakes==3.0.1 # via flake8 -pygments==2.12.0 +pygments==2.13.0 # via # ipython # sphinx -pyparsing==3.0.7 - # via packaging -pyrsistent==0.18.1 +pyparsing==3.0.9 + # via matplotlib +pypdf2==2.11.2 + # via sec-certs (./../pyproject.toml) +pyrsistent==0.19.2 # via jsonschema -pytest==7.1.1 +pysankeybeta==1.4.0 + # via sec-certs (./../pyproject.toml) +pytest==7.2.0 # via - # -r dev_requirements.in # pytest-cov # pytest-monitor # pytest-profiling -pytest-cov==3.0.0 - # via -r dev_requirements.in -pytest-monitor==1.6.3 - # via -r dev_requirements.in + # sec-certs (./../pyproject.toml) +pytest-cov==4.0.0 + # via sec-certs (./../pyproject.toml) +pytest-monitor==1.6.5 + # via sec-certs (./../pyproject.toml) pytest-profiling==1.7.0 - # via -r dev_requirements.in + # via sec-certs (./../pyproject.toml) python-dateutil==2.8.2 - # via jupyter-client -pytz==2022.1 - # via babel -pyupgrade==3.2.3 - # via -r dev_requirements.in + # via + # jupyter-client + # matplotlib + # pandas + # sec-certs (./../pyproject.toml) +pytz==2022.6 + # via + # babel + # pandas +pyupgrade==3.3.1 + # via sec-certs (./../pyproject.toml) pyyaml==6.0 # via # jupyter-cache # myst-nb # myst-parser # pre-commit + # sec-certs (./../pyproject.toml) # sphinx-book-theme -pyzmq==22.3.0 - # via jupyter-client -requests==2.27.1 +pyzmq==24.0.1 + # via + # ipykernel + # jupyter-client +rapidfuzz==2.13.3 + # via sec-certs (./../pyproject.toml) +requests==2.28.1 # via # pytest-monitor + # sec-certs (./../pyproject.toml) + # spacy # sphinx +scikit-learn==1.2.0 + # via sec-certs (./../pyproject.toml) +scipy==1.9.3 + # via + # scikit-learn + # sec-certs (./../pyproject.toml) +seaborn==0.12.1 + # via + # pysankeybeta + # sec-certs (./../pyproject.toml) +setuptools-scm==7.0.5 + # via sec-certs (./../pyproject.toml) six==1.16.0 # via # asttokens + # html5lib # pytest-profiling # python-dateutil - # virtualenv +smart-open==6.2.0 + # via pathy snowballstemmer==2.2.0 # via sphinx soupsieve==2.3.2.post1 # via beautifulsoup4 +spacy==3.4.3 + # via + # en-core-web-sm + # sec-certs (./../pyproject.toml) +spacy-legacy==3.0.10 + # via spacy +spacy-loggers==1.0.4 + # via spacy sphinx==4.5.0 # via - # -r dev_requirements.in # myst-nb # myst-parser # pydata-sphinx-theme + # sec-certs (./../pyproject.toml) # sphinx-book-theme # sphinx-copybutton # sphinx-design - # sphinx-togglebutton -sphinx-book-theme==0.3.2 - # via -r dev_requirements.in -sphinx-copybutton==0.5.0 - # via -r dev_requirements.in -sphinx-design==0.1.0 - # via -r dev_requirements.in -sphinx-togglebutton==0.3.1 - # via myst-nb +sphinx-book-theme==0.3.3 + # via sec-certs (./../pyproject.toml) +sphinx-copybutton==0.5.1 + # via sec-certs (./../pyproject.toml) +sphinx-design==0.3.0 + # via sec-certs (./../pyproject.toml) sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 @@ -262,61 +429,97 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sqlalchemy==1.4.35 +sqlalchemy==1.4.44 # via jupyter-cache -stack-data==0.2.0 +srsly==2.4.5 + # via + # confection + # spacy + # thinc +stack-data==0.6.2 # via ipython -tabulate==0.8.9 +tabula-py==2.6.0 + # via sec-certs (./../pyproject.toml) +tabulate==0.9.0 # via jupyter-cache +thinc==8.1.5 + # via spacy +threadpoolctl==3.1.0 + # via scikit-learn tokenize-rt==5.0.0 # via pyupgrade toml==0.10.2 # via pre-commit tomli==2.0.1 # via + # black + # build # coverage # mypy # pep517 # pytest -tornado==6.1 + # setuptools-scm +tornado==6.2 # via # ipykernel # jupyter-client -traitlets==5.1.1 +tqdm==4.64.1 + # via + # sec-certs (./../pyproject.toml) + # spacy +traitlets==5.6.0 # via + # comm # ipykernel # ipython + # ipywidgets # jupyter-client # jupyter-core # matplotlib-inline # nbclient # nbformat -types-python-dateutil==2.8.10 - # via -r dev_requirements.in -types-pyyaml==6.0.5 - # via -r dev_requirements.in -types-requests==2.27.16 - # via -r dev_requirements.in -types-urllib3==1.26.11 +typer==0.7.0 + # via + # pathy + # spacy +types-python-dateutil==2.8.19.4 + # via sec-certs (./../pyproject.toml) +types-pyyaml==6.0.12.2 + # via sec-certs (./../pyproject.toml) +types-requests==2.28.11.5 + # via sec-certs (./../pyproject.toml) +types-urllib3==1.26.25.4 # via types-requests -typing-extensions==4.1.1 +typing-extensions==4.4.0 # via # mypy # myst-nb # myst-parser -urllib3==1.26.9 + # pydantic + # pypdf2 + # setuptools-scm +urllib3==1.26.13 # via requests -virtualenv==20.14.0 +virtualenv==20.17.1 # via pre-commit +wasabi==0.10.1 + # via + # spacy + # thinc wcwidth==0.2.5 # via prompt-toolkit -wheel==0.37.1 +webencodings==0.5.1 + # via html5lib +wheel==0.38.4 # via # pip-tools # pytest-monitor - # sphinx-togglebutton -zipp==3.8.0 - # via importlib-metadata +widgetsnbextension==4.0.4 + # via ipywidgets +zipp==3.11.0 + # via + # importlib-metadata + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index 8b66cc67..00000000 --- a/requirements/requirements.in +++ /dev/null @@ -1,30 +0,0 @@ -beautifulsoup4 -billiard -click -html5lib -jsonschema -lxml -matplotlib -numpy -pandas -pdftotext -pikepdf -Pillow>=9.2.0 -PyPDF2 -python-dateutil -PyYAML -rapidfuzz -requests -scikit-learn -tabula-py -tqdm -setuptools-scm -ipykernel -ipywidgets -spacy -en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz -pkgconfig -seaborn -pySankeyBeta -scipy>=1.9.0 -networkx
\ No newline at end of file diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1947ab3a..91411c35 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,366 +1,303 @@ -argon2-cffi==21.3.0 - # via notebook -argon2-cffi-bindings==21.2.0 - # via argon2-cffi -asttokens==2.0.5 +appnope==0.1.3 + # via + # ipykernel + # ipython +asttokens==2.2.1 # via stack-data -attrs==21.4.0 +attrs==22.1.0 # via jsonschema backcall==0.2.0 # via ipython -beautifulsoup4==4.10.0 - # via - # -r requirements.in - # nbconvert -billiard==3.6.4.0 - # via -r requirements.in -bleach==5.0.0 - # via nbconvert +beautifulsoup4==4.11.1 + # via sec-certs (./../pyproject.toml) +billiard==4.0.2 + # via sec-certs (./../pyproject.toml) blis==0.7.9 # via thinc -catalogue==2.0.7 +catalogue==2.0.8 # via # spacy # srsly # thinc certifi==2022.12.7 # via requests -cffi==1.15.0 - # via argon2-cffi-bindings -charset-normalizer==2.0.12 +charset-normalizer==2.1.1 # via requests -click==8.1.2 +click==8.1.3 # via - # -r requirements.in + # sec-certs (./../pyproject.toml) # typer +comm==0.1.2 + # via ipykernel confection==0.0.3 # via thinc +contourpy==1.0.6 + # via matplotlib cycler==0.11.0 # via matplotlib -cymem==2.0.6 +cymem==2.0.7 # via # preshed # spacy # thinc -debugpy==1.6.0 +debugpy==1.6.4 # via ipykernel decorator==5.1.1 # via ipython -defusedxml==0.7.1 - # via nbconvert -distro==1.7.0 +deprecation==2.1.0 + # via pikepdf +distro==1.8.0 # via tabula-py -en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz - # via -r requirements.in +en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz + # via sec-certs (./../pyproject.toml) entrypoints==0.4 - # via - # jupyter-client - # nbconvert -executing==0.8.3 + # via jupyter-client +executing==1.2.0 # via stack-data -fastjsonschema==2.15.3 - # via nbformat -fonttools==4.31.2 +fonttools==4.38.0 # via matplotlib html5lib==1.1 - # via -r requirements.in -idna==3.3 + # via sec-certs (./../pyproject.toml) +idna==3.4 # via requests -ipykernel==6.12.1 +importlib-resources==5.10.1 + # via jsonschema +ipykernel==6.19.1 # via - # -r requirements.in # ipywidgets - # notebook -ipython==8.2.0 + # sec-certs (./../pyproject.toml) +ipython==8.7.0 # via # ipykernel # ipywidgets -ipython-genutils==0.2.0 - # via - # ipywidgets - # notebook -ipywidgets==7.7.0 - # via -r requirements.in -jarowinkler==1.0.2 - # via rapidfuzz -jedi==0.18.1 +ipywidgets==8.0.3 + # via sec-certs (./../pyproject.toml) +jedi==0.18.2 # via ipython -jinja2==3.1.1 - # via - # nbconvert - # notebook - # spacy +jinja2==3.1.2 + # via spacy joblib==1.2.0 # via scikit-learn -jsonschema==4.4.0 - # via - # -r requirements.in - # nbformat -jupyter-client==7.2.1 - # via - # ipykernel - # nbclient - # notebook -jupyter-core==4.9.2 - # via - # jupyter-client - # nbconvert - # nbformat - # notebook -jupyterlab-pygments==0.2.2 - # via nbconvert -jupyterlab-widgets==1.1.0 +jsonschema==4.17.3 + # via sec-certs (./../pyproject.toml) +jupyter-client==7.4.8 + # via ipykernel +jupyter-core==5.1.0 + # via jupyter-client +jupyterlab-widgets==3.0.4 # via ipywidgets -kiwisolver==1.4.2 +kiwisolver==1.4.4 # via matplotlib langcodes==3.3.0 # via spacy lxml==4.9.1 # via - # -r requirements.in - # nbconvert # pikepdf + # sec-certs (./../pyproject.toml) markupsafe==2.1.1 + # via jinja2 +matplotlib==3.6.2 # via - # jinja2 - # nbconvert -matplotlib==3.5.1 - # via - # -r requirements.in # pysankeybeta # seaborn -matplotlib-inline==0.1.3 + # sec-certs (./../pyproject.toml) +matplotlib-inline==0.1.6 # via # ipykernel # ipython -mistune==0.8.4 - # via nbconvert -murmurhash==1.0.7 +murmurhash==1.0.9 # via # preshed # spacy # thinc -nbclient==0.6.0 - # via nbconvert -nbconvert==6.5.1 - # via notebook -nbformat==5.3.0 - # via - # ipywidgets - # nbclient - # nbconvert - # notebook -nest-asyncio==1.5.5 +nest-asyncio==1.5.6 # via # ipykernel # jupyter-client - # nbclient - # notebook -networkx==2.8.7 - # via -r requirements.in -notebook==6.4.12 - # via widgetsnbextension -numpy==1.22.3 +networkx==2.8.8 + # via sec-certs (./../pyproject.toml) +numpy==1.23.5 # via - # -r requirements.in # blis + # contourpy # matplotlib # pandas # pysankeybeta # scikit-learn # scipy # seaborn + # sec-certs (./../pyproject.toml) # spacy # tabula-py # thinc -packaging==21.3 +packaging==22.0 # via + # deprecation # ipykernel # matplotlib - # nbconvert # pikepdf # setuptools-scm # spacy -pandas==1.4.2 +pandas==1.5.2 # via - # -r requirements.in # pysankeybeta # seaborn + # sec-certs (./../pyproject.toml) # tabula-py -pandocfilters==1.5.0 - # via nbconvert parso==0.8.3 # via jedi -pathy==0.6.1 +pathy==0.10.1 # via spacy pdftotext==2.2.2 - # via -r requirements.in + # via sec-certs (./../pyproject.toml) pexpect==4.8.0 # via ipython pickleshare==0.7.5 # via ipython -pikepdf==5.1.1 - # via -r requirements.in +pikepdf==6.2.5 + # via sec-certs (./../pyproject.toml) pillow==9.3.0 # via - # -r requirements.in # matplotlib # pikepdf + # sec-certs (./../pyproject.toml) pkgconfig==1.5.5 - # via -r requirements.in -preshed==3.0.6 + # via sec-certs (./../pyproject.toml) +pkgutil-resolve-name==1.3.10 + # via jsonschema +platformdirs==2.6.0 + # via jupyter-core +preshed==3.0.8 # via # spacy # thinc -prometheus-client==0.14.1 - # via notebook -prompt-toolkit==3.0.29 +prompt-toolkit==3.0.36 # via ipython -psutil==5.9.0 +psutil==5.9.4 # via ipykernel ptyprocess==0.7.0 - # via - # pexpect - # terminado + # via pexpect pure-eval==0.2.2 # via stack-data -pycparser==2.21 - # via cffi -pydantic==1.8.2 +pydantic==1.10.2 # via # confection # spacy # thinc -pygments==2.11.2 - # via - # ipython - # nbconvert -pyparsing==3.0.7 - # via - # matplotlib - # packaging -pypdf2==1.27.5 - # via -r requirements.in -pyrsistent==0.18.1 +pygments==2.13.0 + # via ipython +pyparsing==3.0.9 + # via matplotlib +pypdf2==2.11.2 + # via sec-certs (./../pyproject.toml) +pyrsistent==0.19.2 # via jsonschema pysankeybeta==1.4.0 - # via -r requirements.in + # via sec-certs (./../pyproject.toml) python-dateutil==2.8.2 # via - # -r requirements.in # jupyter-client # matplotlib # pandas -pytz==2022.1 + # sec-certs (./../pyproject.toml) +pytz==2022.6 # via pandas pyyaml==6.0 - # via -r requirements.in -pyzmq==22.3.0 + # via sec-certs (./../pyproject.toml) +pyzmq==24.0.1 # via + # ipykernel # jupyter-client - # notebook -rapidfuzz==2.0.7 - # via -r requirements.in -requests==2.27.1 +rapidfuzz==2.13.3 + # via sec-certs (./../pyproject.toml) +requests==2.28.1 # via - # -r requirements.in + # sec-certs (./../pyproject.toml) # spacy -scikit-learn==1.0.2 - # via -r requirements.in +scikit-learn==1.2.0 + # via sec-certs (./../pyproject.toml) scipy==1.9.3 # via - # -r requirements.in # scikit-learn - # seaborn -seaborn==0.11.2 + # sec-certs (./../pyproject.toml) +seaborn==0.12.1 # via - # -r requirements.in # pysankeybeta -send2trash==1.8.0 - # via notebook -setuptools-scm==6.4.2 - # via -r requirements.in + # sec-certs (./../pyproject.toml) +setuptools-scm==7.0.5 + # via sec-certs (./../pyproject.toml) six==1.16.0 # via # asttokens - # bleach # html5lib # python-dateutil -smart-open==5.2.1 +smart-open==6.2.0 # via pathy -soupsieve==2.3.1 +soupsieve==2.3.2.post1 # via beautifulsoup4 spacy==3.4.3 # via - # -r requirements.in # en-core-web-sm + # sec-certs (./../pyproject.toml) spacy-legacy==3.0.10 # via spacy -spacy-loggers==1.0.2 +spacy-loggers==1.0.4 # via spacy -srsly==2.4.3 +srsly==2.4.5 # via # confection # spacy # thinc -stack-data==0.2.0 +stack-data==0.6.2 # via ipython -tabula-py==2.3.0 - # via -r requirements.in -terminado==0.13.3 - # via notebook +tabula-py==2.6.0 + # via sec-certs (./../pyproject.toml) thinc==8.1.5 # via spacy threadpoolctl==3.1.0 # via scikit-learn -tinycss2==1.1.1 - # via nbconvert tomli==2.0.1 # via setuptools-scm -tornado==6.1 +tornado==6.2 # via # ipykernel # jupyter-client - # notebook - # terminado -tqdm==4.64.0 +tqdm==4.64.1 # via - # -r requirements.in + # sec-certs (./../pyproject.toml) # spacy -traitlets==5.1.1 +traitlets==5.6.0 # via + # comm # ipykernel # ipython # ipywidgets # jupyter-client # jupyter-core # matplotlib-inline - # nbclient - # nbconvert - # nbformat - # notebook -typer==0.4.1 +typer==0.7.0 # via # pathy # spacy -typing-extensions==4.2.0 - # via pydantic -urllib3==1.26.9 +typing-extensions==4.4.0 + # via + # pydantic + # pypdf2 + # setuptools-scm +urllib3==1.26.13 # via requests -wasabi==0.9.1 +wasabi==0.10.1 # via # spacy - # spacy-loggers # thinc wcwidth==0.2.5 # via prompt-toolkit webencodings==0.5.1 - # via - # bleach - # html5lib - # tinycss2 -widgetsnbextension==3.6.0 + # via html5lib +widgetsnbextension==4.0.4 # via ipywidgets +zipp==3.11.0 + # via importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/test_requirements.in b/requirements/test_requirements.in deleted file mode 100644 index 0c69b775..00000000 --- a/requirements/test_requirements.in +++ /dev/null @@ -1,3 +0,0 @@ -pytest -coverage -pytest-cov diff --git a/requirements/test_requirements.txt b/requirements/test_requirements.txt index b04802c7..f60c03ca 100644 --- a/requirements/test_requirements.txt +++ b/requirements/test_requirements.txt @@ -1,26 +1,325 @@ -attrs==21.4.0 - # via pytest -coverage[toml]==6.3.2 +appnope==0.1.3 + # via + # ipykernel + # ipython +asttokens==2.2.1 + # via stack-data +attrs==22.1.0 + # via + # jsonschema + # pytest +backcall==0.2.0 + # via ipython +beautifulsoup4==4.11.1 + # via sec-certs (./../pyproject.toml) +billiard==4.0.2 + # via sec-certs (./../pyproject.toml) +blis==0.7.9 + # via thinc +catalogue==2.0.8 + # via + # spacy + # srsly + # thinc +certifi==2022.12.7 + # via requests +charset-normalizer==2.1.1 + # via requests +click==8.1.3 + # via + # sec-certs (./../pyproject.toml) + # typer +comm==0.1.2 + # via ipykernel +confection==0.0.3 + # via thinc +contourpy==1.0.6 + # via matplotlib +coverage[toml]==6.5.0 # via - # -r test_requirements.in # pytest-cov -iniconfig==1.1.1 + # sec-certs (./../pyproject.toml) +cycler==0.11.0 + # via matplotlib +cymem==2.0.7 + # via + # preshed + # spacy + # thinc +debugpy==1.6.4 + # via ipykernel +decorator==5.1.1 + # via ipython +deprecation==2.1.0 + # via pikepdf +distro==1.8.0 + # via tabula-py +en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.4.1/en_core_web_sm-3.4.1.tar.gz + # via sec-certs (./../pyproject.toml) +entrypoints==0.4 + # via jupyter-client +exceptiongroup==1.0.4 # via pytest -packaging==21.3 +executing==1.2.0 + # via stack-data +fonttools==4.38.0 + # via matplotlib +html5lib==1.1 + # via sec-certs (./../pyproject.toml) +idna==3.4 + # via requests +importlib-resources==5.10.1 + # via jsonschema +iniconfig==1.1.1 # via pytest +ipykernel==6.19.1 + # via + # ipywidgets + # sec-certs (./../pyproject.toml) +ipython==8.7.0 + # via + # ipykernel + # ipywidgets +ipywidgets==8.0.3 + # via sec-certs (./../pyproject.toml) +jedi==0.18.2 + # via ipython +jinja2==3.1.2 + # via spacy +joblib==1.2.0 + # via scikit-learn +jsonschema==4.17.3 + # via sec-certs (./../pyproject.toml) +jupyter-client==7.4.8 + # via ipykernel +jupyter-core==5.1.0 + # via jupyter-client +jupyterlab-widgets==3.0.4 + # via ipywidgets +kiwisolver==1.4.4 + # via matplotlib +langcodes==3.3.0 + # via spacy +lxml==4.9.1 + # via + # pikepdf + # sec-certs (./../pyproject.toml) +markupsafe==2.1.1 + # via jinja2 +matplotlib==3.6.2 + # via + # pysankeybeta + # seaborn + # sec-certs (./../pyproject.toml) +matplotlib-inline==0.1.6 + # via + # ipykernel + # ipython +murmurhash==1.0.9 + # via + # preshed + # spacy + # thinc +nest-asyncio==1.5.6 + # via + # ipykernel + # jupyter-client +networkx==2.8.8 + # via sec-certs (./../pyproject.toml) +numpy==1.23.5 + # via + # blis + # contourpy + # matplotlib + # pandas + # pysankeybeta + # scikit-learn + # scipy + # seaborn + # sec-certs (./../pyproject.toml) + # spacy + # tabula-py + # thinc +packaging==22.0 + # via + # deprecation + # ipykernel + # matplotlib + # pikepdf + # pytest + # setuptools-scm + # spacy +pandas==1.5.2 + # via + # pysankeybeta + # seaborn + # sec-certs (./../pyproject.toml) + # tabula-py +parso==0.8.3 + # via jedi +pathy==0.10.1 + # via spacy +pdftotext==2.2.2 + # via sec-certs (./../pyproject.toml) +pexpect==4.8.0 + # via ipython +pickleshare==0.7.5 + # via ipython +pikepdf==6.2.5 + # via sec-certs (./../pyproject.toml) +pillow==9.3.0 + # via + # matplotlib + # pikepdf + # sec-certs (./../pyproject.toml) +pkgconfig==1.5.5 + # via sec-certs (./../pyproject.toml) +pkgutil-resolve-name==1.3.10 + # via jsonschema +platformdirs==2.6.0 + # via jupyter-core pluggy==1.0.0 # via pytest -py==1.11.0 - # via pytest -pyparsing==3.0.7 - # via packaging -pytest==7.1.1 +preshed==3.0.8 + # via + # spacy + # thinc +prompt-toolkit==3.0.36 + # via ipython +psutil==5.9.4 + # via ipykernel +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.2 + # via stack-data +pydantic==1.10.2 + # via + # confection + # spacy + # thinc +pygments==2.13.0 + # via ipython +pyparsing==3.0.9 + # via matplotlib +pypdf2==2.11.2 + # via sec-certs (./../pyproject.toml) +pyrsistent==0.19.2 + # via jsonschema +pysankeybeta==1.4.0 + # via sec-certs (./../pyproject.toml) +pytest==7.2.0 # via - # -r test_requirements.in # pytest-cov -pytest-cov==3.0.0 - # via -r test_requirements.in + # sec-certs (./../pyproject.toml) +pytest-cov==4.0.0 + # via sec-certs (./../pyproject.toml) +python-dateutil==2.8.2 + # via + # jupyter-client + # matplotlib + # pandas + # sec-certs (./../pyproject.toml) +pytz==2022.6 + # via pandas +pyyaml==6.0 + # via sec-certs (./../pyproject.toml) +pyzmq==24.0.1 + # via + # ipykernel + # jupyter-client +rapidfuzz==2.13.3 + # via sec-certs (./../pyproject.toml) +requests==2.28.1 + # via + # sec-certs (./../pyproject.toml) + # spacy +scikit-learn==1.2.0 + # via sec-certs (./../pyproject.toml) +scipy==1.9.3 + # via + # scikit-learn + # sec-certs (./../pyproject.toml) +seaborn==0.12.1 + # via + # pysankeybeta + # sec-certs (./../pyproject.toml) +setuptools-scm==7.0.5 + # via sec-certs (./../pyproject.toml) +six==1.16.0 + # via + # asttokens + # html5lib + # python-dateutil +smart-open==6.2.0 + # via pathy +soupsieve==2.3.2.post1 + # via beautifulsoup4 +spacy==3.4.3 + # via + # en-core-web-sm + # sec-certs (./../pyproject.toml) +spacy-legacy==3.0.10 + # via spacy +spacy-loggers==1.0.4 + # via spacy +srsly==2.4.5 + # via + # confection + # spacy + # thinc +stack-data==0.6.2 + # via ipython +tabula-py==2.6.0 + # via sec-certs (./../pyproject.toml) +thinc==8.1.5 + # via spacy +threadpoolctl==3.1.0 + # via scikit-learn tomli==2.0.1 # via # coverage # pytest + # setuptools-scm +tornado==6.2 + # via + # ipykernel + # jupyter-client +tqdm==4.64.1 + # via + # sec-certs (./../pyproject.toml) + # spacy +traitlets==5.6.0 + # via + # comm + # ipykernel + # ipython + # ipywidgets + # jupyter-client + # jupyter-core + # matplotlib-inline +typer==0.7.0 + # via + # pathy + # spacy +typing-extensions==4.4.0 + # via + # pydantic + # pypdf2 + # setuptools-scm +urllib3==1.26.13 + # via requests +wasabi==0.10.1 + # via + # spacy + # thinc +wcwidth==0.2.5 + # via prompt-toolkit +webencodings==0.5.1 + # via html5lib +widgetsnbextension==4.0.4 + # via ipywidgets +zipp==3.11.0 + # via importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/setup.py b/setup.py deleted file mode 100644 index 1db53172..00000000 --- a/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -from setuptools import find_packages, setup - -setup( - name="sec-certs", - author="Petr Svenda, Stanislav Bobon, Jan Jancar, Adam Janovsky, Jiri Michalik", - author_email="svenda@fi.muni.cz", - packages=find_packages(), - license="MIT", - description="Tool for analysis of security certificates", - long_description=open("README.md").read(), - long_description_content_type="text/markdown", - classifiers=[ - "Development Status :: 3 - Alpha", - "License :: OSI Approved :: MIT License", - "Topic :: Security", - "Topic :: Security :: Cryptography", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - ], - python_requires=">=3.8", - install_requires=open("requirements/requirements.in").read().splitlines(), - extras_require={ - "dev": open("requirements/dev_requirements.in").read().splitlines(), - "test": open("requirements/test_requirements.in").read().splitlines(), - }, - include_package_data=True, - package_data={"sec_certs": ["settings.yaml", "settings-schema.json", "rules.yaml"]}, - entry_points={"console_scripts": ["sec-certs=sec_certs.cli:main"]}, - project_urls={ - "Project homepage": "https://seccerts.org", - "GitHub repository": "https://github.com/crocs-muni/sec-certs/", - "Documentation": "https://seccerts.org/docs", - }, -) diff --git a/sec_certs/__init__.py b/src/sec_certs/__init__.py index 816ea2b8..816ea2b8 100644 --- a/sec_certs/__init__.py +++ b/src/sec_certs/__init__.py diff --git a/sec_certs/__main__.py b/src/sec_certs/__main__.py index 1d699b85..1d699b85 100644 --- a/sec_certs/__main__.py +++ b/src/sec_certs/__main__.py diff --git a/sec_certs/cert_rules.py b/src/sec_certs/cert_rules.py index 145566f7..145566f7 100644 --- a/sec_certs/cert_rules.py +++ b/src/sec_certs/cert_rules.py diff --git a/sec_certs/cli.py b/src/sec_certs/cli.py index a25b55ee..a25b55ee 100644 --- a/sec_certs/cli.py +++ b/src/sec_certs/cli.py diff --git a/sec_certs/config/__init__.py b/src/sec_certs/config/__init__.py index e69de29b..e69de29b 100644 --- a/sec_certs/config/__init__.py +++ b/src/sec_certs/config/__init__.py diff --git a/sec_certs/config/configuration.py b/src/sec_certs/config/configuration.py index 43cfe698..43cfe698 100644 --- a/sec_certs/config/configuration.py +++ b/src/sec_certs/config/configuration.py diff --git a/sec_certs/config/settings-schema.json b/src/sec_certs/config/settings-schema.json index a31f6b3f..a31f6b3f 100644 --- a/sec_certs/config/settings-schema.json +++ b/src/sec_certs/config/settings-schema.json diff --git a/sec_certs/config/settings.yaml b/src/sec_certs/config/settings.yaml index 8d645758..8d645758 100644 --- a/sec_certs/config/settings.yaml +++ b/src/sec_certs/config/settings.yaml diff --git a/sec_certs/constants.py b/src/sec_certs/constants.py index f71bb3c3..f71bb3c3 100644 --- a/sec_certs/constants.py +++ b/src/sec_certs/constants.py diff --git a/sec_certs/dataset/__init__.py b/src/sec_certs/dataset/__init__.py index bace4ddd..bace4ddd 100644 --- a/sec_certs/dataset/__init__.py +++ b/src/sec_certs/dataset/__init__.py diff --git a/sec_certs/dataset/common_criteria.py b/src/sec_certs/dataset/common_criteria.py index b4a7a21f..6b7b4279 100644 --- a/sec_certs/dataset/common_criteria.py +++ b/src/sec_certs/dataset/common_criteria.py @@ -55,7 +55,7 @@ class CCDataset(Dataset[CommonCriteriaCert, CCAuxillaryDatasets], ComplexSeriali certs: dict[str, CommonCriteriaCert] = dict(), root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH, name: str | None = None, - description: str = None, + description: str = "", state: Dataset.DatasetInternalState | None = None, auxillary_datasets: CCAuxillaryDatasets | None = None, ): diff --git a/sec_certs/dataset/cpe.py b/src/sec_certs/dataset/cpe.py index 927ce674..927ce674 100644 --- a/sec_certs/dataset/cpe.py +++ b/src/sec_certs/dataset/cpe.py diff --git a/sec_certs/dataset/cve.py b/src/sec_certs/dataset/cve.py index b65c81c6..ebbd9171 100644 --- a/sec_certs/dataset/cve.py +++ b/src/sec_certs/dataset/cve.py @@ -91,7 +91,7 @@ class CVEDataset(JSONPathDataset, ComplexSerializableType): @classmethod def download_cves(cls, output_path_str: str, start_year: int, end_year: int): output_path = Path(output_path_str) - if not output_path.exists: + if not output_path.exists(): output_path.mkdir() urls = [cls.CVE_URL + str(x) + ".json.zip" for x in range(start_year, end_year + 1)] diff --git a/sec_certs/dataset/dataset.py b/src/sec_certs/dataset/dataset.py index 49a6b340..1c89e771 100644 --- a/sec_certs/dataset/dataset.py +++ b/src/sec_certs/dataset/dataset.py @@ -61,7 +61,7 @@ class Dataset(Generic[CertSubType, AuxillaryDatasetsSubType], ComplexSerializabl certs: dict[str, CertSubType] = dict(), root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH, name: str | None = None, - description: str = None, + description: str = "", state: DatasetInternalState | None = None, auxillary_datasets: AuxillaryDatasetsSubType | None = None, ): diff --git a/sec_certs/dataset/fips.py b/src/sec_certs/dataset/fips.py index bdf220c8..14571f93 100644 --- a/sec_certs/dataset/fips.py +++ b/src/sec_certs/dataset/fips.py @@ -44,7 +44,7 @@ class FIPSDataset(Dataset[FIPSCertificate, FIPSAuxillaryDatasets], ComplexSerial certs: dict[str, FIPSCertificate] = dict(), root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH, name: str | None = None, - description: str = None, + description: str = "", state: Dataset.DatasetInternalState | None = None, auxillary_datasets: FIPSAuxillaryDatasets | None = None, ): diff --git a/sec_certs/dataset/fips_algorithm.py b/src/sec_certs/dataset/fips_algorithm.py index c48cff07..c48cff07 100644 --- a/sec_certs/dataset/fips_algorithm.py +++ b/src/sec_certs/dataset/fips_algorithm.py diff --git a/sec_certs/dataset/fips_iut.py b/src/sec_certs/dataset/fips_iut.py index ce0f2f76..ce0f2f76 100644 --- a/sec_certs/dataset/fips_iut.py +++ b/src/sec_certs/dataset/fips_iut.py diff --git a/sec_certs/dataset/fips_mip.py b/src/sec_certs/dataset/fips_mip.py index 05ca5854..05ca5854 100644 --- a/sec_certs/dataset/fips_mip.py +++ b/src/sec_certs/dataset/fips_mip.py diff --git a/sec_certs/dataset/json_path_dataset.py b/src/sec_certs/dataset/json_path_dataset.py index 6eb4d968..6eb4d968 100644 --- a/sec_certs/dataset/json_path_dataset.py +++ b/src/sec_certs/dataset/json_path_dataset.py diff --git a/sec_certs/dataset/protection_profile.py b/src/sec_certs/dataset/protection_profile.py index edfb6850..edfb6850 100644 --- a/sec_certs/dataset/protection_profile.py +++ b/src/sec_certs/dataset/protection_profile.py diff --git a/sec_certs/model/__init__.py b/src/sec_certs/model/__init__.py index fe1024f9..fe1024f9 100644 --- a/sec_certs/model/__init__.py +++ b/src/sec_certs/model/__init__.py diff --git a/sec_certs/model/cpe_matching.py b/src/sec_certs/model/cpe_matching.py index 0febea5d..0febea5d 100644 --- a/sec_certs/model/cpe_matching.py +++ b/src/sec_certs/model/cpe_matching.py diff --git a/sec_certs/model/evaluation.py b/src/sec_certs/model/evaluation.py index dd5eaffd..dd5eaffd 100644 --- a/sec_certs/model/evaluation.py +++ b/src/sec_certs/model/evaluation.py diff --git a/sec_certs/model/reference_finder.py b/src/sec_certs/model/reference_finder.py index 117a8b9d..117a8b9d 100644 --- a/sec_certs/model/reference_finder.py +++ b/src/sec_certs/model/reference_finder.py diff --git a/sec_certs/model/sar_transformer.py b/src/sec_certs/model/sar_transformer.py index a5bcff57..a5bcff57 100644 --- a/sec_certs/model/sar_transformer.py +++ b/src/sec_certs/model/sar_transformer.py diff --git a/sec_certs/model/transitive_vulnerability_finder.py b/src/sec_certs/model/transitive_vulnerability_finder.py index 1d4c8243..1d4c8243 100644 --- a/sec_certs/model/transitive_vulnerability_finder.py +++ b/src/sec_certs/model/transitive_vulnerability_finder.py diff --git a/sec_certs/rules.yaml b/src/sec_certs/rules.yaml index 87589d72..87589d72 100644 --- a/sec_certs/rules.yaml +++ b/src/sec_certs/rules.yaml diff --git a/sec_certs/sample/__init__.py b/src/sec_certs/sample/__init__.py index ecbbd541..ecbbd541 100644 --- a/sec_certs/sample/__init__.py +++ b/src/sec_certs/sample/__init__.py diff --git a/sec_certs/sample/cc_certificate_id.py b/src/sec_certs/sample/cc_certificate_id.py index 428ca73b..428ca73b 100644 --- a/sec_certs/sample/cc_certificate_id.py +++ b/src/sec_certs/sample/cc_certificate_id.py diff --git a/sec_certs/sample/cc_maintenance_update.py b/src/sec_certs/sample/cc_maintenance_update.py index abe3b176..abe3b176 100644 --- a/sec_certs/sample/cc_maintenance_update.py +++ b/src/sec_certs/sample/cc_maintenance_update.py diff --git a/sec_certs/sample/certificate.py b/src/sec_certs/sample/certificate.py index bb49c0df..bb49c0df 100644 --- a/sec_certs/sample/certificate.py +++ b/src/sec_certs/sample/certificate.py diff --git a/sec_certs/sample/common_criteria.py b/src/sec_certs/sample/common_criteria.py index acd54178..acd54178 100644 --- a/sec_certs/sample/common_criteria.py +++ b/src/sec_certs/sample/common_criteria.py diff --git a/sec_certs/sample/cpe.py b/src/sec_certs/sample/cpe.py index a7532f7f..a7532f7f 100644 --- a/sec_certs/sample/cpe.py +++ b/src/sec_certs/sample/cpe.py diff --git a/sec_certs/sample/cve.py b/src/sec_certs/sample/cve.py index ec024d35..ec024d35 100644 --- a/sec_certs/sample/cve.py +++ b/src/sec_certs/sample/cve.py diff --git a/sec_certs/sample/fips.py b/src/sec_certs/sample/fips.py index 770b21b0..aec791d4 100644 --- a/sec_certs/sample/fips.py +++ b/src/sec_certs/sample/fips.py @@ -9,6 +9,7 @@ from typing import Any, Callable, ClassVar, Final, Literal import dateutil import numpy as np +import pandas as pd import requests from bs4 import BeautifulSoup, Tag from tabula import read_pdf @@ -596,7 +597,11 @@ class FIPSCertificate( try: tabular_data = read_pdf(cert.state.policy_pdf_path, pages=list(table_rich_page_numbers), silent=True) cert.heuristics.algorithms |= set( - itertools.chain.from_iterable(tables.get_algs_from_table(df.to_string()) for df in tabular_data) + itertools.chain.from_iterable( + tables.get_algs_from_table(df.to_string()) + for df in tabular_data + if isinstance(df, pd.DataFrame) + ) ) except Exception as e: logger.warning(f"Error when parsing tables from {cert.dgst}: {e}") diff --git a/sec_certs/sample/fips_algorithm.py b/src/sec_certs/sample/fips_algorithm.py index 16f19e64..16f19e64 100644 --- a/sec_certs/sample/fips_algorithm.py +++ b/src/sec_certs/sample/fips_algorithm.py diff --git a/sec_certs/sample/fips_iut.py b/src/sec_certs/sample/fips_iut.py index cb521ee4..cb521ee4 100644 --- a/sec_certs/sample/fips_iut.py +++ b/src/sec_certs/sample/fips_iut.py diff --git a/sec_certs/sample/fips_mip.py b/src/sec_certs/sample/fips_mip.py index 6918d2aa..6918d2aa 100644 --- a/sec_certs/sample/fips_mip.py +++ b/src/sec_certs/sample/fips_mip.py diff --git a/sec_certs/sample/protection_profile.py b/src/sec_certs/sample/protection_profile.py index b7c2ec34..b7c2ec34 100644 --- a/sec_certs/sample/protection_profile.py +++ b/src/sec_certs/sample/protection_profile.py diff --git a/sec_certs/sample/sar.py b/src/sec_certs/sample/sar.py index 31359299..31359299 100644 --- a/sec_certs/sample/sar.py +++ b/src/sec_certs/sample/sar.py diff --git a/sec_certs/serialization/__init__.py b/src/sec_certs/serialization/__init__.py index e69de29b..e69de29b 100644 --- a/sec_certs/serialization/__init__.py +++ b/src/sec_certs/serialization/__init__.py diff --git a/sec_certs/serialization/json.py b/src/sec_certs/serialization/json.py index 69bbc2ff..69bbc2ff 100644 --- a/sec_certs/serialization/json.py +++ b/src/sec_certs/serialization/json.py diff --git a/sec_certs/serialization/pandas.py b/src/sec_certs/serialization/pandas.py index dc0aae18..dc0aae18 100644 --- a/sec_certs/serialization/pandas.py +++ b/src/sec_certs/serialization/pandas.py diff --git a/sec_certs/utils/__init__.py b/src/sec_certs/utils/__init__.py index e69de29b..e69de29b 100644 --- a/sec_certs/utils/__init__.py +++ b/src/sec_certs/utils/__init__.py diff --git a/sec_certs/utils/extract.py b/src/sec_certs/utils/extract.py index 09460fb7..09460fb7 100644 --- a/sec_certs/utils/extract.py +++ b/src/sec_certs/utils/extract.py diff --git a/sec_certs/utils/helpers.py b/src/sec_certs/utils/helpers.py index 302f4e6a..302f4e6a 100644 --- a/sec_certs/utils/helpers.py +++ b/src/sec_certs/utils/helpers.py diff --git a/sec_certs/utils/pandas.py b/src/sec_certs/utils/pandas.py index 97068e77..97068e77 100644 --- a/sec_certs/utils/pandas.py +++ b/src/sec_certs/utils/pandas.py diff --git a/sec_certs/utils/parallel_processing.py b/src/sec_certs/utils/parallel_processing.py index 50806a67..50806a67 100644 --- a/sec_certs/utils/parallel_processing.py +++ b/src/sec_certs/utils/parallel_processing.py diff --git a/sec_certs/utils/pdf.py b/src/sec_certs/utils/pdf.py index 1d04a697..1d04a697 100644 --- a/sec_certs/utils/pdf.py +++ b/src/sec_certs/utils/pdf.py diff --git a/sec_certs/utils/sanitization.py b/src/sec_certs/utils/sanitization.py index 2f9cd046..2f9cd046 100644 --- a/sec_certs/utils/sanitization.py +++ b/src/sec_certs/utils/sanitization.py diff --git a/sec_certs/utils/tables.py b/src/sec_certs/utils/tables.py index 29def971..29def971 100644 --- a/sec_certs/utils/tables.py +++ b/src/sec_certs/utils/tables.py diff --git a/sec_certs/utils/tqdm.py b/src/sec_certs/utils/tqdm.py index 77eeae94..77eeae94 100644 --- a/sec_certs/utils/tqdm.py +++ b/src/sec_certs/utils/tqdm.py |
