{ "info": { "author": "Jean-Tiare Le Bigot", "author_email": "jean-tiare.le-bigot@corp.ovh.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving :: Packaging" ], "description": ".. image:: https://github.com/ovh/python-ovh/raw/master/docs/img/logo.png\n :alt: Python & OVH APIs\n :target: https://pypi.python.org/pypi/ovh\n\nLightweight wrapper around OVH's APIs. Handles all the hard work including\ncredential creation and requests signing.\n\n.. image:: https://img.shields.io/pypi/v/ovh.svg\n :alt: PyPi Version\n :target: https://pypi.python.org/pypi/ovh\n.. image:: https://img.shields.io/pypi/status/ovh.svg\n :alt: PyPi repository status\n :target: https://pypi.python.org/pypi/ovh\n.. image:: https://img.shields.io/pypi/pyversions/ovh.svg\n :alt: PyPi supported Python versions\n :target: https://pypi.python.org/pypi/ovh\n.. image:: https://img.shields.io/pypi/wheel/ovh.svg\n :alt: PyPi Wheel status\n :target: https://pypi.python.org/pypi/ovh\n.. image:: https://travis-ci.org/ovh/python-ovh.svg?branch=master\n :alt: Build Status\n :target: https://travis-ci.org/ovh/python-ovh\n.. image:: https://coveralls.io/repos/github/ovh/python-ovh/badge.svg\n :alt: Coverage Status\n :target: https://coveralls.io/github/ovh/python-ovh\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n # Instantiate. Visit https://api.ovh.com/createToken/?GET=/me\n # to get your credentials\n client = ovh.Client(\n endpoint='ovh-eu',\n application_key='',\n application_secret='',\n consumer_key='',\n )\n\n # Print nice welcome message\n print \"Welcome\", client.get('/me')['firstname']\n\nInstallation\n============\n\nThe python wrapper works with Python 2.7 and Python 3.4+.\n\nThe easiest way to get the latest stable release is to grab it from `pypi\n`_ using ``pip``.\n\n.. code:: bash\n\n pip install ovh\n\nAlternatively, you may get latest development version directly from Git.\n\n.. code:: bash\n\n pip install -e git+https://github.com/ovh/python-ovh.git#egg=ovh\n\nExample Usage\n=============\n\nUse the API on behalf of a user\n-------------------------------\n\n1. Create an application\n************************\n\nTo interact with the APIs, the SDK needs to identify itself using an\n``application_key`` and an ``application_secret``. To get them, you need\nto register your application. Depending the API you plan to use, visit:\n\n- `OVH Europe `_\n- `OVH US `_\n- `OVH North-America `_\n- `So you Start Europe `_\n- `So you Start North America `_\n- `Kimsufi Europe `_\n- `Kimsufi North America `_\n\nOnce created, you will obtain an **application key (AK)** and an **application\nsecret (AS)**.\n\n2. Configure your application\n*****************************\n\nThe easiest and safest way to use your application's credentials is to create an\n``ovh.conf`` configuration file in application's working directory. Here is how\nit looks like:\n\n.. code:: ini\n\n [default]\n ; general configuration: default endpoint\n endpoint=ovh-eu\n\n [ovh-eu]\n ; configuration specific to 'ovh-eu' endpoint\n application_key=my_app_key\n application_secret=my_application_secret\n ; uncomment following line when writing a script application\n ; with a single consumer key.\n ;consumer_key=my_consumer_key\n\nDepending on the API you want to use, you may set the ``endpoint`` to:\n\n* ``ovh-eu`` for OVH Europe API\n* ``ovh-us`` for OVH US API\n* ``ovh-ca`` for OVH North-America API\n* ``soyoustart-eu`` for So you Start Europe API\n* ``soyoustart-ca`` for So you Start North America API\n* ``kimsufi-eu`` for Kimsufi Europe API\n* ``kimsufi-ca`` for Kimsufi North America API\n\nSee Configuration_ for more information on available configuration mechanisms.\n\n.. note:: When using a versioning system, make sure to add ``ovh.conf`` to ignored\n files. It contains confidential/security-sensitive information!\n\n3. Authorize your application to access a customer account\n**********************************************************\n\nTo allow your application to access a customer account using the API on your\nbehalf, you need a **consumer key (CK)**.\n\nHere is a sample code you can use to allow your application to access a\ncustomer's information:\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n # create a client using configuration\n client = ovh.Client()\n\n # Request RO, /me API access\n ck = client.new_consumer_key_request()\n ck.add_rules(ovh.API_READ_ONLY, \"/me\")\n\n # Request token\n validation = ck.request()\n\n print \"Please visit %s to authenticate\" % validation['validationUrl']\n raw_input(\"and press Enter to continue...\")\n\n # Print nice welcome message\n print \"Welcome\", client.get('/me')['firstname']\n print \"Btw, your 'consumerKey' is '%s'\" % validation['consumerKey']\n\n\nReturned ``consumerKey`` should then be kept to avoid re-authenticating your\nend-user on each use.\n\n.. note:: To request full and unlimited access to the API, you may use ``add_recursive_rules``:\n\n.. code:: python\n\n # Allow all GET, POST, PUT, DELETE on /* (full API)\n ck.add_recursive_rules(ovh.API_READ_WRITE, '/')\n\nInstall a new mail redirection\n------------------------------\n\ne-mail redirections may be freely configured on domains and DNS zones hosted by\nOVH to an arbitrary destination e-mail using API call\n``POST /email/domain/{domain}/redirection``.\n\nFor this call, the api specifies that the source address shall be given under the\n``from`` keyword. Which is a problem as this is also a reserved Python keyword.\nIn this case, simply prefix it with a '_', the wrapper will automatically detect\nit as being a prefixed reserved keyword and will substitute it. Such aliasing\nis only supported with reserved keywords.\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n DOMAIN = \"example.com\"\n SOURCE = \"sales@example.com\"\n DESTINATION = \"contact@example.com\"\n\n # create a client\n client = ovh.Client()\n\n # Create a new alias\n client.post('/email/domain/%s/redirection' % DOMAIN,\n _from=SOURCE,\n to=DESTINATION,\n localCopy=False\n )\n print \"Installed new mail redirection from %s to %s\" % (SOURCE, DESTINATION)\n\nGrab bill list\n--------------\n\nLet's say you want to integrate OVH bills into your own billing system, you\ncould just script around the ``/me/bills`` endpoints and even get the details\nof each bill lines using ``/me/bill/{billId}/details/{billDetailId}``.\n\nThis example assumes an existing Configuration_ with valid ``application_key``,\n``application_secret`` and ``consumer_key``.\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n # create a client\n client = ovh.Client()\n\n # Grab bill list\n bills = client.get('/me/bill')\n for bill in bills:\n details = client.get('/me/bill/%s' % bill)\n print \"%12s (%s): %10s --> %s\" % (\n bill,\n details['date'],\n details['priceWithTax']['text'],\n details['pdfUrl'],\n )\n\nEnable network burst in SBG1\n----------------------------\n\n'Network burst' is a free service but is opt-in. What if you have, say, 10\nservers in ``SBG-1`` datacenter? You certainely don't want to activate it\nmanually for each servers. You could take advantage of a code like this.\n\nThis example assumes an existing Configuration_ with valid ``application_key``,\n``application_secret`` and ``consumer_key``.\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n # create a client\n client = ovh.Client()\n\n # get list of all server names\n servers = client.get('/dedicated/server/')\n\n # find all servers in SBG-1 datacenter\n for server in servers:\n details = client.get('/dedicated/server/%s' % server)\n if details['datacenter'] == 'sbg1':\n # enable burst on server\n client.put('/dedicated/server/%s/burst' % server, status='active')\n print \"Enabled burst for %s server located in SBG-1\" % server\n\nList application authorized to access your account\n--------------------------------------------------\n\nThanks to the application key / consumer key mechanism, it is possible to\nfinely track applications having access to your data and revoke this access.\nThis examples lists validated applications. It could easily be adapted to\nmanage revocation too.\n\nThis example assumes an existing Configuration_ with valid ``application_key``,\n``application_secret`` and ``consumer_key``.\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n from tabulate import tabulate\n\n # create a client\n client = ovh.Client()\n\n credentials = client.get('/me/api/credential', status='validated')\n\n # pretty print credentials status\n table = []\n for credential_id in credentials:\n credential_method = '/me/api/credential/'+str(credential_id)\n credential = client.get(credential_method)\n application = client.get(credential_method+'/application')\n\n table.append([\n credential_id,\n '[%s] %s' % (application['status'], application['name']),\n application['description'],\n credential['creation'],\n credential['expiration'],\n credential['lastUse'],\n ])\n print tabulate(table, headers=['ID', 'App Name', 'Description',\n 'Token Creation', 'Token Expiration', 'Token Last Use'])\n\nBefore running this example, make sure you have the\n`tabulate `_ library installed. It's a\npretty cool library to pretty print tabular data in a clean and easy way.\n\n>>> pip install tabulate\n\n\nOpen a KVM (remote screen) on a dedicated server\n------------------------------------------------\n\nRecent dedicated servers come with an IPMI interface. A lightweight control board embedded\non the server. Using IPMI, it is possible to get a remote screen on a server. This is\nparticularly useful to tweak the BIOS or troubleshoot boot issues.\n\nHopefully, this can easily be automated using a simple script. It assumes Java Web Start is\nfully installed on the machine and a consumer key allowed on the server exists.\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n import ovh\n import sys\n import time\n import tempfile\n import subprocess\n\n # check arguments\n if len(sys.argv) != 3:\n print \"Usage: %s SERVER_NAME ALLOWED_IP_V4\" % sys.argv[0]\n sys.exit(1)\n\n server_name = sys.argv[1]\n allowed_ip = sys.argv[2]\n\n # create a client\n client = ovh.Client()\n\n # create a KVM\n client.post('/dedicated/server/'+server_name+'/features/ipmi/access', ipToAllow=allowed_ip, ttl=15, type=\"kvmipJnlp\")\n\n # open the KVM, when ready\n while True:\n try:\n # use a named temfile and feed it to java web start\n with tempfile.NamedTemporaryFile() as f:\n f.write(client.get('/dedicated/server/ns6457228.ip-178-33-61.eu/features/ipmi/access?type=kvmipJnlp')['value'])\n f.flush()\n subprocess.call([\"javaws\", f.name])\n break\n except:\n time.sleep(1)\n\nRunning is only a simple command line:\n\n.. code:: bash\n\n # Basic\n python open_kvm.py ns1234567.ip-178-42-42.eu $(curl ifconfig.ovh)\n\n # Use a specific consumer key\n OVH_CONSUMER_KEY=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA python open_kvm.py ns6457228.ip-178-33-61.eu $(curl -s ifconfig.ovh)\n\nConfiguration\n=============\n\nYou have 3 ways to provide configuration to the client:\n - write it directly in the application code\n - read environment variables or predefined configuration files\n - read it from a custom configuration file\n\nEmbed the configuration in the code\n-----------------------------------\n\nThe straightforward way to use OVH's API keys is to embed them directly in the\napplication code. While this is very convenient, it lacks of elegance and\nflexibility.\n\nExample usage:\n\n.. code:: python\n\n client = ovh.Client(\n endpoint='ovh-eu',\n application_key='',\n application_secret='',\n consumer_key='',\n )\n\nEnvironment vars and predefined configuration files\n---------------------------------------------------\n\nAlternatively it is suggested to use configuration files or environment\nvariables so that the same code may run seamlessly in multiple environments.\nProduction and development for instance.\n\nThis wrapper will first look for direct instantiation parameters then\n``OVH_ENDPOINT``, ``OVH_APPLICATION_KEY``, ``OVH_APPLICATION_SECRET`` and\n``OVH_CONSUMER_KEY`` environment variables. If either of these parameter is not\nprovided, it will look for a configuration file of the form:\n\n.. code:: ini\n\n [default]\n ; general configuration: default endpoint\n endpoint=ovh-eu\n\n [ovh-eu]\n ; configuration specific to 'ovh-eu' endpoint\n application_key=my_app_key\n application_secret=my_application_secret\n consumer_key=my_consumer_key\n\nThe client will successively attempt to locate this configuration file in\n\n1. Current working directory: ``./ovh.conf``\n2. Current user's home directory ``~/.ovh.conf``\n3. System wide configuration ``/etc/ovh.conf``\n\nThis lookup mechanism makes it easy to overload credentials for a specific\nproject or user.\n\nExample usage:\n\n.. code:: python\n\n client = ovh.Client()\n\nCustom configuration file\n-------------------------\n\nYou can also specify a custom configuration file. With this method, you won't be able to inherit values from environment.\n\nExample usage:\n\n.. code:: python\n\n client = ovh.Client(config_file='/my/config.conf')\n\n\nPassing parameters\n==================\n\nYou can call all the methods of the API with the necessary arguments.\n\nIf an API needs an argument colliding with a Python reserved keyword, it\ncan be prefixed with an underscore. For example, ``from`` argument of\n``POST /email/domain/{domain}/redirection`` may be replaced by ``_from``.\n\nWith characters invalid in python argument name like a dot, you can:\n\n.. code:: python\n\n # -*- encoding: utf-8 -*-\n\n import ovh\n\n params = {}\n params['date.from'] = '2014-01-01'\n params['date.to'] = '2015-01-01'\n\n # create a client\n client = ovh.Client()\n\n # pass parameters using **\n client.post('/me/bills', **params)\n\nAdvanced usage\n==============\n\nUn-authenticated calls\n----------------------\n\nIf the user has not authenticated yet (ie, there is no valid Consumer Key), you\nmay force ``python-ovh`` to issue the call by passing ``_need_auth=True`` to\nthe high level ``get()``, ``post()``, ``put()`` and ``delete()`` helpers or\n``need_auth=True`` to the low level method ``Client.call()`` and\n``Client.raw_call()``.\n\nThis is needed when calling ``POST /auth/credential`` and ``GET /auth/time``\nwhich are used internally for authentication and can optionally be done for\nmost of the ``/order`` calls.\n\nAccess the raw requests response objects\n----------------------------------------\n\nThe high level ``get()``, ``post()``, ``put()`` and ``delete()`` helpers as well\nas the lower level ``call()`` will returned a parsed json response or raise in\ncase of error.\n\nIn some rare scenario, advanced setups, you may need to perform customer\nprocessing on the raw request response. It may be accessed via ``raw_call()``.\nThis is the lowest level call in ``python-ovh``. See the source for more\ninformation.\n\nHacking\n=======\n\nThis wrapper uses standard Python tools, so you should feel at home with it.\nHere is a quick outline of what it may look like. A good practice is to run\nthis from a ``virtualenv``.\n\nGet the sources\n---------------\n\n.. code:: bash\n\n git clone https://github.com/ovh/python-ovh.git\n cd python-ovh\n python setup.py develop\n\nYou've developed a new cool feature ? Fixed an annoying bug ? We'd be happy\nto hear from you !\n\nRun the tests\n-------------\n\nSimply run ``nosetests``. It will automatically load its configuration from\n``setup.cfg`` and output full coverage status. Since we all love quality, please\nnote that we do not accept contributions with test coverage under 100%.\n\n.. code:: bash\n\n pip install -e .[dev]\n nosetests # 100% coverage is a hard minimum\n\n\nBuild the documentation\n-----------------------\n\nDocumentation is managed using the excellent ``Sphinx`` system. For example, to\nbuild HTML documentation:\n\n.. code:: bash\n\n cd python-ovh/docs\n make html\n\nSupported APIs\n==============\n\nOVH Europe\n----------\n\n- **Documentation**: https://eu.api.ovh.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://eu.api.ovh.com/console\n- **Create application credentials**: https://eu.api.ovh.com/createApp/\n- **Create script credentials** (all keys at once): https://eu.api.ovh.com/createToken/\n\nOVH US\n----------\n\n- **Documentation**: https://api.us.ovhcloud.com/\n- **Console**: https://api.us.ovhcloud.com/console/\n- **Create application credentials**: https://api.us.ovhcloud.com/createApp/\n- **Create script credentials** (all keys at once): https://api.us.ovhcloud.com/createToken/\n\nOVH North America\n-----------------\n\n- **Documentation**: https://ca.api.ovh.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://ca.api.ovh.com/console\n- **Create application credentials**: https://ca.api.ovh.com/createApp/\n- **Create script credentials** (all keys at once): https://ca.api.ovh.com/createToken/\n\nSo you Start Europe\n-------------------\n\n- **Documentation**: https://eu.api.soyoustart.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://eu.api.soyoustart.com/console/\n- **Create application credentials**: https://eu.api.soyoustart.com/createApp/\n- **Create script credentials** (all keys at once): https://eu.api.soyoustart.com/createToken/\n\nSo you Start North America\n--------------------------\n\n- **Documentation**: https://ca.api.soyoustart.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://ca.api.soyoustart.com/console/\n- **Create application credentials**: https://ca.api.soyoustart.com/createApp/\n- **Create script credentials** (all keys at once): https://ca.api.soyoustart.com/createToken/\n\nKimsufi Europe\n--------------\n\n- **Documentation**: https://eu.api.kimsufi.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://eu.api.kimsufi.com/console/\n- **Create application credentials**: https://eu.api.kimsufi.com/createApp/\n- **Create script credentials** (all keys at once): https://eu.api.kimsufi.com/createToken/\n\nKimsufi North America\n---------------------\n\n- **Documentation**: https://ca.api.kimsufi.com/\n- **Community support**: api-subscribe@ml.ovh.net\n- **Console**: https://ca.api.kimsufi.com/console/\n- **Create application credentials**: https://ca.api.kimsufi.com/createApp/\n- **Create script credentials** (all keys at once): https://ca.api.kimsufi.com/createToken/\n\nRelated links\n=============\n\n- **Contribute**: https://github.com/ovh/python-ovh\n- **Report bugs**: https://github.com/ovh/python-ovh/issues\n- **Download**: http://pypi.python.org/pypi/ovh\n\nLicense\n=======\n\n3-Clause BSD\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://api.ovh.com", "keywords": "ovh,sdk,rest", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "ovh", "package_url": "https://pypi.org/project/ovh/", "platform": "", "project_url": "https://pypi.org/project/ovh/", "project_urls": { "Homepage": "http://api.ovh.com" }, "release_url": "https://pypi.org/project/ovh/0.5.0/", "requires_dist": [ "coverage (==3.7.1) ; extra == 'dev'", "mock (==1.0.1) ; extra == 'dev'", "nose (==1.3.3) ; extra == 'dev'", "yanc (==0.2.4) ; extra == 'dev'", "Sphinx (==1.2.2) ; extra == 'dev'", "coveralls (==0.4.4) ; extra == 'dev'", "setuptools (>=30.3.0) ; extra == 'dev'", "wheel ; extra == 'dev'", "coverage (==3.7.1) ; extra == 'test'", "mock (==1.0.1) ; extra == 'test'", "nose (==1.3.3) ; extra == 'test'", "yanc (==0.2.4) ; extra == 'test'" ], "requires_python": "", "summary": "\"Official OVH.com API wrapper\"", "version": "0.5.0" }, "last_serial": 4599113, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "43684ef47bb12d9d3da7b97505bda945", "sha256": "4e6d46e6c29edc02f5ee65a997869bbebdbd81b9184f3e1c4fbd9de3eb974905" }, "downloads": -1, "filename": "ovh-0.1.0.tar.gz", "has_sig": false, "md5_digest": "43684ef47bb12d9d3da7b97505bda945", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21159, "upload_time": "2014-09-09T09:50:42", "url": "https://files.pythonhosted.org/packages/33/a0/c42757a092018b2c5372771eadfd644a4d6e921a37aeab5783a54065ffba/ovh-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "effe28661adc8a27c68d91d95dc8dd89", "sha256": "248bb5c5680285bc1e9ddfff14918b765103cca112e301b6530734c94603c1da" }, "downloads": -1, "filename": "ovh-0.2.0.tar.gz", "has_sig": false, "md5_digest": "effe28661adc8a27c68d91d95dc8dd89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75129, "upload_time": "2014-09-19T14:55:12", "url": "https://files.pythonhosted.org/packages/93/93/2b324017748f057e0a7189cfb6c845c900e3e1a5f303d04c788a593b5a15/ovh-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "435e547f1a818a794c82843b3b5f6e2b", "sha256": "abf5bcaad180ce5370db3013c42ad5e2a578082ae974c275aeef8c8001112299" }, "downloads": -1, "filename": "ovh-0.2.1.tar.gz", "has_sig": false, "md5_digest": "435e547f1a818a794c82843b3b5f6e2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75964, "upload_time": "2014-09-24T14:44:21", "url": "https://files.pythonhosted.org/packages/8d/82/996b2e2162cd150be96ccbe4f11141125fa3d8e477a7a612caf61facb38f/ovh-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f4ef7983aa90e739cda5425dbe239cd9", "sha256": "0e006b7c469387c32e71c8f913099b1101390c75642092b0700e513588f333a7" }, "downloads": -1, "filename": "ovh-0.3.0.tar.gz", "has_sig": false, "md5_digest": "f4ef7983aa90e739cda5425dbe239cd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 109142, "upload_time": "2014-10-24T13:13:41", "url": "https://files.pythonhosted.org/packages/24/30/c918e35b732da4a38ac434f23046ed41b5050fa975d13c0309a086afc668/ovh-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7c00a02dcb2ad012123d3706acc37b41", "sha256": "656ec47e675bdf516ffdab2031b67d0ee9cd8ea1fd687c944cc617448345f3ad" }, "downloads": -1, "filename": "ovh-0.3.1.tar.gz", "has_sig": false, "md5_digest": "7c00a02dcb2ad012123d3706acc37b41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110966, "upload_time": "2015-02-16T18:37:21", "url": "https://files.pythonhosted.org/packages/0d/04/4fa0dc99a50b7e29223876a2e344cc1ac8e9b04de5f2c7b00d9c84e4ab7e/ovh-0.3.1.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "3819bbc4dde34ac212bf5463088ecc20", "sha256": "64e3206a7469963a97dbec070417a3b45704c0dd890333bbcee4b6d6898d90bd" }, "downloads": -1, "filename": "ovh-0.3.3.tar.gz", "has_sig": false, "md5_digest": "3819bbc4dde34ac212bf5463088ecc20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111092, "upload_time": "2015-03-11T12:10:47", "url": "https://files.pythonhosted.org/packages/d4/ed/56520336fb9feb9beb4fb20a8c9fd56118bcb12fdb977a3950916b4adc41/ovh-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "d08f19723d620b635630c507e147df8f", "sha256": "d4d3867af7fb914cad774a20aecb5f70e35e54244622db1dfbdd22e0c2149491" }, "downloads": -1, "filename": "ovh-0.3.4.tar.gz", "has_sig": false, "md5_digest": "d08f19723d620b635630c507e147df8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111445, "upload_time": "2015-06-10T12:57:14", "url": "https://files.pythonhosted.org/packages/e7/33/d9d159f2dc75f92311819a998e80748d8145166d3c9f81ebd452832974c7/ovh-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "a499073f95d630bdf41fd944335545a3", "sha256": "b604529e0cc3b5090496cc1e935f0320ba1ae1b5fe68c5ab4167ad475ba6e4f8" }, "downloads": -1, "filename": "ovh-0.3.5.tar.gz", "has_sig": false, "md5_digest": "a499073f95d630bdf41fd944335545a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 112497, "upload_time": "2015-07-30T16:50:54", "url": "https://files.pythonhosted.org/packages/36/0a/0fbfa9dcf7bac91f35fe812d3a0c447c0e5b94ff965cbb42c40997e84936/ovh-0.3.5.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "474153a75733c99007efb7ae94143861", "sha256": "0191d851e746c741c93a2a5b84b21a138d7abb20df9c6ea00dfba7e9dbf40598" }, "downloads": -1, "filename": "ovh-0.4.0.tar.gz", "has_sig": false, "md5_digest": "474153a75733c99007efb7ae94143861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 365303, "upload_time": "2016-04-07T12:16:02", "url": "https://files.pythonhosted.org/packages/30/1a/077b8829bc18792cb865c294219f74e5ff6bf3cc4ef5d7a50050d531d53a/ovh-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e7384cd3e38a5b8ed64b75d9a44fc5fb", "sha256": "667b3c6dd36119f5b900e862c3ca1d0162d6d6b97a33cc34b39f4f7b1a69abc1" }, "downloads": -1, "filename": "ovh-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e7384cd3e38a5b8ed64b75d9a44fc5fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 365447, "upload_time": "2016-04-08T10:58:21", "url": "https://files.pythonhosted.org/packages/c0/3b/17fb7a34734cd1acd79c98a84a4e495e647478b8bf71c9a1063fd12e3929/ovh-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "b9e78ed785cd483ecdc9b69721c1d64d", "sha256": "fbee6110048d05aa875cbb6b0fd2ad478be6f8a1da66e656738af0399c95d9ea" }, "downloads": -1, "filename": "ovh-0.4.2.tar.gz", "has_sig": false, "md5_digest": "b9e78ed785cd483ecdc9b69721c1d64d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 550274, "upload_time": "2016-04-11T09:15:27", "url": "https://files.pythonhosted.org/packages/97/5a/190fa3a159e3592362787841072ffdc32e6598ed3e814b108f0db57bbaec/ovh-0.4.2.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "28198d4573c00e16e0aa6dba951d62fa", "sha256": "5df56cc64e5f8282b632e9db8e870bf246e68c11d2eea32195bf0c5a75677463" }, "downloads": -1, "filename": "ovh-0.4.4.tar.gz", "has_sig": false, "md5_digest": "28198d4573c00e16e0aa6dba951d62fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 551099, "upload_time": "2016-07-15T12:05:52", "url": "https://files.pythonhosted.org/packages/63/8d/b4abee3a578962f70a11eb929ff88a47eaa0d9e4289183c595525e1bdca8/ovh-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "fe0f39c9c015144f1c22e76e0c91d617", "sha256": "4e898d05d86d6cd505dfc3e77c6905771b7953b7858f7c92bc928cb774b8c2f1" }, "downloads": -1, "filename": "ovh-0.4.5.tar.gz", "has_sig": false, "md5_digest": "fe0f39c9c015144f1c22e76e0c91d617", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 551128, "upload_time": "2016-07-18T08:23:48", "url": "https://files.pythonhosted.org/packages/af/d0/777e972fbb00df4eabae40c41b379b5c6842952deb76f4d7c53c51e85026/ovh-0.4.5.tar.gz" } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "af8cfc95022f10d85ea6185fd83bf446", "sha256": "2775fdb12257824dfa8a46c94ea97bd074ffb7d32f1ce8557bf15c453df9238c" }, "downloads": -1, "filename": "ovh-0.4.6.tar.gz", "has_sig": false, "md5_digest": "af8cfc95022f10d85ea6185fd83bf446", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 550967, "upload_time": "2017-02-27T15:57:49", "url": "https://files.pythonhosted.org/packages/91/1e/3ea7c3934405e18b396734f16669abac821a9a36eae914b92126f94f1eae/ovh-0.4.6.tar.gz" } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "b986606158719bc362d8d0abf21561c3", "sha256": "12e24b67b08be1bed278638ded606bf49b093635eaa3964c9e3c4c6f6bf92432" }, "downloads": -1, "filename": "ovh-0.4.7.tar.gz", "has_sig": false, "md5_digest": "b986606158719bc362d8d0abf21561c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 552739, "upload_time": "2017-03-10T13:46:06", "url": "https://files.pythonhosted.org/packages/3f/1a/398e7035520166f5d88434f2689ac40b0a4470d9a3ada1d5a7881dc7df0c/ovh-0.4.7.tar.gz" } ], "0.4.8": [ { "comment_text": "", "digests": { "md5": "d57bafd6e779c525c027f73cb74af64f", "sha256": "79fa4bdc61b9953af867676a9558d9e792b9fde568c980efe848a40565a217cd" }, "downloads": -1, "filename": "ovh-0.4.8.tar.gz", "has_sig": false, "md5_digest": "d57bafd6e779c525c027f73cb74af64f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 545327, "upload_time": "2017-09-22T15:20:04", "url": "https://files.pythonhosted.org/packages/a3/5b/2fe5d42d4613724af7968ed1b1435ca2910b75d97de490b81e1cfa87ccce/ovh-0.4.8.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "c950b15ba253ad7ce50a6ca30b69d95f", "sha256": "03c7a5e7a62e7bc09b899f7692c694360be7db93ebe44428d6605fccda244692" }, "downloads": -1, "filename": "ovh-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c950b15ba253ad7ce50a6ca30b69d95f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 496806, "upload_time": "2018-12-14T12:13:53", "url": "https://files.pythonhosted.org/packages/58/92/db708f5a2e105ca48da1ac065c0168c7626685f9ab3667184dc2d9772bb1/ovh-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2864b3933c116be505310546de38e6c1", "sha256": "f74d190c4bff0953d76124cb8ed319a8a999138720e42957f0db481ef4746ae8" }, "downloads": -1, "filename": "ovh-0.5.0.tar.gz", "has_sig": false, "md5_digest": "2864b3933c116be505310546de38e6c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 553134, "upload_time": "2018-12-14T12:13:55", "url": "https://files.pythonhosted.org/packages/df/29/cd1c5b212e48309f87c28488e8af6156f80c73950dcaecb9721ca38fdb00/ovh-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c950b15ba253ad7ce50a6ca30b69d95f", "sha256": "03c7a5e7a62e7bc09b899f7692c694360be7db93ebe44428d6605fccda244692" }, "downloads": -1, "filename": "ovh-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c950b15ba253ad7ce50a6ca30b69d95f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 496806, "upload_time": "2018-12-14T12:13:53", "url": "https://files.pythonhosted.org/packages/58/92/db708f5a2e105ca48da1ac065c0168c7626685f9ab3667184dc2d9772bb1/ovh-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2864b3933c116be505310546de38e6c1", "sha256": "f74d190c4bff0953d76124cb8ed319a8a999138720e42957f0db481ef4746ae8" }, "downloads": -1, "filename": "ovh-0.5.0.tar.gz", "has_sig": false, "md5_digest": "2864b3933c116be505310546de38e6c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 553134, "upload_time": "2018-12-14T12:13:55", "url": "https://files.pythonhosted.org/packages/df/29/cd1c5b212e48309f87c28488e8af6156f80c73950dcaecb9721ca38fdb00/ovh-0.5.0.tar.gz" } ] }