{ "info": { "author": "Chad Lung", "author_email": "chad.lung@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "ECS Minion\n==========\n\nECS Minion is a Python library for interacting with the ECS 2.x Management API\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. image:: https://travis-ci.org/chadlung/ecsminion.svg?branch=master\n :target: https://travis-ci.org/chadlung/ecsminion\n\n**Note:** `ECS `__ is an EMC product,\ntrademarked, copyrighted, etc.\n\nThis library follows the ECS API documentation `located here. `__\n\nUsing this library is pretty straight forward. ECSMinion can be installed\nfrom `PyPi `__:\n\n::\n\n $ pip install ecsminion\n\nThis library should be compatible with both Python 2.7.x and Python 3.4.x.\n\nCreating an instance of the ECSMinion class allows the following\narguments:\n\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| Name | Required | Default Value | Description |\n+=======================+============+===================+===============================================================================================================================================+\n| ``username`` | No | None | The username used to fetch the ECS token |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``password`` | No | None | The password used to fetch the ECS token |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``token`` | No | None | Pass a token to ECSMinion (username/password are ignored then) |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``ecs_endpoint`` | Yes | None | The ECS API endpoint, ex: ``https://192.168.0.149:4443`` |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``token_endpoint`` | Yes | None | The ECS API endpoint, ex: ``https://192.168.0.149:4443/login`` |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``verify_ssl`` | No | False | Whether to check a host's SSL certificate |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``token_filename`` | No | ``ecstoken.tkn`` | The filename of the temporary token |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``token_location`` | No | ``/tmp`` | The location to store the temporary token file |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``request_timeout`` | No | 15.0 | Stop waiting for a response after a given number of seconds, this is a decimal value. Ex: 10.0 is ten seconds |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n| ``cache_token`` | No | True | Whether to cache the token, by default this is true you should only switch this to false when you want to directly fetch a token for a user |\n+-----------------------+------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+\n\nHere is an example that goes through most of the API calls. Please note\nthat some calls take longer to complete than others. Sometimes you may\nneed to set your ``request_timeout`` to ``60.0``.\n\n::\n\n from ecsminion import ECSMinion, ECSMinionException\n\n try:\n client = ECSMinion(username='ecsadmin@internal',\n password='PASSWORD',\n token_endpoint='https://192.168.0.149:4443/login',\n ecs_endpoint='https://192.168.0.149:4443',\n request_timeout=15.0)\n\n print(client.user_info.whoami())\n\n # Configuration\n print(client.certificate.get_certificate_chain())\n print(client.configuration_properties.get_properties(category='ALL'))\n print(client.configuration_properties.get_properties_metadata())\n print(client.licensing.add_license(license=data_dict))\n print(client.licensing.get_license())\n\n # User Management\n print(client.secret_key.create_new_secret_key('user1'))\n print(client.secret_key.get_user_secret_keys(uid='user1'))\n print(client.secret_key.get_user_secret_keys(\n uid='user1', namespace='namespace1'))\n print(client.user_object.get_object_users('namespace1'))\n print(client.user_object.get_object_user_info('user1'))\n print(client.user_object.get_object_user_info('user1', 'namespace1'))\n print(client.user_object.add_object_user(\n uid='user2', namespace='namespace1', tags=['mytag1', 'mytag1']))\n print(client.user_object.deactivate_object_user(\n uid='user2', namespace='namespace1'))\n print(client.user_object.get_object_user_info('user1'))\n print(client.user_object.lock_object_user('user1', True, 'namespace1'))\n print(client.user_object.get_object_user_lock('user1', 'namespace1'))\n print(client.user_object.lock_object_user('user1', False, 'namespace1'))\n print(client.user_object.get_object_user_lock('user1', 'namespace1'))\n print(client.authentication_provider.get_authentication_providers())\n print(client.authentication_provider.get_authentication_provider(\n 'urn:AuthProvider:317843ad-71eb-4a86-b1bd-806f4275008a'))\n\n # Support\n print(client.call_home.get_connectemc_config())\n\n # Multi-tenancy\n print(client.namespace.get_namespaces())\n print(client.namespace.get_namespace('namespace1'))\n print(client.namespace.get_retention_classes('namespace1'))\n print(client.namespace.create_retention_class('the-name', 2, 'namespace2'))\n print(client.namespace.update_retention_class('the-name', 199, 'namespace2'))\n print(client.namespace.get_namespace_quota('namespace1'))\n print(client.namespace.update_namespace_quota(2, 2, 'namespace1'))\n\n # Monitoring\n print(client.capacity.get_cluster_capacity())\n print(client.events.get_audit_events(\n '2015-06-08T01:00', '2015-06-09T00:00', 'namespace1'))\n # With a marker and a limit param (marker has been shortened)\n print(client.events.get_audit_events(\n '2015-06-08T01:00', '2015-06-09T00:00', 'namespace1', limit=3,\n marker='CIbS7YbdKRI4dXJuOnN0bTRkYzYtOWUxNy03MGFkYzAzMWUxNDQ='))\n # Only a few of the dashboard APIs are shown, there are more\n print(client.dashboard.get_local_zone())\n print(client.dashboard.get_local_zone_replication_groups())\n print(client.dashboard.get_local_zone_rglinks_failed())\n print(client.dashboard.get_local_zone_storage_pools())\n print(client.dashboard.get_local_zone_nodes())\n print(client.dashboard.get_node_processes('172.29.3.148'))\n print(client.dashboard.get_local_zone_replication_group_bootstrap_links())\n\n # Provisioning\n print(client.node.get_nodes())\n print(client.bucket.create_bucket(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.deactivate_bucket(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.get_buckets(namespace='namespace1'))\n print(client.bucket.set_bucket_retention(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.get_bucket_retention(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.get_bucket_info(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.update_bucket_owner(bucket_name='bucket-test1', new_owner='user2', namespace='namespace1'))\n print(client.bucket.update_bucket_is_stale_allowed(bucket_name='bucket-test1', is_stale_allowed=False, namespace='namespace1'))\n print(client.bucket.get_bucket_lock(bucket_name='bucket-test1', namespace='namespace1'))\n # For the following is_locked must be passed as 'true' or 'false', not True/False\n print(client.bucket.set_lock_bucket(bucket_name='bucket-test1', is_locked='false', namespace='namespace1'))\n print(client.bucket.update_bucket_quota(bucket_name='bucket-test1', block_size=1, notification_size=2, namespace='namespace1'))\n print(client.bucket.get_bucket_quota(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.delete_bucket_quota(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.get_bucket_acl(bucket_name='bucket-test1', namespace='namespace1'))\n print(client.bucket.get_acl_permissions())\n print(client.bucket.get_acl_groups())\n print(client.base_url.get_all_configured_base_urls())\n print(client.base_url.get_base_url('urn:ObjectBaseUrl:6c74e6fb-a2a1-4386-bc25-b4399a6e74ce'))\n print(client.base_url.create_base_url('TestBaseURL', 'test.com', False))\n print(client.base_url.modify_base_url('urn:ObjectBaseUrl:19c391eb-37f4-4c65-a7a9-474668f71607',\n 'SomeBaseURL', 'test.org', False))\n print(client.base_url.delete_base_url('urn:ObjectBaseUrl:19c391eb-37f4-4c65-a7a9-474668f71607'))\n print(client.data_store.get_data_stores())\n print(client.data_store.get_data_store('192.29.3.51'))\n print(client.data_store.get_data_stores_by_storage_pool_id('urn:storageos:VirtualArray:3c4e8cca-2e3d-4f8d-b183-1c69ce2d5b37'))\n print(client.storage_pool.get_virtual_arrays() # Local VDC\n print(client.storage_pool.get_virtual_arrays(vdc_id='urn:storageos:VirtualDataCenterData:a9faea85-d377-4a42-b5f1-fa15829f0c33'))\n print(client.storage_pool.get_virtual_array('urn:storageos:VirtualArray:3c4e8cca-2e3d-4f8d-b183-1c69ce2d5b37'))\n print(client.storage_pool.add_virtual_array(name='Varray1', description='Test storage pool 1'))\n print(client.virtual_data_center.get_all_vdcs())\n print(client.virtual_data_center.get_vdc_by_id('urn:storageos:VirtualDataCenterData:a9faea85-d377-4a42-b5f1-fa15829f0c33'))\n print(client.virtual_data_center.get_local_vdc())\n print(client.virtual_data_center.get_local_vdc_secret_key())\n print(client.virtual_data_center.get_vdc_by_name('tiva01'))\n print(client.virtual_data_center.insert_vdc_attributes('vdc1', '10.247.179.200', '1234secret'))\n print(client.virtual_data_center.deactivate_vdc('urn:storageos:VirtualDataCenterData:a9faea85-d377-4a42-b5f1-fa15829f0c33'))\n print(client.management_object.create_local_user_info('newadminuser', 'password', True, True))\n print(client.management_object.modify_local_user_info('newadminuser', 'password2', False, True))\n print(client.management_object.delete_local_user_info('newadminuser'))\n print(client.management_object.get_local_management_users())\n print(client.management_object.get_local_user_info('admin'))\n\n # Geo Replication\n print(client.replication_group.get_replication_groups())\n print(client.replication_group.get_replication_group(\n 'urn:storageos:ReplicationGroupInfo:c2b0d3c4-c778-4a24-8da5-6a89784c4eeb:global'))\n print(client.replication_group.update_replication_group(\n 'urn:storageos:ReplicationGroupInfo:c2b0d3c4-c778-4a24-8da5-6a89784c4eeb:global',\n 'a-name' 'the-description', True)\n print(client.temp_failed_zone.get_all_temp_failed_zones())\n print(client.temp_failed_zone.get_temp_failed_zone(\n 'urn:storageos:ReplicationGroupInfo:c2b0d3c4-c778-4a24-8da5-6a89784c4eeb:global'))\n\n # Metering/Billing\n print(client.billing.get_bucket_billing_info('bucket-test', 'namespace1'))\n print(client.billing.get_namespace_billing_info('namespace1', include_bucket_detail=True))\n print(client.billing.get_namespace_billing_sample(\n 'namespace1', start_time='2015-06-15T00:00',\n end_time='2015-06-15T1:00', include_bucket_detail=True))\n print(client.billing.get_bucket_billing_sample(\n 'bucket-test', 'namespace1',\n start_time='2015-06-15T00:00', end_time='2015-06-15T1:00'))\n\n except ECSMinionException as ecsminion_ex:\n print('Message: {0}'.format(ecsminion_ex.message))\n print('Status Code Returned: {0}\\n'.format(ecsminion_ex.http_status_code))\n print('ECS API Message: {0}'.format(ecsminion_ex.ecs_message))\n except Exception as ex:\n print(ex.message)\n\nExample: Uploading an ECS license\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAccording to ECS API documentation, a call to ``POST /license`` should contain\na payload like the following:\n\n::\n\n {\n \"license_feature\": [\n {\n \"serial\": \"\",\n \"version\": \"\",\n \"issued_date\": \"\",\n \"expiration_date\": \"\",\n \"model\": \"\",\n \"product\": \"\",\n \"site_id\": \"\",\n \"issuer\": \"\",\n \"notice\": \"\",\n \"licensed_ind\": \"\",\n \"expired_ind\": \"\",\n \"license_id_indicator\": \"\",\n \"error_message\": \"\",\n \"storage_capacity_unit\": \"\",\n \"storage_capacity\": \"\",\n \"trial_license_ind\": \"\"\n }\n ],\n \"license_text\": \"\"\n }\n\nThus, if you consume a JSON file with such license data, you may upload it\nusing the ``licensing.add_license()`` method:\n\n::\n\n import json\n import pprint\n\n pp = pprint.PrettyPrinter()\n\n try:\n with open(\"ECS2.1_License.json\") as data:\n license = json.load(data)\n\n pp.pprint(client.licensing.add_license(license))\n\n except ValueError as val_ex: # includes simplejson.decoder.JSONDecodeError\n print(\"Couldn't parse JSON data: {0}\".format(val_ex.message))\n except ECSMinionException as ecsminion_ex:\n print('Message: {0}'.format(ecsminion_ex.message))\n print('Status Code Returned: {0}\\n'.format(ecsminion_ex.http_status_code))\n print('ECS API Message: {0}'.format(ecsminion_ex.ecs_message))\n except Exception as ex:\n print(ex.message)\n\nExample: Enable logging output\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nECSMinion leverages the Python ``logging`` module. Enable it from your\napplication like so:\n\n::\n\n import logging\n\n # Default to INFO level logging\n logging.basicConfig()\n logging.getLogger().setLevel(logging.INFO)\n\nNow ECSMinion will tell you about what it's doing (and so will the\n``requests`` library). If you'd like even more information about the\nHTTP requests and headers, use the following:\n\n::\n\n import logging\n import httplib\n\n # Default to DEBUG level logging\n logging.basicConfig()\n logging.getLogger().setLevel(logging.DEBUG)\n\n # Show HTTP headers and payloads\n httplib.HTTPConnection.debuglevel = 1\n\nIf you don't want to see *any* ``requests`` logging, either filter it with\na ``logging`` filter or change the logging level for just that library:\n\n::\n\n import logging\n\n # Default to INFO level logging\n logging.basicConfig()\n logging.getLogger().setLevel(logging.INFO)\n\n # Only show errors from requests lib\n logging.getLogger('requests.packages.urllib3').setLevel(logging.ERROR)\n\n\nExample: Use a valid token instead of supplying a username and password\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou pass an authentication token directly to ECSMinion which means you\ndon't need to supply a username/password. Here is an example (the token\nhas been shortened):\n\n::\n\n client = ECSMinion(token='ALAcbGZtbjh6eVB3eUF1TzFEZWNmc0M2VVl2QjBVPQM',\n token_endpoint='https://192.168.1.146:4443/login',\n ecs_endpoint='https://192.168.1.146:4443',\n request_timeout=15.0)\n\nExample: Fetching tokens\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nFetching a token for a user can be done as follows by setting the\n``cache_token`` parameter to false and then calling ``get_token``:\n\n::\n\n from ecsminion import ECSMinion, ECSMinionException\n\n\n if __name__ == \"__main__\":\n try:\n client = ECSMinion(username='someone',\n password='password',\n token=None,\n token_endpoint='https://192.168.1.146:4443/login',\n ecs_endpoint='https://192.168.1.146:4443',\n request_timeout=15.0,\n cache_token=False)\n\n print(client.get_token())\n\n except ECSMinionException as ecsminion_ex:\n print('Message: {0}'.format(ecsminion_ex.message))\n print('Status Code Returned: {0}\\n'.format(ecsminion_ex.http_status_code))\n print('ECS API Message: {0}'.format(ecsminion_ex.ecs_message))\n except Exception as ex:\n print(ex.message)\n\nExample: Removing a cached token\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n from ecsminion import ECSMinion, ECSMinionException\n\n\n if __name__ == \"__main__\":\n try:\n client = ECSMinion(username='someone',\n password='password',\n token=None,\n token_endpoint='https://192.168.1.146:4443/login',\n ecs_endpoint='https://192.168.1.146:4443',\n request_timeout=15.0,\n cache_token=False)\n\n print(client.remove_cached_token())\n\n except ECSMinionException as ecsminion_ex:\n print('Message: {0}'.format(ecsminion_ex.message))\n print('Status Code Returned: {0}\\n'.format(ecsminion_ex.http_status_code))\n print('ECS API Message: {0}'.format(ecsminion_ex.ecs_message))\n except Exception as ex:\n print(ex.message)\n\nLicense\n^^^^^^^\n\nThis software library is released to you under the Apache License 2.0. See\n`LICENSE `__\nfor more information.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chadlung/ecsminion", "keywords": "ecsminion", "license": "", "maintainer": "", "maintainer_email": "", "name": "ecsminion", "package_url": "https://pypi.org/project/ecsminion/", "platform": "", "project_url": "https://pypi.org/project/ecsminion/", "project_urls": { "Homepage": "https://github.com/chadlung/ecsminion" }, "release_url": "https://pypi.org/project/ecsminion/0.7.6/", "requires_dist": null, "requires_python": "", "summary": "A library for interacting with the ECS 2.x Management API", "version": "0.7.6" }, "last_serial": 2711731, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "87b00fcb3028e71d04dd5cdc52fb8492", "sha256": "02d0255519b80bc5d4a04eda55e862aa701957e21be84b661baf35ed8424e0b1" }, "downloads": -1, "filename": "ecsminion-0.5.0.tar.gz", "has_sig": false, "md5_digest": "87b00fcb3028e71d04dd5cdc52fb8492", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11832, "upload_time": "2015-06-12T02:05:06", "url": "https://files.pythonhosted.org/packages/65/4f/f324e2baa200a62f1cd92f5e21ac05b8edecd108838d0249cb6a59f32c33/ecsminion-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "bfdcbb6a019d5e2caf262c54911316dd", "sha256": "30d910587b538caa45c05d1ceff78a3a4f31ea4c61c22dc06a22a8f7fd244b62" }, "downloads": -1, "filename": "ecsminion-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bfdcbb6a019d5e2caf262c54911316dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11824, "upload_time": "2015-06-12T02:17:11", "url": "https://files.pythonhosted.org/packages/3d/02/d8c5ba5a8ffc9ef7b386fffe0c9dc43647e054ac43e3e752bad5134e4954/ecsminion-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "d850cce03b7a0a992896b80da4611662", "sha256": "fda34951248cc48fac0179f1547188abffde86d78067e66a6d5c1311be17537a" }, "downloads": -1, "filename": "ecsminion-0.5.2.tar.gz", "has_sig": false, "md5_digest": "d850cce03b7a0a992896b80da4611662", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11757, "upload_time": "2015-06-12T02:19:23", "url": "https://files.pythonhosted.org/packages/cd/6f/70c0ac3b2eb2408501a4f8bb8c32cfcd587e148abcf9972c1f9eae374a69/ecsminion-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "e307a01bae010b927112e67fce3aa7b2", "sha256": "d5cc465b86bc177a4043a0f2c6adf5e040482379ffa61f97b479bba33d065f24" }, "downloads": -1, "filename": "ecsminion-0.5.3.tar.gz", "has_sig": false, "md5_digest": "e307a01bae010b927112e67fce3aa7b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12975, "upload_time": "2015-06-12T17:59:56", "url": "https://files.pythonhosted.org/packages/50/ce/8547d329ce4dfe82dc1724a712b74160d165aa50d442120219b8f3a8821f/ecsminion-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "b235b15ff8fbdb96d3523c135f2a531a", "sha256": "7362850885cff58b2b57568a03e789763087b37601b5dd99bf79658d9bed8873" }, "downloads": -1, "filename": "ecsminion-0.5.4.tar.gz", "has_sig": false, "md5_digest": "b235b15ff8fbdb96d3523c135f2a531a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14135, "upload_time": "2015-06-15T20:30:08", "url": "https://files.pythonhosted.org/packages/15/5b/b5e2c777f728054e338f02cd7da5e71211c38261d22619f8a30dcab904fc/ecsminion-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "c2acdf1e956c41f0043327eebbf7a60b", "sha256": "b63d311bc07ee72239952716af69862e82ff0085de30dea10747be4246ca9f95" }, "downloads": -1, "filename": "ecsminion-0.5.5.tar.gz", "has_sig": false, "md5_digest": "c2acdf1e956c41f0043327eebbf7a60b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15397, "upload_time": "2015-06-15T22:14:49", "url": "https://files.pythonhosted.org/packages/91/56/38149307cc42206eb3e1714c06d3d7a13de6c63bbbd1ce067bf9e3ce437b/ecsminion-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "ea1a1fb1a133e8f6eedcf6f800ac7e67", "sha256": "fdb54d34137b5eeeffbe918c23769714130ee990f1c3418b43c208f2d0dbe8a1" }, "downloads": -1, "filename": "ecsminion-0.5.6.tar.gz", "has_sig": false, "md5_digest": "ea1a1fb1a133e8f6eedcf6f800ac7e67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15859, "upload_time": "2015-06-16T15:47:46", "url": "https://files.pythonhosted.org/packages/d5/ee/6290dc4429bb139fb2affa0241edac5e0747e5ee29ded8a7e98c529f533d/ecsminion-0.5.6.tar.gz" } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "779994910e534ee1f6438c6c12226965", "sha256": "8a7b5db6165071e83b11108301062b7170d45f89e1c591978ee45e7b09ffcb75" }, "downloads": -1, "filename": "ecsminion-0.5.7.tar.gz", "has_sig": false, "md5_digest": "779994910e534ee1f6438c6c12226965", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16756, "upload_time": "2015-06-17T19:39:49", "url": "https://files.pythonhosted.org/packages/5f/f0/dffccffa849351dfeb4423ca5fe9d62c3311372c382047f2a7787a8f9da8/ecsminion-0.5.7.tar.gz" } ], "0.5.8": [ { "comment_text": "", "digests": { "md5": "d23c9efba9426ac59cdd31e793c1b208", "sha256": "83389c8ea571300a3f1836d6f04bb0e9c613f372fd01340f9ff43e41e5e8faa1" }, "downloads": -1, "filename": "ecsminion-0.5.8.tar.gz", "has_sig": false, "md5_digest": "d23c9efba9426ac59cdd31e793c1b208", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20407, "upload_time": "2015-06-18T22:59:06", "url": "https://files.pythonhosted.org/packages/e8/90/2153ae633e724e071ca53ef1a76d961121e8a5fcc2b771116295885aa3fa/ecsminion-0.5.8.tar.gz" } ], "0.5.9": [ { "comment_text": "", "digests": { "md5": "6449b3c3c3fde59073dc2f67c9106ed9", "sha256": "7315dec97056bd0ee9024fb1b428c35ee5c7b345d941e6b5be0122ef976f7417" }, "downloads": -1, "filename": "ecsminion-0.5.9.tar.gz", "has_sig": false, "md5_digest": "6449b3c3c3fde59073dc2f67c9106ed9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21059, "upload_time": "2015-06-19T15:28:22", "url": "https://files.pythonhosted.org/packages/9d/0d/5deab994d0865d12d67d6aebe9db886983bcce32df24268f81e92878f32e/ecsminion-0.5.9.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "e179e7196acc6945b8d0878687512c63", "sha256": "07b0d625c9517da416a0ca942a364153946cc47077ddf70f00572db19459effc" }, "downloads": -1, "filename": "ecsminion-0.6.0.tar.gz", "has_sig": false, "md5_digest": "e179e7196acc6945b8d0878687512c63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21761, "upload_time": "2015-06-19T18:42:22", "url": "https://files.pythonhosted.org/packages/79/3a/69108424b1853e1564456901dcf4a28e22c548878a52560671fef5d8b54b/ecsminion-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "b24c52c7cb8584046f7b6c2b7ac683a6", "sha256": "8b2e1d577424eff6e220edcfd6150bab5833143aa5c9fc5efd508496646a0e55" }, "downloads": -1, "filename": "ecsminion-0.6.1.tar.gz", "has_sig": false, "md5_digest": "b24c52c7cb8584046f7b6c2b7ac683a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22996, "upload_time": "2015-06-19T19:11:20", "url": "https://files.pythonhosted.org/packages/65/f5/d9b613b378f1e824751e9f1ccdbc7d432a409158c1842c85e60ab388fca3/ecsminion-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "a7d51b650af93472310aeab5bea04789", "sha256": "eade60ec96110cd2e5e697916efa2a3931202ba81112c48685191ca38a76db8f" }, "downloads": -1, "filename": "ecsminion-0.6.2.tar.gz", "has_sig": false, "md5_digest": "a7d51b650af93472310aeab5bea04789", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24885, "upload_time": "2015-06-19T21:52:27", "url": "https://files.pythonhosted.org/packages/f9/f4/086c6a382f09f0274219d4b012a036df9a79f95348932a71d4f60d14009e/ecsminion-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "0bf214f149e1c3a52a31fd1ede7cb809", "sha256": "f7dbf6a28c5fe0998b30e22f6c82248bbecd11986523e3516baf361999c43550" }, "downloads": -1, "filename": "ecsminion-0.6.3.tar.gz", "has_sig": false, "md5_digest": "0bf214f149e1c3a52a31fd1ede7cb809", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25910, "upload_time": "2015-06-23T16:22:15", "url": "https://files.pythonhosted.org/packages/7f/18/468107d8e74b21e7287d801e8695f1de5daaf083f00469bcc4634ae42e39/ecsminion-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "34affd39d8775bf78006bda0e9c6ea35", "sha256": "8e9a3c5a73778bd87f9ed0330d69dac15f92a04053047664776aa6dc070fbe44" }, "downloads": -1, "filename": "ecsminion-0.6.4.tar.gz", "has_sig": false, "md5_digest": "34affd39d8775bf78006bda0e9c6ea35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26226, "upload_time": "2015-06-23T17:35:52", "url": "https://files.pythonhosted.org/packages/69/d4/4cd30073579fc4bfdf69be149219d1f5634db5f6956d2adbc365c9ca7abd/ecsminion-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "f05a5fa62f7b832915d9efb4f5bf5d26", "sha256": "9d79230f98bb742647e9355c4104cd6be1a56ebfee94c19b599110fe0f00e2fa" }, "downloads": -1, "filename": "ecsminion-0.6.5.tar.gz", "has_sig": false, "md5_digest": "f05a5fa62f7b832915d9efb4f5bf5d26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26202, "upload_time": "2015-06-23T22:05:27", "url": "https://files.pythonhosted.org/packages/44/55/a6b8d62bb1a96b63a8bf760a7ce404e4a3123ba55a86090d001e81feb35e/ecsminion-0.6.5.tar.gz" } ], "0.6.6": [ { "comment_text": "", "digests": { "md5": "f95a72e4497ca1e852ef86ffaf84d4d4", "sha256": "741b9090ee93533a522d5a5aa72c8cd57578e25f983d18bdf6273d0f1eaaf1bc" }, "downloads": -1, "filename": "ecsminion-0.6.6.tar.gz", "has_sig": false, "md5_digest": "f95a72e4497ca1e852ef86ffaf84d4d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27887, "upload_time": "2015-08-11T19:40:21", "url": "https://files.pythonhosted.org/packages/67/0a/1bdf37da5583fa27465fed3d1b184c4c5792ec4334be3736a431fe29c7ed/ecsminion-0.6.6.tar.gz" } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "e380dfc2db7986c3ebb670e2884c5155", "sha256": "1adcb1df419e74ed9f78c76aa1a708c5d13a8f2803c14b26dc7fc6a02ac598c6" }, "downloads": -1, "filename": "ecsminion-0.6.7.tar.gz", "has_sig": false, "md5_digest": "e380dfc2db7986c3ebb670e2884c5155", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30720, "upload_time": "2015-08-18T20:28:07", "url": "https://files.pythonhosted.org/packages/5a/c5/f3dba1d4d7d171c3af013a16b55c541344f0d859b91a2bf8486ee12cc11e/ecsminion-0.6.7.tar.gz" } ], "0.6.8": [ { "comment_text": "", "digests": { "md5": "cd7cbd3bd2c93abcebd7719fddb056c2", "sha256": "f76a47a0fb951d072d4ac6e40ffdbcee61ca72c386ff07928064aa762c6a92db" }, "downloads": -1, "filename": "ecsminion-0.6.8.tar.gz", "has_sig": false, "md5_digest": "cd7cbd3bd2c93abcebd7719fddb056c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31462, "upload_time": "2015-08-19T17:39:36", "url": "https://files.pythonhosted.org/packages/05/12/7910020acea574db37d1e98f8568b862627bdeda2a9e404d2b9cd1a854cd/ecsminion-0.6.8.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "62bb59ee5239558d3c94ab492a397ec4", "sha256": "56eda3fee17854f5fe4fe18298348fe9163ffe3a58dd2cc4ef4037f6a6999ec6" }, "downloads": -1, "filename": "ecsminion-0.7.0.tar.gz", "has_sig": false, "md5_digest": "62bb59ee5239558d3c94ab492a397ec4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31461, "upload_time": "2015-08-19T18:02:44", "url": "https://files.pythonhosted.org/packages/29/41/d4b9aedba1d2f8b6c2cbf2534845eb239cc0d41b025f798e5fc5be306cf2/ecsminion-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "c0f92eb77eaa95d19095517d11f16a86", "sha256": "247aea6c5b028507ffe5026ecea74bace0e13e11ee841143197f8213082da0ab" }, "downloads": -1, "filename": "ecsminion-0.7.1.tar.gz", "has_sig": false, "md5_digest": "c0f92eb77eaa95d19095517d11f16a86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31636, "upload_time": "2015-08-25T19:06:29", "url": "https://files.pythonhosted.org/packages/8f/c7/56663a404dfd09807c42ff13b596f470716ded544e90f0ff8a447a90acfc/ecsminion-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "2d6a682a1ae60b03332562b9bc78742d", "sha256": "98916b8c45eeff163d8a76a9c71f313550b246617ce7c82d784e433bdf2075e4" }, "downloads": -1, "filename": "ecsminion-0.7.2.tar.gz", "has_sig": false, "md5_digest": "2d6a682a1ae60b03332562b9bc78742d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31720, "upload_time": "2015-09-01T17:43:16", "url": "https://files.pythonhosted.org/packages/fe/9e/8bccef4d7d648c85faab20659424abfb092c7d6a4ac6ca9d370bc7cb4253/ecsminion-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "70baebe98391cd68fda932343687a50e", "sha256": "9b0dda2675764eb301537e98f1e6dfe1d0345978eff197946dd9ac046249186e" }, "downloads": -1, "filename": "ecsminion-0.7.3.tar.gz", "has_sig": false, "md5_digest": "70baebe98391cd68fda932343687a50e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32231, "upload_time": "2015-09-04T17:56:43", "url": "https://files.pythonhosted.org/packages/0c/0a/cbaba957912310b2ea9d6d4b4f8d3d2ec8bfda0d86de8d1ddcb775c5ac2d/ecsminion-0.7.3.tar.gz" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "3eccecddd0b8d8b0d74527fa99906c2d", "sha256": "2685208aeac6fe6b28c8d231320ac0416d1baf50578f03cc4b379a06e28c2a1a" }, "downloads": -1, "filename": "ecsminion-0.7.4.tar.gz", "has_sig": false, "md5_digest": "3eccecddd0b8d8b0d74527fa99906c2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32234, "upload_time": "2015-12-10T20:20:05", "url": "https://files.pythonhosted.org/packages/a4/02/4e18ba483d8fae5f22f231ce8830204a96dc0edf878c68d572f49a1491e4/ecsminion-0.7.4.tar.gz" } ], "0.7.5": [ { "comment_text": "", "digests": { "md5": "606ae776b589ebf84f810c866d4e516c", "sha256": "4bb0629bdc1ace9ec0d10f72ca3fb68dbf0a93ca18868a73eec6a5108572eeb7" }, "downloads": -1, "filename": "ecsminion-0.7.5.tar.gz", "has_sig": false, "md5_digest": "606ae776b589ebf84f810c866d4e516c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32369, "upload_time": "2016-06-02T17:44:05", "url": "https://files.pythonhosted.org/packages/e6/f2/e9733233e3a83a30009b48bf63b6601882773db4cdbef7ed60a3ecb627b2/ecsminion-0.7.5.tar.gz" } ], "0.7.6": [ { "comment_text": "", "digests": { "md5": "2231bf6dd21ff1760c90ca263ab033be", "sha256": "de9f6ac176ee9154c89803f514306241312a0d529206e1927c91a4944d56a2db" }, "downloads": -1, "filename": "ecsminion-0.7.6.tar.gz", "has_sig": false, "md5_digest": "2231bf6dd21ff1760c90ca263ab033be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29371, "upload_time": "2017-03-17T03:53:42", "url": "https://files.pythonhosted.org/packages/d0/7b/3de67f8b4e8138b9c30eb3e62abfcf07d8c63ab1a6b4cf25b0fe54694a89/ecsminion-0.7.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2231bf6dd21ff1760c90ca263ab033be", "sha256": "de9f6ac176ee9154c89803f514306241312a0d529206e1927c91a4944d56a2db" }, "downloads": -1, "filename": "ecsminion-0.7.6.tar.gz", "has_sig": false, "md5_digest": "2231bf6dd21ff1760c90ca263ab033be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29371, "upload_time": "2017-03-17T03:53:42", "url": "https://files.pythonhosted.org/packages/d0/7b/3de67f8b4e8138b9c30eb3e62abfcf07d8c63ab1a6b4cf25b0fe54694a89/ecsminion-0.7.6.tar.gz" } ] }