minfraud


Nameminfraud JSON
Version 2.10.0 PyPI version JSON
download
home_pageNone
SummaryMaxMind minFraud Score, Insights, Factors and Report Transactions API
upload_time2024-04-16 22:03:37
maintainerNone
docs_urlhttps://pythonhosted.org/minfraud/
authorNone
requires_python>=3.8
licenseApache License 2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ===================================================================
minFraud Score, Insights, Factors and Report Transaction Python API
===================================================================

Description
-----------

This package provides an API for the `MaxMind minFraud Score, Insights, and
Factors web services <https://dev.maxmind.com/minfraud/>`_ as well as the
`Report Transaction web service
<https://dev.maxmind.com/minfraud/report-a-transaction?lang=en>`_.

Installation
------------

To install the ``minfraud`` module, type:

.. code-block:: bash

    $ pip install minfraud

If you are not able to use pip, you may also use easy_install from the
source directory:

.. code-block:: bash

    $ easy_install .

Documentation
-------------

Complete API documentation is available on `Read the Docs
<https://minfraud.readthedocs.io/>`_.

Usage
-----

To use this API, create a new ``minfraud.Client`` object for a synchronous
request or ``minfraud.AsyncClient`` for an asynchronous request. The
constructors take your MaxMind account ID and license key:

.. code-block:: pycon

    >>> client = Client(42, 'licensekey')
    >>> async_client = AsyncClient(42, 'licensekey')

To use the Sandbox web service instead of the production web service,
you can provide the host argument:

.. code-block:: pycon

    >>> client = Client(42, 'licensekey', 'sandbox.maxmind.com')
    >>> async_client = AsyncClient(42, 'licensekey', 'sandbox.maxmind.com')

Score, Insights and Factors Usage
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The Factors service is called with the ``factors()`` method:

.. code-block:: pycon

    >>> client.factors({'device': {'ip_address': '152.216.7.110'}})
    >>> await async_client.factors({'device': {'ip_address': '152.216.7.110'}})

The Insights service is called with the ``insights()`` method:

.. code-block:: pycon

    >>> client.insights({'device': {'ip_address': '152.216.7.110'}})
    >>> await async_client.insights({'device': {'ip_address': '152.216.7.110'}})

The Score web service is called with the ``score()`` method:

.. code-block:: pycon

    >>> client.score({'device': {'ip_address': '152.216.7.110'}})
    >>> await async_client.score({'device': {'ip_address': '152.216.7.110'}})

Each of these methods takes a dictionary representing the transaction to be sent
to the web service. The structure of this dictionary should be in `the format
specified in the REST API documentation
<https://dev.maxmind.com/minfraud/api-documentation/requests?lang=en>`__.
All fields are optional.

Report Transactions Usage
^^^^^^^^^^^^^^^^^^^^^^^^^

MaxMind encourages the use of this API as data received through this channel is
used to continually improve the accuracy of our fraud detection algorithms. The
Report Transaction web service is called with the ``report()`` method:

.. code-block:: pycon

    >>> client.report({'ip_address': '152.216.7.110', 'tag': 'chargeback'})
    >>> await async_client.report({'ip_address': '152.216.7.110', 'tag': 'chargeback'})

The method takes a dictionary representing the report to be sent to the web
service. The structure of this dictionary should be in `the format specified
in the REST API documentation
<https://dev.maxmind.com/minfraud/report-a-transaction?lang=en>`__. The
``ip_address`` and ``tag`` fields are required. All other fields are optional.

Request Validation (for all request methods)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Assuming validation has not been disabled, before sending the transaction to
the web service, the transaction dictionary structure and content will be
validated. If validation fails, a ``minfraud.InvalidRequestError``
will be raised.

If the dictionary is valid, a request will be made to the web service. If the
request succeeds, a model object for the service response will be returned.
If the request fails, one of the errors listed below will be raised.

Errors
------

The possible errors are:

* ``minfraud.AuthenticationError`` - This will be raised when the server
  is unable to authenticate the request, e.g., if the license key or account
  ID is invalid.
* ``minfraud.InvalidRequestError`` - This will be raised when the server
  rejects the request as invalid for another reason, such as a reserved IP
  address. It is also raised if validation of the request before it is sent to
  the server fails.
* ``minfraud.HttpError`` - This will be raised when an unexpected HTTP
  error occurs such as a firewall interfering with the request to the server.
* ``minfraud.MinFraudError`` - This will be raised when some other error
  occurs such as unexpected content from the server. This also serves as the
  base class for the above errors.

Additionally, ``score``, ``insights`` and ``factors`` may also raise:

* ``minfraud.InsufficientFundsError`` - This will be raised when `your
  account <https://www.maxmind.com/en/account>`_ is out of funds.

Examples
--------

Score, Insights and Factors Example
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: pycon

    >>> import asyncio
    >>> from minfraud import AsyncClient, Client
    >>>
    >>> request = {
    >>>     'device': {
    >>>         'ip_address': '152.216.7.110',
    >>>         'accept_language': 'en-US,en;q=0.8',
    >>>         'session_age': 3600,
    >>>         'session_id': 'a333a4e127f880d8820e56a66f40717c',
    >>>         'user_agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'
    >>>     },
    >>>     'event': {
    >>>         'shop_id': 's2123',
    >>>         'type': 'purchase',
    >>>         'transaction_id': 'txn3134133',
    >>>         'time': '2014-04-12T23:20:50.052+00:00'
    >>>     },
    >>>     'account': {
    >>>         'user_id': '3132',
    >>>         'username_md5': '570a90bfbf8c7eab5dc5d4e26832d5b1'
    >>>     },
    >>>     'email': {
    >>>         'address': '977577b140bfb7c516e4746204fbdb01',
    >>>         'domain': 'maxmind.com'
    >>>     },
    >>>     'billing': {
    >>>         'first_name': 'Jane',
    >>>         'last_name': 'Doe',
    >>>         'company': 'Company',
    >>>         'address': '101 Address Rd.',
    >>>         'address_2': 'Unit 5',
    >>>         'city': 'Hamden',
    >>>         'region': 'CT',
    >>>         'country': 'US',
    >>>         'postal': '06510',
    >>>         'phone_country_code': '1',
    >>>         'phone_number': '123-456-7890',
    >>>     },
    >>>     'shipping': {
    >>>         'first_name': 'John',
    >>>         'last_name': 'Doe',
    >>>         'company': 'ShipCo',
    >>>         'address': '322 Ship Addr. Ln.',
    >>>         'address_2': 'St. 43',
    >>>         'city': 'New Haven',
    >>>         'region': 'CT',
    >>>         'country': 'US',
    >>>         'postal': '06510',
    >>>         'phone_country_code': '1',
    >>>         'phone_number': '123-456-0000',
    >>>         'delivery_speed': 'same_day',
    >>>     },
    >>>     'credit_card': {
    >>>         'bank_phone_country_code': '1',
    >>>         'avs_result': 'Y',
    >>>         'bank_phone_number': '123-456-1234',
    >>>         'last_digits': '7643',
    >>>         'cvv_result': 'N',
    >>>         'bank_name': 'Bank of No Hope',
    >>>         'issuer_id_number': '411111',
    >>>         'was_3d_secure_successful': True
    >>>     },
    >>>     'payment': {
    >>>         'decline_code': 'invalid number',
    >>>         'was_authorized': False,
    >>>         'processor': 'stripe'
    >>>     },
    >>>     'shopping_cart': [{
    >>>         'category': 'pets',
    >>>         'quantity': 2,
    >>>         'price': 20.43,
    >>>         'item_id': 'lsh12'
    >>>     }, {
    >>>         'category': 'beauty',
    >>>         'quantity': 1,
    >>>         'price': 100.0,
    >>>         'item_id': 'ms12'
    >>>     }],
    >>>     'order': {
    >>>         'affiliate_id': 'af12',
    >>>         'referrer_uri': 'http://www.amazon.com/',
    >>>         'subaffiliate_id': 'saf42',
    >>>         'discount_code': 'FIRST',
    >>>         'currency': 'USD',
    >>>         'amount': 323.21
    >>>      },
    >>>     'custom_inputs': {
    >>>         'section': 'news',
    >>>         'num_of_previous_purchases': 19,
    >>>         'discount': 3.2,
    >>>         'previous_user': True
    >>>     }
    >>> }
    >>>
    >>> # This example function uses a synchronous Client object. The object
    >>> # can be used across multiple requests.
    >>> def client(account_id, license_key):
    >>>     with Client(account_id, license_key) as client:
    >>>
    >>>         print(client.score(request))
    Score(...)
    >>>
    >>>         print(client.insights(request))
    Insights(...)
    >>>
    >>>         print(client.factors(request))
    Factors(...)
    >>>
    >>> # This example function uses an asynchronous AsyncClient object. The
    >>> # object can be used across multiple requests.
    >>> async def async_client(account_id, license_key):
    >>>     async with AsyncClient(account_id, license_key) as client:
    >>>
    >>>         print(await client.score(request))
    Score(...)
    >>>
    >>>         print(await client.insights(request))
    Insights(...)
    >>>
    >>>         print(await client.factors(request))
    Factors(...)
    >>>
    >>> client(42, 'license_key')
    >>> asyncio.run(async_client(42, 'license_key'))

Report Transactions Example
^^^^^^^^^^^^^^^^^^^^^^^^^^^

For synchronous reporting:

.. code-block:: pycon

    >>> from minfraud import Client
    >>>
    >>> with Client(42, 'licensekey') as client
    >>>     transaction_report = {
    >>>         'ip_address': '152.216.7.110',
    >>>         'tag': 'chargeback',
    >>>         'minfraud_id': '2c69df73-01c0-45a5-b218-ed85f40b17aa',
    >>>      }
    >>>      client.report(transaction_report)

For asynchronous reporting:

.. code-block:: pycon

    >>> import asyncio
    >>> from minfraud import AsyncClient
    >>>
    >>> async def report():
    >>>     async with AsyncClient(42, 'licensekey') as client
    >>>         transaction_report = {
    >>>             'ip_address': '152.216.7.110',
    >>>             'tag': 'chargeback',
    >>>             'minfraud_id': '2c69df73-01c0-45a5-b218-ed85f40b17aa',
    >>>          }
    >>>          await async_client.report(transaction_report)
    >>>
    >>> asyncio.run(report())

Requirements
------------

Python 3.8 or greater is required. Older versions are not supported.

Versioning
----------

The minFraud Python API uses `Semantic Versioning <https://semver.org/>`_.

Support
-------

Please report all issues with this code using the `GitHub issue tracker
<https://github.com/maxmind/minfraud-api-python/issues>`_.

If you are having an issue with a MaxMind service that is not specific to the
client API, please contact `MaxMind support <https://www.maxmind.com/en/support>`_
for assistance.

Copyright and License
---------------------

This software is Copyright © 2015-2024 by MaxMind, Inc.

This is free software, licensed under the Apache License, Version 2.0.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "minfraud",
    "maintainer": null,
    "docs_url": "https://pythonhosted.org/minfraud/",
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Gregory Oschwald <goschwald@maxmind.com>",
    "download_url": "https://files.pythonhosted.org/packages/ac/b1/1661a871a9efe89db8ea431a3541e405aaf1f5836576ebf90e660c4b0bdc/minfraud-2.10.0.tar.gz",
    "platform": null,
    "description": "===================================================================\nminFraud Score, Insights, Factors and Report Transaction Python API\n===================================================================\n\nDescription\n-----------\n\nThis package provides an API for the `MaxMind minFraud Score, Insights, and\nFactors web services <https://dev.maxmind.com/minfraud/>`_ as well as the\n`Report Transaction web service\n<https://dev.maxmind.com/minfraud/report-a-transaction?lang=en>`_.\n\nInstallation\n------------\n\nTo install the ``minfraud`` module, type:\n\n.. code-block:: bash\n\n    $ pip install minfraud\n\nIf you are not able to use pip, you may also use easy_install from the\nsource directory:\n\n.. code-block:: bash\n\n    $ easy_install .\n\nDocumentation\n-------------\n\nComplete API documentation is available on `Read the Docs\n<https://minfraud.readthedocs.io/>`_.\n\nUsage\n-----\n\nTo use this API, create a new ``minfraud.Client`` object for a synchronous\nrequest or ``minfraud.AsyncClient`` for an asynchronous request. The\nconstructors take your MaxMind account ID and license key:\n\n.. code-block:: pycon\n\n    >>> client = Client(42, 'licensekey')\n    >>> async_client = AsyncClient(42, 'licensekey')\n\nTo use the Sandbox web service instead of the production web service,\nyou can provide the host argument:\n\n.. code-block:: pycon\n\n    >>> client = Client(42, 'licensekey', 'sandbox.maxmind.com')\n    >>> async_client = AsyncClient(42, 'licensekey', 'sandbox.maxmind.com')\n\nScore, Insights and Factors Usage\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe Factors service is called with the ``factors()`` method:\n\n.. code-block:: pycon\n\n    >>> client.factors({'device': {'ip_address': '152.216.7.110'}})\n    >>> await async_client.factors({'device': {'ip_address': '152.216.7.110'}})\n\nThe Insights service is called with the ``insights()`` method:\n\n.. code-block:: pycon\n\n    >>> client.insights({'device': {'ip_address': '152.216.7.110'}})\n    >>> await async_client.insights({'device': {'ip_address': '152.216.7.110'}})\n\nThe Score web service is called with the ``score()`` method:\n\n.. code-block:: pycon\n\n    >>> client.score({'device': {'ip_address': '152.216.7.110'}})\n    >>> await async_client.score({'device': {'ip_address': '152.216.7.110'}})\n\nEach of these methods takes a dictionary representing the transaction to be sent\nto the web service. The structure of this dictionary should be in `the format\nspecified in the REST API documentation\n<https://dev.maxmind.com/minfraud/api-documentation/requests?lang=en>`__.\nAll fields are optional.\n\nReport Transactions Usage\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nMaxMind encourages the use of this API as data received through this channel is\nused to continually improve the accuracy of our fraud detection algorithms. The\nReport Transaction web service is called with the ``report()`` method:\n\n.. code-block:: pycon\n\n    >>> client.report({'ip_address': '152.216.7.110', 'tag': 'chargeback'})\n    >>> await async_client.report({'ip_address': '152.216.7.110', 'tag': 'chargeback'})\n\nThe method takes a dictionary representing the report to be sent to the web\nservice. The structure of this dictionary should be in `the format specified\nin the REST API documentation\n<https://dev.maxmind.com/minfraud/report-a-transaction?lang=en>`__. The\n``ip_address`` and ``tag`` fields are required. All other fields are optional.\n\nRequest Validation (for all request methods)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAssuming validation has not been disabled, before sending the transaction to\nthe web service, the transaction dictionary structure and content will be\nvalidated. If validation fails, a ``minfraud.InvalidRequestError``\nwill be raised.\n\nIf the dictionary is valid, a request will be made to the web service. If the\nrequest succeeds, a model object for the service response will be returned.\nIf the request fails, one of the errors listed below will be raised.\n\nErrors\n------\n\nThe possible errors are:\n\n* ``minfraud.AuthenticationError`` - This will be raised when the server\n  is unable to authenticate the request, e.g., if the license key or account\n  ID is invalid.\n* ``minfraud.InvalidRequestError`` - This will be raised when the server\n  rejects the request as invalid for another reason, such as a reserved IP\n  address. It is also raised if validation of the request before it is sent to\n  the server fails.\n* ``minfraud.HttpError`` - This will be raised when an unexpected HTTP\n  error occurs such as a firewall interfering with the request to the server.\n* ``minfraud.MinFraudError`` - This will be raised when some other error\n  occurs such as unexpected content from the server. This also serves as the\n  base class for the above errors.\n\nAdditionally, ``score``, ``insights`` and ``factors`` may also raise:\n\n* ``minfraud.InsufficientFundsError`` - This will be raised when `your\n  account <https://www.maxmind.com/en/account>`_ is out of funds.\n\nExamples\n--------\n\nScore, Insights and Factors Example\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: pycon\n\n    >>> import asyncio\n    >>> from minfraud import AsyncClient, Client\n    >>>\n    >>> request = {\n    >>>     'device': {\n    >>>         'ip_address': '152.216.7.110',\n    >>>         'accept_language': 'en-US,en;q=0.8',\n    >>>         'session_age': 3600,\n    >>>         'session_id': 'a333a4e127f880d8820e56a66f40717c',\n    >>>         'user_agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'\n    >>>     },\n    >>>     'event': {\n    >>>         'shop_id': 's2123',\n    >>>         'type': 'purchase',\n    >>>         'transaction_id': 'txn3134133',\n    >>>         'time': '2014-04-12T23:20:50.052+00:00'\n    >>>     },\n    >>>     'account': {\n    >>>         'user_id': '3132',\n    >>>         'username_md5': '570a90bfbf8c7eab5dc5d4e26832d5b1'\n    >>>     },\n    >>>     'email': {\n    >>>         'address': '977577b140bfb7c516e4746204fbdb01',\n    >>>         'domain': 'maxmind.com'\n    >>>     },\n    >>>     'billing': {\n    >>>         'first_name': 'Jane',\n    >>>         'last_name': 'Doe',\n    >>>         'company': 'Company',\n    >>>         'address': '101 Address Rd.',\n    >>>         'address_2': 'Unit 5',\n    >>>         'city': 'Hamden',\n    >>>         'region': 'CT',\n    >>>         'country': 'US',\n    >>>         'postal': '06510',\n    >>>         'phone_country_code': '1',\n    >>>         'phone_number': '123-456-7890',\n    >>>     },\n    >>>     'shipping': {\n    >>>         'first_name': 'John',\n    >>>         'last_name': 'Doe',\n    >>>         'company': 'ShipCo',\n    >>>         'address': '322 Ship Addr. Ln.',\n    >>>         'address_2': 'St. 43',\n    >>>         'city': 'New Haven',\n    >>>         'region': 'CT',\n    >>>         'country': 'US',\n    >>>         'postal': '06510',\n    >>>         'phone_country_code': '1',\n    >>>         'phone_number': '123-456-0000',\n    >>>         'delivery_speed': 'same_day',\n    >>>     },\n    >>>     'credit_card': {\n    >>>         'bank_phone_country_code': '1',\n    >>>         'avs_result': 'Y',\n    >>>         'bank_phone_number': '123-456-1234',\n    >>>         'last_digits': '7643',\n    >>>         'cvv_result': 'N',\n    >>>         'bank_name': 'Bank of No Hope',\n    >>>         'issuer_id_number': '411111',\n    >>>         'was_3d_secure_successful': True\n    >>>     },\n    >>>     'payment': {\n    >>>         'decline_code': 'invalid number',\n    >>>         'was_authorized': False,\n    >>>         'processor': 'stripe'\n    >>>     },\n    >>>     'shopping_cart': [{\n    >>>         'category': 'pets',\n    >>>         'quantity': 2,\n    >>>         'price': 20.43,\n    >>>         'item_id': 'lsh12'\n    >>>     }, {\n    >>>         'category': 'beauty',\n    >>>         'quantity': 1,\n    >>>         'price': 100.0,\n    >>>         'item_id': 'ms12'\n    >>>     }],\n    >>>     'order': {\n    >>>         'affiliate_id': 'af12',\n    >>>         'referrer_uri': 'http://www.amazon.com/',\n    >>>         'subaffiliate_id': 'saf42',\n    >>>         'discount_code': 'FIRST',\n    >>>         'currency': 'USD',\n    >>>         'amount': 323.21\n    >>>      },\n    >>>     'custom_inputs': {\n    >>>         'section': 'news',\n    >>>         'num_of_previous_purchases': 19,\n    >>>         'discount': 3.2,\n    >>>         'previous_user': True\n    >>>     }\n    >>> }\n    >>>\n    >>> # This example function uses a synchronous Client object. The object\n    >>> # can be used across multiple requests.\n    >>> def client(account_id, license_key):\n    >>>     with Client(account_id, license_key) as client:\n    >>>\n    >>>         print(client.score(request))\n    Score(...)\n    >>>\n    >>>         print(client.insights(request))\n    Insights(...)\n    >>>\n    >>>         print(client.factors(request))\n    Factors(...)\n    >>>\n    >>> # This example function uses an asynchronous AsyncClient object. The\n    >>> # object can be used across multiple requests.\n    >>> async def async_client(account_id, license_key):\n    >>>     async with AsyncClient(account_id, license_key) as client:\n    >>>\n    >>>         print(await client.score(request))\n    Score(...)\n    >>>\n    >>>         print(await client.insights(request))\n    Insights(...)\n    >>>\n    >>>         print(await client.factors(request))\n    Factors(...)\n    >>>\n    >>> client(42, 'license_key')\n    >>> asyncio.run(async_client(42, 'license_key'))\n\nReport Transactions Example\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFor synchronous reporting:\n\n.. code-block:: pycon\n\n    >>> from minfraud import Client\n    >>>\n    >>> with Client(42, 'licensekey') as client\n    >>>     transaction_report = {\n    >>>         'ip_address': '152.216.7.110',\n    >>>         'tag': 'chargeback',\n    >>>         'minfraud_id': '2c69df73-01c0-45a5-b218-ed85f40b17aa',\n    >>>      }\n    >>>      client.report(transaction_report)\n\nFor asynchronous reporting:\n\n.. code-block:: pycon\n\n    >>> import asyncio\n    >>> from minfraud import AsyncClient\n    >>>\n    >>> async def report():\n    >>>     async with AsyncClient(42, 'licensekey') as client\n    >>>         transaction_report = {\n    >>>             'ip_address': '152.216.7.110',\n    >>>             'tag': 'chargeback',\n    >>>             'minfraud_id': '2c69df73-01c0-45a5-b218-ed85f40b17aa',\n    >>>          }\n    >>>          await async_client.report(transaction_report)\n    >>>\n    >>> asyncio.run(report())\n\nRequirements\n------------\n\nPython 3.8 or greater is required. Older versions are not supported.\n\nVersioning\n----------\n\nThe minFraud Python API uses `Semantic Versioning <https://semver.org/>`_.\n\nSupport\n-------\n\nPlease report all issues with this code using the `GitHub issue tracker\n<https://github.com/maxmind/minfraud-api-python/issues>`_.\n\nIf you are having an issue with a MaxMind service that is not specific to the\nclient API, please contact `MaxMind support <https://www.maxmind.com/en/support>`_\nfor assistance.\n\nCopyright and License\n---------------------\n\nThis software is Copyright \u00a9 2015-2024 by MaxMind, Inc.\n\nThis is free software, licensed under the Apache License, Version 2.0.\n",
    "bugtrack_url": null,
    "license": "Apache License 2.0",
    "summary": "MaxMind minFraud Score, Insights, Factors and Report Transactions API",
    "version": "2.10.0",
    "project_urls": {
        "Documentation": "https://minfraud.readthedocs.org/",
        "Homepage": "https://www.maxmind.com/",
        "Issue Tracker": "https://github.com/maxmind/minfraud-api-python/issues",
        "Source Code": "https://github.com/maxmind/minfraud-api-python"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "61152b97d4c6ef8d7361bb4d6698c9f1eac0af57f739274bec7ed003773c89e3",
                "md5": "8ec40b1bf38600b266767e6b705ce92c",
                "sha256": "b675b65e2dd387cada6f032b996e679e59e7332f6aec196b6be991a5bd5c88e0"
            },
            "downloads": -1,
            "filename": "minfraud-2.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8ec40b1bf38600b266767e6b705ce92c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 27443,
            "upload_time": "2024-04-16T22:03:34",
            "upload_time_iso_8601": "2024-04-16T22:03:34.944505Z",
            "url": "https://files.pythonhosted.org/packages/61/15/2b97d4c6ef8d7361bb4d6698c9f1eac0af57f739274bec7ed003773c89e3/minfraud-2.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "acb11661a871a9efe89db8ea431a3541e405aaf1f5836576ebf90e660c4b0bdc",
                "md5": "ee776e7f259a0278f98ad52d391fcd4a",
                "sha256": "7fdf71e4d5257263314a747f52ff1d39a2ec4d5cb2038ca32410f8ed476085eb"
            },
            "downloads": -1,
            "filename": "minfraud-2.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ee776e7f259a0278f98ad52d391fcd4a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 50195,
            "upload_time": "2024-04-16T22:03:37",
            "upload_time_iso_8601": "2024-04-16T22:03:37.533945Z",
            "url": "https://files.pythonhosted.org/packages/ac/b1/1661a871a9efe89db8ea431a3541e405aaf1f5836576ebf90e660c4b0bdc/minfraud-2.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-16 22:03:37",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "maxmind",
    "github_project": "minfraud-api-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "minfraud"
}
        
Elapsed time: 0.24244s