예제 #1
0
    def test_valid_json(self) -> None:
        # Arrange
        package = "pip"
        mocked_url = "https://pypistats.org/api/packages/pip/recent?&period=day"
        mocked_response = """
        {"data": {"last_day": 1956060}, "package": "pip", "type": "recent_downloads"}
        """

        # Act
        respx.get(mocked_url).respond(content=mocked_response)
        output = pypistats.recent(package, period="day", format="json")

        # Assert
        # Should not raise any errors eg. TypeError
        json.loads(output)
        assert json.loads(output) == json.loads(mocked_response)
예제 #2
0
    def test_recent_tabular(self, test_format, expected_output) -> None:
        # Arrange
        package = "pip"
        mocked_url = "https://pypistats.org/api/packages/pip/recent"
        mocked_response = """{
            "data":
                {"last_day": 2295765, "last_month": 67759913, "last_week": 15706750},
            "package": "pip", "type": "recent_downloads"
        }"""

        # Act
        respx.get(mocked_url).respond(content=mocked_response)
        output = pypistats.recent(package, format=test_format)

        # Assert
        assert output.strip() == expected_output.strip()
예제 #3
0
    def test_valid_json(self):
        # Arrange
        package = "pip"
        mocked_url = "https://pypistats.org/api/packages/pip/recent?&period=day"
        mocked_response = """
        {"data": {"last_day": 1956060}, "package": "pip", "type": "recent_downloads"}
        """

        # Act
        with requests_mock.Mocker() as m:
            m.get(mocked_url, text=mocked_response)
            output = pypistats.recent(package, period="day", format="json")

        # Assert
        # Should not raise any errors eg. TypeError
        json.loads(output)
        self.assertEqual(json.loads(output), json.loads(mocked_response))
예제 #4
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--packages', nargs='+', required=True)
    parsed = parser.parse_args()

    metrics = []
    for package in parsed.packages:
        pypi_data = json.loads(pypistats.recent(package,
                                                format='json'))['data']
        metrics.append(make_metric(package, 'last_day', pypi_data['last_day']))
        metrics.append(
            make_metric(package, 'last_week', pypi_data['last_week']))
        metrics.append(
            make_metric(package, 'last_month', pypi_data['last_month']))

        overall_data = json.loads(pypistats.overall(package,
                                                    format='json'))['data']
        total_downloads = sum(val['downloads'] for val in overall_data)
        metrics.append(make_metric(package, 'all_time', total_downloads))

    print(json.dumps(metrics))
예제 #5
0
    def test_recent_tabular(self):
        # Arrange
        package = "pip"
        mocked_url = "https://pypistats.org/api/packages/pip/recent"
        mocked_response = """{
            "data":
                {"last_day": 2295765, "last_month": 67759913, "last_week": 15706750},
            "package": "pip", "type": "recent_downloads"
        }"""
        expected_output = """
| last_day  | last_month | last_week  |
| --------: | ---------: | ---------: |
| 2,295,765 | 67,759,913 | 15,706,750 |
"""

        # Act
        respx.get(mocked_url).respond(content=mocked_response)
        output = pypistats.recent(package)

        # Assert
        assert output.strip() == expected_output.strip()
예제 #6
0
    def test_recent_tabular(self):
        # Arrange
        package = "pip"
        mocked_url = "https://pypistats.org/api/packages/pip/recent"
        mocked_response = """{
            "data":
                {"last_day": 2295765, "last_month": 67759913, "last_week": 15706750},
            "package": "pip", "type": "recent_downloads"
        }"""
        expected_output = """
| last_day  | last_month | last_week  |
|----------:|-----------:|-----------:|
| 2,295,765 | 67,759,913 | 15,706,750 |
"""

        # Act
        with requests_mock.Mocker() as m:
            m.get(mocked_url, text=mocked_response)
            output = pypistats.recent(package)

        # Assert
        self.assertEqual(output.strip(), expected_output.strip())
예제 #7
0
def get_package_metadata(dependency):
    """
    Retrieve the downloads, categories, and modified date for a package
    """

    version_symbol_index = dependency.rfind('@')
    name_index = dependency.find('/') + 1
    dependency_name = dependency[name_index:version_symbol_index]

    entry = dict()

    entry['name'] = dependency

    result = json.loads(
        pypistats.recent(dependency_name, "month", format="json"))
    print(result)
    entry['downloads_last_month'] = result['data']['last_month']
    request_url = f'{PYPI_DEPENDENCY_META_URL}{dependency_name}/{dependency[version_symbol_index+1:]}/json'
    json_result = requests.get(request_url)
    print(request_url)
    print(json_result)
    return entry
예제 #8
0
def recent(args):  # pragma: no cover
    print(
        pypistats.recent(
            args.package, period=args.period, format=args.format, verbose=args.verbose
        )
    )
예제 #9
0
import argparse
from pprint import pprint  # noqa: F401

import pypistats

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Example use of pypistats",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    )
    args = parser.parse_args()

    # Example use

    # Call the API
    print(pypistats.recent("pillow"))
    # print(pypistats.recent("pillow", "day", format="markdown"))
    # pprint(pypistats.recent("pillow", "week", format="json"))
    # print(pypistats.recent("pillow", "month"))

    # print(pypistats.overall("pillow"))
    # print(pypistats.overall("pillow", mirrors=True, format="markdown"))
    # pprint(pypistats.overall("pillow", mirrors=False, format="json"))

    # print(pypistats.python_major("pillow"))
    # print(pypistats.python_major("pillow", version=2, format="markdown"))
    # pprint(pypistats.python_major("pillow", version="3", format="json"))

    # print(pypistats.python_minor("pillow"))
    # print(pypistats.python_minor("pillow", version=2.7, format="markdown"))
    # pprint(pypistats.python_minor("pillow", version="3.7", format="json"))
예제 #10
0
def recent(args: argparse.Namespace) -> None:  # pragma: no cover
    print(
        pypistats.recent(args.package,
                         period=args.period,
                         format=args.format,
                         verbose=args.verbose))