atlasapi


Nameatlasapi JSON
Version 2.0.11 PyPI version JSON
download
home_pagehttps://github.com/mgmonteleone/python-atlasapi
SummaryExpose MongoDB Atlas Cloud provider APIs
upload_time2023-04-24 00:20:09
maintainer
docs_urlNone
authorMatthew G. Monteleone
requires_python>=3.7
licenseApache License 2.0
keywords atlas mongo mongodb cloud api
VCS
bugtrack_url
requirements requests python-dateutil isodate future pytz coolname nose awspublicranges humanfriendly
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Atlas API
==========

Python Bindings for the Atlas Public API

This project intends to create a fairly opinionated set of bindings for the Atlas Public API which makes interacting
with Atlas using Python easier. The API makes extensive use of enums and other helper type objects to take some
of the guess work of administering Atlas clusters with Python.

In most cases objects will be returned based upon the structure of the json returned but the API Endpoints. These objects
are defined either in the `specs.py` module or in a module named after the objects themselves (`alerts.py` for example).


All calls to the Atlas API require API credentials, you can configure them in your Atlas project.


`Atlas API <https://docs.atlas.mongodb.com/api/>`__

`Configure Atlas API Access <https://docs.atlas.mongodb.com/configure-api-access/>`__

`Current state of the python-atlasapi support <https://github.com/mgmonteleone/python-atlasapi/blob/master/API.rst>`__


.. image:: https://img.shields.io/pypi/l/atlasapi.svg
     :target: https://pypi.org/project/atlasapi/

.. image:: https://img.shields.io/pypi/status/atlasapi.svg
     :target: https://pypi.org/project/atlasapi/

.. image:: https://img.shields.io/pypi/pyversions/atlasapi.svg
     :target: https://pypi.org/project/atlasapi/
     

Documentation
-------------
.. image:: https://readthedocs.org/projects/python-atlasapi/badge/?version=latest
     :target: https://python-atlasapi.readthedocs.io/en/latest/?badge=latest Found at https://python-atlasapi.readthedocs.io/

Found at https://python-atlasapi.readthedocs.io/

Autobuilt on each commit.

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

This package is available for Python 3.6+.

.. image:: https://badge.fury.io/py/atlasapi.svg
     :target: https://pypi.org/project/atlasapi/


You can install the latest released version from pypi.

.. code:: bash

    pip3 install atlasapi




Usage
-----

Get All Database Users
^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    
    a = Atlas("<user>","<password>","<groupid>")
    
    # Low level Api
    details = a.DatabaseUsers.get_all_database_users(pageNum=1, itemsPerPage=100)
    
    # Iterable
    for user in a.DatabaseUsers.get_all_database_users(iterable=True):
        print(user["username"])

Create a Database User
^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    from atlasapi.specs import DatabaseUsersPermissionsSpecs, RoleSpecs

    a = Atlas("<user>","<password>","<groupid>")

    p = DatabaseUsersPermissionsSpecs("test", "password for test user")
    p.add_roles("test-db",
                [RoleSpecs.dbAdmin,
                RoleSpecs.readWrite])
    p.add_role("other-test-db", RoleSpecs.readWrite, "a_collection")

    details = a.DatabaseUsers.create_a_database_user(p)

Update a Database User
^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    from atlasapi.specs import DatabaseUsersUpdatePermissionsSpecs, RoleSpecs

    a = Atlas("<user>","<password>","<groupid>")
    
    # Update roles and password
    p = DatabaseUsersUpdatePermissionsSpecs("password for test user")
    p.add_role("test-db", RoleSpecs.read, "a_collection")
    
    details = a.DatabaseUsers.update_a_database_user("test", p)

Delete a Database User
^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    
    a = Atlas("<user>","<password>","<groupid>")
    
    details = a.DatabaseUsers.delete_a_database_user("test")
    
Get a Single Database User
^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: python
    
    from atlasapi.atlas import Atlas
    
    a = Atlas("<user>","<password>","<groupid>")
    
    details = a.DatabaseUsers.get_a_single_database_user("test")

Clusters
^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    from atlasapi.clusters import  AdvancedOptions

    a = Atlas("<user>","<password>","<groupid>")
    
    # Is existing cluster ?
    a.Clusters.is_existing_cluster("cluster-dev")
    
    # Get All Clusters
    for cluster in a.Clusters.get_all_clusters(iterable=True):
        print(cluster["name"])
    
    # Get a Single Cluster
    details = a.Clusters.get_single_cluster("cluster-dev")
    
    # Delete a Cluster (dry run, raise ErrConfirmationRequested)
    details = a.Clusters.delete_cluster("cluster-dev")
    
    # Delete a Cluster (approved)
    details = a.Clusters.delete_cluster("cluster-dev", areYouSure=True)

    # Create a Simple Replica Set Cluster

    details = a.Clusters.create_basic_rs(name="cluster-dev")

    # Create a cluster

    provider_settings: ProviderSettings = ProviderSettings()
    regions_config = RegionConfig()
    replication_specs = ReplicationSpecs(regions_config={provider_settings.region_name: regions_config.__dict__})

    cluster_config = ClusterConfig(name='test2',
                               providerSettings=provider_settings,
                               replication_specs=replication_specs)

    output = a.Clusters.create_cluster(cluster_config)


    # Modify a cluster
    existing_config = a.Clusters.get_single_cluster_as_obj(cluster=TEST_CLUSTER_NAME)
    out.providerSettings.instance_size_name = InstanceSizeName.M10
    out.disk_size_gb = 13
    new_config = a.Clusters.modify_cluster('pyAtlasAPIClustersTest', out)
    pprint(new_config)

    # Modify cluster instance size

    a.Clusters.modify_cluster_instanct_size(cluster='pyAtlasAPIClustersTest',new_cluster_size=InstanceSizeName.M20)

    # Pause(unpause) a cluster

    a.Clusters.pause_cluster(cluster='pyAtlasAPIClustersTest', toggle_if_paused=True)


    # Get Advanced Options
    a.Clusters.get_single_cluster_advanced_options(cluster='pyAtlasAPIClustersTest')

    # Set Advanced Options
    options = AdvancedOptions(failIndexKeyTooLong=True)
    self.a.Clusters.modify_cluster_advanced_options(cluster='pyAtlasAPIClustersTest',
                                                                    advanced_options=options)

Alerts
^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    from atlasapi.specs import AlertStatusSpec
    
    a = Atlas("<user>","<password>","<groupid>")
    
    # Get All Alerts in OPEN status
    for alert in a.Alerts.get_all_alerts(AlertStatusSpec.OPEN, iterable=True):
        print(alert["id"])
    
    # Get an Alert
    details = a.Alerts.get_an_alert("597f221fdf9db113ce1755cd")
    
    # Acknowledge an Alert (BROKEN)
    #  until (now + 6 hours)
    from datetime import datetime, timezone, timedelta
    now = datetime.now(timezone.utc)
    until = now + timedelta(hours=6)
    details = a.Alerts.acknowledge_an_alert("597f221fdf9db113ce1755cd", until, "Acknowledge reason")
    
    #  forever (BROKEN)
    details = a.Alerts.acknowledge_an_alert_forever("597f221fdf9db113ce1755cd", "Acknowledge reason")
    
    # Unacknowledge an Alert (BROKEN
    details = a.Alerts.unacknowledge_an_alert("597f221fdf9db113ce1755cd")



Metrics (Measurements)
^^^^^^^^^^^^^^^^^^^^^^
Examples coming soon.

Logs
^^^^^^^^^^^^^^^^^^^

.. code:: python

    from atlasapi.atlas import Atlas
    from atlasapi.specs import AlertStatusSpec

    atlas = Atlas("<user>","<password>","<groupid>")

    atlas.Hosts.fill_host_list()
    test_host = atlas.Hosts.host_list[0]
    print(f'Will get a mongod log for {test_host.hostname}')
    out = atlas.Hosts.get_loglines_for_host(host_obj=test_host, log_name=AtlasLogNames.MONGODB)
    for each_line in out:
        print(each_line.__dict__)


Whitelists
^^^^^^^^^^
Examples coming soon.

Maintenance Windows
^^^^^^^^^^^^^^^^^^^

Examples coming soon.





Error Types
-----------

About ErrAtlasGeneric
^^^^^^^^^^^^^^^^^^^^^

All ErrAtlas* Exception class inherit from ErrAtlasGeneric.

.. code:: python
    
    try:
        ...
    except ErrAtlasGeneric as e:
        c, details = e.getAtlasResponse()
        
- 'c'
    HTTP return code (4xx or 5xx for an error, 2xx otherwise)
- 'details'
    Response payload

Exceptions
^^^^^^^^^^

- ErrRole
    A role is not compatible with Atlas
- ErrPagination
    An issue occurs during a "Get All" function with 'iterable=True'
- ErrPaginationLimits
    Out of limit on 'pageNum' or 'itemsPerPage' parameters
- ErrAtlasBadRequest
    Something was wrong with the client request.
- ErrAtlasUnauthorized
    Authentication is required
- ErrAtlasForbidden
    Access to the specified resource is not permitted.
- ErrAtlasNotFound
    The requested resource does not exist.
- ErrAtlasMethodNotAllowed
    The HTTP method is not supported for the specified resource.
- ErrAtlasConflict
    This is typically the response to a request to create or modify a property of an entity that is unique when an existing entity already exists with the same value for that property.
- ErrAtlasServerErrors
    Something unexpected went wrong.
- ErrConfirmationRequested
    Confirmation requested to execute the call.



Bugs or Issues
--------------

Please report bugs, issues or feature requests to `Github
Issues <https://github.com/mgmonteleone/python-atlasapi/issues>`__

Testing
-------

`Circle Ci <https://circleci.com/gh/mgmonteleone/python-atlasapi/>`__

develop

.. image:: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/develop.svg?style=svg&circle-token=34ce5f4745b141a0ee643bd212d85359c0594884
    :target: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/develop
    
master

.. image:: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/master.svg?style=svg&circle-token=34ce5f4745b141a0ee643bd212d85359c0594884
    :target: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/master

.. image:: https://readthedocs.org/projects/python-atlasapi/badge/?version=latest
     :target: https://python-atlasapi.readthedocs.io/en/latest/?badge=latest
       :alt: Documentation Status

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/mgmonteleone/python-atlasapi",
    "name": "atlasapi",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "atlas,mongo,mongodb,cloud,api",
    "author": "Matthew G. Monteleone",
    "author_email": "mgm@mgm.dev",
    "download_url": "https://files.pythonhosted.org/packages/e1/d3/c090222b53a94d0910f3d0a646b0df8f3df4b3f7fd897864f454f0c3f746/atlasapi-2.0.11.tar.gz",
    "platform": null,
    "description": "Atlas API\n==========\n\nPython Bindings for the Atlas Public API\n\nThis project intends to create a fairly opinionated set of bindings for the Atlas Public API which makes interacting\nwith Atlas using Python easier. The API makes extensive use of enums and other helper type objects to take some\nof the guess work of administering Atlas clusters with Python.\n\nIn most cases objects will be returned based upon the structure of the json returned but the API Endpoints. These objects\nare defined either in the `specs.py` module or in a module named after the objects themselves (`alerts.py` for example).\n\n\nAll calls to the Atlas API require API credentials, you can configure them in your Atlas project.\n\n\n`Atlas API <https://docs.atlas.mongodb.com/api/>`__\n\n`Configure Atlas API Access <https://docs.atlas.mongodb.com/configure-api-access/>`__\n\n`Current state of the python-atlasapi support <https://github.com/mgmonteleone/python-atlasapi/blob/master/API.rst>`__\n\n\n.. image:: https://img.shields.io/pypi/l/atlasapi.svg\n     :target: https://pypi.org/project/atlasapi/\n\n.. image:: https://img.shields.io/pypi/status/atlasapi.svg\n     :target: https://pypi.org/project/atlasapi/\n\n.. image:: https://img.shields.io/pypi/pyversions/atlasapi.svg\n     :target: https://pypi.org/project/atlasapi/\n     \n\nDocumentation\n-------------\n.. image:: https://readthedocs.org/projects/python-atlasapi/badge/?version=latest\n     :target: https://python-atlasapi.readthedocs.io/en/latest/?badge=latest Found at https://python-atlasapi.readthedocs.io/\n\nFound at https://python-atlasapi.readthedocs.io/\n\nAutobuilt on each commit.\n\nInstallation\n------------\n\nThis package is available for Python 3.6+.\n\n.. image:: https://badge.fury.io/py/atlasapi.svg\n     :target: https://pypi.org/project/atlasapi/\n\n\nYou can install the latest released version from pypi.\n\n.. code:: bash\n\n    pip3 install atlasapi\n\n\n\n\nUsage\n-----\n\nGet All Database Users\n^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    \n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    # Low level Api\n    details = a.DatabaseUsers.get_all_database_users(pageNum=1, itemsPerPage=100)\n    \n    # Iterable\n    for user in a.DatabaseUsers.get_all_database_users(iterable=True):\n        print(user[\"username\"])\n\nCreate a Database User\n^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    from atlasapi.specs import DatabaseUsersPermissionsSpecs, RoleSpecs\n\n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n\n    p = DatabaseUsersPermissionsSpecs(\"test\", \"password for test user\")\n    p.add_roles(\"test-db\",\n                [RoleSpecs.dbAdmin,\n                RoleSpecs.readWrite])\n    p.add_role(\"other-test-db\", RoleSpecs.readWrite, \"a_collection\")\n\n    details = a.DatabaseUsers.create_a_database_user(p)\n\nUpdate a Database User\n^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    from atlasapi.specs import DatabaseUsersUpdatePermissionsSpecs, RoleSpecs\n\n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    # Update roles and password\n    p = DatabaseUsersUpdatePermissionsSpecs(\"password for test user\")\n    p.add_role(\"test-db\", RoleSpecs.read, \"a_collection\")\n    \n    details = a.DatabaseUsers.update_a_database_user(\"test\", p)\n\nDelete a Database User\n^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    \n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    details = a.DatabaseUsers.delete_a_database_user(\"test\")\n    \nGet a Single Database User\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n    \n    from atlasapi.atlas import Atlas\n    \n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    details = a.DatabaseUsers.get_a_single_database_user(\"test\")\n\nClusters\n^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    from atlasapi.clusters import  AdvancedOptions\n\n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    # Is existing cluster ?\n    a.Clusters.is_existing_cluster(\"cluster-dev\")\n    \n    # Get All Clusters\n    for cluster in a.Clusters.get_all_clusters(iterable=True):\n        print(cluster[\"name\"])\n    \n    # Get a Single Cluster\n    details = a.Clusters.get_single_cluster(\"cluster-dev\")\n    \n    # Delete a Cluster (dry run, raise ErrConfirmationRequested)\n    details = a.Clusters.delete_cluster(\"cluster-dev\")\n    \n    # Delete a Cluster (approved)\n    details = a.Clusters.delete_cluster(\"cluster-dev\", areYouSure=True)\n\n    # Create a Simple Replica Set Cluster\n\n    details = a.Clusters.create_basic_rs(name=\"cluster-dev\")\n\n    # Create a cluster\n\n    provider_settings: ProviderSettings = ProviderSettings()\n    regions_config = RegionConfig()\n    replication_specs = ReplicationSpecs(regions_config={provider_settings.region_name: regions_config.__dict__})\n\n    cluster_config = ClusterConfig(name='test2',\n                               providerSettings=provider_settings,\n                               replication_specs=replication_specs)\n\n    output = a.Clusters.create_cluster(cluster_config)\n\n\n    # Modify a cluster\n    existing_config = a.Clusters.get_single_cluster_as_obj(cluster=TEST_CLUSTER_NAME)\n    out.providerSettings.instance_size_name = InstanceSizeName.M10\n    out.disk_size_gb = 13\n    new_config = a.Clusters.modify_cluster('pyAtlasAPIClustersTest', out)\n    pprint(new_config)\n\n    # Modify cluster instance size\n\n    a.Clusters.modify_cluster_instanct_size(cluster='pyAtlasAPIClustersTest',new_cluster_size=InstanceSizeName.M20)\n\n    # Pause(unpause) a cluster\n\n    a.Clusters.pause_cluster(cluster='pyAtlasAPIClustersTest', toggle_if_paused=True)\n\n\n    # Get Advanced Options\n    a.Clusters.get_single_cluster_advanced_options(cluster='pyAtlasAPIClustersTest')\n\n    # Set Advanced Options\n    options = AdvancedOptions(failIndexKeyTooLong=True)\n    self.a.Clusters.modify_cluster_advanced_options(cluster='pyAtlasAPIClustersTest',\n                                                                    advanced_options=options)\n\nAlerts\n^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    from atlasapi.specs import AlertStatusSpec\n    \n    a = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n    \n    # Get All Alerts in OPEN status\n    for alert in a.Alerts.get_all_alerts(AlertStatusSpec.OPEN, iterable=True):\n        print(alert[\"id\"])\n    \n    # Get an Alert\n    details = a.Alerts.get_an_alert(\"597f221fdf9db113ce1755cd\")\n    \n    # Acknowledge an Alert (BROKEN)\n    #  until (now + 6 hours)\n    from datetime import datetime, timezone, timedelta\n    now = datetime.now(timezone.utc)\n    until = now + timedelta(hours=6)\n    details = a.Alerts.acknowledge_an_alert(\"597f221fdf9db113ce1755cd\", until, \"Acknowledge reason\")\n    \n    #  forever (BROKEN)\n    details = a.Alerts.acknowledge_an_alert_forever(\"597f221fdf9db113ce1755cd\", \"Acknowledge reason\")\n    \n    # Unacknowledge an Alert (BROKEN\n    details = a.Alerts.unacknowledge_an_alert(\"597f221fdf9db113ce1755cd\")\n\n\n\nMetrics (Measurements)\n^^^^^^^^^^^^^^^^^^^^^^\nExamples coming soon.\n\nLogs\n^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    from atlasapi.atlas import Atlas\n    from atlasapi.specs import AlertStatusSpec\n\n    atlas = Atlas(\"<user>\",\"<password>\",\"<groupid>\")\n\n    atlas.Hosts.fill_host_list()\n    test_host = atlas.Hosts.host_list[0]\n    print(f'Will get a mongod log for {test_host.hostname}')\n    out = atlas.Hosts.get_loglines_for_host(host_obj=test_host, log_name=AtlasLogNames.MONGODB)\n    for each_line in out:\n        print(each_line.__dict__)\n\n\nWhitelists\n^^^^^^^^^^\nExamples coming soon.\n\nMaintenance Windows\n^^^^^^^^^^^^^^^^^^^\n\nExamples coming soon.\n\n\n\n\n\nError Types\n-----------\n\nAbout ErrAtlasGeneric\n^^^^^^^^^^^^^^^^^^^^^\n\nAll ErrAtlas* Exception class inherit from ErrAtlasGeneric.\n\n.. code:: python\n    \n    try:\n        ...\n    except ErrAtlasGeneric as e:\n        c, details = e.getAtlasResponse()\n        \n- 'c'\n    HTTP return code (4xx or 5xx for an error, 2xx otherwise)\n- 'details'\n    Response payload\n\nExceptions\n^^^^^^^^^^\n\n- ErrRole\n    A role is not compatible with Atlas\n- ErrPagination\n    An issue occurs during a \"Get All\" function with 'iterable=True'\n- ErrPaginationLimits\n    Out of limit on 'pageNum' or 'itemsPerPage' parameters\n- ErrAtlasBadRequest\n    Something was wrong with the client request.\n- ErrAtlasUnauthorized\n    Authentication is required\n- ErrAtlasForbidden\n    Access to the specified resource is not permitted.\n- ErrAtlasNotFound\n    The requested resource does not exist.\n- ErrAtlasMethodNotAllowed\n    The HTTP method is not supported for the specified resource.\n- ErrAtlasConflict\n    This is typically the response to a request to create or modify a property of an entity that is unique when an existing entity already exists with the same value for that property.\n- ErrAtlasServerErrors\n    Something unexpected went wrong.\n- ErrConfirmationRequested\n    Confirmation requested to execute the call.\n\n\n\nBugs or Issues\n--------------\n\nPlease report bugs, issues or feature requests to `Github\nIssues <https://github.com/mgmonteleone/python-atlasapi/issues>`__\n\nTesting\n-------\n\n`Circle Ci <https://circleci.com/gh/mgmonteleone/python-atlasapi/>`__\n\ndevelop\n\n.. image:: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/develop.svg?style=svg&circle-token=34ce5f4745b141a0ee643bd212d85359c0594884\n    :target: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/develop\n    \nmaster\n\n.. image:: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/master.svg?style=svg&circle-token=34ce5f4745b141a0ee643bd212d85359c0594884\n    :target: https://circleci.com/gh/mgmonteleone/python-atlasapi/tree/master\n\n.. image:: https://readthedocs.org/projects/python-atlasapi/badge/?version=latest\n     :target: https://python-atlasapi.readthedocs.io/en/latest/?badge=latest\n       :alt: Documentation Status\n",
    "bugtrack_url": null,
    "license": "Apache License 2.0",
    "summary": "Expose MongoDB Atlas Cloud provider APIs",
    "version": "2.0.11",
    "split_keywords": [
        "atlas",
        "mongo",
        "mongodb",
        "cloud",
        "api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "da1b046ba4a8e89d4061d168602f7037807633bf4e513ec76e995c29b2ed686b",
                "md5": "fcd78bc91f97773f1364ebbcc894144c",
                "sha256": "0474c53b3245fe2a048411aee30380e984fca0a03a6965a9855763e8a33bfc4b"
            },
            "downloads": -1,
            "filename": "atlasapi-2.0.11-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fcd78bc91f97773f1364ebbcc894144c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 90820,
            "upload_time": "2023-04-24T00:20:03",
            "upload_time_iso_8601": "2023-04-24T00:20:03.600794Z",
            "url": "https://files.pythonhosted.org/packages/da/1b/046ba4a8e89d4061d168602f7037807633bf4e513ec76e995c29b2ed686b/atlasapi-2.0.11-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e1d3c090222b53a94d0910f3d0a646b0df8f3df4b3f7fd897864f454f0c3f746",
                "md5": "8feb13e9422f1983b5b3fc90aa3dbf6d",
                "sha256": "3c7ee0edd23f459ae5df2d6b24fc33fd6772da3b1b41856760638b537890ecec"
            },
            "downloads": -1,
            "filename": "atlasapi-2.0.11.tar.gz",
            "has_sig": false,
            "md5_digest": "8feb13e9422f1983b5b3fc90aa3dbf6d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 74350,
            "upload_time": "2023-04-24T00:20:09",
            "upload_time_iso_8601": "2023-04-24T00:20:09.555331Z",
            "url": "https://files.pythonhosted.org/packages/e1/d3/c090222b53a94d0910f3d0a646b0df8f3df4b3f7fd897864f454f0c3f746/atlasapi-2.0.11.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-04-24 00:20:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "mgmonteleone",
    "github_project": "python-atlasapi",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "circle": true,
    "requirements": [
        {
            "name": "requests",
            "specs": []
        },
        {
            "name": "python-dateutil",
            "specs": []
        },
        {
            "name": "isodate",
            "specs": []
        },
        {
            "name": "future",
            "specs": []
        },
        {
            "name": "pytz",
            "specs": []
        },
        {
            "name": "coolname",
            "specs": []
        },
        {
            "name": "nose",
            "specs": []
        },
        {
            "name": "awspublicranges",
            "specs": []
        },
        {
            "name": "humanfriendly",
            "specs": []
        }
    ],
    "lcname": "atlasapi"
}
        
Elapsed time: 0.21769s