{ "info": { "author": "Kairo Araujo", "author_email": "kairo@kairo.eti.br", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: System :: Archiving", "Topic :: System :: Hardware" ], "description": "=======================================\nPython Storage Disk Toolkit (PyStorage)\n=======================================\n\n.. image:: https://travis-ci.org/kairoaraujo/PyStorage.svg?branch=master\n :target: https://travis-ci.org/kairoaraujo/PyStorage\n\n:PyStorage: Python Storage Disk Toolkit\n:Copyright: Copyright (c) 2016 Kairo Araujo \n:License: BSD\n:Development: https://github.com/kairoaraujo/PyStorage\n\n.. contents::\n :local:\n :depth: 2\n :backlinks: none\n\nOverview\n========\n\nThis is a collection of storage disk partial commands.\n\nTable of support:\n\n+--------+----------+\n| Vendor | Models |\n+========+==========+\n| | - VMAX |\n+ EMC + - VNX |\n| | |\n+--------+----------+\n| IBM | - DS8K |\n+--------+----------+\n\n\n\nRequirements\n============\n\n* Python >=2.7\n\n\nInstall\n=======\n\n* Using PIP:\n\n.. code-block:: bash\n\n $ pip install PyStorage\n\n* Offline install\n\nDownload the package on https://pypi.python.org/pypi/PyStorage/\n\n.. code-block:: bash\n\n $ tar xvzf PyStorage-X.Y.tar.gz\n $ cd PyStorage-X.Y\n $ python setup.py install\n\nUsing\n=====\n\n* EMC.VMAX_\n\n* EMC.VNX_\n\n* IBM.DS8K_\n\n\n.. _EMC.VMAX:\n\nEMC.VMAX\n--------\n\nClass EMC.VMAX() works with EMC VMAX Storage 1 and 2.\n\nIs necessary a SYMCLI installed and working well with your environment.\nFor more information consult the EMC documentation.\n\n* Importing and initializing\n\n>>> import pystorage\n>>> symcli_path = '/opt/emc/SYMCLI/bin'\n>>> my_vmax = pystorage.EMC.VMAX(symcli_path)\n\n\n\n* EMC.VMAX.list()\n\nList all Storages Disk available.\n\nreturns array [return code, output]\n\n>>> print my_vmax.list()[1]\n S Y M M E T R I X\n Mcode Cache Num Phys Num Symm\n SymmID Attachment Model Version Size (MB) Devices Devices\n 000000000100 Local VMAX-1 5876 114688 5 12361\n 000000000101 Local VMAX-1 5876 300800 10 16190\n 000000000102 Local VMAX20K 5876 421120 10 13957\n 000000000103 Local VMAX20K 5876 360960 5 24325\n 000000000104 Local VMAX40K 5876 368640 12 9249\n 000000000105 Local VMAX200K 5977 3014656 2 2691\n 000000000106 Remote VMAX20K 5876 360960 0 9588\n 000000000107 Remote VMAX20K 5876 240640 0 11360\n 000000000108 Remote VMAX20K 5876 120320 0 4640\n\n\n\n* EMC.VMAX.lspools(SID)\n\nList all Pools from specific storage SID.\n\nreturns array [return code, output]\n\n>>> print my_vmax.lspools(108)[1]\nSymmetrix ID: 000000000108\n S Y M M E T R I X P O O L S\n---------------------------------------------------------------------------\nPool Flags Dev Usable Free Used Full Comp\nName PTECSL Config Tracks Tracks Tracks (%) (%)\n------------ ------ ------------ ---------- ---------- ---------- ---- ----\nDEFAULT_POOL S-F-D- Unknown 0 0 0 0 0\nDEFAULT_POOL S-9-D- Unknown 0 0 0 0 0\nDEFAULT_POOL S-8-D- Unknown 0 0 0 0 0\nDEFAULT_POOL S-A-D- Unknown 0 0 0 0 0\nMYPOOLSAS01 TEFDEI RAID-5(7+1) 84095232 69400896 14694336 17 0\nMYPOOLSAS02 TFFDEI RAID-5(7+1) 1215449040 791717292 423731748 34 0\nMYPOOLSATA01 TSFDEI RAID-6(6+2) 1081337856 974749776 106588080 9 0\nTotal ---------- ---------- ---------- ---- ----\nTracks 2380882128 1835867964 545014164 22 0\n\n\n\n* EMC.VMAX.ign(SID, WWN)\n\nGet Initial Group Name full output by the WWN.\n\nreturns array [return code, output]\n\n>>> print my_vmax.ign('108', '10:23:45:67:89:0A:BC:DE')[1]\nSymmetrix ID : 000000000108\nInitiator Group Name\n--------------------\nIG_LNXDBSRV001\n\n\n\n* EMC.VMAX.get_ign(SID, WWN)\n\nGet Initial Group Name, only the Initial Group Name.\n\nreturns array [return code, output]\n\n>>> print my_vmax.get_ign('108', '10:23:45:67:89:0A:BC:DE')[1]\nIG_LNXDBSRV001\n\n\n\n* EMC.VMAX.mvn(SID, 'INITIAL GROUP NAME')\n\nGet the Mask View Names with full informations using the Initiator Group Name.\n\nreturns array [return code, output]\n\n>>> print my_vmax.get_mvn('108', 'IG_DBSERVER_LINUX')[1]\nSymmetrix ID : 000000000108\nInitiator Group Name : IG_LNXDBSRV001\nLast update time : 12:46:36 PM on Tue Dec 09,2014\nGroup last update time : 12:46:36 PM on Tue Dec 09,2014\n Host Initiators\n {\n WWN : 10234567890abcde\n [alias: 10234567890abcde/10234567890abcde]\n }\n Masking View Names\n {\n MV_LNXDBSRV001\n }\n Parent Initiator Groups\n {\n None\n }\n\n\n\n* EMC.VMAX.get_mvn(SID, 'INITIAL GROUP NAME')\n\nGet Mask View Name by the Initial Group Name.\n\nreturns array [return code, output]\n\n>>> print my_vmax.get_mvn('108', 'IG_DBSERVER_LINUX')[1:]\nMV_LNXDBSRV001\n\n\n\n* EMC.VMAX.sgn(SID, 'MASK VIEW NAME')\n\nGet the full Storage Group Name information by the Mask View Name.\n\nreturns array [return code, output]\n\n>>> print my_vmax.sgn('168', 'MV_LNXDBSRV001')[1]\nSymmetrix ID : 000000000108\nMasking View Name : MV_LNXDBSRV001\nLast update time : 05:32:53 PM on Thu Nov 12,2015\nView last update time : 05:32:53 PM on Thu Nov 12,2015\nInitiator Group Name : IG_LNXDBSRV001\n Host Initiators\n {\n WWN : 10234567890abcde\n [alias: 10234567890abcde/10234567890abcde]\n }\nPort Group Name : PG_LNXDBSRV001_012A\n Director Identification\n {\n Director\n Ident Port WWN Port Name / iSCSI Target Name\n ------ ---- -------------------------------------------------------\n 01-2A 000 500001234567890a\n }\nStorage Group Name : SG_LNXDBSRV001\n Number of Storage Groups : 0\n Storage Group Names : None\nSym Host\nDev Dir:Port Physical Device Name Lun Attr Cap(MB)\n------ -------- ----------------------- ---- ---- -------\n00055 09F:000 Not Visible 1 3\n00056 09F:000 Not Visible 2 3\n00057 09F:000 Not Visible 3 3\n00058 09F:000 Not Visible 4 3\n -------\nTotal Capacity 12\n\n\n\n* EMC.VMAX.get_sgn(SID, 'MASK VIEW NAME')\n\nGet the Storage Group Name by the Mask View Name\n\nreturns array [return code, output]\n\n>>> print my_vmax.get_sgn('108', 'MV_LNXDBSRV001')[1]\nSG_LNXDBSRV001\n\n\n\n* EMC.VMAX.create_dev(SID, COUNT, 'LUN SIZE', 'MEMBER SIZE', 'REGULAR or META','POOL', 'STORAGE GROUP NAME' 'PREPARE or COMMIT')\n\nCreate and add LUN to Storage Group Name.\n\nreturn array [return code, output]\n\n>>> my_vmax.create_dev('168', 2, '50', '0', 'regular','MYPOOLSAS02',\n'SG_LNXDBSRV001' 'prepare')\n Establishing a configuration change session...............Established.\n Processing symmetrix 000000000108\n {\n create dev count=2, size=54600 cyl, emulation=FBA, config=TDEV,\n mvs_ssid=0, binding to pool MYPOOLSAS02, sg=SG_LNXDBSRV001;\n }\n Performing Access checks..................................Allowed.\n Checking Device Reservations..............................Allowed.\n Initiating COMMIT of configuration changes................Started.\n Committing configuration changes..........................Queued.\n COMMIT requesting required resources......................Obtained.\n Step 002 of 018 steps.....................................Executing.\n Step 011 of 018 steps.....................................Executing.\n Step 016 of 019 steps.....................................Executing.\n Step 016 of 019 steps.....................................Executing.\n Local: COMMIT............................................Done.\n Adding devices to Storage Group...........................\n New symdevs: 00D28:00D29 [TDEVs]\n Terminating the configuration change session..............Done.\n\n\n.. _EMC.VNX:\n\nEMC.VNX\n-------\n\nClass EMC.VNX() works with EMC VNX.\n\nIs necessary a NAVISECCLI installed and working well with your environment.\nFor more information consult the EMC documentation.\n\nAll returns are:\n\nIf return code is 0: [return code, data]\n\nIf return code is different of 0: [return code, 'data error', 'data'\n\n* Importing and initializing\n\n>>> import pystorage\n>>> vnx = pystorage.VNX('naviseccli', '10.0.0.1')\n\n* EMC.VNX.pools()\n\nList all pools informations.\n\n\n>>> print vnx.pools()[1]\nPool Name: P1SAS600K15\nPool ID: 0\nRaid Type: r_5\nPercent Full Threshold: 70\nDescription:\nDisk Type: SAS\nState: Ready\nStatus: OK(0x0)\nCurrent Operation: None\nCurrent Operation State: N/A\nCurrent Operation Status: N/A\nCurrent Operation Percent Completed: 0\nRaw Capacity (Blocks): 236411400960\nRaw Capacity (GBs): 112729.741\nUser Capacity (Blocks): 188771917824\nUser Capacity (GBs): 90013.465\nConsumed Capacity (Blocks): 187616231424\nConsumed Capacity (GBs): 89462.391\nAvailable Capacity (Blocks): 1155686400\nAvailable Capacity (GBs): 551.074\nPercent Full: 99.388\nTotal Subscribed Capacity (Blocks): 189324546048\nTotal Subscribed Capacity (GBs): 90276.979\nPercent Subscribed: 100.293\nOversubscribed by (Blocks): 552628224\nOversubscribed by (GBs): 263.514\n(...)\nDisks:\nBus 2 Enclosure 2 Disk 10\nBus 2 Enclosure 2 Disk 12\nBus 2 Enclosure 2 Disk 14\nBus 3 Enclosure 3 Disk\nLUNs: 806, 677, 198, 896, 479, 768, 620, 708, (...)\n(... End of Example ...)\n\n* EMC.VNX.pool_list()\n\nReturn array with pool names\n\n>>> vnx.pool_list()[1]\n['P1SAS600K15']\n\n\n* EMC.VNX.port_list_all()\n\nReturn all data about port list from storage\n\n\n>>> print vnx.port_list_all()[1]\nInformation about each HBA:\nHBA UID: C0:50:76:05:17:AA:00:2C:C0:50:76:05:17:AA:00:2C\nServer Name: MYSERVER01\nServer IP Address: 10.10.10.10\nHBA Model Description:\nHBA Vendor Description:\nHBA Device Driver Name: N/A\nInformation about each port of this HBA:\n SP Name: SP A\n SP Port ID: 4\n HBA Devicename: N/A\n Trusted: NO\n Logged In: YES\n Source ID: 3943170\n Defined: YES\n Initiator Type: 3\n StorageGroup Name: SG_MYSERVER01\n.\n SP Name: SP B\n SP Port ID: 4\n HBA Devicename: N/A\n Trusted: NO\n Logged In: YES\n Source ID: 3943170\n Defined: YES\n Initiator Type: 3\n StorageGroup Name: SG_MYSERVER01\n.\nInformation about each HBA:\nHBA UID: C0:50:76:05:17:AA:00:2E:C0:50:76:05:17:AA:00:2E\nServer Name: MYSERVER02\nServer IP Address: 10.10.10.11\nHBA Model Description:\nHBA Vendor Description:\nHBA Device Driver Name: N/A\nInformation about each port of this HBA:\n(...end of example...)\n\n\n* EMC.VNX.get_luns('POOL')\n\nGet all LUNs IDs used in the pool sorted.\n\n>>> print vnx.get_luns('P1SAS600K15')[1]\n['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11' ...]\n\n\n* EMC.VNX.show_lun('ID')\n\nGet information about specific LUN ID.\n\n\n>>> print vnx.show_lun('3')[1]\nLOGICAL UNIT NUMBER 3\nName: DB_LUN_3\nUID: 60:06:01:60:20:A0:2D:00:36:1B:B4:88:A3:A9:E1:11\nCurrent Owner: SP B\nDefault Owner: SP B\nAllocation Owner: SP B\nUser Capacity (Blocks): 943718400\nUser Capacity (GBs): 450.000\nConsumed Capacity (Blocks): 972877824\nConsumed Capacity (GBs): 463.904\nPool Name: P1SAS600K15\nRaid Type: r_5\nOffset: 0\nAuto-Assign Enabled: DISABLED\nAuto-Trespass Enabled: DISABLED\nCurrent State: Ready\nStatus: OK(0x0)\nIs Faulted: false\nIs Transitioning: false\nCurrent Operation: None\nCurrent Operation State: N/A\nCurrent Operation Status: N/A\nCurrent Operation Percent Completed: 0\nIs Pool LUN: Yes\nIs Thin LUN: No\nIs Private: No\nIs Compressed: No\nTiering Policy: No Movement\nInitial Tier: Optimize Pool\nTier Distribution:\nPerformance: 100.00\n\n\n* EMC.VNX.get_hostname('WWN')\n\nGet the Hostname on storage by host WWN address.\n\n>>> print vnx.get_hostname('C0:50:76:05:14:5F:00:30')[1]\nSERVER_DB02\n\n\n* EMC.VNX.get_stggroup('WWN')\n\nGet the Storage Group Name on storage used by host WWN address.\n\n>>> print vnx.get_stggroup('C0:50:76:05:14:5F:00:30')[1]\nSG_SERVER_DB2\n\n\n* EMC.VNX.show_stggroup('STORAGE GROUP NAME')\n\nGet all informations about the specific storage group name.\n\n>>> print vnx.show_stggroup('SG_SERVER_DB2')[1]\nStorage Group Name: SG_SERVER_DB2\nStorage Group UID: D2:F2:E2:05:89:2F:E3:11:B6:12:00:60:16:38:6D:4F\nHBA/SP Pairs:\n.\n HBA UID SP Name SPPort\n ------- ------- ------\n 20:00:00:24:FF:40:1B:3F:21:00:00:24:FF:40:1B:3F SP A 7\n 20:00:00:24:FF:40:35:C1:21:00:00:24:FF:40:35:C1 SP A 7\n 20:00:00:24:FF:40:1B:3F:21:00:00:24:FF:40:1B:3F SP B 7\n 20:00:00:24:FF:40:35:C1:21:00:00:24:FF:40:35:C1 SP B 7\n 20:00:00:24:FF:40:1B:4F:21:00:00:24:FF:40:1B:4F SP A 7\n 20:00:00:24:FF:40:1B:4F:21:00:00:24:FF:40:1B:4F SP B 7\n 20:00:00:24:FF:40:1A:3E:21:00:00:24:FF:40:1A:3E SP A 3\n 20:00:00:24:FF:40:1A:3E:21:00:00:24:FF:40:1A:3E SP B 3\n 20:00:00:24:FF:40:35:C0:21:00:00:24:FF:40:35:C0 SP A 3\n 20:00:00:24:FF:40:1B:4E:21:00:00:24:FF:40:1B:4E SP A 3\n 20:00:00:24:FF:40:35:C0:21:00:00:24:FF:40:35:C0 SP B 3\n 20:00:00:24:FF:40:1B:4E:21:00:00:24:FF:40:1B:4E SP B 3\n 20:00:00:24:FF:40:1A:3F:21:00:00:24:FF:40:1A:3F SP A 7\n 20:00:00:24:FF:40:1A:3F:21:00:00:24:FF:40:1A:3F SP B 7\n.\nHLU/ALU Pairs:\n.\n HLU Number ALU Number\n ---------- ----------\n 0 923\n 1 920\n 2 925\n 3 922\n 4 1040\n 5 1041\n 6 1042\nShareable: YES\n\n\n* EMC.VNX.get_hlu_stggroup('STORAGE GROUP NAME')\n\nGet all the HLU IDs in use on the Storage Group Name\n\n>>> print vnx.get_hlu_stggroup('SG_SERVER_DB2')[1]\n['0', '1', '2', '3', '4', '5', '6']\n\n\n* EMC.VNX.create_dev('address', 'lun_size', 'pool_name', 'LUN ID', 'LUN', lun_type=\"NonThin\")\n\nCreate LUN on specific pool\n\n>>> vnx.create_dev('10.0.0.1', 50, 'P1SAS600K15', '103' 'DB2_LUN_103', lun_type=\"NonThin\"):\n\n\n* EMC.VNX.mapping_dev('STORAGE GROUP NAME', 'HLU ID', 'LUN ID'):\n\nAdd (Mapping) of LUN to Storage Group Name\n\n>>> vnx.mapping_dev('SG_SERVER_DB2', '7', '103')\n\n\n.. _IBM.DS8K:\n\nIBM.DSK8K\n---------\n\nClass IBM.DS8K() works with IBM DS8000 System Storage family.\n\nIs necessary a DSCLI installed and configured using profile files by\nstorage.\n\nThe profile files is usual stored on /opt/ibm/dscli/profile/\n\nThe usual name is dscli.profile_[storage name]\n\nFor more informations check:\nhttp://www-01.ibm.com/support/knowledgecenter/#!/STUVMB/com.ibm.storage.ssic.help.doc/f2c_cliprofile_1yecd2.html\n\n* Importing and initializing\n\n>>> import pystorage\n>>> dscli_path = '/opt/ibm/dscli'\n>>> dscli_profile_path = '/opt/ibm/dscli/profile/'\n>>> my_ds8k = pystorage.IBM.DS8K(dscli_path, dscli_profile_path+'dscli.profile_wxyz')\n\n* IBM.lsextpool()\n\nList all available pools, full output.\n\nreturn [return code, output]\n\n>>> print my_ds8k.lsextpool()[1]\nDate/Time: January 21, 2016 10:34:07 AM BRST IBM DSCLI Version: 7.7.5.61 DS: IBM.2107-82BWXYZ\nName ID stgtype rankgrp status availstor (2^30B) %allocated available reserved numvols\n======================================================================================\nP0 P0 fb 0 below 14285 96 14285 0 2948\nP1 P1 fb 1 below 11737 96 11737 0 2878\nP2 P2 fb 0 below 11995 66 11995 0 341\nP3 P3 fb 1 below 12123 65 12123 0 422\n\n\n* IBM.lshostconnect('WWPN')\n\nGet the list of hosts. If used with WWPN (optional) returns informations from\nspecified WWPN host.\n\n>>> print my_ds8k.lshostconnect('10234567890abcde')[1]\nDate/Time: January 21, 2016 10:36:55 AM BRST IBM DSCLI Version: 7.7.5.61 DS: IBM.2107-82BWXYZ\nName ID WWPN HostType Profile portgrp volgrpID ESSIOport\n==================================================================================================\nLNXDBSRV001_TESTS 03DB 10234567890ABCDE LinuxRHEL Intel - Linux RHEL 0 V334 all\n\n\n\n\n* IBM.get_hostname('WWPN')\n\nGet the hostname from host by the WWPN.\n\n>>> print my_ds8k.get_hostname('10234567890abcde')[1]\nLNXDBSRV001_TESTS\n\n\n\n* IBM.get_id('WWPN')\n\nGet the id from host by the WWPN.\n\n>>> print my_ds8k.get_hostname('10234567890abcde')[1]\n03DB\n\n\n\n* IBM.get_volgrpid('WWPN')\n\nGet the Volume Group ID from host by the WWPN.\n\n>>> print my_ds8k.get_volgrpid('10234567890abcde')[1]\nV334\n\n\n* IBM.lsfbvol()\n\nList all fixed block volumes in a storage.\nArguments can be used IBM.DS8K.lsfbvol('args')\n\nSuggestions:\n\nTo get all volumes for a specific Volume Group use:\n\nIBM.DS8K.lsfbvol('-volgrp VOL_GROUP_ID')\n\nTo get all volumes with IDs that contain the specified logical subsystem\nID use:\n\nIBM.DS8K.lsfbvol('-lss LSS_ID')\n\n>>> print my_ds8k.lsfbvol('-lss 01')\nDate/Time: January 21, 2016 11:55:35 AM BRST IBM DSCLI Version: 7.7.5.61 DS: IBM.2107-82BWXYZ\nName ID accstate datastate configstate deviceMTM datatype extpool cap (2^30B) cap (10^9B) cap (blocks)\n===================================================================================================================\nLUN_0100 0000 Online Normal Normal 2107-900 FB 512 P1 50.0 - 104857600\nLUN_0101 0001 Online Normal Normal 2107-900 FB 512 P1 50.0 - 104857600\nLUN_0102 0002 Online Normal Normal 2107-900 FB 512 P1 50.0 - 104857600\n(...)\n\n\n\n* IBM.DS8K.mkfbvol(pool, size, prefix, vol_group, address)\n\nCreate the fbvol(s) and allocate to the Volume Group.\n\n>>> print my_ds8k.mkfbvol('P1', 50, 'LUN_', 'V334', '0100 0101 0102 0103')\nFB volume 0100 successfully created.\nFB volume 0101 successfully created.\nFB volume 0102 successfully created.\nFB volume 0103 successfully created.\n\n\n* IBM.DSK8K.chvolgrp(vol_address, vol_group):\n\nAdd a volume in another volume group.\n\n>>> my_ds8k.chvolgrp('0101-0103', 'V335')\nVolume group V335 successfully modified.\n\n\n\nContributing\n============\n\n* Coding\n\n1. Create your account on GitHub\n2. Make a fork from GitHub (https://github.com/kairoaraujo/PyStorage)\n3. Sign in on GerritHub.io (http://review.gerrithub.io) using your account from GitHub\n4. Submit you review =)\n\n* Reporting Issue or suggestions\n\n1. Create a new issue https://github.com/kairoaraujo/PyStorage/issues\n\nImportant\n=========\n\nEMC, SYMCLI and VMAX are trademarks of EMC in the United States, other\ncountries, or both.\n\nIBM and DS are trademarks of EMC in the United States, other countries, or both.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kairoaraujo/PyStorage/", "keywords": "Python Storage Disk EMC VMX VNX IBM DS800 DS8K Toolkit", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "PyStorage", "package_url": "https://pypi.org/project/PyStorage/", "platform": "Posix; MacOS X; Windows", "project_url": "https://pypi.org/project/PyStorage/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/kairoaraujo/PyStorage/" }, "release_url": "https://pypi.org/project/PyStorage/0.5.1/", "requires_dist": null, "requires_python": null, "summary": "Python Storage Disk Toolkit (EMC VNX, EMC VMAX and IBM DS8K)", "version": "0.5.1" }, "last_serial": 2377572, "releases": { "0.1": [], "0.2": [ { "comment_text": "", "digests": { "md5": "7faa0da83a8305e48b77b9900e14e1ee", "sha256": "b578a0c23b13518355ce9ae7c6dc46eaeaa1c33a8dc4a432a7c07feff44fc215" }, "downloads": -1, "filename": "PyStorage-0.2.tar.gz", "has_sig": false, "md5_digest": "7faa0da83a8305e48b77b9900e14e1ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3051, "upload_time": "2016-01-18T20:10:50", "url": "https://files.pythonhosted.org/packages/c6/5b/318fc59bce004579aef95971d5d126999edddc7272920653e03aec2ec6cf/PyStorage-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "4dff165d08f6b1d1529449592bc77fc2", "sha256": "6db4796f7817442db0d783765afa4f1d924f262faee1b689d6494c08eab3b68d" }, "downloads": -1, "filename": "PyStorage-0.3.tar.gz", "has_sig": false, "md5_digest": "4dff165d08f6b1d1529449592bc77fc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4663, "upload_time": "2016-01-18T22:42:34", "url": "https://files.pythonhosted.org/packages/5e/1c/6a5bf2fafdda59a2c5c2091fc17489d73681e969f8c416890d0b5c4997d9/PyStorage-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9072acd73fea9645c922e1bd8e3e5b45", "sha256": "7d352f675547ee63c9732928698b3238372b540d156c7adb4066df2dfffeac4f" }, "downloads": -1, "filename": "PyStorage-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9072acd73fea9645c922e1bd8e3e5b45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4809, "upload_time": "2016-01-19T15:12:21", "url": "https://files.pythonhosted.org/packages/f6/a2/32d9a8a222b8b01e70effbaa382a403e60dc471a83bb965e20b2351460ac/PyStorage-0.3.1.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "6929838cf122adad391b6a3221e862ed", "sha256": "740d363233f3ea1c7d29b682dddb908e10ce8f4c798aafbd2c60aa85e4fe70ea" }, "downloads": -1, "filename": "PyStorage-0.3.3.tar.gz", "has_sig": false, "md5_digest": "6929838cf122adad391b6a3221e862ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6109, "upload_time": "2016-01-20T01:50:17", "url": "https://files.pythonhosted.org/packages/dc/79/a489a86f2b376f227bab3654d64a4fb81bc4bef6fc837798cd53b8271b5b/PyStorage-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "b98e8833e0365f075547cf325375c4e5", "sha256": "3627428d2849a32c6f8b755287394d983d2cb60cb01711a77bb023a5dda6680a" }, "downloads": -1, "filename": "PyStorage-0.3.4.tar.gz", "has_sig": false, "md5_digest": "b98e8833e0365f075547cf325375c4e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8003, "upload_time": "2016-01-20T23:49:07", "url": "https://files.pythonhosted.org/packages/a2/77/8890ad1473fc879ef297a473ae644758e74d67389667ad0da594d195ee3c/PyStorage-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "90fe8a9909460ed167df2ee3900da9d4", "sha256": "0c7d96489aaef89e14d77f49541cc81777b5f696f374e73972e223a541a19b22" }, "downloads": -1, "filename": "PyStorage-0.4.0.tar.gz", "has_sig": false, "md5_digest": "90fe8a9909460ed167df2ee3900da9d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14125, "upload_time": "2016-01-21T20:29:09", "url": "https://files.pythonhosted.org/packages/0a/dc/9ae17b2ef9c7b3095945b469dced8a4cc3a704edadd80fb518eae03aabe7/PyStorage-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "8c26315e8891959909c4c2c29015821c", "sha256": "f25e854d8656693e14180046300c4591d65222b3d12c09a1da2d02120942d58b" }, "downloads": -1, "filename": "PyStorage-0.4.1.tar.gz", "has_sig": false, "md5_digest": "8c26315e8891959909c4c2c29015821c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14115, "upload_time": "2016-02-10T15:56:34", "url": "https://files.pythonhosted.org/packages/5c/95/d116252b2fa242b9858b38a472deca2def4e7d607296c1f2d90eea1ae10f/PyStorage-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "6cee225e86377bd8d008ddcd0c954c5a", "sha256": "d409a4bd56163b8eb44345a515a779698e542b48967dbb420d976683fd18804d" }, "downloads": -1, "filename": "PyStorage-0.4.2.tar.gz", "has_sig": false, "md5_digest": "6cee225e86377bd8d008ddcd0c954c5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14199, "upload_time": "2016-02-12T21:01:53", "url": "https://files.pythonhosted.org/packages/da/09/add8e2bf1efadf478c1439dc39d1ff136e7d4a45cfa3ae49ba93e5e37244/PyStorage-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "67bd6c92dd880a576ded62542f7bf9f3", "sha256": "5ed1172ad113b9ac526debab15413bb49983497177988baa27e673289ad360a5" }, "downloads": -1, "filename": "PyStorage-0.4.3.tar.gz", "has_sig": false, "md5_digest": "67bd6c92dd880a576ded62542f7bf9f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14221, "upload_time": "2016-04-15T11:39:02", "url": "https://files.pythonhosted.org/packages/82/6d/adf70510689e89c02f8390d2749ab2478af340e2b7e3cf4749a4a749b73e/PyStorage-0.4.3.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ad10e9b0f990570fbe51b113829b9704", "sha256": "5c81ebb49633b520d9d3bcb0bed9fe6fcafa12f3e5c0a479c19dd211bc72ccf6" }, "downloads": -1, "filename": "PyStorage-0.5.0.tar.gz", "has_sig": false, "md5_digest": "ad10e9b0f990570fbe51b113829b9704", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21018, "upload_time": "2016-04-19T11:31:09", "url": "https://files.pythonhosted.org/packages/28/01/c972ba0f0d06c0c4e034efa7419037132934d989e5f2b9a78947511d1cf7/PyStorage-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "e42f3ae8d06cb821ea340ee78bb21dbf", "sha256": "22835d9e25f833663d0c3ef8353cde84304739767efa9eab92cec8b059b1cc17" }, "downloads": -1, "filename": "PyStorage-0.5.1.tar.gz", "has_sig": false, "md5_digest": "e42f3ae8d06cb821ea340ee78bb21dbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21001, "upload_time": "2016-10-03T13:52:27", "url": "https://files.pythonhosted.org/packages/be/c8/67a327e38f3f4a873dba2c90a0dea849149450d630ac81de55287dd3df5e/PyStorage-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e42f3ae8d06cb821ea340ee78bb21dbf", "sha256": "22835d9e25f833663d0c3ef8353cde84304739767efa9eab92cec8b059b1cc17" }, "downloads": -1, "filename": "PyStorage-0.5.1.tar.gz", "has_sig": false, "md5_digest": "e42f3ae8d06cb821ea340ee78bb21dbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21001, "upload_time": "2016-10-03T13:52:27", "url": "https://files.pythonhosted.org/packages/be/c8/67a327e38f3f4a873dba2c90a0dea849149450d630ac81de55287dd3df5e/PyStorage-0.5.1.tar.gz" } ] }