From 52269439618cb853822528df78917312a9fc57a4 Mon Sep 17 00:00:00 2001 From: "John M. Horan" Date: Fri, 19 Jul 2024 12:18:12 -0700 Subject: [PATCH] Update output data grouping for existing supported PURL types #116 - Adjusted data output for bitbucket, cargo, npm, pypi and rubygems types to return metadata (1) for all versions when the input PURL has no version and (2) for just the specified version when the input PURL has a version. Signed-off-by: John M. Horan --- src/fetchcode/package.py | 123 +- tests/data/bitbucket.json | 398 ++- tests/data/cargo.json | 38 +- tests/data/cocoapods/AFNetworking.html | 721 ----- .../afnetworking_github_rest_response.json | 137 - .../cocoapods/afnetworking_response_text.txt | 445 --- .../cocoapods/pod_summary_kvllibraries.json | 17 - tests/data/npm.json | 566 ++-- tests/data/pypi.json | 2486 ++++++++--------- tests/data/rubygems.json | 154 +- tests/data/rubygems_mock_data.json | 72 - tests/data/rubygems_mock_get_1st_in_list.json | 63 + tests/data/rubygems_mock_get_2nd_in_list.json | 63 + tests/data/rubygems_mock_get_3rd_in_list.json | 63 + .../rubygems_mock_get_list_of_versions.json | 62 + tests/test_package.py | 24 +- 16 files changed, 2125 insertions(+), 3307 deletions(-) delete mode 100644 tests/data/cocoapods/AFNetworking.html delete mode 100644 tests/data/cocoapods/afnetworking_github_rest_response.json delete mode 100644 tests/data/cocoapods/afnetworking_response_text.txt delete mode 100644 tests/data/cocoapods/pod_summary_kvllibraries.json delete mode 100644 tests/data/rubygems_mock_data.json create mode 100644 tests/data/rubygems_mock_get_1st_in_list.json create mode 100644 tests/data/rubygems_mock_get_2nd_in_list.json create mode 100644 tests/data/rubygems_mock_get_3rd_in_list.json create mode 100644 tests/data/rubygems_mock_get_list_of_versions.json diff --git a/src/fetchcode/package.py b/src/fetchcode/package.py index f5d070e..eee592a 100644 --- a/src/fetchcode/package.py +++ b/src/fetchcode/package.py @@ -43,8 +43,8 @@ def info(url): """ - Return data according to the `url` string - `url` string can be purl too + Return package metadata for a URL or PURL. + Return None if there is no URL, or the URL or PURL is not supported. """ if url: try: @@ -86,13 +86,7 @@ def get_cargo_data_from_purl(purl): crate = response.get("crate") or {} homepage_url = crate.get("homepage") code_view_url = crate.get("repository") - yield Package( - homepage_url=homepage_url, - api_url=api_url, - code_view_url=code_view_url, - download_url=download_url, - **purl.to_dict(), - ) + versions = response.get("versions", []) for version in versions: version_purl = PackageURL(type=purl.type, name=name, version=version.get("num")) @@ -103,6 +97,9 @@ def get_cargo_data_from_purl(purl): download_url = None declared_license = version.get("license") + if purl.version and version_purl.version != purl.version: + continue + yield Package( homepage_url=homepage_url, api_url=api_url, @@ -112,6 +109,9 @@ def get_cargo_data_from_purl(purl): **version_purl.to_dict(), ) + if purl.version: + break + @router.route("pkg:npm/.*") def get_npm_data_from_purl(purl): @@ -123,28 +123,17 @@ def get_npm_data_from_purl(purl): name = purl.name version = purl.version api_url = f"{base_path}/{name}" + response = get_response(api_url) vcs_data = response.get("repository") or {} bugs = response.get("bugs") or {} - download_url = f"{base_path}/{name}/-/{name}-{version}.tgz" if version else None vcs_url = vcs_data.get("url") bug_tracking_url = bugs.get("url") license = response.get("license") homepage_url = response.get("homepage") - yield Package( - homepage_url=homepage_url, - api_url=api_url, - vcs_url=vcs_url, - bug_tracking_url=bug_tracking_url, - download_url=download_url, - declared_license=license, - **purl.to_dict(), - ) - versions = response.get("versions", []) - tags = [] for num in versions: version = versions[num] version_purl = PackageURL( @@ -153,11 +142,13 @@ def get_npm_data_from_purl(purl): repository = version.get("repository") or {} bugs = response.get("bugs") or {} dist = version.get("dist") or {} - licenses = version.get("licenses") or [{}] vcs_url = repository.get("url") download_url = dist.get("tarball") bug_tracking_url = bugs.get("url") - declared_license = licenses[0].get("type") + declared_license = license + + if purl.version and version_purl.version != purl.version: + continue yield Package( homepage_url=homepage_url, @@ -169,6 +160,9 @@ def get_npm_data_from_purl(purl): **version_purl.to_dict(), ) + if purl.version: + break + @router.route("pkg:pypi/.*") def get_pypi_data_from_purl(purl): @@ -177,6 +171,7 @@ def get_pypi_data_from_purl(purl): """ purl = PackageURL.from_string(purl) name = purl.name + base_path = "https://pypi.org/pypi" api_url = f"{base_path}/{name}/json" response = get_response(api_url) @@ -187,19 +182,14 @@ def get_pypi_data_from_purl(purl): project_urls = info.get("project_urls") or {} code_view_url = get_pypi_codeview_url(project_urls) bug_tracking_url = get_pypi_bugtracker_url(project_urls) - yield Package( - homepage_url=homepage_url, - api_url=api_url, - bug_tracking_url=bug_tracking_url, - code_view_url=code_view_url, - declared_license=license, - **purl.to_dict(), - ) + for num in releases: version_purl = PackageURL(type=purl.type, name=name, version=num) release = releases.get(num) or [{}] release = release[0] download_url = release.get("url") + if purl.version and version_purl.version != purl.version: + continue yield Package( homepage_url=homepage_url, api_url=api_url, @@ -210,6 +200,9 @@ def get_pypi_data_from_purl(purl): **version_purl.to_dict(), ) + if purl.version: + break + @router.route("pkg:github/.*") def get_github_data_from_purl(purl): @@ -296,12 +289,7 @@ def get_bitbucket_data_from_purl(purl): bitbucket_url = "https://bitbucket.org" bug_tracking_url = f"{bitbucket_url}/{namespace}/{name}/issues" code_view_url = f"{bitbucket_url}/{namespace}/{name}" - yield Package( - api_url=api_url, - bug_tracking_url=bug_tracking_url, - code_view_url=code_view_url, - **purl.to_dict(), - ) + links = response.get("links") or {} tags_url = links.get("tags") or {} tags_url = tags_url.get("href") @@ -309,6 +297,7 @@ def get_bitbucket_data_from_purl(purl): return [] tags_data = get_response(tags_url) tags = tags_data.get("values") or {} + for tag in tags: version = tag.get("name") or "" version_purl = PackageURL( @@ -318,6 +307,10 @@ def get_bitbucket_data_from_purl(purl): f"{base_path}/{namespace}/{name}/downloads/{name}-{version}.tar.gz" ) code_view_url = f"{bitbucket_url}/{namespace}/{name}/src/{version}" + + if purl.version and version_purl.version != purl.version: + continue + yield Package( api_url=api_url, bug_tracking_url=bug_tracking_url, @@ -326,6 +319,9 @@ def get_bitbucket_data_from_purl(purl): **version_purl.to_dict(), ) + if purl.version: + break + @router.route("pkg:rubygems/.*") def get_rubygems_data_from_purl(purl): @@ -334,22 +330,38 @@ def get_rubygems_data_from_purl(purl): """ purl = PackageURL.from_string(purl) name = purl.name - api_url = f"https://rubygems.org/api/v1/gems/{name}.json" - response = get_response(api_url) - declared_license = response.get("licenses") or None - homepage_url = response.get("homepage_uri") - code_view_url = response.get("source_code_uri") - bug_tracking_url = response.get("bug_tracker_uri") - download_url = response.get("gem_uri") - yield Package( - homepage_url=homepage_url, - api_url=api_url, - bug_tracking_url=bug_tracking_url, - code_view_url=code_view_url, - declared_license=declared_license, - download_url=download_url, - **purl.to_dict(), - ) + all_versions_url = f"https://rubygems.org/api/v1/versions/{name}.json" + all_versions = get_response(all_versions_url) + + for vers in all_versions: + version_purl = PackageURL(type=purl.type, name=name, version=vers.get("number")) + + if purl.version and version_purl.version != purl.version: + continue + + number = vers.get("number") + version_api = f"https://rubygems.org/api/v2/rubygems/{name}/versions/{number}.json" + version_api_response = get_response(version_api) + declared_license = version_api_response.get("licenses") or None + homepage_url = version_api_response.get("homepage_uri") + code_view_url = version_api_response.get("source_code_uri") + bug_tracking_url = version_api_response.get("bug_tracker_uri") + download_url = version_api_response.get("gem_uri") + repository_homepage_url = version_api_response.get("project_uri") + + yield Package( + homepage_url=homepage_url, + api_url=version_api, + bug_tracking_url=bug_tracking_url, + code_view_url=code_view_url, + declared_license=declared_license, + download_url=download_url, + repository_homepage_url=repository_homepage_url, + **version_purl.to_dict(), + ) + + if purl.version: + break @router.route("pkg:gnu/.*") @@ -378,7 +390,8 @@ def get_cocoapods_data_from_purl(purl): data_list = get_cocoapod_tags(spec, name) for tag in data_list: - if purl.version and tag != purl.version: + version_purl = PackageURL(type=purl.type, name=name, version=tag) + if purl.version and version_purl.version != purl.version: continue gh_repo_owner = None @@ -394,7 +407,7 @@ def get_cocoapods_data_from_purl(purl): gh_repo_name = podspec_homepage_split[-1] tag_pkg = construct_cocoapods_package( - purl, + version_purl, name, hashed_path, cocoapods_org_url, diff --git a/tests/data/bitbucket.json b/tests/data/bitbucket.json index 0313ca0..da325d3 100644 --- a/tests/data/bitbucket.json +++ b/tests/data/bitbucket.json @@ -1,218 +1,182 @@ [ - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": null, - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": null, - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit" - }, - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": "1.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.2.tar.gz", - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.2", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit@1.2" - }, - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": "1.3", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.3.tar.gz", - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.3", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit@1.3" - }, - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": "1.4.0", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.4.0.tar.gz", - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.4.0", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit@1.4.0" - }, - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": "1.5.0", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.5.0.tar.gz", - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.5.0", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit@1.5.0" - }, - { - "type": "bitbucket", - "namespace": "litmis", - "name": "python-itoolkit", - "version": "1.5.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.5.1.tar.gz", - "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", - "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.5.1", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:bitbucket/litmis/python-itoolkit@1.5.1" - } -] \ No newline at end of file + { + "type": "bitbucket", + "namespace": "litmis", + "name": "python-itoolkit", + "version": "1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.2.tar.gz", + "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", + "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.2", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:bitbucket/litmis/python-itoolkit@1.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "bitbucket", + "namespace": "litmis", + "name": "python-itoolkit", + "version": "1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.3.tar.gz", + "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", + "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.3", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:bitbucket/litmis/python-itoolkit@1.3", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "bitbucket", + "namespace": "litmis", + "name": "python-itoolkit", + "version": "1.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.4.0.tar.gz", + "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", + "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.4.0", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:bitbucket/litmis/python-itoolkit@1.4.0", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "bitbucket", + "namespace": "litmis", + "name": "python-itoolkit", + "version": "1.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.5.0.tar.gz", + "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", + "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.5.0", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:bitbucket/litmis/python-itoolkit@1.5.0", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "bitbucket", + "namespace": "litmis", + "name": "python-itoolkit", + "version": "1.5.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit/downloads/python-itoolkit-1.5.1.tar.gz", + "api_url": "https://api.bitbucket.org/2.0/repositories/litmis/python-itoolkit", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://bitbucket.org/litmis/python-itoolkit/issues", + "code_view_url": "https://bitbucket.org/litmis/python-itoolkit/src/1.5.1", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:bitbucket/litmis/python-itoolkit@1.5.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + } +] diff --git a/tests/data/cargo.json b/tests/data/cargo.json index 4d149fe..e8090b1 100644 --- a/tests/data/cargo.json +++ b/tests/data/cargo.json @@ -1,40 +1,4 @@ [ - { - "type": "cargo", - "namespace": null, - "name": "rand", - "version": null, - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://crates.io/crates/rand", - "download_url": null, - "api_url": "https://crates.io/api/v1/crates/rand", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/rust-random/rand", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:cargo/rand" - }, { "type": "cargo", "namespace": null, @@ -2267,4 +2231,4 @@ "source_packages": [], "purl": "pkg:cargo/rand@0.1.1" } -] \ No newline at end of file +] diff --git a/tests/data/cocoapods/AFNetworking.html b/tests/data/cocoapods/AFNetworking.html deleted file mode 100644 index 501fd2a..0000000 --- a/tests/data/cocoapods/AFNetworking.html +++ /dev/null @@ -1,721 +0,0 @@ - - - - - AFNetworking on CocoaPods.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-

AFNetworking 4.0.1

-
-
-
-
-
-
-
- -
-

AFNetworking 4.0.1

- -

- - - - - - - - - - - - - - - - - - - -
TestsTested -
LangLanguage - Obj-CObjective C -
License MIT -
ReleasedLast Release - Jan 2023
-

Maintained by Kyle Fuller, Mattt, Jeff Kelley, Jon Shier, Kevin Harwood, Christian Noon.

-
- -
- -
-
-
-

AFNetworking 4.0.1

-
- - -
- - -
-
-
-
-

- AFNetworking -

-

Build Status - CocoaPods Compatible - Carthage Compatible - Platform - Twitter -

-

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

-

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

-

How To Get Started

- -

Communication

-
    -
  • If you need help, use Stack Overflow. (Tag 'afnetworking')
  • -
  • If you'd like to ask a general question, use Stack Overflow.
  • -
  • If you found a bug, and can provide steps to reliably reproduce it, open an issue.
  • -
  • If you have a feature request, open an issue.
  • -
  • If you want to contribute, submit a pull request.
  • -
-

Installation

-

AFNetworking supports multiple methods for installing the library in a project.

-

Installation with CocoaPods

-

To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your Podfile:

-
-
pod 'AFNetworking', '~> 4.0'
-
-

Installation with Swift Package Manager

-

Once you have your Swift package set up, adding AFNetworking as a dependency is as easy as adding it to the dependencies value of your Package.swift.

-
-
dependencies: [
-    .package(url: "https://github.com/AFNetworking/AFNetworking.git", .upToNextMajor(from: "4.0.0"))
-]
-
-
-

Note: AFNetworking's Swift package does not include it's UIKit extensions.

-
-

Installation with Carthage

-

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate AFNetworking, add the following to your Cartfile.

-
-
github "AFNetworking/AFNetworking" ~> 4.0
-
-
-

Requirements

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AFNetworking VersionMinimum iOS TargetMinimum macOS TargetMinimum watchOS TargetMinimum tvOS TargetNotes
4.xiOS 9macOS 10.10watchOS 2.0tvOS 9.0Xcode 11+ is required.
3.xiOS 7OS X 10.9watchOS 2.0tvOS 9.0Xcode 7+ is required. NSURLConnectionOperation support has been removed.
2.6 -> 2.6.3iOS 7OS X 10.9watchOS 2.0n/aXcode 7+ is required.
2.0 -> 2.5.4iOS 6OS X 10.8n/an/aXcode 5+ is required. NSURLSession subspec requires iOS 7 or OS X 10.9.
1.xiOS 5Mac OS X 10.7n/an/a
0.10.xiOS 4Mac OS X 10.6n/an/a
-

(macOS projects must support 64-bit with modern Cocoa runtime).

-
-

Programming in Swift? Try Alamofire for a more conventional set of APIs.

-
-

Architecture

-

NSURLSession

-
    -
  • AFURLSessionManager
  • -
  • AFHTTPSessionManager
  • -
-

Serialization

-
    -
  • <AFURLRequestSerialization> -
      -
    • AFHTTPRequestSerializer
    • -
    • AFJSONRequestSerializer
    • -
    • AFPropertyListRequestSerializer
    • -
    -
  • -
  • <AFURLResponseSerialization> -
      -
    • AFHTTPResponseSerializer
    • -
    • AFJSONResponseSerializer
    • -
    • AFXMLParserResponseSerializer
    • -
    • AFXMLDocumentResponseSerializer (macOS)
    • -
    • AFPropertyListResponseSerializer
    • -
    • AFImageResponseSerializer
    • -
    • AFCompoundResponseSerializer
    • -
    -
  • -
-

Additional Functionality

-
    -
  • AFSecurityPolicy
  • -
  • AFNetworkReachabilityManager
  • -
-

Usage

-

AFURLSessionManager

-

AFURLSessionManager creates and manages an NSURLSession object based on a specified NSURLSessionConfiguration object, which conforms to <NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

-

Creating a Download Task

-
-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
-    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
-    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
-} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
-    NSLog(@"File downloaded to: %@", filePath);
-}];
-[downloadTask resume];
-
-

Creating an Upload Task

-
-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
-NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
-    if (error) {
-        NSLog(@"Error: %@", error);
-    } else {
-        NSLog(@"Success: %@ %@", response, responseObject);
-    }
-}];
-[uploadTask resume];
-
-

Creating an Upload Task for a Multi-Part Request, with Progress

-
-
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
-        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
-    } error:nil];
-
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
-
-NSURLSessionUploadTask *uploadTask;
-uploadTask = [manager
-              uploadTaskWithStreamedRequest:request
-              progress:^(NSProgress * _Nonnull uploadProgress) {
-                  // This is not called back on the main queue.
-                  // You are responsible for dispatching to the main queue for UI updates
-                  dispatch_async(dispatch_get_main_queue(), ^{
-                      //Update the progress view
-                      [progressView setProgress:uploadProgress.fractionCompleted];
-                  });
-              }
-              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
-                  if (error) {
-                      NSLog(@"Error: %@", error);
-                  } else {
-                      NSLog(@"%@ %@", response, responseObject);
-                  }
-              }];
-
-[uploadTask resume];
-
-

Creating a Data Task

-
-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
-    if (error) {
-        NSLog(@"Error: %@", error);
-    } else {
-        NSLog(@"%@ %@", response, responseObject);
-    }
-}];
-[dataTask resume];
-
-
-

Request Serialization

-

Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.

-
-
NSString *URLString = @"http://example.com";
-NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
-
-

Query String Parameter Encoding

-
-
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
-
-
-
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
-
-
-

URL Form Parameter Encoding

-
-
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
-
-
-
POST http://example.com/
-Content-Type: application/x-www-form-urlencoded
-
-foo=bar&baz[]=1&baz[]=2&baz[]=3
-
-
-

JSON Parameter Encoding

-
-
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
-
-
-
POST http://example.com/
-Content-Type: application/json
-
-{"foo": "bar", "baz": [1,2,3]}
-
-
-
-

Network Reachability Manager

-

AFNetworkReachabilityManager monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.

-
    -
  • Do not use Reachability to determine if the original request should be sent. -
      -
    • You should try to send it.
    • -
    -
  • -
  • You can use Reachability to determine when a request should be automatically retried. -
      -
    • Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something.
    • -
    -
  • -
  • Network reachability is a useful tool for determining why a request might have failed. -
      -
    • After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out."
    • -
    -
  • -
-

See also WWDC 2012 session 706, "Networking Best Practices.".

-

Shared Network Reachability

-
-
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
-    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
-}];
-
-[[AFNetworkReachabilityManager sharedManager] startMonitoring];
-
-
-

Security Policy

-

AFSecurityPolicy evaluates server trust against pinned X.509 certificates and public keys over secure connections.

-

Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.

-

Allowing Invalid SSL Certificates

-
-
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
-manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production
-
-
-

Unit Tests

-

AFNetworking includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test.

-

Credits

-

AFNetworking is owned and maintained by the Alamofire Software Foundation.

-

AFNetworking was originally created by Scott Raymond and Mattt Thompson in the development of Gowalla for iPhone.

-

AFNetworking's logo was designed by Alan Defibaugh.

-

And most of all, thanks to AFNetworking's growing list of contributors.

-

Security Disclosure

-

If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to [email protected]. Please do not post it to a public issue tracker.

-

License

-

AFNetworking is released under the MIT license. See LICENSE for details.

-
-
-
-
-
-
-
-
-
-
-
- - -
- - - - - diff --git a/tests/data/cocoapods/afnetworking_github_rest_response.json b/tests/data/cocoapods/afnetworking_github_rest_response.json deleted file mode 100644 index 9abf6f4..0000000 --- a/tests/data/cocoapods/afnetworking_github_rest_response.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "id": 1828795, - "node_id": "MDEwOlJlcG9zaXRvcnkxODI4Nzk1", - "name": "AFNetworking", - "full_name": "AFNetworking/AFNetworking", - "private": false, - "owner": { - "login": "AFNetworking", - "id": 1181541, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjExODE1NDE=", - "avatar_url": "https: //avatars.githubusercontent.com/u/1181541?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/AFNetworking", - "html_url": "https://github.com/AFNetworking", - "followers_url": "https://api.github.com/users/AFNetworking/followers", - "following_url": "https://api.github.com/users/AFNetworking/following{/other_user}", - "gists_url": "https://api.github.com/users/AFNetworking/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AFNetworking/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AFNetworking/subscriptions", - "organizations_url": "https://api.github.com/users/AFNetworking/orgs", - "repos_url": "https://api.github.com/users/AFNetworking/repos", - "events_url": "https://api.github.com/users/AFNetworking/events{/privacy}", - "received_events_url": "https://api.github.com/users/AFNetworking/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/AFNetworking/AFNetworking", - "description": "A delightful networking framework for iOS, macOS, watchOS, and tvOS.", - "fork": false, - "url": "https://api.github.com/repos/AFNetworking/AFNetworking", - "forks_url": "https://api.github.com/repos/AFNetworking/AFNetworking/forks", - "keys_url": "https://api.github.com/repos/AFNetworking/AFNetworking/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/AFNetworking/AFNetworking/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/AFNetworking/AFNetworking/teams", - "hooks_url": "https://api.github.com/repos/AFNetworking/AFNetworking/hooks", - "issue_events_url": "https://api.github.com/repos/AFNetworking/AFNetworking/issues/events{/number}", - "events_url": "https://api.github.com/repos/AFNetworking/AFNetworking/events", - "assignees_url": "https://api.github.com/repos/AFNetworking/AFNetworking/assignees{/user}", - "branches_url": "https://api.github.com/repos/AFNetworking/AFNetworking/branches{/branch}", - "tags_url": "https://api.github.com/repos/AFNetworking/AFNetworking/tags", - "blobs_url": "https://api.github.com/repos/AFNetworking/AFNetworking/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/AFNetworking/AFNetworking/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/AFNetworking/AFNetworking/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/AFNetworking/AFNetworking/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/AFNetworking/AFNetworking/statuses/{sha}", - "languages_url": "https://api.github.com/repos/AFNetworking/AFNetworking/languages", - "stargazers_url": "https://api.github.com/repos/AFNetworking/AFNetworking/stargazers", - "contributors_url": "https://api.github.com/repos/AFNetworking/AFNetworking/contributors", - "subscribers_url": "https://api.github.com/repos/AFNetworking/AFNetworking/subscribers", - "subscription_url": "https://api.github.com/repos/AFNetworking/AFNetworking/subscription", - "commits_url": "https://api.github.com/repos/AFNetworking/AFNetworking/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/AFNetworking/AFNetworking/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/AFNetworking/AFNetworking/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/AFNetworking/AFNetworking/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/AFNetworking/AFNetworking/contents/{+path}", - "compare_url": "https://api.github.com/repos/AFNetworking/AFNetworking/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/AFNetworking/AFNetworking/merges", - "archive_url": "https://api.github.com/repos/AFNetworking/AFNetworking/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/AFNetworking/AFNetworking/downloads", - "issues_url": "https://api.github.com/repos/AFNetworking/AFNetworking/issues{/number}", - "pulls_url": "https://api.github.com/repos/AFNetworking/AFNetworking/pulls{/number}", - "milestones_url": "https://api.github.com/repos/AFNetworking/AFNetworking/milestones{/number}", - "notifications_url": "https://api.github.com/repos/AFNetworking/AFNetworking/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/AFNetworking/AFNetworking/labels{/name}", - "releases_url": "https://api.github.com/repos/AFNetworking/AFNetworking/releases{/id}", - "deployments_url": "https://api.github.com/repos/AFNetworking/AFNetworking/deployments", - "created_at": "2011-05-31T21:28:44Z", - "updated_at": "2024-05-02T12:19:46Z", - "pushed_at": "2023-01-17T19:30:05Z", - "git_url": "git://github.com/AFNetworking/AFNetworking.git", - "ssh_url": "git@github.com:AFNetworking/AFNetworking.git", - "clone_url": "https://github.com/AFNetworking/AFNetworking.git", - "svn_url": "https://github.com/AFNetworking/AFNetworking", - "homepage": "http://afnetworking.com", - "size": 6129, - "stargazers_count": 33331, - "watchers_count": 33331, - "language": "Objective-c", - "has_issues": false, - "has_projects": false, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "has_discussions": false, - "forks_count": 10363, - "mirror_url": null, - "archived": true, - "disabled": false, - "open_issues_count": 103, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "allow_forking": true, - "is_template": false, - "web_commit_signoff_required": false, - "topics": [], - "visibility": "public", - "forks": 10363, - "open_issues": 103, - "watchers": 33331, - "default_branch": "master", - "permissions": { - "admin": false, - "maintain": false, - "push": false, - "triage": false, - "pull": true - }, - "temp_clone_token": "", - "custom_properties": {}, - "organization": { - "login": "AFNetworking", - "id": 1181541, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjExODE1NDE=", - "avatar_url": "https://avatars.githubusercontent.com/u/1181541?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/AFNetworking", - "html_url": "https://github.com/AFNetworking", - "followers_url": "https://api.github.com/users/AFNetworking/followers", - "following_url": "https://api.github.com/users/AFNetworking/following{/other_user}", - "gists_url": "https://api.github.com/users/AFNetworking/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AFNetworking/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AFNetworking/subscriptions", - "organizations_url": "https://api.github.com/users/AFNetworking/orgs", - "repos_url": "https://api.github.com/users/AFNetworking/repos", - "events_url": "https://api.github.com/users/AFNetworking/events{/privacy}", - "received_events_url": "https://api.github.com/users/AFNetworking/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 10363, - "subscribers_count": 1590 -} diff --git a/tests/data/cocoapods/afnetworking_response_text.txt b/tests/data/cocoapods/afnetworking_response_text.txt deleted file mode 100644 index 1f2b81f..0000000 --- a/tests/data/cocoapods/afnetworking_response_text.txt +++ /dev/null @@ -1,445 +0,0 @@ -AFNetworking on CocoaPods.org

AFNetworking 4.0.1

AFNetworking 4.0.1

TestsTested -
LangLanguage - Obj-CObjective C -
License MIT -
ReleasedLast Release -Jan 2023

Maintained by Kyle Fuller, Mattt, Jeff Kelley, Jon Shier, Kevin Harwood, Christian Noon.



-AFNetworking -

-

Build Status -CocoaPods Compatible -Carthage Compatible -Platform -Twitter

-

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

-

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

-

How To Get Started

- -

Communication

-
    -
  • If you need help, use Stack Overflow. (Tag 'afnetworking')
  • -
  • If you'd like to ask a general question, use Stack Overflow.
  • -
  • If you found a bug, and can provide steps to reliably reproduce it, open an issue.
  • -
  • If you have a feature request, open an issue.
  • -
  • If you want to contribute, submit a pull request.
  • -
-

Installation

-

AFNetworking supports multiple methods for installing the library in a project.

-

Installation with CocoaPods

-

To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your Podfile:

-
pod 'AFNetworking', '~> 4.0'
-

Installation with Swift Package Manager

-

Once you have your Swift package set up, adding AFNetworking as a dependency is as easy as adding it to the dependencies value of your Package.swift.

-
dependencies: [
-    .package(url: "https://github.com/AFNetworking/AFNetworking.git", .upToNextMajor(from: "4.0.0"))
-]
-
-

Note: AFNetworking's Swift package does not include it's UIKit extensions.

-
-

Installation with Carthage

-

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate AFNetworking, add the following to your Cartfile.

-
github "AFNetworking/AFNetworking" ~> 4.0
-
-

Requirements

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AFNetworking VersionMinimum iOS TargetMinimum macOS TargetMinimum watchOS TargetMinimum tvOS TargetNotes
4.xiOS 9macOS 10.10watchOS 2.0tvOS 9.0Xcode 11+ is required.
3.xiOS 7OS X 10.9watchOS 2.0tvOS 9.0Xcode 7+ is required. NSURLConnectionOperation support has been removed.
2.6 -> 2.6.3iOS 7OS X 10.9watchOS 2.0n/aXcode 7+ is required.
2.0 -> 2.5.4iOS 6OS X 10.8n/an/aXcode 5+ is required. NSURLSession subspec requires iOS 7 or OS X 10.9.
1.xiOS 5Mac OS X 10.7n/an/a
0.10.xiOS 4Mac OS X 10.6n/an/a
-

(macOS projects must support 64-bit with modern Cocoa runtime).

-
-

Programming in Swift? Try Alamofire for a more conventional set of APIs.

-
-

Architecture

-

NSURLSession

-
    -
  • AFURLSessionManager
  • -
  • AFHTTPSessionManager
  • -
-

Serialization

-
    -
  • <AFURLRequestSerialization> -
      -
    • AFHTTPRequestSerializer
    • -
    • AFJSONRequestSerializer
    • -
    • AFPropertyListRequestSerializer
    • -
    -
  • -
  • <AFURLResponseSerialization> -
      -
    • AFHTTPResponseSerializer
    • -
    • AFJSONResponseSerializer
    • -
    • AFXMLParserResponseSerializer
    • -
    • AFXMLDocumentResponseSerializer (macOS)
    • -
    • AFPropertyListResponseSerializer
    • -
    • AFImageResponseSerializer
    • -
    • AFCompoundResponseSerializer
    • -
    -
  • -
-

Additional Functionality

-
    -
  • AFSecurityPolicy
  • -
  • AFNetworkReachabilityManager
  • -
-

Usage

-

AFURLSessionManager

-

AFURLSessionManager creates and manages an NSURLSession object based on a specified NSURLSessionConfiguration object, which conforms to <NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

-

Creating a Download Task

-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
-    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
-    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
-} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
-    NSLog(@"File downloaded to: %@", filePath);
-}];
-[downloadTask resume];
-

Creating an Upload Task

-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
-NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
-    if (error) {
-        NSLog(@"Error: %@", error);
-    } else {
-        NSLog(@"Success: %@ %@", response, responseObject);
-    }
-}];
-[uploadTask resume];
-

Creating an Upload Task for a Multi-Part Request, with Progress

-
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
-        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
-    } error:nil];
-
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
-
-NSURLSessionUploadTask *uploadTask;
-uploadTask = [manager
-              uploadTaskWithStreamedRequest:request
-              progress:^(NSProgress * _Nonnull uploadProgress) {
-                  // This is not called back on the main queue.
-                  // You are responsible for dispatching to the main queue for UI updates
-                  dispatch_async(dispatch_get_main_queue(), ^{
-                      //Update the progress view
-                      [progressView setProgress:uploadProgress.fractionCompleted];
-                  });
-              }
-              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
-                  if (error) {
-                      NSLog(@"Error: %@", error);
-                  } else {
-                      NSLog(@"%@ %@", response, responseObject);
-                  }
-              }];
-
-[uploadTask resume];
-

Creating a Data Task

-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
-AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
-
-NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
-NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-
-NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
-    if (error) {
-        NSLog(@"Error: %@", error);
-    } else {
-        NSLog(@"%@ %@", response, responseObject);
-    }
-}];
-[dataTask resume];
-
-

Request Serialization

-

Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.

-
NSString *URLString = @"http://example.com";
-NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
-

Query String Parameter Encoding

-
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
-
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
-
-

URL Form Parameter Encoding

-
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
-
POST http://example.com/
-Content-Type: application/x-www-form-urlencoded
-
-foo=bar&baz[]=1&baz[]=2&baz[]=3
-
-

JSON Parameter Encoding

-
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
-
POST http://example.com/
-Content-Type: application/json
-
-{"foo": "bar", "baz": [1,2,3]}
-
-
-

Network Reachability Manager

-

AFNetworkReachabilityManager monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.

-
    -
  • Do not use Reachability to determine if the original request should be sent. -
      -
    • You should try to send it.
    • -
    -
  • -
  • You can use Reachability to determine when a request should be automatically retried. -
      -
    • Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something.
    • -
    -
  • -
  • Network reachability is a useful tool for determining why a request might have failed. -
      -
    • After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out."
    • -
    -
  • -
-

See also WWDC 2012 session 706, "Networking Best Practices.".

-

Shared Network Reachability

-
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
-    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
-}];
-
-[[AFNetworkReachabilityManager sharedManager] startMonitoring];
-
-

Security Policy

-

AFSecurityPolicy evaluates server trust against pinned X.509 certificates and public keys over secure connections.

-

Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.

-

Allowing Invalid SSL Certificates

-
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
-manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production
-
-

Unit Tests

-

AFNetworking includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test.

-

Credits

-

AFNetworking is owned and maintained by the Alamofire Software Foundation.

-

AFNetworking was originally created by Scott Raymond and Mattt Thompson in the development of Gowalla for iPhone.

-

AFNetworking's logo was designed by Alan Defibaugh.

-

And most of all, thanks to AFNetworking's growing list of contributors.

-

Security Disclosure

-

If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to [email protected]. Please do not post it to a public issue tracker.

-

License

-

AFNetworking is released under the MIT license. See LICENSE for details.

-
diff --git a/tests/data/cocoapods/pod_summary_kvllibraries.json b/tests/data/cocoapods/pod_summary_kvllibraries.json deleted file mode 100644 index 3eaa354..0000000 --- a/tests/data/cocoapods/pod_summary_kvllibraries.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "input_purl": "pkg:cocoapods/KVLLibraries", - "input_name": "KVLLibraries", - "cocoapods_org_url": "https://cocoapods.org/pods/KVLLibraries", - "repository_homepage_url": "https://cocoapods.org/pods/KVLLibraries", - "no_github_repo": null, - "gh_repo_four_o_four": "The cocoapods.org GitHub repo url for KVLLibraries returns 404", - "http_url": null, - "cocoapods_org_url_status_code": 200, - "cocoapods_org_gh_repo_url_status_code": 404, - "cocoapods_org_gh_repo_owner": "KevalPatel94", - "cocoapods_org_gh_repo_name": "KVLLibraries", - "cocoapods_org_gh_repo_url": "https://github.com/KevalPatel94/KVLLibraries", - "cocoapods_org_podspec_url": "https://github.com/CocoaPods/Specs/blob/master/Specs/5/1/f/KVLLibraries/1.1.0/KVLLibraries.podspec.json", - "cocoapods_org_pkg_home_url": null, - "cocoapods_org_pod_name": "KVLLibraries" -} diff --git a/tests/data/npm.json b/tests/data/npm.json index 3ee4281..568f6b0 100644 --- a/tests/data/npm.json +++ b/tests/data/npm.json @@ -1,40 +1,4 @@ [ - { - "type": "npm", - "namespace": null, - "name": "express", - "version": null, - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "http://expressjs.com/", - "download_url": null, - "api_url": "http://registry.npmjs.org/express", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://github.com/expressjs/express/issues", - "code_view_url": null, - "vcs_url": "git+https://github.com/expressjs/express.git", - "copyright": null, - "license_expression": null, - "declared_license": "MIT", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:npm/express" - }, { "type": "npm", "namespace": null, @@ -63,7 +27,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -99,7 +63,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -135,7 +99,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -171,7 +135,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -207,7 +171,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -243,7 +207,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -279,7 +243,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -315,7 +279,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -351,7 +315,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -387,7 +351,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -423,7 +387,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -459,7 +423,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -495,7 +459,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -531,7 +495,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -567,7 +531,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -603,7 +567,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -639,7 +603,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -675,7 +639,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -711,7 +675,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -747,7 +711,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -783,7 +747,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -819,7 +783,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -855,7 +819,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -891,7 +855,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -927,7 +891,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -963,7 +927,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -999,7 +963,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1035,7 +999,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1071,7 +1035,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1107,7 +1071,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1143,7 +1107,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1179,7 +1143,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1215,7 +1179,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1251,7 +1215,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1287,7 +1251,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1323,7 +1287,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1359,7 +1323,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1395,7 +1359,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1431,7 +1395,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1467,7 +1431,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1503,7 +1467,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1539,7 +1503,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1575,7 +1539,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1611,7 +1575,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1647,7 +1611,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1683,7 +1647,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1719,7 +1683,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1755,7 +1719,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1791,7 +1755,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1827,7 +1791,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1863,7 +1827,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1899,7 +1863,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1935,7 +1899,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -1971,7 +1935,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2007,7 +1971,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2043,7 +2007,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2079,7 +2043,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2115,7 +2079,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2151,7 +2115,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2187,7 +2151,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2223,7 +2187,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2259,7 +2223,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2295,7 +2259,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2331,7 +2295,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2367,7 +2331,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2403,7 +2367,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2439,7 +2403,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2475,7 +2439,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2511,7 +2475,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2547,7 +2511,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2583,7 +2547,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2619,7 +2583,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2655,7 +2619,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2691,7 +2655,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2727,7 +2691,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2763,7 +2727,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2799,7 +2763,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2835,7 +2799,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2871,7 +2835,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2907,7 +2871,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2943,7 +2907,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -2979,7 +2943,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3015,7 +2979,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3051,7 +3015,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3087,7 +3051,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3123,7 +3087,7 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3159,7 +3123,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3195,7 +3159,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3231,7 +3195,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3267,7 +3231,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3303,7 +3267,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3339,7 +3303,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3375,7 +3339,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3411,7 +3375,7 @@ "vcs_url": "git://github.com/visionmedia/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3447,7 +3411,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3483,7 +3447,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3519,7 +3483,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3555,7 +3519,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3591,7 +3555,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3627,7 +3591,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3663,7 +3627,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3699,7 +3663,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3735,7 +3699,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3771,7 +3735,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3807,7 +3771,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3843,7 +3807,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3879,7 +3843,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3915,7 +3879,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3951,7 +3915,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -3987,7 +3951,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4023,7 +3987,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4059,7 +4023,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4095,7 +4059,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4131,7 +4095,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4167,7 +4131,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4203,7 +4167,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4239,7 +4203,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4275,7 +4239,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4311,7 +4275,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4347,7 +4311,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4383,7 +4347,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4419,7 +4383,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4455,7 +4419,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4491,7 +4455,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4527,7 +4491,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4563,7 +4527,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4599,7 +4563,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4635,7 +4599,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4671,7 +4635,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4707,7 +4671,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4743,7 +4707,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4779,7 +4743,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4815,7 +4779,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4851,7 +4815,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4887,7 +4851,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4923,7 +4887,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4959,7 +4923,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -4995,7 +4959,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5031,7 +4995,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5067,7 +5031,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5103,7 +5067,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5139,7 +5103,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5175,7 +5139,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5211,7 +5175,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5247,7 +5211,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5283,7 +5247,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5319,7 +5283,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5355,7 +5319,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5391,7 +5355,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5427,7 +5391,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5463,7 +5427,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5499,7 +5463,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5535,7 +5499,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5571,7 +5535,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5607,7 +5571,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5643,7 +5607,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5679,7 +5643,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5715,7 +5679,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5751,7 +5715,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5787,7 +5751,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5823,7 +5787,7 @@ "vcs_url": "git://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5859,7 +5823,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5895,7 +5859,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5931,7 +5895,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -5967,7 +5931,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6003,7 +5967,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6039,7 +6003,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6075,7 +6039,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6111,7 +6075,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6147,7 +6111,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6183,7 +6147,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6219,7 +6183,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6255,7 +6219,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6291,7 +6255,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6327,7 +6291,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6363,7 +6327,7 @@ "vcs_url": "https://github.com/visionmedia/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6399,7 +6363,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6435,7 +6399,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6471,7 +6435,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6507,7 +6471,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6543,7 +6507,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6579,7 +6543,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6615,7 +6579,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6651,7 +6615,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6687,7 +6651,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6723,7 +6687,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6759,7 +6723,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6795,7 +6759,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6831,7 +6795,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6867,7 +6831,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6903,7 +6867,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6939,7 +6903,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -6975,7 +6939,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7011,7 +6975,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7047,7 +7011,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7083,7 +7047,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7119,7 +7083,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7155,7 +7119,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7191,7 +7155,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7227,7 +7191,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7263,7 +7227,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7299,7 +7263,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7335,7 +7299,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7371,7 +7335,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7407,7 +7371,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7443,7 +7407,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7479,7 +7443,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7515,7 +7479,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7551,7 +7515,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7587,7 +7551,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7623,7 +7587,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7659,7 +7623,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7695,7 +7659,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7731,7 +7695,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7767,7 +7731,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7803,7 +7767,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7839,7 +7803,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7875,7 +7839,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7911,7 +7875,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7947,7 +7911,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -7983,7 +7947,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8019,7 +7983,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8055,7 +8019,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8091,7 +8055,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8127,7 +8091,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8163,7 +8127,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8199,7 +8163,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8235,7 +8199,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8271,7 +8235,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8307,7 +8271,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8343,7 +8307,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8379,7 +8343,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8415,7 +8379,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8451,7 +8415,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8487,7 +8451,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8523,7 +8487,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8559,7 +8523,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8595,7 +8559,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8631,7 +8595,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8667,7 +8631,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8703,7 +8667,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8739,7 +8703,7 @@ "vcs_url": "https://github.com/strongloop/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8775,7 +8739,7 @@ "vcs_url": "https://github.com/expressjs/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8811,7 +8775,7 @@ "vcs_url": "https://github.com/expressjs/express", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8847,7 +8811,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8883,7 +8847,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8919,7 +8883,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8955,7 +8919,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -8991,7 +8955,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9027,7 +8991,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9063,7 +9027,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9099,7 +9063,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9135,7 +9099,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9171,7 +9135,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9207,7 +9171,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9243,7 +9207,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9279,7 +9243,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9315,7 +9279,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9351,7 +9315,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9387,7 +9351,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9423,7 +9387,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9459,7 +9423,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9495,7 +9459,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9531,7 +9495,7 @@ "vcs_url": "git+https://github.com/expressjs/express.git", "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], @@ -9539,4 +9503,4 @@ "source_packages": [], "purl": "pkg:npm/express@5.0.0-alpha.8" } -] \ No newline at end of file +] diff --git a/tests/data/pypi.json b/tests/data/pypi.json index 544c6c1..8be75ff 100644 --- a/tests/data/pypi.json +++ b/tests/data/pypi.json @@ -1,1262 +1,1226 @@ [ - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": null, - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": null, - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/6e/49/43b514bfdaf4af12e6ef1f17aa25447157bcbb864c07775dacd72e8c8e02/Flask-0.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.10", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/f3/46/53d83cbdb79b27678c7b032d5deaa556655dd034cc747ee609b3e3cbf95b/Flask-0.10.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.10" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.10.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.10.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.11", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/ac/0b/191c5dc6b3e22dfacb8e1eba2bb8dc211c16972b23a0b419f8a33b3deb71/Flask-0.11-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.11" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.11.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/63/2b/01f5ed23a78391f6e3e73075973da0ecb467c831376a0b09c0ec5afd7977/Flask-0.11.1-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.11.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/0e/e9/37ee66dde483dceefe45bb5e92b387f990d4f097df40c400cf816dcebaa4/Flask-0.12-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/f4/43/fb2d5fb1d10e1d0402dd57836cf9a78b7f69c8b5f76a04b6e6113d0d7c5a/Flask-0.12.1-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/77/32/e3597cb19ffffe724ad4bf0beca4153419918e7fa4ba6a34b04ee4da3371/Flask-0.12.2-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12.2" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12.3", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/24/3e/1b6aa496fa9bb119f6b22263ca5ca9e826aaa132431fd78f413c8bcc18e3/Flask-0.12.3-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12.3" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12.4", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/2e/48/f1936dadac2326b3d73f2fe0a964a87d16be16eb9d7fc56f09c1bea3d17c/Flask-0.12.4-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12.4" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.12.5", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/a4/36/756c34af4523bb0dfa77d3c83455bc4d5d01d6f03b20d8414f3e4deb8669/Flask-0.12.5-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.12.5" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/9a/db/245abc92428bcdfdc32d8017ddd1b079afffce9c74f94e34d1aa777bc771/Flask-0.2.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.2" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.3", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/8b/cb/706dbb37f4ef3a75366c9e715f41d22e73ca4594303f48d229d906c80632/Flask-0.3.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.3" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.3.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/e0/d7/4de91ad9fc1854e651cf03f87eff939a92cd06716645dee86b0382674ea3/Flask-0.3.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.3.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.4", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/a3/89/a4bf29e78a87e11f0f6fdd4d9e02a0aece1eecd38118496da58d4826d7e3/Flask-0.4.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.4" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.5", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/d4/6a/93500f2a7089b4e993fb095215979890b6204a5ba3f6b0f63dc6c3c6c827/Flask-0.5.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.5" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.5.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/16/a6/c458d3305e689d7e06a23eacee414ea10d870074a7673864ffea67109f9d/Flask-0.5.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.5.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.5.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/1c/b5/03c412ba48148e6c222e238201a0924360a85d755ce9597acbd99a1a6240/Flask-0.5.2.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.5.2" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.6", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/44/86/481371798994529e105633a50b2332638105a1e191053bc0f4bbc9b91791/Flask-0.6.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.6" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.6.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/8f/1c/453a427f55b91239b3368c8b975b55d089d5d79dc37545af41cd7157c187/Flask-0.6.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.6.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.7", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/43/08/e4907533c6ca0ebb1867182fa94b1ffa41fa3aba5f6cb4969e108262e92b/Flask-0.7.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.7" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.7.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/fe/3e/ad5eb51d4666e76f389cd4f9c6cc22e1544e0daf72419ccab8705e918911/Flask-0.7.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.7.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.7.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/1c/c7/a361d00f4c9ed3f1b7ab77976e820ca347f3b0aec4dee6c66fe5c5a2124d/Flask-0.7.2.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.7.2" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.8", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/f0/84/e3c207a6aad1acfdfe1eda20abeadff47035f24820f09ac6870f9c8a26a3/Flask-0.8.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.8" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.8.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/20/5d/f355d122c9d7a45d7846449f94b9f1d26df88556f705f14dd84a8fa264ea/Flask-0.8.1.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.8.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "0.9", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/49/0a/fe5021b35436202d3d4225a766f3bdc7fb51521ad89e73c5162db36cdbc7/Flask-0.9.tar.gz", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@0.9" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.0", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/55/b1/4365193655df97227ace49311365cc296e74b60c7f5c63d23cd30175e2f6/Flask-1.0-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.0" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/90/72/b5ed853418364d8e7006550dbdb2cb9ac3e33ce3c9145acc7898fca8c0b6/Flask-1.0.1-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.0.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.0.2" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/9a/74/670ae9737d14114753b8c8fdf2e8bd212a05d3b361ab15b44937dfd40985/Flask-1.0.3-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.0.3" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.0.4", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/d8/94/7350820ae209ccdba073f83220cea1c376f2621254d1e0e82609c9a65e58/Flask-1.0.4-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.0.4" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/c3/31/6904ac846fc65a7fa6cac8b4ddc392ce96ca08ee67b0f97854e9575bbb26/Flask-1.1.0-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.1.0" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.1.1", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.1.1" - }, - { - "type": "pypi", - "namespace": null, - "name": "flask", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://palletsprojects.com/p/flask/", - "download_url": "https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl", - "api_url": "https://pypi.org/pypi/flask/json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": "https://github.com/pallets/flask", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": "BSD-3-Clause", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:pypi/flask@1.1.2" - } -] \ No newline at end of file + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/6e/49/43b514bfdaf4af12e6ef1f17aa25447157bcbb864c07775dacd72e8c8e02/Flask-0.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.10", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/f3/46/53d83cbdb79b27678c7b032d5deaa556655dd034cc747ee609b3e3cbf95b/Flask-0.10.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.10", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.10.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.10.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.11", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/ac/0b/191c5dc6b3e22dfacb8e1eba2bb8dc211c16972b23a0b419f8a33b3deb71/Flask-0.11-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.11", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.11.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/63/2b/01f5ed23a78391f6e3e73075973da0ecb467c831376a0b09c0ec5afd7977/Flask-0.11.1-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.11.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/0e/e9/37ee66dde483dceefe45bb5e92b387f990d4f097df40c400cf816dcebaa4/Flask-0.12-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/f4/43/fb2d5fb1d10e1d0402dd57836cf9a78b7f69c8b5f76a04b6e6113d0d7c5a/Flask-0.12.1-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/77/32/e3597cb19ffffe724ad4bf0beca4153419918e7fa4ba6a34b04ee4da3371/Flask-0.12.2-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/24/3e/1b6aa496fa9bb119f6b22263ca5ca9e826aaa132431fd78f413c8bcc18e3/Flask-0.12.3-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12.3", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/2e/48/f1936dadac2326b3d73f2fe0a964a87d16be16eb9d7fc56f09c1bea3d17c/Flask-0.12.4-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12.4", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.12.5", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/a4/36/756c34af4523bb0dfa77d3c83455bc4d5d01d6f03b20d8414f3e4deb8669/Flask-0.12.5-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.12.5", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/9a/db/245abc92428bcdfdc32d8017ddd1b079afffce9c74f94e34d1aa777bc771/Flask-0.2.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/8b/cb/706dbb37f4ef3a75366c9e715f41d22e73ca4594303f48d229d906c80632/Flask-0.3.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.3", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/e0/d7/4de91ad9fc1854e651cf03f87eff939a92cd06716645dee86b0382674ea3/Flask-0.3.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.3.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/a3/89/a4bf29e78a87e11f0f6fdd4d9e02a0aece1eecd38118496da58d4826d7e3/Flask-0.4.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.4", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/d4/6a/93500f2a7089b4e993fb095215979890b6204a5ba3f6b0f63dc6c3c6c827/Flask-0.5.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.5", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.5.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/16/a6/c458d3305e689d7e06a23eacee414ea10d870074a7673864ffea67109f9d/Flask-0.5.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.5.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.5.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/1c/b5/03c412ba48148e6c222e238201a0924360a85d755ce9597acbd99a1a6240/Flask-0.5.2.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.5.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.6", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/44/86/481371798994529e105633a50b2332638105a1e191053bc0f4bbc9b91791/Flask-0.6.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.6", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.6.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/8f/1c/453a427f55b91239b3368c8b975b55d089d5d79dc37545af41cd7157c187/Flask-0.6.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.6.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/43/08/e4907533c6ca0ebb1867182fa94b1ffa41fa3aba5f6cb4969e108262e92b/Flask-0.7.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.7", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.7.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/fe/3e/ad5eb51d4666e76f389cd4f9c6cc22e1544e0daf72419ccab8705e918911/Flask-0.7.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.7.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.7.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/1c/c7/a361d00f4c9ed3f1b7ab77976e820ca347f3b0aec4dee6c66fe5c5a2124d/Flask-0.7.2.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.7.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.8", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/f0/84/e3c207a6aad1acfdfe1eda20abeadff47035f24820f09ac6870f9c8a26a3/Flask-0.8.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.8", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.8.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/20/5d/f355d122c9d7a45d7846449f94b9f1d26df88556f705f14dd84a8fa264ea/Flask-0.8.1.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.8.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/49/0a/fe5021b35436202d3d4225a766f3bdc7fb51521ad89e73c5162db36cdbc7/Flask-0.9.tar.gz", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@0.9", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/55/b1/4365193655df97227ace49311365cc296e74b60c7f5c63d23cd30175e2f6/Flask-1.0-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.0", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/90/72/b5ed853418364d8e7006550dbdb2cb9ac3e33ce3c9145acc7898fca8c0b6/Flask-1.0.1-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.0.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.0.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/9a/74/670ae9737d14114753b8c8fdf2e8bd212a05d3b361ab15b44937dfd40985/Flask-1.0.3-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.0.3", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/d8/94/7350820ae209ccdba073f83220cea1c376f2621254d1e0e82609c9a65e58/Flask-1.0.4-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.0.4", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/c3/31/6904ac846fc65a7fa6cac8b4ddc392ce96ca08ee67b0f97854e9575bbb26/Flask-1.1.0-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.1.0", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.1.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "pypi", + "namespace": null, + "name": "flask", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://palletsprojects.com/p/flask/", + "download_url": "https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl", + "api_url": "https://pypi.org/pypi/flask/json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/pallets/flask", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": "BSD-3-Clause", + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [], + "purl": "pkg:pypi/flask@1.1.2", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + } +] diff --git a/tests/data/rubygems.json b/tests/data/rubygems.json index b9104a9..a6a3487 100644 --- a/tests/data/rubygems.json +++ b/tests/data/rubygems.json @@ -1,40 +1,116 @@ [ - { - "type": "rubygems", - "namespace": null, - "name": "rubocop", - "version": null, - "qualifiers": {}, - "subpath": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://rubocop.org/", - "download_url": "https://rubygems.org/gems/rubocop-0.89.1.gem", - "api_url": "https://rubygems.org/api/v1/gems/rubocop.json", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "https://github.com/rubocop-hq/rubocop/issues", - "code_view_url": "https://github.com/rubocop-hq/rubocop/", - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": [ - "MIT" - ], - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:rubygems/rubocop" - } -] \ No newline at end of file + { + "purl": "pkg:rubygems/pronto-goodcheck@0.2.0", + "type": "rubygems", + "namespace": null, + "name": "pronto-goodcheck", + "version": "0.2.0", + "qualifiers": {}, + "subpath": null, + "repository_homepage_url": "https://rubygems.org/gems/pronto-goodcheck", + "repository_download_url": null, + "api_data_url": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://github.com/aergonaut/pronto-goodcheck", + "download_url": "https://rubygems.org/gems/pronto-goodcheck-0.2.0.gem", + "api_url": "https://rubygems.org/api/v2/rubygems/pronto-goodcheck/versions/0.2.0.json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": [ + "MIT" + ], + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [] + }, + { + "purl": "pkg:rubygems/pronto-goodcheck@0.1.2", + "type": "rubygems", + "namespace": null, + "name": "pronto-goodcheck", + "version": "0.1.2", + "qualifiers": {}, + "subpath": null, + "repository_homepage_url": "https://rubygems.org/gems/pronto-goodcheck", + "repository_download_url": null, + "api_data_url": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://github.com/aergonaut/pronto-goodcheck", + "download_url": "https://rubygems.org/gems/pronto-goodcheck-0.1.2.gem", + "api_url": "https://rubygems.org/api/v2/rubygems/pronto-goodcheck/versions/0.1.2.json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": [ + "MIT" + ], + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [] + }, + { + "purl": "pkg:rubygems/pronto-goodcheck@0.1.1", + "type": "rubygems", + "namespace": null, + "name": "pronto-goodcheck", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "repository_homepage_url": "https://rubygems.org/gems/pronto-goodcheck", + "repository_download_url": null, + "api_data_url": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://github.com/aergonaut/pronto-goodcheck", + "download_url": "https://rubygems.org/gems/pronto-goodcheck-0.1.1.gem", + "api_url": "https://rubygems.org/api/v2/rubygems/pronto-goodcheck/versions/0.1.1.json", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": [ + "MIT" + ], + "notice_text": null, + "root_path": null, + "dependencies": [], + "contains_source_code": null, + "source_packages": [] + } +] diff --git a/tests/data/rubygems_mock_data.json b/tests/data/rubygems_mock_data.json deleted file mode 100644 index 5a06d2f..0000000 --- a/tests/data/rubygems_mock_data.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "rubocop", - "downloads": 111809413, - "version": "0.89.1", - "version_downloads": 259770, - "platform": "ruby", - "authors": "Bozhidar Batsov, Jonas Arvidsson, Yuji Nakayama", - "info": " RuboCop is a Ruby code style checking and code formatting tool.\n It aims to enforce the community-driven Ruby Style Guide.\n", - "licenses": [ - "MIT" - ], - "metadata": { - "homepage_uri": "https://rubocop.org/", - "changelog_uri": "https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md", - "bug_tracker_uri": "https://github.com/rubocop-hq/rubocop/issues", - "source_code_uri": "https://github.com/rubocop-hq/rubocop/", - "documentation_uri": "https://docs.rubocop.org/" - }, - "yanked": false, - "sha": "30794116b2804aab1abc74780a201fae5160c1d6a21550ce9786abd3ca0e07fa", - "project_uri": "https://rubygems.org/gems/rubocop", - "gem_uri": "https://rubygems.org/gems/rubocop-0.89.1.gem", - "homepage_uri": "https://rubocop.org/", - "wiki_uri": null, - "documentation_uri": "https://docs.rubocop.org/", - "mailing_list_uri": null, - "source_code_uri": "https://github.com/rubocop-hq/rubocop/", - "bug_tracker_uri": "https://github.com/rubocop-hq/rubocop/issues", - "changelog_uri": "https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md", - "dependencies": { - "development": [ - { - "name": "bundler", - "requirements": ">= 1.15.0, < 3.0" - } - ], - "runtime": [ - { - "name": "parallel", - "requirements": "~> 1.10" - }, - { - "name": "parser", - "requirements": ">= 2.7.1.1" - }, - { - "name": "rainbow", - "requirements": ">= 2.2.2, < 4.0" - }, - { - "name": "regexp_parser", - "requirements": ">= 1.7" - }, - { - "name": "rexml", - "requirements": ">= 0" - }, - { - "name": "rubocop-ast", - "requirements": ">= 0.3.0, < 1.0" - }, - { - "name": "ruby-progressbar", - "requirements": "~> 1.7" - }, - { - "name": "unicode-display_width", - "requirements": ">= 1.4.0, < 2.0" - } - ] - } -} diff --git a/tests/data/rubygems_mock_get_1st_in_list.json b/tests/data/rubygems_mock_get_1st_in_list.json new file mode 100644 index 0000000..46ed7bd --- /dev/null +++ b/tests/data/rubygems_mock_get_1st_in_list.json @@ -0,0 +1,63 @@ +{ + "name": "pronto-goodcheck", + "downloads": 36962, + "version": "0.2.0", + "version_created_at": "2019-04-03T00:07:48.340Z", + "version_downloads": 33915, + "platform": "ruby", + "authors": "Chris Fung", + "info": "Pronto runner for Goodcheck", + "licenses": [ + "MIT" + ], + "metadata": {}, + "yanked": false, + "sha": "c099a2c036ed4d86203ca254d1a3f70c4f0575960a0b330beb414273f9494a7c", + "spec_sha": "ef46dd6d066263c7338b7cafc386d93b19f4099e7448aca6718da26a20ab17a5", + "project_uri": "https://rubygems.org/gems/pronto-goodcheck", + "gem_uri": "https://rubygems.org/gems/pronto-goodcheck-0.2.0.gem", + "homepage_uri": "https://github.com/aergonaut/pronto-goodcheck", + "wiki_uri": null, + "documentation_uri": "https://www.rubydoc.info/gems/pronto-goodcheck/0.2.0", + "mailing_list_uri": null, + "source_code_uri": null, + "bug_tracker_uri": null, + "changelog_uri": null, + "funding_uri": null, + "dependencies": { + "development": [ + { + "name": "bundler", + "requirements": "~> 1.15" + }, + { + "name": "rake", + "requirements": "~> 10.0" + }, + { + "name": "rspec", + "requirements": "~> 3.0" + } + ], + "runtime": [ + { + "name": "goodcheck", + "requirements": ">= 1.5.0" + }, + { + "name": "pronto", + "requirements": ">= 0.9.5" + } + ] + }, + "built_at": "2019-04-03T00:00:00.000Z", + "created_at": "2019-04-03T00:07:48.340Z", + "description": null, + "downloads_count": 33915, + "number": "0.2.0", + "summary": "Pronto runner for Goodcheck", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "requirements": [] +} diff --git a/tests/data/rubygems_mock_get_2nd_in_list.json b/tests/data/rubygems_mock_get_2nd_in_list.json new file mode 100644 index 0000000..2609a69 --- /dev/null +++ b/tests/data/rubygems_mock_get_2nd_in_list.json @@ -0,0 +1,63 @@ +{ + "name": "pronto-goodcheck", + "downloads": 36962, + "version": "0.1.2", + "version_created_at": "2018-08-20T22:09:07.913Z", + "version_downloads": 1595, + "platform": "ruby", + "authors": "Chris Fung", + "info": "Pronto runner for Goodcheck", + "licenses": [ + "MIT" + ], + "metadata": {}, + "yanked": false, + "sha": "2ab80351158c55ef1727835940ca04cba09b18849b5e13260da0f9b8d14baaeb", + "spec_sha": "35e41b234bba7d2593815932edecc2b1146cabceaf5cdaf7356da4e3ca931f8b", + "project_uri": "https://rubygems.org/gems/pronto-goodcheck", + "gem_uri": "https://rubygems.org/gems/pronto-goodcheck-0.1.2.gem", + "homepage_uri": "https://github.com/aergonaut/pronto-goodcheck", + "wiki_uri": null, + "documentation_uri": "https://www.rubydoc.info/gems/pronto-goodcheck/0.1.2", + "mailing_list_uri": null, + "source_code_uri": null, + "bug_tracker_uri": null, + "changelog_uri": null, + "funding_uri": null, + "dependencies": { + "development": [ + { + "name": "bundler", + "requirements": "~> 1.15" + }, + { + "name": "rake", + "requirements": "~> 10.0" + }, + { + "name": "rspec", + "requirements": "~> 3.0" + } + ], + "runtime": [ + { + "name": "goodcheck", + "requirements": ">= 1.2.0" + }, + { + "name": "pronto", + "requirements": ">= 0.9.5" + } + ] + }, + "built_at": "2018-08-20T00:00:00.000Z", + "created_at": "2018-08-20T22:09:07.913Z", + "description": null, + "downloads_count": 1595, + "number": "0.1.2", + "summary": "Pronto runner for Goodcheck", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "requirements": [] +} diff --git a/tests/data/rubygems_mock_get_3rd_in_list.json b/tests/data/rubygems_mock_get_3rd_in_list.json new file mode 100644 index 0000000..017395b --- /dev/null +++ b/tests/data/rubygems_mock_get_3rd_in_list.json @@ -0,0 +1,63 @@ +{ + "name": "pronto-goodcheck", + "downloads": 36962, + "version": "0.1.1", + "version_created_at": "2018-08-20T20:16:10.837Z", + "version_downloads": 1452, + "platform": "ruby", + "authors": "Chris Fung", + "info": "Pronto runner for Goodcheck", + "licenses": [ + "MIT" + ], + "metadata": {}, + "yanked": false, + "sha": "b6a8579f6ff4ac4276a7a041b98e14fe623245f5173026b71103a20d511ef66d", + "spec_sha": "1b8684a18177803e848531230f4b7e29eac73589a868697c4f2479ff8921726b", + "project_uri": "https://rubygems.org/gems/pronto-goodcheck", + "gem_uri": "https://rubygems.org/gems/pronto-goodcheck-0.1.1.gem", + "homepage_uri": "https://github.com/aergonaut/pronto-goodcheck", + "wiki_uri": null, + "documentation_uri": "https://www.rubydoc.info/gems/pronto-goodcheck/0.1.1", + "mailing_list_uri": null, + "source_code_uri": null, + "bug_tracker_uri": null, + "changelog_uri": null, + "funding_uri": null, + "dependencies": { + "development": [ + { + "name": "bundler", + "requirements": "~> 1.15" + }, + { + "name": "rake", + "requirements": "~> 10.0" + }, + { + "name": "rspec", + "requirements": "~> 3.0" + } + ], + "runtime": [ + { + "name": "goodcheck", + "requirements": ">= 1.2.0" + }, + { + "name": "pronto", + "requirements": ">= 0.9.5" + } + ] + }, + "built_at": "2018-08-20T00:00:00.000Z", + "created_at": "2018-08-20T20:16:10.837Z", + "description": null, + "downloads_count": 1452, + "number": "0.1.1", + "summary": "Pronto runner for Goodcheck", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "requirements": [] +} diff --git a/tests/data/rubygems_mock_get_list_of_versions.json b/tests/data/rubygems_mock_get_list_of_versions.json new file mode 100644 index 0000000..986a2d0 --- /dev/null +++ b/tests/data/rubygems_mock_get_list_of_versions.json @@ -0,0 +1,62 @@ +[ + { + "authors": "Chris Fung", + "built_at": "2019-04-03T00:00:00.000Z", + "created_at": "2019-04-03T00:07:48.340Z", + "description": null, + "downloads_count": 33915, + "metadata": {}, + "number": "0.2.0", + "summary": "Pronto runner for Goodcheck", + "platform": "ruby", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "licenses": [ + "MIT" + ], + "requirements": [], + "sha": "c099a2c036ed4d86203ca254d1a3f70c4f0575960a0b330beb414273f9494a7c", + "spec_sha": "ef46dd6d066263c7338b7cafc386d93b19f4099e7448aca6718da26a20ab17a5" + }, + { + "authors": "Chris Fung", + "built_at": "2018-08-20T00:00:00.000Z", + "created_at": "2018-08-20T22:09:07.913Z", + "description": null, + "downloads_count": 1595, + "metadata": {}, + "number": "0.1.2", + "summary": "Pronto runner for Goodcheck", + "platform": "ruby", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "licenses": [ + "MIT" + ], + "requirements": [], + "sha": "2ab80351158c55ef1727835940ca04cba09b18849b5e13260da0f9b8d14baaeb", + "spec_sha": "35e41b234bba7d2593815932edecc2b1146cabceaf5cdaf7356da4e3ca931f8b" + }, + { + "authors": "Chris Fung", + "built_at": "2018-08-20T00:00:00.000Z", + "created_at": "2018-08-20T20:16:10.837Z", + "description": null, + "downloads_count": 1452, + "metadata": {}, + "number": "0.1.1", + "summary": "Pronto runner for Goodcheck", + "platform": "ruby", + "rubygems_version": ">= 0", + "ruby_version": ">= 0", + "prerelease": false, + "licenses": [ + "MIT" + ], + "requirements": [], + "sha": "b6a8579f6ff4ac4276a7a041b98e14fe623245f5173026b71103a20d511ef66d", + "spec_sha": "1b8684a18177803e848531230f4b7e29eac73589a868697c4f2479ff8921726b" + } +] diff --git a/tests/test_package.py b/tests/test_package.py index 46dd9bd..fb62ad0 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -55,6 +55,7 @@ def test_cargo_packages(mock_get): expected_data = "tests/data/cargo.json" mock_get.side_effect = side_effect packages = list(info(purl)) + check_packages(packages, expected_data) @@ -65,6 +66,7 @@ def test_npm_packages(mock_get): expected_data = "tests/data/npm.json" mock_get.side_effect = side_effect packages = list(info(purl)) + check_packages(packages, expected_data) @@ -75,6 +77,7 @@ def test_pypi_packages(mock_get): expected_data = "tests/data/pypi.json" mock_get.side_effect = side_effect packages = list(info(purl)) + check_packages(packages, expected_data) @@ -88,16 +91,29 @@ def test_bitbucket_packages(mock_get): expected_data = "tests/data/bitbucket.json" mock_get.side_effect = side_effect packages = list(info(purl)) + check_packages(packages, expected_data) @mock.patch("fetchcode.package.get_response") def test_rubygems_packages(mock_get): - side_effect = [load_json("tests/data/rubygems_mock_data.json")] - purl = "pkg:rubygems/rubocop" + purl = "pkg:rubygems/pronto-goodcheck" expected_data = "tests/data/rubygems.json" - mock_get.side_effect = side_effect + + mock_get_01_list_of_versions = load_json("tests/data/rubygems_mock_get_list_of_versions.json") + mock_get_02_1st_in_list = load_json("tests/data/rubygems_mock_get_1st_in_list.json") + mock_get_03_2nd_in_list = load_json("tests/data/rubygems_mock_get_2nd_in_list.json") + mock_get_04_3rd_in_list = load_json("tests/data/rubygems_mock_get_3rd_in_list.json") + + mock_get.side_effect = [ + mock_get_01_list_of_versions, + mock_get_02_1st_in_list, + mock_get_03_2nd_in_list, + mock_get_04_3rd_in_list + ] + packages = list(info(purl)) + check_packages(packages, expected_data) @@ -133,7 +149,6 @@ def test_cocoapods_packages( ] mock_get_response.side_effect = file_json("tests/data/cocoapods/mock_get_response_side_effect.json") - mock_get_github_rest.return_value = load_json("tests/data/cocoapods/mock_get_github_rest_return_value.json") mock_response = mock.Mock() @@ -175,7 +190,6 @@ def test_get_cocoapods_data_from_purl( ] mock_get_response.side_effect = file_json("tests/data/cocoapods/mock_get_response_side_effect.json") - mock_get_github_rest.return_value = load_json("tests/data/cocoapods/mock_get_github_rest_return_value.json") mock_response = mock.Mock()