{ "info": { "author": "Artur Barseghyan", "author_email": "artur.barseghyan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Topic :: Database" ], "description": "=========================================\nstarbase\n=========================================\nHBase Stargate (REST API) client wrapper for Python.\n\nRead the official documentation of the `Stargate `_.\n\nDescription\n=========================================\nstarbase is (at the moment) a client implementation of the Apache HBase REST API (Stargate).\n\nWhat you have to know\n=========================================\nBeware, that REST API is slow (not to blame on this library!). If you can operate with HBase directly\nbetter do so.\n\nPrerequisites\n=========================================\nYou need to have Hadoop, HBase, Thrift and Stargate running. If you want to make it easy for yourself,\nread my instructions on installing Cloudera manager (free) on Ubuntu 12.04 LTS \n`here `_ or\n`there `_.\n\nOnce you have everything installed and running (by default Stargate runs on 127.0.0.1:8000), you should\nbe able to run `src/starbase/client/test.py` without problems (UnitTest).\n\nSupported Python versions\n=========================================\n- 2.6.8 and up\n- 2.7\n- 3.3\n\nFeatures\n=========================================\nProject is still in development, thus not all the features of the API are available.\n\nFeatures implemented\n-----------------------------------------\n- Connect to Stargate.\n- Show software version.\n- Show cluster version.\n- Show cluster status.\n- List tables.\n- Retrieve table schema.\n- Retrieve table meta data.\n- Get a list of tables' column families.\n- Create a table.\n- Delete a table.\n- Alter table schema.\n- Insert (PUT) data into a single row (single or multiple columns).\n- Update (POST) data of a single row (single or multiple columns).\n- Select (GET) a single row from table, optionally with selected columns only.\n- Delete (DELETE) a single row by id.\n- Batch insert (PUT).\n- Batch update (POST).\n- Basic HTTP auth is working. You could provide a login and a password to the connection.\n- Retrive all rows in a table (table scanning).\n\nFeatures in-development\n-----------------------------------------\n- Table scanning.\n- Syntax globbing.\n\nInstallation\n=========================================\nInstall latest stable version from PyPI.\n\n.. code-block::\n\n $ pip install starbase\n\nOr latest stable version from github.\n\n.. code-block::\n\n $ pip install -e git+https://github.com/barseghyanartur/starbase@stable#egg=starbase\n\nUsage and examples\n=========================================\nOperating with API starts with making a connection instance.\n\nRequired imports\n-----------------------------------------\n.. code-block:: python\n\n from starbase import Connection\n\nCreate a connection instance\n-----------------------------------------\nDefaults to 127.0.0.1:8000. Specify ``host`` and ``port`` arguments when creating a connection instance,\nif your settings are different.\n\n.. code-block:: python\n\n c = Connection()\n\nWith customisations, would look simlar to the following.\n\n.. code-block:: python\n\n c = Connection(host='192.168.88.22', port=8001)\n\nShow tables\n-----------------------------------------\nAssuming that there are two existing tables named ``table1`` and ``table2``, the following would be\nprinted out.\n\n.. code-block:: python\n\n c.tables()\n\nOutput.\n\n.. code-block::\n\n ['table1', 'table2']\n\nOperating with table schema\n-----------------------------------------\nWhenever you need to operate with a table (also, if you need to create one), you need to have a table\ninstance created.\n\nCreate a table instance (note, that at this step no table is created).\n\n.. code-block:: python\n\n t = c.table('table3')\n\nCreate a new table\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAssuming that no table named ``table3`` yet exists in the database, create a table named ``table3`` with\ncolumns (column families) ``column1``, ``column2``, ``column3`` (this is the point where the table is\nactually created). In the example below, ``column1``, ``column2`` and ``column3`` are column families (in\nshort - columns). Columns are declared in the table schema.\n\n.. code-block:: python\n\n t.create('column1', 'column2', 'column3')\n\nOutput.\n\n.. code-block::\n\n 201\n\nCheck if table exists\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n t.exists()\n\nOutput.\n\n.. code-block::\n\n True\n\nShow table columns (column families)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n t.columns()\n\nOutput.\n\n.. code-block::\n\n ['column1', 'column2', 'column3']\n\nAdd columns to the table\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAdd columns given (``column4``, ``column5``, ``column6``, ``column7``).\n\n.. code-block:: python\n\n t.add_columns('column4', 'column5', 'column6', 'column7')\n\nOutput.\n\n.. code-block::\n\n 200\n\nDrop columns from table\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nDrop columns given (``column6``, ``column7``).\n\n.. code-block:: python\n\n t.drop_columns('column6', 'column7')\n\nOutput.\n\n.. code-block::\n\n 201\n\nDrop entire table schema\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n t.drop()\n\nOutput.\n\n.. code-block::\n\n 200\n\nOperating with table data\n-----------------------------------------\n\nInsert data into a single row\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHBase is a key/value store. In HBase columns (also named column families) are part of declared table schema\nand have to be defined when a table is created. Columns have qualifiers, which are not declared in the table\nschema. Number of column qualifiers is not limited.\n\nWithin a single row, a value is mapped by a column family and a qualifier (in terms of key/value store\nconcept). Value might be anything castable to string (JSON objects, data structures, XML, etc).\n\nIn the example below, ``key11``, ``key12``, ``key21``, etc. - are the qualifiers. Obviously, ``column1``,\n``column2`` and ``column3`` are column families.\n\nColumn families must be composed of printable characters. Qualifiers can be made of any arbitrary bytes.\n\nTable rows are identified by row keys - unique identifiers (UID or so called primary key). In the example\nbelow, ``my-key-1`` is the row key (UID).\n\n\u0422\u043e recap all what's said above, HBase maps (row key, column family, column qualifier and timestamp) to a\nvalue.\n\n.. code-block:: python\n\n t.insert(\n 'my-key-1',\n {\n 'column1': {'key11': 'value 11', 'key12': 'value 12',\n 'key13': 'value 13'},\n 'column2': {'key21': 'value 21', 'key22': 'value 22'},\n 'column3': {'key32': 'value 31', 'key32': 'value 32'}\n }\n )\n\nOutput.\n\n.. code-block::\n\n 200\n\nNote, that you may also use the `native` way of naming the columns and cells (qualifiers). Result of\nthe following would be equal to the result of the previous example.\n\n.. code-block:: python\n\n t.insert(\n 'my-key-1',\n {\n 'column1:key11': 'value 11', 'column1:key12': 'value 12',\n 'column1:key13': 'value 13',\n 'column2:key21': 'value 21', 'column2:key22': 'value 22',\n 'column3:key32': 'value 31', 'column3:key32': 'value 32'\n }\n )\n\nOutput.\n\n.. code-block::\n\n 200\n\nUpdate row data\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n t.update(\n 'my-key-1',\n {'column4': {'key41': 'value 41', 'key42': 'value 42'}}\n )\n\nOutput.\n\n.. code-block::\n\n 200\n\nRemove row, row column or row cell data\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nRemove a row cell (qualifier) data. In the example below, the ``my-key-1`` is table row UID, ``column4``\nis the column family and the ``key41`` is the qualifier. Note, that only qualifer data (for the row given)\nis being removed. All other possible qualifiers of the column ``column4`` will remain untouched.\n\n.. code-block:: python\n\n t.remove('my-key-1', 'column4', 'key41')\n\nOutput.\n\n.. code-block::\n\n 200\n\nRemove a row column (column family) data. Note, that at this point, the entire column data (data of all\nqualifiers for the row given) is being removed.\n\n.. code-block:: python\n\n t.remove('my-key-1', 'column4')\n\nOutput.\n\n.. code-block::\n\n 200\n\nRemove an entire row data. Note, that in this case, entire row data, along with all columns and qualifiers\nfor the row given, is being removed.\n\n.. code-block:: python\n\n t.remove('my-key-1')\n\nOutput.\n\n.. code-block::\n\n 200\n\nFetch table data\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nFetch a single row data with all columns and qualifiers.\n\n.. code-block:: python\n\n t.fetch('my-key-1')\n\nOutput.\n\n.. code-block::\n\n {\n 'column1': {'key11': 'value 11', 'key12': 'value 12', 'key13': 'value 13'},\n 'column2': {'key21': 'value 21', 'key22': 'value 22'},\n 'column3': {'key32': 'value 31', 'key32': 'value 32'}\n }\n\nFetch a single row data with selected columns (limit to ``column1`` and ``column2`` columns and all\ntheir qualifiers).\n\n.. code-block:: python\n\n t.fetch('my-key-1', ['column1', 'column2'])\n\nOutput.\n\n.. code-block::\n\n {\n 'column1': {'key11': 'value 11', 'key12': 'value 12', 'key13': 'value 13'},\n 'column2': {'key21': 'value 21', 'key22': 'value 22'},\n }\n\nNarrow the result set even more (limit to qualifiers ``key1`` and ``key2`` of column ``column1`` and\nqualifier ``key32`` of column ``column3``).\n\n.. code-block:: python\n\n t.fetch('my-key-1', {'column1': ['key11', 'key13'], 'column3': ['key32']})\n\nOutput.\n\n.. code-block::\n\n {\n 'column1': {'key11': 'value 11', 'key13': 'value 13'},\n 'column3': {'key32': 'value 32'}\n }\n\nNote, that you may also use the `native` way of naming the columns and cells (qualifiers). Example\nbelow does exactly the same as example above.\n\n.. code-block:: python\n\n t.fetch('my-key-1', ['column1:key11', 'column1:key13', 'column3:key32'])\n\nOutput.\n\n.. code-block::\n\n {\n 'column1': {'key11': 'value 11', 'key13': 'value 13'},\n 'column3': {'key32': 'value 32'}\n }\n\nIf you set the `perfect_dict` argument to False, you'll get the `native` data structure.\n\n.. code-block:: python\n\n t.fetch(\n 'my-key-1',\n ['column1:key11', 'column1:key13', 'column3:key32'],\n perfect_dict=False\n )\n\nOutput.\n\n.. code-block::\n\n {\n 'column1:key11': 'value 11',\n 'column1:key13': 'value 13',\n 'column3:key32': 'value 32'\n }\n\nBatch operations with table data\n-----------------------------------------\nBatch operations (insert and update) work similar to normal insert and update, but are done in a batch.\nYou are advised to operate in batch as much as possible.\n\nBatch insert\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIn the example below, we will insert 5000 records in a batch.\n\n.. code-block:: python\n\n data = {\n 'column1': {'key11': 'value 11', 'key12': 'value 12', 'key13': 'value 13'},\n 'column2': {'key21': 'value 21', 'key22': 'value 22'},\n }\n b = t.batch()\n if b:\n for i in range(0, 5000):\n b.insert('my-key-%s' % i, data)\n b.commit(finalize=True)\n\nOutput.\n\n.. code-block::\n\n {'method': 'PUT', 'response': [200], 'url': 'table3/bXkta2V5LTA='}\n\nBatch update\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIn the example below, we will update 5000 records in a batch.\n\n.. code-block:: python\n\n data = {\n 'column3': {'key31': 'value 31', 'key32': 'value 32'},\n }\n b = t.batch()\n if b:\n for i in range(0, 5000):\n b.update('my-key-%s' % i, data)\n b.commit(finalize=True)\n\nOutput.\n\n.. code-block::\n\n {'method': 'POST', 'response': [200], 'url': 'table3/bXkta2V5LTA='}\n\nNote: The table `batch` method accepts an optional `size` argument (int). If set, an auto-commit is fired\neach the time the stack is ``full``.\n\nTable data search (row scanning)\n-----------------------------------------\nTable scanning is in development (therefore, the scanning API will likely be changed). Result set returned is a\ngenerator.\n\nFetch all rows\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n t.fetch_all_rows()\n\nOutput.\n\n.. code-block::\n\n \n\nFetch rows with a filter given\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.. code-block:: python\n\n rf = '{\"type\": \"RowFilter\", \"op\": \"EQUAL\", \"comparator\": {\"type\": \"RegexStringComparator\", \"value\": \"^row_1.+\"}}'\n t.fetch_all_rows(with_row_id=True, filter_string=rf)\n\nOutput.\n\n.. code-block::\n\n \n\nMore information on table operations\n=========================================\nBy default, prior further execution of the `fetch`, `insert`, `update`, `remove` (table row operations)\nmethods, it's being checked whether the table exists or not. That's safe, but comes in cost of an\nextra (light though) HTTP request. If you're absolutely sure you want to avoid those checks, you can\ndisable them. It's possible to disable each type of row operation, by setting the following properties\nof the table instance to False: ``check_if_exists_on_row_fetch``, ``check_if_exists_on_row_insert``,\n``check_if_exists_on_row_remove`` and ``check_if_exists_on_row_update``.\n\n.. code-block:: python\n\n t.check_if_exists_on_row_fetch = False\n t.fetch('row1')\n\nIt's also possible to disable\nthem all at once, by calling the ``disable_row_operation_if_exists_checks`` method of the table instance.\n\n.. code-block:: python\n\n t.disable_row_operation_if_exists_checks()\n t.remove('row1')\n\nSame goes for table scanner operations. Setting the value of ``check_if_exists_on_scanner_operations``\nof a table instance to False, skips the checks for scanner operations.\n\n.. code-block:: python\n\n t.check_if_exists_on_scanner_operations = False\n t.fetch_all_rows(flat=True)\n\nException handling\n=========================================\nMethods that accept `fail_silently` argument are listed per class below.\n\nstarbase.client.connection.Connection\n-----------------------------------------\n- cluster_version\n- cluster_status\n- drop_table\n- tables\n- table_exists\n- version\n\nstarbase.client.table.Table\n-----------------------------------------\n- add_columns\n- batch\n- create\n- drop\n- drop_columns\n- exists\n- insert\n- fetch\n- fetch_all_rows\n- regions\n- remove\n- schema\n- update\n\nstarbase.client.table.Batch\n-----------------------------------------\n- commit\n- insert\n- update\n\nstarbase.client.transport.HttpRequest\n-----------------------------------------\nClass `starbase.client.table.Batch` accepts `fail_silently` as a constructor argument.\n\nMore examples\n=========================================\n\nShow software version\n-----------------------------------------\n.. code-block:: python\n\n print connection.version\n\nOutput.\n\n.. code-block::\n\n {u'JVM': u'Sun Microsystems Inc. 1.6.0_43-20.14-b01',\n u'Jersey': u'1.8',\n u'OS': u'Linux 3.5.0-30-generic amd64',\n u'REST': u'0.0.2',\n u'Server': u'jetty/6.1.26'}\n\nShow cluster version\n-----------------------------------------\n.. code-block:: python\n\n print connection.cluster_version\n\nOutput.\n\n.. code-block::\n\n u'0.94.7'\n\nShow cluster status\n-----------------------------------------\n.. code-block:: python\n\n print connection.cluster_status\n\nOutput.\n\n.. code-block::\n\n {u'DeadNodes': [],\n u'LiveNodes': [{u'Region': [{u'currentCompactedKVs': 0,\n ...\n u'regions': 3,\n u'requests': 0}\n\nShow table schema\n-----------------------------------------\n.. code-block:: python\n\n print table.schema()\n\nOutput.\n\n.. code-block::\n\n {u'ColumnSchema': [{u'BLOCKCACHE': u'true',\n u'BLOCKSIZE': u'65536',\n ...\n u'IS_ROOT': u'false',\n u'name': u'messages'}\n\nPrint table metadata\n-----------------------------------------\n.. code-block:: python\n\n print table.regions()\n\nFailed requests\n=========================================\nBy default, number of retries for a failed request is equal to zero. \nThat means, the request isn't being repeated if failed. It's possible\nto retry a failed request (for instance, in case of timeouts, etc).\n\nIn order to do that, two additional arguments of the\n``starbase.client.connection.Connection`` have been introduced:\n\n- retries (int)\n- retry_delay (int)\n\n.. code-block:: python\n\n c = Connection(\n retries = 3, # Retry 3 times\n retry_delay = 5 # Wait for 5 seconds between retries\n )\n\nBeware! Number of retries can cause performance issues (lower\nresponsiveness) of your application. At the moment, failed requests,\nsuch as deletion of non-existing column, row or a table, are handled\nin the same way and would all cause a retry. This likely will change\nin future (smarter detection of failures worth to retry a request).\n\nLicense\n=========================================\nGPL 2.0/LGPL 2.1\n\nSupport\n=========================================\nFor any issues contact me at the e-mail given in the `Author` section.\n\nAuthor\n=========================================\nArtur Barseghyan ", "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/barseghyanartur/starbase", "keywords": "hadoop,hbase,stargate,app,python", "license": "GPL 2.0/LGPL 2.1", "maintainer": null, "maintainer_email": null, "name": "starbase", "package_url": "https://pypi.org/project/starbase/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/starbase/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/barseghyanartur/starbase" }, "release_url": "https://pypi.org/project/starbase/0.3.3/", "requires_dist": null, "requires_python": null, "summary": "Python client for HBase Stargate REST server", "version": "0.3.3" }, "last_serial": 3472167, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "cb0e7e2fff1e2904f0167fc8ef83b69e", "sha256": "b64e6a0e3fac91c1082fd97d0f59fae6fb624b354ffbefd74e9d84617638645b" }, "downloads": -1, "filename": "starbase-0.1.tar.gz", "has_sig": false, "md5_digest": "cb0e7e2fff1e2904f0167fc8ef83b69e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26414, "upload_time": "2013-08-12T23:08:58", "url": "https://files.pythonhosted.org/packages/a8/b7/715e47c2474e9b511980275af89abddf3c4c71dcbf2bb9843d5354dceb71/starbase-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "05ed6f634bf82582d51a450288c571db", "sha256": "6985a2d90da3322d6e071aefe03ee1d93e2e1bfbec4d35075005f26aae4929c5" }, "downloads": -1, "filename": "starbase-0.2.tar.gz", "has_sig": false, "md5_digest": "05ed6f634bf82582d51a450288c571db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26852, "upload_time": "2013-09-14T10:35:50", "url": "https://files.pythonhosted.org/packages/c6/05/8261e806e5b75f3a1573b262ce2ef5bc19084dda9b2e244a804630d9fd51/starbase-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3fd62a0b45b34f82d27bc55e69ede00d", "sha256": "7d20454fe29ad67a7d38aa207ef73e64ae1b03f3129724d701430cca7909cf7f" }, "downloads": -1, "filename": "starbase-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3fd62a0b45b34f82d27bc55e69ede00d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28740, "upload_time": "2013-10-18T09:52:04", "url": "https://files.pythonhosted.org/packages/e5/3b/da08c989c17d9834f1121e069e82030ed75c63ea9a86f42be86d713aaf57/starbase-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c17ea113c6e6c922b60c081d90db12bc", "sha256": "670ea679424aca8ae6b1893bf560b7d5fa9da29034dbecb62d7ed5277d174ae8" }, "downloads": -1, "filename": "starbase-0.2.2.tar.gz", "has_sig": false, "md5_digest": "c17ea113c6e6c922b60c081d90db12bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28906, "upload_time": "2013-10-26T12:10:06", "url": "https://files.pythonhosted.org/packages/66/da/b5544cc1405f0e869ad7d2fdef81554417a29bcdd42c8c2775106bd2a51a/starbase-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "0b75b99f80d63b14746d030b66b0f0ef", "sha256": "e95c169f5771f400d5ae4ae33489453365c52df8add071b2bc30212cfe6a28e7" }, "downloads": -1, "filename": "starbase-0.2.3.tar.gz", "has_sig": false, "md5_digest": "0b75b99f80d63b14746d030b66b0f0ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28989, "upload_time": "2013-10-26T17:44:53", "url": "https://files.pythonhosted.org/packages/88/21/b208170441ea53b6f691d5b9c0ecc06390941176baf80de7b0663078752d/starbase-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "b1e83bddf47cc1e3d5ec1dc3f3c0cc7f", "sha256": "7db28e4c5af187aefb2731b5560122bf754cfee97a52cdb879c80b19bf0b3654" }, "downloads": -1, "filename": "starbase-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b1e83bddf47cc1e3d5ec1dc3f3c0cc7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28925, "upload_time": "2013-11-09T12:07:53", "url": "https://files.pythonhosted.org/packages/11/23/965d7cd112fa752571be433eede38fa97e434b082f318b78a9d1a57364b2/starbase-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "b38a3a24142f4d57e78aca2253aa637d", "sha256": "b2c90937d3311b4590351976e02c22a04a91a85703daef8ea45834bdea3f0779" }, "downloads": -1, "filename": "starbase-0.2.5.tar.gz", "has_sig": false, "md5_digest": "b38a3a24142f4d57e78aca2253aa637d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49181, "upload_time": "2013-11-15T19:21:43", "url": "https://files.pythonhosted.org/packages/29/34/44481032495aa5c1d64202b2e856f5db754f1214972ff8918d7cf7938de7/starbase-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "01803fce018d8e18282ba89bac3a477c", "sha256": "d5d5c4056921350f64394f3c616d52ae1b4e2827707fb0766f57594512693f71" }, "downloads": -1, "filename": "starbase-0.2.6.tar.gz", "has_sig": false, "md5_digest": "01803fce018d8e18282ba89bac3a477c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49420, "upload_time": "2013-12-05T17:53:08", "url": "https://files.pythonhosted.org/packages/cf/2f/5d4f16cf58a837c7a92d612c74081387bccfa20fe6cec769b3f8ec0f95ba/starbase-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "aca8ac4acb6b7f2f162d4feb73da94d4", "sha256": "c0cb902506017548eb6c0f525cc74fe19b9dc37f1aa78625b21ada635d759876" }, "downloads": -1, "filename": "starbase-0.2.7.tar.gz", "has_sig": false, "md5_digest": "aca8ac4acb6b7f2f162d4feb73da94d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51529, "upload_time": "2013-12-16T20:55:49", "url": "https://files.pythonhosted.org/packages/22/97/1999a75fd7c2a727f19fede2fd60bf21c7c9351f75c98899b094ca654ecf/starbase-0.2.7.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "e2864d94eb8e6a2e45de1caa14e583a1", "sha256": "18ef9ca475a1566d6656258abae6499645864e00c7371829b964da9ff377e9bd" }, "downloads": -1, "filename": "starbase-0.3.tar.gz", "has_sig": false, "md5_digest": "e2864d94eb8e6a2e45de1caa14e583a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53254, "upload_time": "2014-03-10T23:50:43", "url": "https://files.pythonhosted.org/packages/50/ef/a3fb09730472ab7cb91fea78b237e4644f867bb51761fe0e3c2dc175d20b/starbase-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "fe7c8550b75c465c91b1a6540325c631", "sha256": "66a2bb18d8dd0f4225888c828e9a9d091b1c4694b1ba23a9c068072eb9fd79bd" }, "downloads": -1, "filename": "starbase-0.3.1.tar.gz", "has_sig": false, "md5_digest": "fe7c8550b75c465c91b1a6540325c631", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53785, "upload_time": "2014-06-05T20:50:45", "url": "https://files.pythonhosted.org/packages/a1/ad/fe11607e089fb1e80195a894bcdcaba6a6799739c5f6481242941ffe8347/starbase-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "dfa3d92eeb75b59bc8dc19943a739f53", "sha256": "5c466a0958264f858002393f078605e82385f04b1b552d2840e352f0a1544fe1" }, "downloads": -1, "filename": "starbase-0.3.2.tar.gz", "has_sig": false, "md5_digest": "dfa3d92eeb75b59bc8dc19943a739f53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55606, "upload_time": "2014-09-09T22:55:43", "url": "https://files.pythonhosted.org/packages/c4/80/548b93c6787d199935aeeeaf7ac426616b49f16665f1dc76240c61439d58/starbase-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "b92e5137c4604e6b008466f0536b1156", "sha256": "347a515798c29dacdb1b8012ee8f065223add2f90ad329e7fa897b5df9b21f28" }, "downloads": -1, "filename": "starbase-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b92e5137c4604e6b008466f0536b1156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51059, "upload_time": "2014-10-16T15:15:14", "url": "https://files.pythonhosted.org/packages/34/b8/0a52074c4a7dcde4e8d39757d0bd8358e190821b021ffeb751e8edd0512a/starbase-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b92e5137c4604e6b008466f0536b1156", "sha256": "347a515798c29dacdb1b8012ee8f065223add2f90ad329e7fa897b5df9b21f28" }, "downloads": -1, "filename": "starbase-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b92e5137c4604e6b008466f0536b1156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51059, "upload_time": "2014-10-16T15:15:14", "url": "https://files.pythonhosted.org/packages/34/b8/0a52074c4a7dcde4e8d39757d0bd8358e190821b021ffeb751e8edd0512a/starbase-0.3.3.tar.gz" } ] }