diff --git a/.github/workflows/nosetests.yml b/.github/workflows/nosetests.yml index d7fc97d..b6fb126 100644 --- a/.github/workflows/nosetests.yml +++ b/.github/workflows/nosetests.yml @@ -33,7 +33,7 @@ jobs: - name: Install Python dependencies run: | python -m pip install --upgrade pip poetry - poetry install -E fileobjects -E openioc -E virustotal -E docs -E pdfexport -E url -E email + poetry install -E fileobjects -E openioc -E virustotal -E docs -E pdfexport -E url -E email -E brotli - name: Test with nosetests run: | diff --git a/CHANGELOG.txt b/CHANGELOG.txt index de398ab..ed18e1b 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,6 +2,166 @@ Changelog ========= +v2.4.138 (2021-02-08) +--------------------- + +Changes +~~~~~~~ +- Bump version. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] + + +v2.4.137.4 (2021-02-04) +----------------------- + +Changes +~~~~~~~ +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Bump objects. [Raphaël Vinot] +- Add kw_params to tags. [Raphaël Vinot] +- Bump objects. [Raphaël Vinot] +- Bump template ID in test case. [Raphaël Vinot] + + +v2.4.137.3 (2021-02-02) +----------------------- + +Changes +~~~~~~~ +- Bump version. [Raphaël Vinot] +- Bump changelog. [Raphaël Vinot] +- Bump objects. [Raphaël Vinot] +- Fix and improve optional dependencies. [Raphaël Vinot] +- Make brotli optional. [Raphaël Vinot] + + +v2.4.137.2 (2021-02-01) +----------------------- + +New +~~~ +- Add in ability to create/update/delete MISP Event Reports. [Tom King] +- Hard delete flag for objects. [Raphaël Vinot] +- Fail if a duplicate object is added to an event. [Raphaël Vinot] +- Support brotli compression. [Jakub Onderka] +- Hard delete flag for objects. [Raphaël Vinot] +- Fail if a duplicate object is added to an event. [Raphaël Vinot] +- Add in ability to create/update/delete MISP Event Reports. [Tom King] +- Add in ability to create/update/delete MISP Event Reports. [Tom King] +- Hard delete flag for objects. [Raphaël Vinot] + +Changes +~~~~~~~ +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Add brotli support in the dependencies. [Raphaël Vinot] +- Make mypy happy. [Raphaël Vinot] +- Make clear that to_json returns str. [Raphaël Vinot] +- Disable correlation on malware-sample for FileObject. [Raphaël Vinot] +- Bump objects templates. [Raphaël Vinot] +- Add missing autodoc. [Raphaël Vinot] + + fix #693 +- Add in delete function for a MISP Object. [Tom King] +- Fix return of delete_event_report. [Raphaël Vinot] +- Remove critical warning if lief is not installed. [Raphaël Vinot] + + Fix https://github.com/MISP/MISP/issues/6908 +- Bump deps. [Raphaël Vinot] +- Allow response of delete to be pythonify, add in nosetest. [Tom King] +- Add ability to get event reports from the Event ID. [Tom King] +- Remove travis file, GH Actions is better. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Remove critical warning if lief is not installed. [Raphaël Vinot] + + Fix https://github.com/MISP/MISP/issues/6908 +- Add test case fir add_attribute and enforceWarninglist=True. [Raphaël + Vinot] +- Add testcase with breakOnDuplicate in a MISPObject. [Raphaël Vinot] +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Add test case for page/limit in logs search. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Improve docstring for get_event. [Raphaël Vinot] + + fix #686 +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Show size when the json is not loadable. [Raphaël Vinot] +- Add authenticode support in generate_file_objects. [Raphaël Vinot] +- Use lief 0.11.0, generate authenticode entries. [Raphaël Vinot] +- Bump objects. [Raphaël Vinot] +- Bump deps, add 3.9 in GH. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Bump deps, objects templates. [Raphaël Vinot] +- Make clear that to_json returns str. [Raphaël Vinot] +- Disable correlation on malware-sample for FileObject. [Raphaël Vinot] +- Bump objects templates. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Add missing autodoc. [Raphaël Vinot] + + fix #693 +- Add in delete function for a MISP Object. [Tom King] +- Bump deps. [Raphaël Vinot] +- Fix return of delete_event_report. [Raphaël Vinot] +- Remove travis file, GH Actions is better. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Remove critical warning if lief is not installed. [Raphaël Vinot] + + Fix https://github.com/MISP/MISP/issues/6908 +- Add test case fir add_attribute and enforceWarninglist=True. [Raphaël + Vinot] +- Add testcase with breakOnDuplicate in a MISPObject. [Raphaël Vinot] +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Add test case for page/limit in logs search. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Improve docstring for get_event. [Raphaël Vinot] + + fix #686 +- Bump changelog. [Raphaël Vinot] +- Bump version. [Raphaël Vinot] +- Show size when the json is not loadable. [Raphaël Vinot] +- Add authenticode support in generate_file_objects. [Raphaël Vinot] +- Use lief 0.11.0, generate authenticode entries. [Raphaël Vinot] +- Bump objects. [Raphaël Vinot] +- Bump deps, add 3.9 in GH. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Bump deps, objects templates. [Raphaël Vinot] +- Allow response of delete to be pythonify, add in nosetest. [Tom King] +- Add ability to get event reports from the Event ID. [Tom King] +- Remove travis file, GH Actions is better. [Raphaël Vinot] +- Bump deps. [Raphaël Vinot] +- Remove critical warning if lief is not installed. [Raphaël Vinot] + + Fix https://github.com/MISP/MISP/issues/6908 +- Add test case fir add_attribute and enforceWarninglist=True. [Raphaël + Vinot] +- Add testcase with breakOnDuplicate in a MISPObject. [Raphaël Vinot] + +Fix +~~~ +- Flake error. [Raphaël Vinot] +- Update testlive accordingly. [Raphaël Vinot] +- Better warning if lief is outdated. [Raphaël Vinot] +- Call the AbstractMISP.from_dict at the end of the function to ensure + the edited flag remains false. [Tom King] +- Better warning if lief is outdated. [Raphaël Vinot] +- Update minimal dependency for lief in setup.py. [Raphaël Vinot] +- [dev mode only] force older jedi to avoid ipython exception. [Raphaël + Vinot] +- Add python 3.9 in GH Actions. [Raphaël Vinot] +- Update testlive accordingly. [Raphaël Vinot] +- Better warning if lief is outdated. [Raphaël Vinot] +- Update minimal dependency for lief in setup.py. [Raphaël Vinot] +- [dev mode only] force older jedi to avoid ipython exception. [Raphaël + Vinot] +- Add python 3.9 in GH Actions. [Raphaël Vinot] +- Call the AbstractMISP.from_dict at the end of the function to ensure + the edited flag remains false. [Tom King] + + v2.4.137.1 (2021-01-21) ----------------------- @@ -11,6 +171,7 @@ New Changes ~~~~~~~ +- Bump changelog. [Raphaël Vinot] - Bump version. [Raphaël Vinot] - Add test case for page/limit in logs search. [Raphaël Vinot] - Bump deps. [Raphaël Vinot] diff --git a/docs/source/modules.rst b/docs/source/modules.rst index 1566ce4..655b432 100644 --- a/docs/source/modules.rst +++ b/docs/source/modules.rst @@ -1,4 +1,4 @@ -pymisp - Modules +pymisp - Classes ================ .. toctree:: @@ -33,6 +33,20 @@ MISPEvent :members: :inherited-members: +MISPEventBlocklist +------------------ + +.. autoclass:: MISPEventBlocklist + :members: + :inherited-members: + +MISPEventDelegation +------------------- + +.. autoclass:: MISPEventDelegation + :members: + :inherited-members: + MISPAttribute ------------- @@ -61,6 +75,13 @@ MISPObjectReference :members: :inherited-members: +MISPObjectTemplate +------------------ + +.. autoclass:: MISPObjectTemplate + :members: + :inherited-members: + MISPTag ------- @@ -75,6 +96,12 @@ MISPUser :members: :inherited-members: +MISPUserSetting +--------------- + +.. autoclass:: MISPUserSetting + :members: + :inherited-members: MISPOrganisation ---------------- @@ -83,3 +110,87 @@ MISPOrganisation :members: :inherited-members: +MISPOrganisationBlocklist +------------------------- + +.. autoclass:: MISPOrganisationBlocklist + :members: + :inherited-members: + +MISPFeed +-------- + +.. autoclass:: MISPFeed + :members: + :inherited-members: + +MISPInbox +--------- + +.. autoclass:: MISPInbox + :members: + :inherited-members: + +MISPLog +------- + +.. autoclass:: MISPLog + :members: + :inherited-members: + +MISPNoticelist +-------------- + +.. autoclass:: MISPNoticelist + :members: + :inherited-members: + +MISPRole +-------- + +.. autoclass:: MISPRole + :members: + :inherited-members: + +MISPServer +---------- + +.. autoclass:: MISPServer + :members: + :inherited-members: + +MISPShadowAttribute +------------------- + +.. autoclass:: MISPShadowAttribute + :members: + :inherited-members: + +MISPSharingGroup +---------------- + +.. autoclass:: MISPSharingGroup + :members: + :inherited-members: + +MISPSighting +------------ + +.. autoclass:: MISPSighting + :members: + :inherited-members: + +MISPTaxonomy +------------ + +.. autoclass:: MISPTaxonomy + :members: + :inherited-members: + +MISPWarninglist +--------------- + +.. autoclass:: MISPWarninglist + :members: + :inherited-members: + diff --git a/poetry.lock b/poetry.lock index 8b002c2..afe33a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -89,7 +89,7 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "3.2.3" +version = "3.3.0" description = "An easy safelist-based HTML-sanitizing tool." category = "dev" optional = false @@ -100,6 +100,17 @@ packaging = "*" six = ">=1.9.0" webencodings = "*" +[[package]] +name = "brotlipy" +version = "0.7.0" +description = "Python binding to the Brotli library" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "certifi" version = "2020.12.5" @@ -152,7 +163,7 @@ name = "colorclass" version = "2.2.0" description = "Colorful worry-free console applications for Linux, Mac OS X, and Windows." category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -171,7 +182,7 @@ name = "compressed-rtf" version = "1.0.6" description = "Compressed Rich Text Format (RTF) compression and decompression package" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -203,22 +214,22 @@ yaml = ["PyYAML (>=3.10)"] [[package]] name = "cryptography" -version = "3.3.1" +version = "3.4.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +optional = true +python-versions = ">=3.6" [package.dependencies] cffi = ">=1.12" -six = ">=1.4.1" +setuptools-rust = ">=0.11.4" [package.extras] docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] +test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] name = "decorator" @@ -271,7 +282,7 @@ name = "easygui" version = "0.98.2" description = "EasyGUI is a module for very simple, very easy GUI programming in Python. EasyGUI is different from other GUI generators in that EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by simple function calls." category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -279,7 +290,7 @@ name = "ebcdic" version = "1.1.1" description = "Additional EBCDIC codecs" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -295,7 +306,7 @@ name = "extract-msg" version = "0.28.1" description = "Extracts emails and attachments saved in Microsoft Outlook's .msg files" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -340,7 +351,7 @@ name = "imapclient" version = "2.1.0" description = "Easy-to-use, Pythonic and complete IMAP client library" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -440,7 +451,7 @@ testing = ["Django (<3.1)", "colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] [[package]] name = "jinja2" -version = "2.11.2" +version = "2.11.3" description = "A very fast and expressive template engine." category = "main" optional = false @@ -502,7 +513,7 @@ test = ["jedi (<=0.17.2)", "ipykernel", "ipython", "mock", "pytest", "pytest-asy [[package]] name = "jupyter-core" -version = "4.7.0" +version = "4.7.1" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "dev" optional = false @@ -564,7 +575,7 @@ name = "lark-parser" version = "0.11.1" description = "a modern parsing library" category = "main" -optional = false +optional = true python-versions = "*" [package.extras] @@ -608,7 +619,7 @@ name = "msoffcrypto-tool" version = "4.11.0" description = "A Python tool and library for decrypting MS Office files with passwords or other keys" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -757,7 +768,7 @@ name = "olefile" version = "0.46" description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] @@ -765,7 +776,7 @@ name = "oletools" version = "0.56" description = "Python tools to analyze security characteristics of MS Office and OLE files (also called Structured Storage, Compound File Binary Format or Compound Document File Format), for Malware Analysis and Incident Response #DFIR" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -778,7 +789,7 @@ pyparsing = ">=2.1.0,<3" [[package]] name = "packaging" -version = "20.8" +version = "20.9" description = "Core utilities for Python packages" category = "main" optional = false @@ -811,7 +822,7 @@ name = "pcodedmp" version = "1.2.6" description = "A VBA p-code disassembler" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -968,10 +979,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pytz" -version = "2020.5" +version = "2021.1" description = "World timezone definitions, modern and historical" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -992,7 +1003,7 @@ python-versions = "*" [[package]] name = "pyzmq" -version = "22.0.1" +version = "22.0.2" description = "Python bindings for 0MQ" category = "dev" optional = false @@ -1065,7 +1076,7 @@ name = "rtfde" version = "0.0.2" description = "A library for extracting HTML content from RTF encapsulated HTML as commonly found in the exchange MSG email format." category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] @@ -1076,6 +1087,14 @@ oletools = ">=0.56" dev = ["lxml (>=4.6)"] msg_parse = ["extract-msg (>=0.27)"] +[[package]] +name = "semantic-version" +version = "2.8.5" +description = "A library implementing the 'SemVer' scheme." +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "send2trash" version = "1.5.0" @@ -1084,6 +1103,18 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "setuptools-rust" +version = "0.11.6" +description = "Setuptools rust extension plugin" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +semantic-version = ">=2.6.0" +toml = ">=0.9.0" + [[package]] name = "six" version = "1.15.0" @@ -1249,6 +1280,14 @@ python-versions = "*" [package.extras] test = ["pathlib2"] +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = true +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "tornado" version = "6.1" @@ -1294,7 +1333,7 @@ name = "tzlocal" version = "2.1" description = "tzinfo object for the local timezone" category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -1308,6 +1347,9 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +[package.dependencies] +brotlipy = {version = ">=0.6.0", optional = true, markers = "extra == \"brotli\""} + [package.extras] brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] @@ -1349,7 +1391,7 @@ name = "win-unicode-console" version = "0.5" description = "Enable Unicode input and display when running Python from Windows console." category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -1373,6 +1415,7 @@ docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [extras] +brotli = ["urllib3"] docs = ["sphinx-autodoc-typehints", "recommonmark"] email = ["extract_msg", "RTFDE", "oletools"] fileobjects = ["python-magic", "pydeep", "lief"] @@ -1384,7 +1427,7 @@ virustotal = ["validators"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "0111246c147cf1b378686b6e839730cd8708babd1c1024509be97a5d29a1529e" +content-hash = "9f7289c3410f9000dbf655580c0f32f8685b72e799f2d0030b029685b6e1db2a" [metadata.files] alabaster = [ @@ -1435,8 +1478,47 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, ] bleach = [ - {file = "bleach-3.2.3-py2.py3-none-any.whl", hash = "sha256:2d3b3f7e7d69148bb683b26a3f21eabcf62fa8fb7bc75d0e7a13bcecd9568d4d"}, - {file = "bleach-3.2.3.tar.gz", hash = "sha256:c6ad42174219b64848e2e2cd434e44f56cd24a93a9b4f8bc52cfed55a1cd5aad"}, + {file = "bleach-3.3.0-py2.py3-none-any.whl", hash = "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125"}, + {file = "bleach-3.3.0.tar.gz", hash = "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433"}, +] +brotlipy = [ + {file = "brotlipy-0.7.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:af65d2699cb9f13b26ec3ba09e75e80d31ff422c03675fcb36ee4dabe588fdc2"}, + {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:50ca336374131cfad20612f26cc43c637ac0bfd2be3361495e99270883b52962"}, + {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:fd1d1c64214af5d90014d82cee5d8141b13d44c92ada7a0c0ec0679c6f15a471"}, + {file = "brotlipy-0.7.0-cp27-cp27m-win32.whl", hash = "sha256:5de6f7d010b7558f72f4b061a07395c5c3fd57f0285c5af7f126a677b976a868"}, + {file = "brotlipy-0.7.0-cp27-cp27m-win_amd64.whl", hash = "sha256:637847560d671657f993313ecc6c6c6666a936b7a925779fd044065c7bc035b9"}, + {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:b4c98b0d2c9c7020a524ca5bbff42027db1004c6571f8bc7b747f2b843128e7a"}, + {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8b39abc3256c978f575df5cd7893153277216474f303e26f0e43ba3d3969ef96"}, + {file = "brotlipy-0.7.0-cp33-cp33m-macosx_10_6_intel.whl", hash = "sha256:96bc59ff9b5b5552843dc67999486a220e07a0522dddd3935da05dc194fa485c"}, + {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:091b299bf36dd6ef7a06570dbc98c0f80a504a56c5b797f31934d2ad01ae7d17"}, + {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:0be698678a114addcf87a4b9496c552c68a2c99bf93cf8e08f5738b392e82057"}, + {file = "brotlipy-0.7.0-cp33-cp33m-win32.whl", hash = "sha256:d2c1c724c4ac375feb2110f1af98ecdc0e5a8ea79d068efb5891f621a5b235cb"}, + {file = "brotlipy-0.7.0-cp33-cp33m-win_amd64.whl", hash = "sha256:3a3e56ced8b15fbbd363380344f70f3b438e0fd1fcf27b7526b6172ea950e867"}, + {file = "brotlipy-0.7.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:653faef61241bf8bf99d73ca7ec4baa63401ba7b2a2aa88958394869379d67c7"}, + {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:0fa6088a9a87645d43d7e21e32b4a6bf8f7c3939015a50158c10972aa7f425b7"}, + {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:79aaf217072840f3e9a3b641cccc51f7fc23037496bd71e26211856b93f4b4cb"}, + {file = "brotlipy-0.7.0-cp34-cp34m-win32.whl", hash = "sha256:a07647886e24e2fb2d68ca8bf3ada398eb56fd8eac46c733d4d95c64d17f743b"}, + {file = "brotlipy-0.7.0-cp34-cp34m-win_amd64.whl", hash = "sha256:c6cc0036b1304dd0073eec416cb2f6b9e37ac8296afd9e481cac3b1f07f9db25"}, + {file = "brotlipy-0.7.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:07194f4768eb62a4f4ea76b6d0df6ade185e24ebd85877c351daa0a069f1111a"}, + {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7e31f7adcc5851ca06134705fcf3478210da45d35ad75ec181e1ce9ce345bb38"}, + {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9448227b0df082e574c45c983fa5cd4bda7bfb11ea6b59def0940c1647be0c3c"}, + {file = "brotlipy-0.7.0-cp35-cp35m-win32.whl", hash = "sha256:dc6c5ee0df9732a44d08edab32f8a616b769cc5a4155a12d2d010d248eb3fb07"}, + {file = "brotlipy-0.7.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3c1d5e2cf945a46975bdb11a19257fa057b67591eb232f393d260e7246d9e571"}, + {file = "brotlipy-0.7.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:2a80319ae13ea8dd60ecdc4f5ccf6da3ae64787765923256b62c598c5bba4121"}, + {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2699945a0a992c04fc7dc7fa2f1d0575a2c8b4b769f2874a08e8eae46bef36ae"}, + {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1ea4e578241504b58f2456a6c69952c88866c794648bdc74baee74839da61d44"}, + {file = "brotlipy-0.7.0-cp36-cp36m-win32.whl", hash = "sha256:2e5c64522364a9ebcdf47c5744a5ddeb3f934742d31e61ebfbbc095460b47162"}, + {file = "brotlipy-0.7.0-cp36-cp36m-win_amd64.whl", hash = "sha256:09ec3e125d16749b31c74f021aba809541b3564e5359f8c265cbae442810b41a"}, + {file = "brotlipy-0.7.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:4e4638b49835d567d447a2cfacec109f9a777f219f071312268b351b6839436d"}, + {file = "brotlipy-0.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1379347337dc3d20b2d61456d44ccce13e0625db2611c368023b4194d5e2477f"}, + {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:22a53ccebcce2425e19f99682c12be510bf27bd75c9b77a1720db63047a77554"}, + {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4bac11c1ffba9eaa2894ec958a44e7f17778b3303c2ee9f99c39fcc511c26668"}, + {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:08a16ebe2ffc52f645c076f96b138f185e74e5d59b4a65e84af17d5997d82890"}, + {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7b21341eab7c939214e457e24b265594067a6ad268305289148ebaf2dacef325"}, + {file = "brotlipy-0.7.0-pp226-pp226u-macosx_10_10_x86_64.whl", hash = "sha256:786afc8c9bd67de8d31f46e408a3386331e126829114e4db034f91eacb05396d"}, + {file = "brotlipy-0.7.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:890b973039ba26c3ad2e86e8908ab527ed64f9b1357f81a676604da8088e4bf9"}, + {file = "brotlipy-0.7.0-pp37-pypy37_pp73-manylinux1_x86_64.whl", hash = "sha256:4864ac52c116ea3e3a844248a9c9fbebb8797891cbca55484ecb6eed3ebeba24"}, + {file = "brotlipy-0.7.0.tar.gz", hash = "sha256:36def0b859beaf21910157b4c33eb3b06d8ce459c942102f16988cca6ea164df"}, ] certifi = [ {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, @@ -1556,20 +1638,13 @@ coveralls = [ {file = "coveralls-3.0.0.tar.gz", hash = "sha256:5399c0565ab822a70a477f7031f6c88a9dd196b3de2877b3facb43b51bd13434"}, ] cryptography = [ - {file = "cryptography-3.3.1-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:c366df0401d1ec4e548bebe8f91d55ebcc0ec3137900d214dd7aac8427ef3030"}, - {file = "cryptography-3.3.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9f6b0492d111b43de5f70052e24c1f0951cb9e6022188ebcb1cc3a3d301469b0"}, - {file = "cryptography-3.3.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a69bd3c68b98298f490e84519b954335154917eaab52cf582fa2c5c7efc6e812"}, - {file = "cryptography-3.3.1-cp27-cp27m-win32.whl", hash = "sha256:84ef7a0c10c24a7773163f917f1cb6b4444597efd505a8aed0a22e8c4780f27e"}, - {file = "cryptography-3.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:594a1db4511bc4d960571536abe21b4e5c3003e8750ab8365fafce71c5d86901"}, - {file = "cryptography-3.3.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d"}, - {file = "cryptography-3.3.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:83d9d2dfec70364a74f4e7c70ad04d3ca2e6a08b703606993407bf46b97868c5"}, - {file = "cryptography-3.3.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:dc42f645f8f3a489c3dd416730a514e7a91a59510ddaadc09d04224c098d3302"}, - {file = "cryptography-3.3.1-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:788a3c9942df5e4371c199d10383f44a105d67d401fb4304178020142f020244"}, - {file = "cryptography-3.3.1-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:69e836c9e5ff4373ce6d3ab311c1a2eed274793083858d3cd4c7d12ce20d5f9c"}, - {file = "cryptography-3.3.1-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:9e21301f7a1e7c03dbea73e8602905a4ebba641547a462b26dd03451e5769e7c"}, - {file = "cryptography-3.3.1-cp36-abi3-win32.whl", hash = "sha256:b4890d5fb9b7a23e3bf8abf5a8a7da8e228f1e97dc96b30b95685df840b6914a"}, - {file = "cryptography-3.3.1-cp36-abi3-win_amd64.whl", hash = "sha256:0e85aaae861d0485eb5a79d33226dd6248d2a9f133b81532c8f5aae37de10ff7"}, - {file = "cryptography-3.3.1.tar.gz", hash = "sha256:7e177e4bea2de937a584b13645cab32f25e3d96fc0bc4a4cf99c27dc77682be6"}, + {file = "cryptography-3.4.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:e63b8da1d77ff60a73d72db68cb72e8ffbe9f7319e5ffa23f6bfe2757d6871e3"}, + {file = "cryptography-3.4.1-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:4d8df1f5b6b172fe53a465d8fc32134a07ccd4dc677f19af85562bcbc7e97504"}, + {file = "cryptography-3.4.1-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:cd1d14b6c52d9372a7f4682576fa7d9c9d256afa6cc50828b337dbb8a9596066"}, + {file = "cryptography-3.4.1-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:85c7d84beacf32bf629767f06c78af0350eb869e2830e4ebe05b239c695eca38"}, + {file = "cryptography-3.4.1-cp36-abi3-win32.whl", hash = "sha256:007edf78a0b96513b94c1c7cc515286aec72f787bdcd11892edcdec9e27e936d"}, + {file = "cryptography-3.4.1-cp36-abi3-win_amd64.whl", hash = "sha256:423c12d04df7ed3323e74745cba91056a411bd8f57609a6a64562845ccc5541a"}, + {file = "cryptography-3.4.1.tar.gz", hash = "sha256:be70bdaa29bcacf70896dae3a6f3eef91daf51bfba8a49dbfb9c23bb2cc914ba"}, ] decorator = [ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, @@ -1642,8 +1717,8 @@ jedi = [ {file = "jedi-0.17.2.tar.gz", hash = "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20"}, ] jinja2 = [ - {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, - {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, + {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, + {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, ] json5 = [ {file = "json5-0.9.5-py2.py3-none-any.whl", hash = "sha256:af1a1b9a2850c7f62c23fde18be4749b3599fd302f494eebf957e2ada6b9e42c"}, @@ -1658,8 +1733,8 @@ jupyter-client = [ {file = "jupyter_client-6.1.11.tar.gz", hash = "sha256:649ca3aca1e28f27d73ef15868a7c7f10d6e70f761514582accec3ca6bb13085"}, ] jupyter-core = [ - {file = "jupyter_core-4.7.0-py3-none-any.whl", hash = "sha256:0a451c9b295e4db772bdd8d06f2f1eb31caeec0e81fbb77ba37d4a3024e3b315"}, - {file = "jupyter_core-4.7.0.tar.gz", hash = "sha256:aa1f9496ab3abe72da4efe0daab0cb2233997914581f9a071e07498c6add8ed3"}, + {file = "jupyter_core-4.7.1-py3-none-any.whl", hash = "sha256:8c6c0cac5c1b563622ad49321d5ec47017bd18b94facb381c6973a0486395f8e"}, + {file = "jupyter_core-4.7.1.tar.gz", hash = "sha256:79025cb3225efcd36847d0840f3fc672c0abd7afd0de83ba8a1d3837619122b4"}, ] jupyterlab = [ {file = "jupyterlab-2.2.9-py3-none-any.whl", hash = "sha256:59af02c26a15ec2d2862a15bc72e41ae304b406a0b0d3f4f705eeb7caf91902b"}, @@ -1791,8 +1866,8 @@ oletools = [ {file = "oletools-0.56.zip", hash = "sha256:8481cd60352399e15e9290ac57862a65952e9c83e3526ba833991a5c78f5cca1"}, ] packaging = [ - {file = "packaging-20.8-py2.py3-none-any.whl", hash = "sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858"}, - {file = "packaging-20.8.tar.gz", hash = "sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093"}, + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandocfilters = [ {file = "pandocfilters-1.4.3.tar.gz", hash = "sha256:bc63fbb50534b4b1f8ebe1860889289e8af94a23bff7445259592df25a3906eb"}, @@ -1898,8 +1973,8 @@ python-magic = [ {file = "python_magic-0.4.20-py2.py3-none-any.whl", hash = "sha256:33ce94d9395aa269a9c5fac10ae124a5fb328ebe248f36efc5a43922edee662e"}, ] pytz = [ - {file = "pytz-2020.5-py2.py3-none-any.whl", hash = "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4"}, - {file = "pytz-2020.5.tar.gz", hash = "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5"}, + {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, + {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] pywin32 = [ {file = "pywin32-300-cp35-cp35m-win32.whl", hash = "sha256:1c204a81daed2089e55d11eefa4826c05e604d27fe2be40b6bf8db7b6a39da63"}, @@ -1926,37 +2001,38 @@ pywinpty = [ {file = "pywinpty-0.5.7.tar.gz", hash = "sha256:2d7e9c881638a72ffdca3f5417dd1563b60f603e1b43e5895674c2a1b01f95a0"}, ] pyzmq = [ - {file = "pyzmq-22.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2cc0094d5539feea4c54ca5e9019e9aa967f621af2ddabe69db79ecb6a8d9549"}, - {file = "pyzmq-22.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ab61e794d07cb5543254f7a2ef9a64ced98548314d7bedcf507281b88f57cae5"}, - {file = "pyzmq-22.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1a797bca8b52ffeb78446ed46402ba1fe48d5dbdc9669aa24ab8b006b3eaedc1"}, - {file = "pyzmq-22.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:1cebf51880eb8be28aa8c8f6d1e7d2120efbf6be5407fa3e47f0e97204f75adb"}, - {file = "pyzmq-22.0.1-cp36-cp36m-win32.whl", hash = "sha256:69fd269dd8c78157e51a4b62d7ceeaac5250195b0ff2bf83a359943faa0a1b62"}, - {file = "pyzmq-22.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:dad2dc96ebbafa9cc9aaa8f595bed4aa01abac4daaa0db1ae11e0b1e7ea539b8"}, - {file = "pyzmq-22.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3bd113b0f6c03b268583efaa91681400a65378cf16b829ce7d8113a7e601c3ff"}, - {file = "pyzmq-22.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:57a8cf39b464e3ac567477978819642e04811bc469db274629059374bac3285a"}, - {file = "pyzmq-22.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d664447ac3fc862707fe33608343b3ceaeca6f90fb739bb67f9d708836dbff10"}, - {file = "pyzmq-22.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35a586260ba2d0766d810f8d6b4e5325731a689f1848a5bee79aa10e213e76f4"}, - {file = "pyzmq-22.0.1-cp37-cp37m-win32.whl", hash = "sha256:029b689a5010645e455688d83071e09cd2d75b113c44245ba0b054e409d018e2"}, - {file = "pyzmq-22.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:17104eda2151c8a3d0655ca8ece794d4df209a07d70a5ba90bf1cf27a5e30d51"}, - {file = "pyzmq-22.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:40e5003b3aefcc4de6898bf284de804dcf3f299019ac3632062aac3725b6a908"}, - {file = "pyzmq-22.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9bf4d98ae6b5f962c2b790843204625fedd4ede79fd918c9f634d9ca8ab3d855"}, - {file = "pyzmq-22.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ada90fd5c69442ea3b4769e38c34d131b69db1fe3fce674c6113ced249a2e94a"}, - {file = "pyzmq-22.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cc9ee1702adc37ffa6fdf77a9e9579b56ed52261031347257b6f42f30a9f4571"}, - {file = "pyzmq-22.0.1-cp38-cp38-win32.whl", hash = "sha256:be9f8fbccac03f5df850ad1c927e1568d0e85aeba0a793b1cabdc7c14315af09"}, - {file = "pyzmq-22.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:b5ea1428cf96dca99fab4951ed86a94b868b9cfc8d7cd5be489dce32186ce710"}, - {file = "pyzmq-22.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aff6f76d5b4b53d6949f72454b2f8f3280abf084ebaf8b811c4bd8499b159e6f"}, - {file = "pyzmq-22.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ece537e3a7417e907e57ac0a2392b142151931a9e7a1a5468f40911832486e56"}, - {file = "pyzmq-22.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:28506f107903f95e0ff5029d1271e6015caa04caf53d14be4e83476995b28938"}, - {file = "pyzmq-22.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7d46088b9b2ef3d14fa2c7f5e84a0fc119ba4685adb68d006a78ccc7a562070e"}, - {file = "pyzmq-22.0.1-cp39-cp39-win32.whl", hash = "sha256:53fd35f3ebcc17d292e318b1b9471417d07f7b1e87de3efeebc611c97b4840b6"}, - {file = "pyzmq-22.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:02b865dd877215df5ada1ecfc72b9380cd789d63498103ebf28e7e397f1c65fa"}, - {file = "pyzmq-22.0.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:43f30f6c7ac301573c94943f87caede6a54ca928eaabd3936f6b50fd61b02c17"}, - {file = "pyzmq-22.0.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:149decda1a9bdb5bdac17bbba3bd78e93d0fe85e8155cf3ea18ebeceb733615f"}, - {file = "pyzmq-22.0.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:dd85a8f1620ac267548d96d55c1de3b431afd8d1eeb9827dfe423bf238804e13"}, - {file = "pyzmq-22.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c17ba678f4dc187d142f512cf77d9e6c6263f83a5ae622315673c474fd72b9c7"}, - {file = "pyzmq-22.0.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:ef61a3f7b82b13a70737a28e11da4f54219ffa31bb3073e9c33c75a65c4046ab"}, - {file = "pyzmq-22.0.1-pp37-pypy37_pp73-win32.whl", hash = "sha256:cee43acbd582f7b34fbe6b2713a2c1be78416c3cba738128ecfdab2b21e4cc39"}, - {file = "pyzmq-22.0.1.tar.gz", hash = "sha256:f7869dcb80a71ef83f1e1551f0d1ba4831a5c79416a441cb95ac82c9a954ee54"}, + {file = "pyzmq-22.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c2a8d70fe2a321a83d274970481eb244bff027b58511e943ef564721530ba786"}, + {file = "pyzmq-22.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b68033181dc2e622bb5baa9b16d5933303779a03dc89860f4c44f629426d802c"}, + {file = "pyzmq-22.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:9bae89912cac9f03d41adb66981f6e753cfd4e451937b2cd435d732fd4ccb1a3"}, + {file = "pyzmq-22.0.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:75b68890219231bd60556a1c6e0d2dc05fa1b179a26c876442c83a0d77958bc9"}, + {file = "pyzmq-22.0.2-cp36-cp36m-win32.whl", hash = "sha256:c6b1d235a08f2c42480cb9a0a5cd2a29c391052d8bc8f43db86aa15387734a33"}, + {file = "pyzmq-22.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f3ad3f77ed6a3cf31f61170fc1733afd83a4cf8e02edde0762d4e630bce2a97e"}, + {file = "pyzmq-22.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:490a9fe5509b09369722b18b85ef494abdf7c51cb1c9484cf83c3921961c2038"}, + {file = "pyzmq-22.0.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:303b8ebafce9906fc1e8eb35734b9dba4786ca3da7cdc88e04a8997dde2372d3"}, + {file = "pyzmq-22.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1ffb81b08bcaaac30ba913adef686ff41b257252e96fca32497029fdc3962ff0"}, + {file = "pyzmq-22.0.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:75fa832c79ce30a23cd44a4e89224c651ef6bf5144b842ad066246e914b92233"}, + {file = "pyzmq-22.0.2-cp37-cp37m-win32.whl", hash = "sha256:d77f6eb839097e4bce96fcac7e05e33b677efe0385bd0ab6c2a9ea818ed7e8f9"}, + {file = "pyzmq-22.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:5a565af3729b2bf7c2ce1d563084d0cd90a312290ba5e571a0c3ec770ea8a287"}, + {file = "pyzmq-22.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff236d8653f8bb74198223c7af77b9378714f411d6d95255d97c2d69bf991b20"}, + {file = "pyzmq-22.0.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:37beae88d6cf102419bb0ec79acb19c062dcea6765b57cf2b265dac5542bcdad"}, + {file = "pyzmq-22.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:bc9f2c26485dc76520084ee8d76f18171cc89f24f801bed8402302ee99dbbcd9"}, + {file = "pyzmq-22.0.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0b32bd5e7346e534fddb57eab309933ff6b3b177c0106b908b6193dfa75fdabe"}, + {file = "pyzmq-22.0.2-cp38-cp38-win32.whl", hash = "sha256:58a074afa254a53872202e92594b59c0ba8cda62effc6437e34ae7048559dd38"}, + {file = "pyzmq-22.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:66d1190eec0a78bd07d39d1615b7923190ed1ba8aa04742d963b09bc66628681"}, + {file = "pyzmq-22.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:013e1343b41aaeb482f40605f3fadcfeb841706039625d7b30d12ae8fa0d3cd0"}, + {file = "pyzmq-22.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d66724bf0d423aa18c9ea43a1bf24ed5c1d143f00bdace7c1b7fc3034f188cc9"}, + {file = "pyzmq-22.0.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:86cb0982b02b4fc2fbd4a65155289e0e4e5015982dbe2db14f8856c303cffa08"}, + {file = "pyzmq-22.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7b6c855c562d1c1bf7a1ba72c2617c8298e0fa1b1c08dc8d60e225031567ad9e"}, + {file = "pyzmq-22.0.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:034f5b9e4ff0bcc67e49fe8f55a1b209ea5761c8fd00c246195c8d0cb6ce096d"}, + {file = "pyzmq-22.0.2-cp39-cp39-win32.whl", hash = "sha256:849444c1699c244d5770d3a684c51f024e95c538f71dd3d1ff423a91745bab7f"}, + {file = "pyzmq-22.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:506d4716ca6e5798345038e75adcb05b4118112a36700941967925285637198b"}, + {file = "pyzmq-22.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:888d850d4b7e1426d210e901bd93075991b36fe0e2ae2547ce5c18b96df95250"}, + {file = "pyzmq-22.0.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:03c001be8c3817d5721137660ed21d90f6175002f0e583306079c791b1d9a855"}, + {file = "pyzmq-22.0.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:3f4e6574d2589e3e22514a3669e86a7bf18a95d3c3ae65733fa6a0a769ec4c9d"}, + {file = "pyzmq-22.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35c8c5c8160f0f0fc6d4588037243b668c3f20d981c1b8e7b5d9c33f8eeb7eb6"}, + {file = "pyzmq-22.0.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:841e9563ce9bd33fe9f227ec680ac033e9f1060977d613568c1dcbff09e74cc9"}, + {file = "pyzmq-22.0.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:cc814880ba27f2ea8cea48ff3b480076266d4dd9c3fe29ef6e5a0a807639abe7"}, + {file = "pyzmq-22.0.2.tar.gz", hash = "sha256:d7b82a959e5e22d492f4f5a1e650e909a6c8c76ede178f538313ddb9d1e92963"}, ] recommonmark = [ {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, @@ -2016,10 +2092,18 @@ rtfde = [ {file = "RTFDE-0.0.2-py3-none-any.whl", hash = "sha256:18386e4f060cee12a2a8035b0acf0cc99689f5dff1bf347bab7e92351860a21d"}, {file = "RTFDE-0.0.2.tar.gz", hash = "sha256:b86b5d734950fe8745a5b89133f50554252dbd67c6d1b9265e23ee140e7ea8a2"}, ] +semantic-version = [ + {file = "semantic_version-2.8.5-py2.py3-none-any.whl", hash = "sha256:45e4b32ee9d6d70ba5f440ec8cc5221074c7f4b0e8918bdab748cc37912440a9"}, + {file = "semantic_version-2.8.5.tar.gz", hash = "sha256:d2cb2de0558762934679b9a104e82eca7af448c9f4974d1f3eeccff651df8a54"}, +] send2trash = [ {file = "Send2Trash-1.5.0-py3-none-any.whl", hash = "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b"}, {file = "Send2Trash-1.5.0.tar.gz", hash = "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2"}, ] +setuptools-rust = [ + {file = "setuptools-rust-0.11.6.tar.gz", hash = "sha256:a5b5954909cbc5d66b914ee6763f81fa2610916041c7266105a469f504a7c4ca"}, + {file = "setuptools_rust-0.11.6-py3-none-any.whl", hash = "sha256:5acf8cd8e89d57f0cd3cc942f60fa2ccfdede4c7a0b0d4b28eb7ab756df30347"}, +] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, @@ -2072,6 +2156,10 @@ testpath = [ {file = "testpath-0.4.4-py2.py3-none-any.whl", hash = "sha256:bfcf9411ef4bf3db7579063e0546938b1edda3d69f4e1fb8756991f5951f85d4"}, {file = "testpath-0.4.4.tar.gz", hash = "sha256:60e0a3261c149755f4399a1fff7d37523179a70fdc3abdf78de9fc2604aeec7e"}, ] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] tornado = [ {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, diff --git a/pymisp/__init__.py b/pymisp/__init__.py index 11b36cc..25fcda9 100644 --- a/pymisp/__init__.py +++ b/pymisp/__init__.py @@ -1,4 +1,4 @@ -__version__ = '2.4.137.1' +__version__ = '2.4.138' import logging FORMAT = "%(levelname)s [%(filename)s:%(lineno)s - %(funcName)s() ] %(message)s" diff --git a/pymisp/abstract.py b/pymisp/abstract.py index ff1f708..368242d 100644 --- a/pymisp/abstract.py +++ b/pymisp/abstract.py @@ -237,7 +237,7 @@ class AbstractMISP(MutableMapping, MISPFileCache, metaclass=ABCMeta): to_return = _int_to_str(to_return) return to_return - def to_json(self, sort_keys: bool = False, indent: Optional[int] = None): + def to_json(self, sort_keys: bool = False, indent: Optional[int] = None) -> str: """Dump recursively any class of type MISPAbstract to a json string""" return dumps(self, default=pymisp_json_default, sort_keys=sort_keys, indent=indent) diff --git a/pymisp/api.py b/pymisp/api.py index 5475705..a920e93 100644 --- a/pymisp/api.py +++ b/pymisp/api.py @@ -15,6 +15,7 @@ from uuid import UUID import warnings import sys import copy +import urllib3 # type: ignore from io import BytesIO, StringIO from . import __version__, everything_broken @@ -88,6 +89,27 @@ def register_user(misp_url: str, email: str, return r.json() +def brotli_supported() -> bool: + """ + Returns whether Brotli compression is supported + """ + + # urllib >= 1.25.1 includes brotli support + major, minor, patch = urllib3.__version__.split('.') # noqa: F811 + major, minor, patch = int(major), int(minor), int(patch) + urllib3_with_brotli = (major == 1 and ((minor == 25 and patch >= 1) or (minor >= 26))) or major >= 2 + + if not urllib3_with_brotli: + return False + + # pybrotli is an extra package required by urllib3 for brotli support + try: + import brotli # type: ignore # noqa + return True + except ImportError: + return False + + class PyMISP: """Python API for MISP @@ -118,6 +140,8 @@ class PyMISP: self.tool: str = tool self.timeout: Optional[Union[float, Tuple[float, float]]] = timeout self.__session = requests.Session() # use one session to keep connection between requests + if brotli_supported(): + self.__session.headers['Accept-Encoding'] = ', '.join(('br', 'gzip', 'deflate')) self.global_pythonify = False @@ -924,12 +948,12 @@ class PyMISP: # ## BEGIN Tags ### - def tags(self, pythonify: bool = False) -> Union[Dict, List[MISPTag]]: + def tags(self, pythonify: bool = False, **kw_params) -> Union[Dict, List[MISPTag]]: """Get the list of existing tags. :param pythonify: Returns a list of PyMISP Objects instead of the plain json output. Warning: it might use a lot of RAM """ - r = self._prepare_request('GET', 'tags/index') + r = self._prepare_request('GET', 'tags/index', kw_params=kw_params) tags = self._check_json_response(r) if not (self.global_pythonify or pythonify) or 'errors' in tags: return tags['Tag'] diff --git a/pymisp/mispevent.py b/pymisp/mispevent.py index 3665f57..f39cd2f 100644 --- a/pymisp/mispevent.py +++ b/pymisp/mispevent.py @@ -751,6 +751,10 @@ class MISPObject(AbstractMISP): # Then we have no meta-category, template_uuid, description and template_version pass + def delete(self): + """Mark the attribute as deleted (soft delete)""" + self.deleted = True + @property def disable_validation(self): self._strict = False diff --git a/pymisp/tools/fileobject.py b/pymisp/tools/fileobject.py index a61797d..32095bb 100644 --- a/pymisp/tools/fileobject.py +++ b/pymisp/tools/fileobject.py @@ -66,7 +66,7 @@ class FileObject(AbstractMISPObjectGenerator): self.add_attribute('sha1', value=sha1(self.__data).hexdigest()) self.add_attribute('sha256', value=sha256(self.__data).hexdigest()) self.add_attribute('sha512', value=sha512(self.__data).hexdigest()) - self.add_attribute('malware-sample', value=self.__filename, data=self.__pseudofile) + self.add_attribute('malware-sample', value=self.__filename, data=self.__pseudofile, disable_correlation=True) if HAS_MAGIC: self.add_attribute('mimetype', value=magic.from_buffer(self.__data, mime=True)) if HAS_PYDEEP: diff --git a/pyproject.toml b/pyproject.toml index 4253bfc..8287425 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pymisp" -version = "2.4.137.1" +version = "2.4.138" description = "Python API for MISP." authors = ["Raphaël Vinot "] license = "BSD-2-Clause" @@ -46,9 +46,9 @@ requests = "^2.25.0" python-dateutil = "^2.8.1" jsonschema = "^3.2.0" deprecated = "^1.2.10" -extract_msg = "^0.28.0" -RTFDE = "^0.0.2" -oletools = "^0.56" +extract_msg = {version = "^0.28.0", optional = true} +RTFDE = {version = "^0.0.2", optional = true} +oletools = {version = "^0.56", optional = true} python-magic = {version = "^0.4.18", optional = true} pydeep = {version = "^0.4", optional = true} lief = {version = "^0.11.0", optional = true} @@ -58,6 +58,7 @@ sphinx-autodoc-typehints = {version = "^1.11.1", optional = true} recommonmark = {version = "^0.7.1", optional = true} reportlab = {version = "^3.5.55", optional = true} pyfaup = {version = "^1.2", optional = true} +urllib3 = {extras = ["brotli"], version = "^1.26.3", optional = true} [tool.poetry.extras] @@ -68,6 +69,7 @@ docs = ['sphinx-autodoc-typehints', 'recommonmark'] pdfexport = ['reportlab'] url = ['pyfaup'] email = ['extract_msg', "RTFDE", "oletools"] +brotli = ['urllib3'] [tool.poetry.dev-dependencies] nose = "^1.3.7" diff --git a/tests/mispevent_testfiles/event_obj_attr_tag.json b/tests/mispevent_testfiles/event_obj_attr_tag.json index 2ab0c4a..fbe8c53 100644 --- a/tests/mispevent_testfiles/event_obj_attr_tag.json +++ b/tests/mispevent_testfiles/event_obj_attr_tag.json @@ -50,7 +50,7 @@ "name": "url", "sharing_group_id": "0", "template_uuid": "60efb77b-40b5-4c46-871b-ed1ed999fce5", - "template_version": "8", + "template_version": "9", "uuid": "b" } ]