diff --git a/create-virtualenv.sh b/create-virtualenv.sh deleted file mode 100755 index 408fa750..00000000 --- a/create-virtualenv.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -# Initializes a python virtual environment and installs dependencies -python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt \ No newline at end of file diff --git a/cyclonedx_py/client.py b/cyclonedx_py/client.py index 9638330c..ebac33ce 100644 --- a/cyclonedx_py/client.py +++ b/cyclonedx_py/client.py @@ -20,12 +20,14 @@ import argparse import os +import sys from datetime import datetime -from cyclonedx.model.bom import Bom +from cyclonedx.model.bom import Bom, Tool from cyclonedx.output import BaseOutput, get_instance, OutputFormat, SchemaVersion from cyclonedx.parser import BaseParser from cyclonedx.parser.environment import EnvironmentParser +from cyclonedx.parser.pipenv import PipEnvFileParser from cyclonedx.parser.poetry import PoetryFileParser from cyclonedx.parser.requirements import RequirementsFileParser @@ -62,8 +64,19 @@ def get_output(self) -> BaseOutput: print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') print('') + bom = Bom.from_parser(parser=parser) + + # Add cyclonedx_bom as a Tool to record it being part of the CycloneDX SBOM generation process + if sys.version_info >= (3, 8, 0): + from importlib.metadata import version + else: + from importlib_metadata import version + bom.get_metadata().add_tool(tool=Tool( + vendor='CycloneDX', name='cyclonedx-bom', version=version('cyclonedx-bom') + )) + return get_instance( - bom=Bom.from_parser(parser=parser), + bom=bom, output_format=OutputFormat[str(self._arguments.output_format).upper()], schema_version=SchemaVersion['V{}'.format( str(self._arguments.output_schema_version).replace('.', '_') @@ -98,6 +111,12 @@ def get_arg_parser() -> argparse.ArgumentParser: 'to a `poetry.lock` you wish to use, else we\'ll look for one in the current working directory.', dest='input_from_poetry' ) + input_group.add_argument( + '-pip', '--pip', action='store_true', + help='Build a SBOM based on a PipEnv Pipfile.lock\'s contents. Use with --pip-file to specify absolute path' + 'to a `Pipefile.lock` you wish to use, else we\'ll look for one in the current working directory.', + dest='input_from_pip' + ) input_group.add_argument( '-r', '--r', '--requirements', action='store_true', help='Build a SBOM based on a requirements.txt\'s contents. Use with -rf to specify absolute path' @@ -115,6 +134,16 @@ def get_arg_parser() -> argparse.ArgumentParser: dest='input_poetry_file', required=False ) + req_input_group = arg_parser.add_argument_group( + title='PipEnv', + description='Additional optional arguments if you are setting the input type to `pipenv`' + ) + req_input_group.add_argument( + '--pip-file', action='store', metavar='FILE_PATH', default='Pipfile.lock', + help='Path to a the `Pipfile.lock` file you wish to parse', + dest='input_pipenv_file', required=False + ) + req_input_group = arg_parser.add_argument_group( title='Requirements', description='Additional optional arguments if you are setting the input type to `requirements`.' @@ -164,6 +193,13 @@ def _error_and_exit(message: str, exit_code: int = 1): def _get_input_parser(self) -> BaseParser: if self._arguments.input_from_environment: return EnvironmentParser() + elif self._arguments.input_from_pip: + pipfile_lock_file = os.path.realpath(self._arguments.input_pipenv_file) + if CycloneDxCmd._validate_file_exists(self._arguments.input_pipenv_file): + # A Pipfile.lock path was provided + return PipEnvFileParser(pipenv_lock_filename=pipfile_lock_file) + else: + self._error_and_exit(f'The provided file \'{pipfile_lock_file}\' does not exist') elif self._arguments.input_from_poetry: poetry_lock_file = os.path.realpath(self._arguments.input_poetry_file) if CycloneDxCmd._validate_file_exists(self._arguments.input_poetry_file): @@ -174,9 +210,7 @@ def _get_input_parser(self) -> BaseParser: poetry_lock_file )) elif self._arguments.input_from_requirements: - # if self._arguments.input_requirements_file: requirements_file = os.path.realpath(self._arguments.input_requirements_file) - # requirements_file = self._arguments.input_requirements_file if CycloneDxCmd._validate_file_exists(self._arguments.input_requirements_file): # A requirements.txt path was provided return RequirementsFileParser(requirements_file=requirements_file) diff --git a/poetry.lock b/poetry.lock index 76b7f81d..155bacd4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -34,7 +34,7 @@ toml = ["toml"] [[package]] name = "cyclonedx-python-lib" -version = "0.4.1" +version = "0.8.1" description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." category = "main" optional = false @@ -48,7 +48,7 @@ toml = ">=0.10.2,<0.11.0" [[package]] name = "distlib" -version = "0.3.2" +version = "0.3.3" description = "Distribution utilities" category = "dev" optional = false @@ -56,11 +56,15 @@ python-versions = "*" [[package]] name = "filelock" -version = "3.0.12" +version = "3.3.0" description = "A platform independent file lock." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] [[package]] name = "flake8" @@ -118,11 +122,14 @@ python-versions = "*" [[package]] name = "packageurl-python" -version = "0.9.4" -description = "A \"purl\" aka. Package URL parser and builder" +version = "0.9.6" +description = "A purl aka. Package URL parser and builder" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" + +[package.extras] +test = ["pytest", "isort"] [[package]] name = "packaging" @@ -137,7 +144,7 @@ pyparsing = ">=2.0.2" [[package]] name = "platformdirs" -version = "2.3.0" +version = "2.4.0" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -251,7 +258,7 @@ python-versions = "*" [[package]] name = "virtualenv" -version = "20.8.0" +version = "20.8.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -272,7 +279,7 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", [[package]] name = "zipp" -version = "3.5.0" +version = "3.6.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false @@ -285,7 +292,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "21cea0e086dd50cf3864bc6ecd88816aefaa4b12d1fdcef0eed79d66fe47be05" +content-hash = "f2c01db33efac07d06ce6a9a1365c54d19cd761f93edec2a05025bd4f972ba25" [metadata.files] "backports.entry-points-selectable" = [ @@ -351,16 +358,16 @@ coverage = [ {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] cyclonedx-python-lib = [ - {file = "cyclonedx-python-lib-0.4.1.tar.gz", hash = "sha256:11ceb9ad1b23b26b8c22697c306b7c4d809ec6521069066b31e2f230483b1f8b"}, - {file = "cyclonedx_python_lib-0.4.1-py3-none-any.whl", hash = "sha256:506d3fccd573982d934a91574083361cc3c450f62161c16c4c7ca53d93149983"}, + {file = "cyclonedx-python-lib-0.8.1.tar.gz", hash = "sha256:b3040eff9abd9f9e14bc106e056af56f99a02bee2f186659be907591b66562e6"}, + {file = "cyclonedx_python_lib-0.8.1-py3-none-any.whl", hash = "sha256:db391e77e1f2ae6246bbdb3d2bc27085b784f853b854980c8344e33a3a3e70bf"}, ] distlib = [ - {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"}, - {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"}, + {file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"}, + {file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"}, ] filelock = [ - {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, - {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, + {file = "filelock-3.3.0-py3-none-any.whl", hash = "sha256:bbc6a0382fe8ec4744ecdf6683a2e07f65eb10ff1aff53fc02a202565446cde0"}, + {file = "filelock-3.3.0.tar.gz", hash = "sha256:8c7eab13dc442dc249e95158bcc12dec724465919bdc9831fdbf0660f03d1785"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -379,16 +386,16 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] packageurl-python = [ - {file = "packageurl-python-0.9.4.tar.gz", hash = "sha256:bd0e829260baff12055c47e1898e0f4014469d09bdb380ddcb102b5d2392fb56"}, - {file = "packageurl_python-0.9.4-py2.py3-none-any.whl", hash = "sha256:65f1eade0f3f412bdc77401e76725e9fc21d0c742ba0f2d066113cb19ccd8b61"}, + {file = "packageurl-python-0.9.6.tar.gz", hash = "sha256:c01fbaf62ad2eb791e97158d1f30349e830bee2dd3e9503a87f6c3ffae8d1cf0"}, + {file = "packageurl_python-0.9.6-py3-none-any.whl", hash = "sha256:676dcb8278721df952e2444bfcd8d7bf3518894498050f0c6a5faddbe0860cd0"}, ] packaging = [ {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] platformdirs = [ - {file = "platformdirs-2.3.0-py3-none-any.whl", hash = "sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648"}, - {file = "platformdirs-2.3.0.tar.gz", hash = "sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f"}, + {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, + {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -432,10 +439,10 @@ typing-extensions = [ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, ] virtualenv = [ - {file = "virtualenv-20.8.0-py2.py3-none-any.whl", hash = "sha256:a4b987ec31c3c9996cf1bc865332f967fe4a0512c41b39652d6224f696e69da5"}, - {file = "virtualenv-20.8.0.tar.gz", hash = "sha256:4da4ac43888e97de9cf4fdd870f48ed864bbfd133d2c46cbdec941fed4a25aef"}, + {file = "virtualenv-20.8.1-py2.py3-none-any.whl", hash = "sha256:10062e34c204b5e4ec5f62e6ef2473f8ba76513a9a617e873f1f8fb4a519d300"}, + {file = "virtualenv-20.8.1.tar.gz", hash = "sha256:bcc17f0b3a29670dd777d6f0755a4c04f28815395bca279cdcb213b97199a6b8"}, ] zipp = [ - {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, - {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, ] diff --git a/pyproject.toml b/pyproject.toml index ff9ca9e6..5ac8f17c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,12 +11,12 @@ packages = [ { include = "cyclonedx_py" } ] include = [ - "LICENSE" + "LICENSE", "NOTICE" ] [tool.poetry.dependencies] python = "^3.6" -cyclonedx-python-lib = "0.4.1" +cyclonedx-python-lib = "^0.8.1" [tool.poetry.dev-dependencies] tox = "^3.24.3" diff --git a/tests/base.py b/tests/base.py index 56f78a55..3101ba37 100644 --- a/tests/base.py +++ b/tests/base.py @@ -18,12 +18,22 @@ # Copyright (c) OWASP Foundation. All Rights Reserved. import json +import sys import xml.etree.ElementTree from datetime import datetime, timezone from unittest import TestCase from uuid import uuid4 from xml.dom import minidom +if sys.version_info >= (3, 8, 0): + from importlib.metadata import version +else: + from importlib_metadata import version + +cyclonedx_bom_name: str = 'cyclonedx-bom' +cyclonedx_bom_version: str = version(cyclonedx_bom_name) +cyclonedx_lib_name: str = 'cyclonedx-python-lib' +cyclonedx_lib_version: str = version(cyclonedx_lib_name) single_uuid: str = 'urn:uuid:{}'.format(uuid4()) @@ -50,6 +60,21 @@ def assertEqualJsonBom(self, a: str, b: str): ab['metadata']['timestamp'] = now.isoformat() bb['metadata']['timestamp'] = now.isoformat() + # Align 'this' Tool Version + if 'tools' in ab['metadata'].keys(): + for i, tool in enumerate(ab['metadata']['tools']): + if tool['name'] == cyclonedx_lib_name: + ab['metadata']['tools'][i]['version'] = cyclonedx_lib_version + elif tool['name'] == cyclonedx_bom_name: + ab['metadata']['tools'][i]['version'] = cyclonedx_bom_version + + if 'tools' in bb['metadata'].keys(): + for i, tool in enumerate(bb['metadata']['tools']): + if tool['name'] == cyclonedx_lib_name: + bb['metadata']['tools'][i]['version'] = cyclonedx_lib_version + elif tool['name'] == cyclonedx_bom_name: + bb['metadata']['tools'][i]['version'] = cyclonedx_bom_version + self.assertEqualJson(json.dumps(ab), json.dumps(bb)) @@ -80,6 +105,20 @@ def assertEqualXmlBom(self, a: str, b: str, namespace: str): if metadata_ts_b is not None: metadata_ts_b.text = now.isoformat() + # Align 'this' Tool Version + lib_tool = ba.find('.//*/{{{}}}tool[{{{}}}name="cyclonedx-python-lib"]'.format(namespace, namespace)) + if lib_tool: + lib_tool.find('./{{{}}}version'.format(namespace)).text = cyclonedx_lib_version + lib_tool = bb.find('.//*/{{{}}}tool[{{{}}}name="cyclonedx-python-lib"]'.format(namespace, namespace)) + if lib_tool: + lib_tool.find('./{{{}}}version'.format(namespace)).text = cyclonedx_lib_version + this_tool = ba.find('.//*/{{{}}}tool[{{{}}}name="cyclonedx-bom"]'.format(namespace, namespace)) + if this_tool: + this_tool.find('./{{{}}}version'.format(namespace)).text = cyclonedx_bom_version + this_tool = bb.find('.//*/{{{}}}tool[{{{}}}name="cyclonedx-bom"]'.format(namespace, namespace)) + if this_tool: + this_tool.find('./{{{}}}version'.format(namespace)).text = cyclonedx_bom_version + self.assertEqualXml( xml.etree.ElementTree.tostring(ba, 'unicode'), xml.etree.ElementTree.tostring(bb, 'unicode') diff --git a/tests/fixtures/bom_v1.2_setuptools.xml b/tests/fixtures/bom_v1.2_setuptools.xml index cc820dc6..027abea1 100644 --- a/tests/fixtures/bom_v1.2_setuptools.xml +++ b/tests/fixtures/bom_v1.2_setuptools.xml @@ -2,6 +2,18 @@ 2021-09-01T10:50:42.051979+00:00 + + + CycloneDX + cyclonedx-python-lib + VERSION + + + CycloneDX + cyclonedx-bom + VERSION + + diff --git a/tests/fixtures/bom_v1.3_setuptools.xml b/tests/fixtures/bom_v1.3_setuptools.xml index d7fb44e3..d2bd1c5f 100644 --- a/tests/fixtures/bom_v1.3_setuptools.xml +++ b/tests/fixtures/bom_v1.3_setuptools.xml @@ -2,6 +2,18 @@ 2021-09-01T10:50:42.051979+00:00 + + + CycloneDX + cyclonedx-python-lib + VERSION + + + CycloneDX + cyclonedx-bom + VERSION + + diff --git a/tests/resources/bom.json b/tests/resources/bom.json deleted file mode 100644 index a5fc660e..00000000 --- a/tests/resources/bom.json +++ /dev/null @@ -1,1069 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "components": [ - { - "description": "Distributed Task Queue.", - "hashes": [ - { - "alg": "MD5", - "content": "647073f137121298d1916b09b9560b4c" - }, - { - "alg": "SHA-256", - "content": "81a67f0d53a688ec2bc8557bd5d6d7218f925a6f2e6df80e01560de9e28997ec" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "celery", - "publisher": "Ask Solem", - "purl": "pkg:pypi/celery@4.1.0", - "type": "library", - "version": "4.1.0" - }, - { - "description": "Code coverage measurement for Python", - "hashes": [ - { - "alg": "MD5", - "content": "890d5456fa5e837880139866024582f9" - }, - { - "alg": "SHA-256", - "content": "f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e" - } - ], - "licenses": [ - { - "license": { - "name": "Apache 2.0" - } - } - ], - "modified": false, - "name": "coverage", - "publisher": "Ned Batchelder and 100 others", - "purl": "pkg:pypi/coverage@4.5.1", - "type": "library", - "version": "4.5.1" - }, - { - "description": "XML bomb protection for Python stdlib modules", - "hashes": [ - { - "alg": "MD5", - "content": "37b51c8903a7c7e5060b5773b1694199" - }, - { - "alg": "SHA-256", - "content": "702a91ade2968a82beb0db1e0766a6a273f33d4616a6ce8cde475d8e09853b20" - } - ], - "licenses": [ - { - "license": { - "name": "PSFL" - } - } - ], - "modified": false, - "name": "defusedxml", - "publisher": "Christian Heimes", - "purl": "pkg:pypi/defusedxml@0.5.0", - "type": "library", - "version": "0.5.0" - }, - { - "description": "A high-level Python Web framework that encourages rapid development and clean, pragmatic design.", - "hashes": [ - { - "alg": "MD5", - "content": "47f8dbee713f14b6480c319e9eaf500e" - }, - { - "alg": "SHA-256", - "content": "fd186d544c7c2f835668cf11f77be071307c9eb22615a5b3a16bdb14c8357f41" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "Django", - "publisher": "Django Software Foundation", - "purl": "pkg:pypi/django@1.11.11", - "type": "library", - "version": "1.11.11" - }, - { - "description": "Audit log app for Django", - "hashes": [ - { - "alg": "MD5", - "content": "8ef2d70f10385c48de093f8dae760aaf" - }, - { - "alg": "SHA-256", - "content": "70bfc673e7023d91ab8449d745425e7a4ce5eaaf2bdcbfb9b1a2209a7af60b03" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "django-auditlog", - "publisher": "Jan-Jelle Kester", - "purl": "pkg:pypi/django-auditlog@0.4.5", - "type": "library", - "version": "0.4.5" - }, - { - "description": "End user custom fields for Django including contrib.admin support", - "hashes": [ - { - "alg": "MD5", - "content": "8d72acb1ac8c48f63f42a812014e4e9e" - }, - { - "alg": "SHA-256", - "content": "b2c3c0218b0be806ab979a5894a3edec8236f898131d1c86a3fc568d7dcf736d" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-custom-field", - "publisher": "David Burke", - "purl": "pkg:pypi/django-custom-field@2.9", - "type": "library", - "version": "2.9" - }, - { - "description": "Django-filter is a reusable Django application for allowing users to filter querysets dynamically.", - "hashes": [ - { - "alg": "MD5", - "content": "505764c7eae6c8116804443e9117ddbb" - }, - { - "alg": "SHA-256", - "content": "6ef1611aeacfda8f13a075a992ff65687afbd5cc8fcb0f3f1563a9ad4fe2d1b0" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-filter", - "publisher": "Carlton Gibson", - "purl": "pkg:pypi/django-filter@1.0.4", - "type": "library", - "version": "1.0.4" - }, - { - "description": "Automated image processing for Django models.", - "hashes": [ - { - "alg": "MD5", - "content": "0b29f9f221b022aa6d2b1689c822b7aa" - }, - { - "alg": "SHA-256", - "content": "304c3379f6a5cac387e47ace11195a603ad3cb01e3e951b45489824d25b00359" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-imagekit", - "publisher": "Bryan Veloso", - "purl": "pkg:pypi/django-imagekit@4.0.2", - "type": "library", - "version": "4.0.2" - }, - { - "description": "Django multiple select field", - "hashes": [ - { - "alg": "MD5", - "content": "f08a638e8a8e0a1ee0b8cf53b2eb3f2a" - }, - { - "alg": "SHA-256", - "content": "52483d23aecbf6b502f9e6806e97da9288d5d7f2a3f99f736390763de68c8fd7" - } - ], - "licenses": [ - { - "license": { - "name": "LGPL 3" - } - } - ], - "modified": false, - "name": "django-multiselectfield", - "publisher": "Pablo Martin", - "purl": "pkg:pypi/django-multiselectfield@0.1.8", - "type": "library", - "version": "0.1.8" - }, - { - "description": "A Django reusable app providing the ability to use circular template inheritance.", - "hashes": [ - { - "alg": "MD5", - "content": "d4743649679bd2b7dbb093e95cf3bc00" - }, - { - "alg": "SHA-256", - "content": "e9c1082e384473ec03ab53821691d79a3f160fef43c15a0de44741b5e9430e4d" - } - ], - "licenses": [], - "modified": false, - "name": "django-overextends", - "publisher": "Stephen McDonald", - "purl": "pkg:pypi/django-overextends@0.4.3", - "type": "library", - "version": "0.4.3" - }, - { - "description": "Seamless Polymorphic Inheritance for Django Models", - "hashes": [ - { - "alg": "MD5", - "content": "cf7966785cc31d769170104a690dde52" - }, - { - "alg": "SHA-256", - "content": "99a2c47d8dea5b3827be8274d7cdee21c3826536ee30d70c6bdd243a8ee82453" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-polymorphic", - "publisher": "Christopher Glass", - "purl": "pkg:pypi/django-polymorphic@1.2", - "type": "library", - "version": "1.2" - }, - { - "description": "Provides easy-to-use integration between Django projects and the Slack group chat and IM tool.", - "hashes": [ - { - "alg": "MD5", - "content": "c15978b2ac216a1952ff493ae86dc47b" - }, - { - "alg": "SHA-256", - "content": "d436b692a719f29491afed0dd854240c9e559ab4f4044debcde5fb97313a4613" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-slack", - "publisher": "Chris Lamb", - "purl": "pkg:pypi/django-slack@5.11.1", - "type": "library", - "version": "5.11.1" - }, - { - "description": "Swagger UI for Django REST Framework 3.5+", - "hashes": [ - { - "alg": "MD5", - "content": "3d1160115490f3d0a29482ef65e36054" - }, - { - "alg": "SHA-256", - "content": "3471e6c21a3e97751fa6f7b81b66e916e40fa645cac36be1594c0efed810d247" - } - ], - "licenses": [ - { - "license": { - "name": "FreeBSD License" - } - } - ], - "modified": false, - "name": "django-rest-swagger", - "publisher": "Marc Gibbons", - "purl": "pkg:pypi/django-rest-swagger@2.1.2", - "type": "library", - "version": "2.1.2" - }, - { - "description": "Generic tagging application for Django", - "hashes": [ - { - "alg": "MD5", - "content": "7b5622db3a0e4d51838e2698cd023884" - }, - { - "alg": "SHA-256", - "content": "3d333a28f4d19369480792ac4afcedbbfd9728054c5f7bbb7ea5db16b7d6020a" - } - ], - "licenses": [ - { - "license": { - "name": "BSD License" - } - } - ], - "modified": false, - "name": "django-tagging", - "publisher": "Fantomas42", - "purl": "pkg:pypi/django-tagging@0.4.6", - "type": "library", - "version": "0.4.6" - }, - { - "description": "A flexible & capable API layer for Django.", - "hashes": [ - { - "alg": "MD5", - "content": "752a840304144625782fe786ddda3432" - }, - { - "alg": "SHA-256", - "content": "5015f40e2d37090c25efdab4fe1b46ec9a1749e8bb159f472346dc48747233cc" - } - ], - "licenses": [], - "modified": false, - "name": "django-tastypie", - "publisher": "Daniel Lindsley", - "purl": "pkg:pypi/django-tastypie@0.14.0", - "type": "library", - "version": "0.14.0" - }, - { - "description": "An adapter to use swagger-ui with django-tastypie", - "hashes": [ - { - "alg": "MD5", - "content": "f90cef9ccab600bda8e5359a7feb3651" - }, - { - "alg": "SHA-256", - "content": "9d3676ec3ebf1a5a394eead9ca8baee301b551b5245c7c1481acc22c15c8d445" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-tastypie-swagger", - "publisher": "Concentric Sky", - "purl": "pkg:pypi/django-tastypie-swagger@0.1.4", - "type": "library", - "version": "0.1.4" - }, - { - "description": "Full-text multi-table search application for Django. Easy to install and use, with good performance.", - "hashes": [ - { - "alg": "MD5", - "content": "6ee0789f54a11da62f56917bfe2c017a" - }, - { - "alg": "SHA-256", - "content": "2697c8acf77fd8f0f957d4b71bd9f07f359bb3954a3516a339cac87b3c9f1c9f" - } - ], - "licenses": [], - "modified": false, - "name": "django-watson", - "publisher": "Dave Hall", - "purl": "pkg:pypi/django-watson@1.5.2", - "type": "library", - "version": "1.5.2" - }, - { - "description": "Web APIs for Django, made easy.", - "hashes": [ - { - "alg": "MD5", - "content": "1af6d5969b0cece505fd975609b12ea5" - }, - { - "alg": "SHA-256", - "content": "1f6baf40ed456ed2af6bd1a4ff8bbc3503cebea16509993aea2b7085bc097766" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "djangorestframework", - "publisher": "Tom Christie", - "purl": "pkg:pypi/djangorestframework@3.7.7", - "type": "library", - "version": "3.7.7" - }, - { - "description": "WSGI HTTP Server for UNIX", - "hashes": [ - { - "alg": "MD5", - "content": "9ca2b1a40bdc3b916bf1da31bb139a8e" - }, - { - "alg": "SHA-256", - "content": "75af03c99389535f218cc596c7de74df4763803f7b63eb09d77e92b3956b36c6" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "gunicorn", - "publisher": "Benoit Chesneau", - "purl": "pkg:pypi/gunicorn@19.7.1", - "type": "library", - "version": "19.7.1" - }, - { - "description": "Turn HTML into equivalent Markdown-structured text.", - "hashes": [ - { - "alg": "MD5", - "content": "551a1ab41c39a77ebfb7f4f39f3bfa15" - }, - { - "alg": "SHA-256", - "content": "490db40fe5b2cd79c461cf56be4d39eb8ca68191ae41ba3ba79f6cb05b7dd662" - } - ], - "licenses": [ - { - "license": { - "name": "GNU GPL 3" - } - } - ], - "modified": false, - "name": "html2text", - "publisher": "Alireza Savand", - "purl": "pkg:pypi/html2text@2018.1.9", - "type": "library", - "version": "2018.1.9" - }, - { - "description": "python humanize utilities", - "hashes": [ - { - "alg": "MD5", - "content": "e8473d9dc1b220911cac2edd53b1d973" - }, - { - "alg": "SHA-256", - "content": "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "humanize", - "publisher": "Jason Moiron", - "purl": "pkg:pypi/humanize@0.5.1", - "type": "library", - "version": "0.5.1" - }, - { - "description": "Python library for interacting with JIRA via REST APIs.", - "hashes": [ - { - "alg": "MD5", - "content": "ab6181ec05e2fbb6fea19c0338a60f7b" - }, - { - "alg": "SHA-256", - "content": "66d4094721e94ca78782675282d241b161303eac9339f7ef8b1459fe82ad5513" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "jira", - "publisher": "Sorin Sbarnea", - "purl": "pkg:pypi/jira@1.0.13", - "type": "library", - "version": "1.0.13" - }, - { - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "hashes": [ - { - "alg": "MD5", - "content": "1cd0365757ebacaf99de8737739f75c7" - }, - { - "alg": "SHA-256", - "content": "d5d29663e979e83b3fc361e97200f959cddb3a14797391d15273d84a5a8ae44b" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "lxml", - "publisher": "lxml dev team", - "purl": "pkg:pypi/lxml@4.1.1", - "type": "library", - "version": "4.1.1" - }, - { - "description": "Python interface to MySQL", - "hashes": [ - { - "alg": "MD5", - "content": "ce9de52cffb1d4ef493464b5dcb5682c" - }, - { - "alg": "SHA-256", - "content": "1e85e48b167e2af3bb08f273fdbd1ad6401cbe75057fa6513f97387dc7b282dc" - } - ], - "licenses": [ - { - "license": { - "name": "GPL" - } - } - ], - "modified": false, - "name": "mysqlclient", - "publisher": "INADA Naoki", - "purl": "pkg:pypi/mysqlclient@1.3.12", - "type": "library", - "version": "1.3.12" - }, - { - "description": "Wkhtmltopdf python wrapper to convert html to pdf using the webkit rendering engine and qt", - "hashes": [ - { - "alg": "MD5", - "content": "072809304c878774cb78bb78b7a23f9b" - }, - { - "alg": "SHA-256", - "content": "05f1c631e8d9ab877886955da825e48b459e097886a21448ab17b34c60cfd66c" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "pdfkit", - "publisher": "Golovanov Stanislav", - "purl": "pkg:pypi/pdfkit@0.6.1", - "type": "library", - "version": "0.6.1" - }, - { - "description": "Python Imaging Library (Fork)", - "hashes": [ - { - "alg": "MD5", - "content": "6db05555eb7d7b5469686d1efb4ec05a" - }, - { - "alg": "SHA-256", - "content": "a370d1c570f1d72e877099651e752332444b1c5009381f043c9da5fd47f3ebae" - } - ], - "licenses": [ - { - "license": { - "name": "Standard PIL License" - } - } - ], - "modified": false, - "name": "Pillow", - "publisher": "Alex Clark (Fork Author)", - "purl": "pkg:pypi/pillow@5.0.0", - "type": "library", - "version": "5.0.0" - }, - { - "description": "psycopg2 - Python-PostgreSQL Database Adapter", - "hashes": [ - { - "alg": "MD5", - "content": "d887e5e07f6e307f8ef036d3dedb4d70" - }, - { - "alg": "SHA-256", - "content": "9d64fed2681552ed642e9c0cc831a9e95ab91de72b47d0cb68b5bf506ba88647" - } - ], - "licenses": [ - { - "license": { - "name": "LGPL with exceptions or ZPL" - } - } - ], - "modified": false, - "name": "psycopg2", - "publisher": "Federico Di Gregorio", - "purl": "pkg:pypi/psycopg2@2.7.3.2", - "type": "library", - "version": "2.7.3.2" - }, - { - "description": "Cryptographic modules for Python.", - "hashes": [ - { - "alg": "MD5", - "content": "55a61a054aa66812daf5161a0d5d7eda" - }, - { - "alg": "SHA-256", - "content": "f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c" - } - ], - "licenses": [ - { - "license": { - "name": "Public domain" - } - } - ], - "modified": false, - "name": "pycrypto", - "publisher": "Dwayne C. Litzenberger", - "purl": "pkg:pypi/pycrypto@2.6.1", - "type": "library", - "version": "2.6.1" - }, - { - "description": "Extensions to the standard Python datetime module", - "hashes": [ - { - "alg": "MD5", - "content": "342c025339de1e7c2138c74983c111d7" - }, - { - "alg": "SHA-256", - "content": "95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c" - } - ], - "licenses": [ - { - "license": { - "name": "Simplified BSD" - } - } - ], - "modified": false, - "name": "python-dateutil", - "publisher": "Paul Ganssle", - "purl": "pkg:pypi/python-dateutil@2.6.1", - "type": "library", - "version": "2.6.1" - }, - { - "description": "This is a python class to use nmap and access scan results from python3", - "hashes": [ - { - "alg": "MD5", - "content": "2795bfcbc05cbbbccfcf4df59facaab1" - }, - { - "alg": "SHA-256", - "content": "80ba0eb10a52283a54a633f40b5baa9c2ff08675d6621dd089ead942852f5bd3" - } - ], - "licenses": [ - { - "license": { - "name": "gpl-3.0.txt" - } - } - ], - "modified": false, - "name": "python-nmap", - "publisher": "Alexandre Norman", - "purl": "pkg:pypi/python-nmap@0.6.1", - "type": "library", - "version": "0.6.1" - }, - { - "description": "World timezone definitions, modern and historical", - "hashes": [ - { - "alg": "MD5", - "content": "6a8716540aaccabb6d5366e0f725a456" - }, - { - "alg": "SHA-256", - "content": "c41c62827ce9cafacd6f2f7018e4f83a6f1986e87bfd000b8cfbd4ab5da95f1a" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "pytz", - "publisher": "Stuart Bishop", - "purl": "pkg:pypi/pytz@2017.3", - "type": "library", - "version": "2017.3" - }, - { - "description": "Python HTTP for Humans.", - "hashes": [ - { - "alg": "MD5", - "content": "eb9be71cc41fd73a51a7c9cd1adde5de" - }, - { - "alg": "SHA-256", - "content": "6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b" - } - ], - "licenses": [ - { - "license": { - "name": "Apache 2.0" - } - } - ], - "modified": false, - "name": "requests", - "publisher": "Kenneth Reitz", - "purl": "pkg:pypi/requests@2.18.4", - "type": "library", - "version": "2.18.4" - }, - { - "description": "A system for controlling process state under UNIX", - "hashes": [ - { - "alg": "MD5", - "content": "0fe86dfec4e5c5d98324d24c4cf944bd" - }, - { - "alg": "SHA-256", - "content": "96287ebfabf9a6923f74123b056c4da39c617fef367980f007cac02fba6527ad" - } - ], - "licenses": [ - { - "license": { - "name": "BSD-derived (http://www.repoze.org/LICENSE.txt)" - } - } - ], - "modified": false, - "name": "supervisor", - "publisher": "Chris McDonough", - "purl": "pkg:pypi/supervisor@3.3.3", - "type": "library", - "version": "3.3.3" - }, - { - "description": "HTTP library with thread-safe connection pooling, file post, and more.", - "hashes": [ - { - "alg": "MD5", - "content": "1c11e1c80371cc4e89911071010a98d1" - }, - { - "alg": "SHA-256", - "content": "06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "urllib3", - "publisher": "Andrey Petrov", - "purl": "pkg:pypi/urllib3@1.22", - "type": "library", - "version": "1.22" - }, - { - "description": "A full-featured Python package for parsing and creating iCalendar and vCard files", - "hashes": [ - { - "alg": "MD5", - "content": "aa629d6ae95db5edfd5b2402eb1073cb" - }, - { - "alg": "SHA-256", - "content": "0f56cae196303d875682b9648b4bb43ffc769d2f0f800958e0a506af867b1243" - } - ], - "licenses": [ - { - "license": { - "name": "Apache" - } - } - ], - "modified": false, - "name": "vobject", - "publisher": "Sameen Karim", - "purl": "pkg:pypi/vobject@0.9.5", - "type": "library", - "version": "0.9.5" - }, - { - "description": "Safe, minimalistic evaluator of python expression using ast module", - "hashes": [ - { - "alg": "MD5", - "content": "1db193c2c20f4ab41a2ea325940e7712" - }, - { - "alg": "SHA-256", - "content": "38f3b0592cae7e7f65adc687e37aad1824a8e518245603a29ec33258277e779b" - } - ], - "licenses": [ - { - "license": { - "name": "MIT" - } - } - ], - "modified": false, - "name": "asteval", - "publisher": "Matthew Newville", - "purl": "pkg:pypi/asteval@0.9.12", - "type": "library", - "version": "0.9.12" - }, - { - "description": "Python implementation of Markdown.", - "hashes": [ - { - "alg": "MD5", - "content": "29ab3d898f3a65fbd13e0bfb753d8264" - }, - { - "alg": "SHA-256", - "content": "9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f" - } - ], - "licenses": [ - { - "license": { - "name": "BSD License" - } - } - ], - "modified": false, - "name": "Markdown", - "publisher": "Waylan Limberg", - "purl": "pkg:pypi/markdown@2.6.11", - "type": "library", - "version": "2.6.11" - }, - { - "description": "Powerful data structures for data analysis, time series,and statistics", - "hashes": [ - { - "alg": "MD5", - "content": "063b3c0b8f0b2c02f9d9a1b27535fb69" - }, - { - "alg": "SHA-256", - "content": "587a9816cc663c958fcff7907c553b73fe196604f990bc98e1b71ebf07e45b44" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "pandas", - "publisher": "The PyData Development Team", - "purl": "pkg:pypi/pandas@0.22.0", - "type": "library", - "version": "0.22.0" - }, - { - "description": "Management commands to help backup and restore a project database and media", - "hashes": [ - { - "alg": "MD5", - "content": "75db2cfd06e85c30917768dd8177cbf8" - }, - { - "alg": "SHA-256", - "content": "9470e5d8bdaee4feb878b1b66c59eb9b27a131cccd648bf7cbfe70930acd4fc0" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-dbbackup", - "publisher": "Michael Shepanski", - "purl": "pkg:pypi/django-dbbackup@3.2.0", - "type": "library", - "version": "3.2.0" - }, - { - "description": "A comprehensive Markdown editor built for Django.", - "hashes": [ - { - "alg": "MD5", - "content": "96af109cb67fd815826618a7b776bd60" - }, - { - "alg": "SHA-256", - "content": "7a68e3b58d3650d9f9b6e4c5978b3656fb03ca5df61c7fce28f1484c9890d197" - } - ], - "licenses": [ - { - "license": { - "name": "BSD" - } - } - ], - "modified": false, - "name": "django-markdownx", - "publisher": "Adi, Pouria Hadjibagheri", - "purl": "pkg:pypi/django-markdownx@2.0.23", - "type": "library", - "version": "2.0.23" - }, - { - "description": "The great bot network of the Royal Games community", - "hashes": [ - { - "alg": "MD5", - "content": "671e6a4b444baa56309dd071e8cea269" - }, - { - "alg": "SHA-256", - "content": "a94fa6d8f4692b5c824790f279315a3a3d1c8db75ad6064dde83ddc4cf74bc88" - } - ], - "licenses": [], - "modified": false, - "name": "royalnet", - "publisher": "Stefano Pigozzi", - "purl": "pkg:pypi/royalnet@5.0a8", - "type": "library", - "version": "5.0a8" - }, - { - "description": "Python Build Reasonableness", - "hashes": [ - { - "alg": "MD5", - "content": "7941615147c725d1800ee86f91d5df3e" - }, - { - "alg": "SHA-256", - "content": "f5cf7265a80636ecff66806d13494cbf9d77a3758a65fd8b4d4d4bee81b0c375" - } - ], - "licenses": [], - "modified": false, - "name": "pbr", - "publisher": "OpenStack", - "purl": "pkg:pypi/pbr@1.10.0", - "type": "library", - "version": "1.10.0" - } - ], - "specVersion": "1.2", - "version": 1 -} \ No newline at end of file diff --git a/tests/resources/bom.xml b/tests/resources/bom.xml deleted file mode 100644 index 05f26d12..00000000 --- a/tests/resources/bom.xml +++ /dev/null @@ -1,694 +0,0 @@ - - - - - Ask Solem - celery - 4.1.0 - Distributed Task Queue. - - 647073f137121298d1916b09b9560b4c - 81a67f0d53a688ec2bc8557bd5d6d7218f925a6f2e6df80e01560de9e28997ec - - - - BSD - - - pkg:pypi/celery@4.1.0 - false - - - Ned Batchelder and 100 others - coverage - 4.5.1 - Code coverage measurement for Python - - 890d5456fa5e837880139866024582f9 - f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e - - - - Apache 2.0 - - - pkg:pypi/coverage@4.5.1 - false - - - Christian Heimes - defusedxml - 0.5.0 - XML bomb protection for Python stdlib modules - - 37b51c8903a7c7e5060b5773b1694199 - 702a91ade2968a82beb0db1e0766a6a273f33d4616a6ce8cde475d8e09853b20 - - - - PSFL - - - pkg:pypi/defusedxml@0.5.0 - false - - - Django Software Foundation - Django - 1.11.11 - A high-level Python Web framework that encourages rapid development and clean, pragmatic design. - - 47f8dbee713f14b6480c319e9eaf500e - fd186d544c7c2f835668cf11f77be071307c9eb22615a5b3a16bdb14c8357f41 - - - - BSD - - - pkg:pypi/django@1.11.11 - false - - - Jan-Jelle Kester - django-auditlog - 0.4.5 - Audit log app for Django - - 8ef2d70f10385c48de093f8dae760aaf - 70bfc673e7023d91ab8449d745425e7a4ce5eaaf2bdcbfb9b1a2209a7af60b03 - - - - MIT - - - pkg:pypi/django-auditlog@0.4.5 - false - - - David Burke - django-custom-field - 2.9 - End user custom fields for Django including contrib.admin support - - 8d72acb1ac8c48f63f42a812014e4e9e - b2c3c0218b0be806ab979a5894a3edec8236f898131d1c86a3fc568d7dcf736d - - - - BSD - - - pkg:pypi/django-custom-field@2.9 - false - - - Carlton Gibson - django-filter - 1.0.4 - Django-filter is a reusable Django application for allowing users to filter querysets dynamically. - - 505764c7eae6c8116804443e9117ddbb - 6ef1611aeacfda8f13a075a992ff65687afbd5cc8fcb0f3f1563a9ad4fe2d1b0 - - - - BSD - - - pkg:pypi/django-filter@1.0.4 - false - - - Bryan Veloso - django-imagekit - 4.0.2 - Automated image processing for Django models. - - 0b29f9f221b022aa6d2b1689c822b7aa - 304c3379f6a5cac387e47ace11195a603ad3cb01e3e951b45489824d25b00359 - - - - BSD - - - pkg:pypi/django-imagekit@4.0.2 - false - - - Pablo Martin - django-multiselectfield - 0.1.8 - Django multiple select field - - f08a638e8a8e0a1ee0b8cf53b2eb3f2a - 52483d23aecbf6b502f9e6806e97da9288d5d7f2a3f99f736390763de68c8fd7 - - - - LGPL 3 - - - pkg:pypi/django-multiselectfield@0.1.8 - false - - - Stephen McDonald - django-overextends - 0.4.3 - A Django reusable app providing the ability to use circular template inheritance. - - d4743649679bd2b7dbb093e95cf3bc00 - e9c1082e384473ec03ab53821691d79a3f160fef43c15a0de44741b5e9430e4d - - pkg:pypi/django-overextends@0.4.3 - false - - - Christopher Glass - django-polymorphic - 1.2 - Seamless Polymorphic Inheritance for Django Models - - cf7966785cc31d769170104a690dde52 - 99a2c47d8dea5b3827be8274d7cdee21c3826536ee30d70c6bdd243a8ee82453 - - - - BSD - - - pkg:pypi/django-polymorphic@1.2 - false - - - Chris Lamb - django-slack - 5.11.1 - Provides easy-to-use integration between Django projects and the Slack group chat and IM tool. - - c15978b2ac216a1952ff493ae86dc47b - d436b692a719f29491afed0dd854240c9e559ab4f4044debcde5fb97313a4613 - - - - BSD - - - pkg:pypi/django-slack@5.11.1 - false - - - Marc Gibbons - django-rest-swagger - 2.1.2 - Swagger UI for Django REST Framework 3.5+ - - 3d1160115490f3d0a29482ef65e36054 - 3471e6c21a3e97751fa6f7b81b66e916e40fa645cac36be1594c0efed810d247 - - - - FreeBSD License - - - pkg:pypi/django-rest-swagger@2.1.2 - false - - - Fantomas42 - django-tagging - 0.4.6 - Generic tagging application for Django - - 7b5622db3a0e4d51838e2698cd023884 - 3d333a28f4d19369480792ac4afcedbbfd9728054c5f7bbb7ea5db16b7d6020a - - - - BSD License - - - pkg:pypi/django-tagging@0.4.6 - false - - - Daniel Lindsley - django-tastypie - 0.14.0 - A flexible & capable API layer for Django. - - 752a840304144625782fe786ddda3432 - 5015f40e2d37090c25efdab4fe1b46ec9a1749e8bb159f472346dc48747233cc - - pkg:pypi/django-tastypie@0.14.0 - false - - - Concentric Sky - django-tastypie-swagger - 0.1.4 - An adapter to use swagger-ui with django-tastypie - - f90cef9ccab600bda8e5359a7feb3651 - 9d3676ec3ebf1a5a394eead9ca8baee301b551b5245c7c1481acc22c15c8d445 - - - - BSD - - - pkg:pypi/django-tastypie-swagger@0.1.4 - false - - - Dave Hall - django-watson - 1.5.2 - Full-text multi-table search application for Django. Easy to install and use, with good performance. - - 6ee0789f54a11da62f56917bfe2c017a - 2697c8acf77fd8f0f957d4b71bd9f07f359bb3954a3516a339cac87b3c9f1c9f - - pkg:pypi/django-watson@1.5.2 - false - - - Tom Christie - djangorestframework - 3.7.7 - Web APIs for Django, made easy. - - 1af6d5969b0cece505fd975609b12ea5 - 1f6baf40ed456ed2af6bd1a4ff8bbc3503cebea16509993aea2b7085bc097766 - - - - BSD - - - pkg:pypi/djangorestframework@3.7.7 - false - - - Benoit Chesneau - gunicorn - 19.7.1 - WSGI HTTP Server for UNIX - - 9ca2b1a40bdc3b916bf1da31bb139a8e - 75af03c99389535f218cc596c7de74df4763803f7b63eb09d77e92b3956b36c6 - - - - MIT - - - pkg:pypi/gunicorn@19.7.1 - false - - - Alireza Savand - html2text - 2018.1.9 - Turn HTML into equivalent Markdown-structured text. - - 551a1ab41c39a77ebfb7f4f39f3bfa15 - 490db40fe5b2cd79c461cf56be4d39eb8ca68191ae41ba3ba79f6cb05b7dd662 - - - - GNU GPL 3 - - - pkg:pypi/html2text@2018.1.9 - false - - - Jason Moiron - humanize - 0.5.1 - python humanize utilities - - e8473d9dc1b220911cac2edd53b1d973 - a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19 - - - - MIT - - - pkg:pypi/humanize@0.5.1 - false - - - Sorin Sbarnea - jira - 1.0.13 - Python library for interacting with JIRA via REST APIs. - - ab6181ec05e2fbb6fea19c0338a60f7b - 66d4094721e94ca78782675282d241b161303eac9339f7ef8b1459fe82ad5513 - - - - BSD - - - pkg:pypi/jira@1.0.13 - false - - - lxml dev team - lxml - 4.1.1 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - 1cd0365757ebacaf99de8737739f75c7 - d5d29663e979e83b3fc361e97200f959cddb3a14797391d15273d84a5a8ae44b - - - - BSD - - - pkg:pypi/lxml@4.1.1 - false - - - INADA Naoki - mysqlclient - 1.3.12 - Python interface to MySQL - - ce9de52cffb1d4ef493464b5dcb5682c - 1e85e48b167e2af3bb08f273fdbd1ad6401cbe75057fa6513f97387dc7b282dc - - - - GPL - - - pkg:pypi/mysqlclient@1.3.12 - false - - - Golovanov Stanislav - pdfkit - 0.6.1 - Wkhtmltopdf python wrapper to convert html to pdf using the webkit rendering engine and qt - - 072809304c878774cb78bb78b7a23f9b - 05f1c631e8d9ab877886955da825e48b459e097886a21448ab17b34c60cfd66c - - - - MIT - - - pkg:pypi/pdfkit@0.6.1 - false - - - Alex Clark (Fork Author) - Pillow - 5.0.0 - Python Imaging Library (Fork) - - 6db05555eb7d7b5469686d1efb4ec05a - a370d1c570f1d72e877099651e752332444b1c5009381f043c9da5fd47f3ebae - - - - Standard PIL License - - - pkg:pypi/pillow@5.0.0 - false - - - Federico Di Gregorio - psycopg2 - 2.7.3.2 - psycopg2 - Python-PostgreSQL Database Adapter - - d887e5e07f6e307f8ef036d3dedb4d70 - 9d64fed2681552ed642e9c0cc831a9e95ab91de72b47d0cb68b5bf506ba88647 - - - - LGPL with exceptions or ZPL - - - pkg:pypi/psycopg2@2.7.3.2 - false - - - Dwayne C. Litzenberger - pycrypto - 2.6.1 - Cryptographic modules for Python. - - 55a61a054aa66812daf5161a0d5d7eda - f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c - - - - Public domain - - - pkg:pypi/pycrypto@2.6.1 - false - - - Paul Ganssle - python-dateutil - 2.6.1 - Extensions to the standard Python datetime module - - 342c025339de1e7c2138c74983c111d7 - 95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c - - - - Simplified BSD - - - pkg:pypi/python-dateutil@2.6.1 - false - - - Alexandre Norman - python-nmap - 0.6.1 - This is a python class to use nmap and access scan results from python3 - - 2795bfcbc05cbbbccfcf4df59facaab1 - 80ba0eb10a52283a54a633f40b5baa9c2ff08675d6621dd089ead942852f5bd3 - - - - gpl-3.0.txt - - - pkg:pypi/python-nmap@0.6.1 - false - - - Stuart Bishop - pytz - 2017.3 - World timezone definitions, modern and historical - - 6a8716540aaccabb6d5366e0f725a456 - c41c62827ce9cafacd6f2f7018e4f83a6f1986e87bfd000b8cfbd4ab5da95f1a - - - - MIT - - - pkg:pypi/pytz@2017.3 - false - - - Kenneth Reitz - requests - 2.18.4 - Python HTTP for Humans. - - eb9be71cc41fd73a51a7c9cd1adde5de - 6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b - - - - Apache 2.0 - - - pkg:pypi/requests@2.18.4 - false - - - Chris McDonough - supervisor - 3.3.3 - A system for controlling process state under UNIX - - 0fe86dfec4e5c5d98324d24c4cf944bd - 96287ebfabf9a6923f74123b056c4da39c617fef367980f007cac02fba6527ad - - - - BSD-derived (http://www.repoze.org/LICENSE.txt) - - - pkg:pypi/supervisor@3.3.3 - false - - - Andrey Petrov - urllib3 - 1.22 - HTTP library with thread-safe connection pooling, file post, and more. - - 1c11e1c80371cc4e89911071010a98d1 - 06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b - - - - MIT - - - pkg:pypi/urllib3@1.22 - false - - - Sameen Karim - vobject - 0.9.5 - A full-featured Python package for parsing and creating iCalendar and vCard files - - aa629d6ae95db5edfd5b2402eb1073cb - 0f56cae196303d875682b9648b4bb43ffc769d2f0f800958e0a506af867b1243 - - - - Apache - - - pkg:pypi/vobject@0.9.5 - false - - - Matthew Newville - asteval - 0.9.12 - Safe, minimalistic evaluator of python expression using ast module - - 1db193c2c20f4ab41a2ea325940e7712 - 38f3b0592cae7e7f65adc687e37aad1824a8e518245603a29ec33258277e779b - - - - MIT - - - pkg:pypi/asteval@0.9.12 - false - - - Waylan Limberg - Markdown - 2.6.11 - Python implementation of Markdown. - - 29ab3d898f3a65fbd13e0bfb753d8264 - 9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f - - - - BSD License - - - pkg:pypi/markdown@2.6.11 - false - - - The PyData Development Team - pandas - 0.22.0 - Powerful data structures for data analysis, time series,and statistics - - 063b3c0b8f0b2c02f9d9a1b27535fb69 - 587a9816cc663c958fcff7907c553b73fe196604f990bc98e1b71ebf07e45b44 - - - - BSD - - - pkg:pypi/pandas@0.22.0 - false - - - Michael Shepanski - django-dbbackup - 3.2.0 - Management commands to help backup and restore a project database and media - - 75db2cfd06e85c30917768dd8177cbf8 - 9470e5d8bdaee4feb878b1b66c59eb9b27a131cccd648bf7cbfe70930acd4fc0 - - - - BSD - - - pkg:pypi/django-dbbackup@3.2.0 - false - - - Adi, Pouria Hadjibagheri - django-markdownx - 2.0.23 - A comprehensive Markdown editor built for Django. - - 96af109cb67fd815826618a7b776bd60 - 7a68e3b58d3650d9f9b6e4c5978b3656fb03ca5df61c7fce28f1484c9890d197 - - - - BSD - - - pkg:pypi/django-markdownx@2.0.23 - false - - - Stefano Pigozzi - royalnet - 5.0a8 - The great bot network of the Royal Games community - - 671e6a4b444baa56309dd071e8cea269 - a94fa6d8f4692b5c824790f279315a3a3d1c8db75ad6064dde83ddc4cf74bc88 - - pkg:pypi/royalnet@5.0a8 - false - - - OpenStack - pbr - 1.10.0 - Python Build Reasonableness - - 7941615147c725d1800ee86f91d5df3e - f5cf7265a80636ecff66806d13494cbf9d77a3758a65fd8b4d4d4bee81b0c375 - - pkg:pypi/pbr@1.10.0 - false - - - diff --git a/tests/resources/invalid-xml-characters/bom.xml b/tests/resources/invalid-xml-characters/bom.xml deleted file mode 100644 index c5d8c3d6..00000000 --- a/tests/resources/invalid-xml-characters/bom.xml +++ /dev/null @@ -1,361 +0,0 @@ - - - - - Adam Cohen - fuzzywuzzy - 0.15.0 - Fuzzy string matching in python - - bc45e8ed3f76af399dc4dd98430244b7 - 3759bc6859daa0eecef8c82b45404bdac20c23f23136cf4c18b46b426bbc418f - - - - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. -? - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) -? -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. -? - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. -? - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS -? - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - - pkg:pypi/fuzzywuzzy@0.15.0 - false - - - diff --git a/tests/resources/invalid-xml-characters/requirements.txt b/tests/resources/invalid-xml-characters/requirements.txt deleted file mode 100644 index 60b14456..00000000 --- a/tests/resources/invalid-xml-characters/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -fuzzywuzzy==0.15.0 diff --git a/tests/resources/requirements.txt b/tests/resources/requirements.txt deleted file mode 100644 index 3b431278..00000000 --- a/tests/resources/requirements.txt +++ /dev/null @@ -1,44 +0,0 @@ -celery==4.1.0 -coverage==4.5.1 -defusedxml==0.5.0 -Django==1.11.11 -django-auditlog==0.4.5 -django-custom-field==2.9 -django-filter==1.0.4 -django-imagekit==4.0.2 -django-multiselectfield==0.1.8 -django-overextends==0.4.3 # Required for extensions -django-polymorphic==1.2 -django-slack==5.11.1 -django-rest-swagger==2.1.2 -django-tagging==0.4.6 -django-tastypie==0.14.0 -django-tastypie-swagger==0.1.4 -django-watson==1.5.2 -django-rest-swagger==2.1.2 -djangorestframework==3.7.7 -gunicorn==19.7.1 -html2text==2018.1.9 -humanize==0.5.1 -jira==1.0.13 -lxml==4.1.1 -mysqlclient==1.3.12 -pdfkit==0.6.1 -Pillow==5.0.0 # required by django-imagekit -psycopg2==2.7.3.2 -pycrypto==2.6.1 -python-dateutil==2.6.1 -python-nmap==0.6.1 -pytz==2017.3 -requests==2.18.4 -sqlalchemy # Required by Celery broker transport -supervisor==3.3.3 -urllib3==1.22 -vobject==0.9.5 -asteval==0.9.12 -Markdown==2.6.11 -pandas>=0.22.0 -django-dbbackup>=3.2.0 -django-markdownx>=2.0.23 -royalnet==5.0a8 -pbr==1.10.0 # flexes null licenses \ No newline at end of file