{ "info": { "author": "Serj Zavadsky", "author_email": "fevral13@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Database", "Topic :: Database :: Database Engines/Servers", "Topic :: Utilities" ], "description": "sqlibrist\n=========\n\nSqlibrist is command-line tool, made for developers, who do not use ORM to manage their database\nstructure. Programming database objects and deploying them to production\nis not easy. Naive approach is to manually write patches with SQL statements and then replay\nthem on others DB instances. This, being simple and straightforward, may get tricky\nwhen your database structure grows in size and have numerous inter-dependent\nobjects.\n\nSqlibrist in essense is tool to make the process of creating SQL patches much more\neasy, and as side-effect it proposes a way to organize your SQL code. It does not\ndictate design desisions, or stands on your way when you do something wrong\n(notorious shooting in foot). All database objects are described declaratively\nin separate files in the form of ``CREATE TABLE`` or ``CREATE FUNCTION``, having\ndependency instructions.\n\nYou may think of sqlibrist as Version Control System for database. The whole thing\nis inspired by Sqitch (see Alternatives below) and Django Migrations (may be you\nremember Django South). Every time you invoke ``makemigration`` command, snapshot\nof current scheme is made and compared with previous snapshot. Then, SQL patch\nis created with instructions to recreate all changed objects cascadely with their\ndependencies, create new or remove deleted. In the latter case, sqlibrist will not\nlet you delete object that has left dependants.\n\nCurrently PostgreSQL is supported. MySQL support is experimental, and not well-tested\nyet.\n\n\nPlatform compatibility\n======================\n\nLinux, Mac OS, Windows. See installation instructions for each below.\n\n\nRequirements\n============\n\nPython dependencies:\n\n- PyYAML\n- psycopg2 (optional)\n- mysql-python (optional)\n\nInstallation\n============\n\nLinux\n-----\n\n**Ubuntu/Debian**\n\nFirst install required libraries::\n\n $ sudo apt-get install python-pip python-dev libyaml-dev\n $ sudo apt-get install libmysqlclient-dev # for MySQL\n $ sudo apt-get install libpq-dev # PostgreSQL\n\nSqlibrist can be installed into virtualenv::\n\n $ pip install sqlibrist\n\nor system-wide::\n\n $ sudo pip install sqlibrist\n\n**Fedora/CentOS/RHEL**\n\nFirst install required libraries (replace ``dnf`` to ``yum`` if you are using\npre-dnf package manager)::\n\n $ sudo dnf install python-devel python-pip libyaml-devel\n $ sudo dnf install postgresql-devel # PostgreSQL\n\n $ sudo dnf install mariadb-devel # for MariaDB\n or\n $ sudo dnf install mysql++-devel # for MySQL\n\nSqlibrist can be installed into virtualenv::\n\n $ pip install sqlibrist\n\nor system-wide::\n\n $ sudo pip install sqlibrist\n\n\nMacOS\n-----\n\nFirst install required libraries::\n\n $ sudo easy_install pip\n $ brew install mysql # for MySQL\n $ brew install postgres # PostgreSQL\n\n\nSqlibrist can be installed into virtualenv::\n\n $ pip install sqlibrist\n\nor system-wide::\n\n $ sudo pip install sqlibrist\n\nAlso you need to install database dependencies\nMySQL::\n\n $ pip install mysql-python\n\nPostgreSQL::\n\n $ pip install psycopg2\n\nWindows\n-------\nTODO\n\nTutorial\n========\n\nLet's create simple project and go through typical steps of DB schema manageent.\nThis will be small webshop.\n\nCreate empty directory::\n\n $ mkdir shop_schema\n $ cd shop_schema\n\nThen we need to create sqlibrist database structure, where we will keep\nschema and migrations::\n\n $ sqlibrist init\n Creating directories...\n Done.\n\nYou will get the following DB structure::\n\n shop_schema\n sqlibrist.yaml\n migrations\n schema\n constraints\n functions\n indexes\n tables\n triggers\n types\n views\n\nIn ``sqlibrist.yaml`` you will configure DB connections::\n\n ---\n default:\n engine: pg\n user: \n name: \n password: \n # host: 127.0.0.1\n # port: 5432\n\n``host`` and ``port`` are optional.\n\nOnce you configured DB connection, test if is correct::\n\n $ sqlibrist test_connection\n Connection OK\n\nNext we need to create sqlibrist migrations table::\n\n $ sqlibrist initdb\n Creating db...\n Creating schema and migrations log table...\n\n Done.\n\nNow we are ready to build our DB schema.\n\nCreate file ``shop_schema/schema/tables/user.sql``::\n\n --UP\n CREATE TABLE \"user\" (\n id SERIAL PRIMARY KEY,\n name TEXT,\n password TEXT);\n\nThe first line ``--UP`` means that the following are SQL statements for 'forward'\nmigration. The opposite is optional ``--DOWN``, which contains instructions for reverting.\nTo be safe, and not accidentally drop any table with your data, we will not include\nanything like DROP TABLE. Working with table upgrades and ``--DOWN`` is on the way\nbelow.\n\n``shop_schema/schema/tables/product.sql``::\n\n --UP\n CREATE TABLE product (\n id SERIAL PRIMARY KEY,\n name TEXT,\n price MONEY);\n\n``shop_schema/schema/tables/order.sql``::\n\n --REQ tables/user\n --UP\n CREATE TABLE \"order\" (\n id SERIAL PRIMARY KEY,\n user_id INTEGER REFERENCES \"user\"(id),\n date DATE);\n\nImportant here is the ``--REQ tables/user`` statement. It tells sqlibrist, that\n``order`` table depends on ``user`` table. This will guarantee, that ``user`` will\nbe created before ``order``.\n\n``shop_schema/schema/tables/order_product.sql``::\n\n --REQ tables/order\n --UP\n CREATE TABLE order_product (\n id SERIAL PRIMARY KEY,\n order_id INTEGER REFERENCES \"order\"(id),\n product_id INTEGER REFERENCES product(id),\n quantity INTEGER);\n\nOk, now let's create our first migration::\n\n $ sqlibrist makemigration -n 'initial'\n Creating:\n tables/user\n tables/product\n tables/order\n tables/order_product\n Creating new migration 0001-initial\n\nNew files were created in ``shop_schema/migrations/0001-initial``::\n\n up.sql\n down.sql\n schema.json\n\n``up.sql`` contains SQL to apply your changes (create tables), ``down.sql`` has nothing\nnotable, since our .sql files have no ``--DOWN`` section, and the ``schema.json``\nhas snapshot of current schema.\n\nIf you want to make more changes to the schema files prior to applying newly created\nmigration, delete the directory with those 3 files, in our case ``0001-initial``.\n\nYou are free to review and edit ``up.sql`` and ``down.sql``, of course if you know what\nyou are doing. **DO NOT edit schema.json**.\n\nNow go ahead and apply our migration::\n\n $ sqlibrist migrate\n Applying migration 0001-initial... done\n\nWell done! Tables are created, but let's do something more interesting.\n\nWe will create view that shows all user orders with order total:\n\n``shop_schema/schema/views/user_orders.sql``::\n\n --REQ tables/user\n --REQ tables/order\n --REQ tables/product\n --REQ tables/order_product\n\n --UP\n CREATE VIEW user_orders AS SELECT\n u.id as user_id,\n o.id as order_id,\n o.date,\n SUM(p.price*op.quantity) AS total\n\n FROM \"user\" u\n INNER JOIN \"order\" o ON u.id=o.user_id\n INNER JOIN order_product op ON o.id=op.order_id\n INNER JOIN product p ON p.id=op.product_id\n\n GROUP BY o.id, u.id;\n\n --DOWN\n DROP VIEW user_orders;\n\n... and function to return only given user's orders:\n\n``shop_schema/schema/functions/get_user_orders.sql``::\n\n --REQ views/user_orders\n\n --UP\n CREATE FUNCTION get_user_orders(_user_id INTEGER)\n RETURNS SETOF user_orders\n LANGUAGE SQL AS $$\n\n SELECT * FROM user_orders\n WHERE user_id=_user_id;\n\n $$;\n\n --DOWN\n DROP FUNCTION get_user_orders(INTEGER);\n\nNext create new migration and apply it::\n\n $ sqlibrist makemigration -n 'user_orders view and function'\n Creating:\n views/user_orders\n functions/get_user_orders\n Creating new migration 0002-user_orders view and function\n\n $ sqlibrist migrate\n Applying migration 0002-user_orders view and function... done\n\nWe have four tables, one view and one function.\n\nNow you want to add one more field in the ``user_orders`` view. There can be couple\nof issues here:\n\n* we could try to drop and create updated view, but the database server will\n complain, that *get_user_orders* function depends on droppable view;\n\n* we could be smart and create view with ``CREATE OR REPLACE VIEW user_orders...``,\n however single view's fields and their types make separate type, and the\n function ``get_user_orders`` returns that type. We can't simply change view type\n without recreating the function.\n\nThis is where sqlibrist comes to help. Add one more field ``SUM(op.quantity) as order_total``\nto the ``user_orders`` view::\n\n --REQ tables/user\n --REQ tables/order\n --REQ tables/product\n --REQ tables/order_product\n\n --UP\n CREATE VIEW user_orders AS SELECT\n u.id as user_id,\n o.id as order_id,\n o.date,\n SUM(p.price*op.quantity) AS total,\n SUM(op.quantity) as order_total\n\n FROM \"user\" u\n INNER JOIN \"order\" o ON u.id=o.user_id\n INNER JOIN order_product op ON o.id=op.order_id\n INNER JOIN product p ON p.id=op.product_id\n\n GROUP BY o.id, u.id;\n\n --DOWN\n DROP VIEW user_orders;\n\nWe can see, what was changed from the latest schema snapshot::\n\n $ sqlibrist -V diff\n Changed items:\n views/user_orders\n ---\n\n +++\n\n @@ -2,7 +2,8 @@\n\n u.id as user_id,\n o.id as order_id,\n o.date,\n - SUM(p.price*op.quantity) AS total\n + SUM(p.price*op.quantity) AS total,\n + SUM(op.quantity) as total_quantity\n\n FROM \"user\" u\n INNER JOIN \"order\" o ON u.id=o.user_id\n\nNow let's make migration::\n\n $ sqlibrist makemigration\n Updating:\n dropping:\n functions/get_user_orders\n views/user_orders\n creating:\n views/user_orders\n functions/get_user_orders\n Creating new migration 0003-auto\n\nYou can see, that sqlibrist first drops ``get_user_orders`` function, after that\n``user_orders`` view does not have dependent objects and can be dropped too.\nThen view and function are created in order, opposite to dropping.\nApply our changes::\n\n $ sqlibrist migrate\n Applying migration 0003-auto... done\n\nLast topic is to make change to table structure. Since we did not add ``--DROP`` section\nto our tables, any change has to be made manually. This is done in several steps:\n\n1. Edit CREATE TABLE definition to reflect new structure;\n2. Generate new migration with ``makemigration`` command;\n3. Manually edit new migration's ``up.sql`` with ALTER TABLE instructions.\n\nTo demonstrate this, let's add field ``type text`` to the ``product`` table. It will\nlook like this:\n\n``shop_schema/schema/tables/product.sql``::\n\n --UP\n CREATE TABLE product (\n id SERIAL PRIMARY KEY,\n name TEXT,\n \"type\" TEXT,\n price MONEY);\n\nThis was #1. Next create new migration::\n\n $ sqlibrist makemigration -n 'new product field'\n Updating:\n dropping:\n functions/get_user_orders\n views/user_orders\n creating:\n views/user_orders\n functions/get_user_orders\n Creating new migration 0004-new product field\n\nPlease, pay attention here, that even though we changed product table definition,\n``tables/product`` is not in migration process, but ALL dependent objects are recreated.\nThis behavior is intended. This was #2.\n\nNow #3: open ``shop_schema/migrations/0004-new product field/up.sql`` with your editor\nand look for line 12 with text ``-- ==== Add your instruction here ====``. This is\nthe point in migration when all dependent objects are dropped and you can issue\nALTER TABLE instructions.\n\nJust below this line paste following::\n\n ALTER TABLE product\n ADD COLUMN \"type\" TEXT;\n\nYour ``up.sql`` will look like this::\n\n -- begin --\n DROP FUNCTION get_user_orders(INTEGER);\n -- end --\n\n\n -- begin --\n DROP VIEW user_orders;\n -- end --\n\n\n -- begin --\n -- ==== Add your instruction here ====\n ALTER TABLE product\n ADD COLUMN \"type\" TEXT;\n -- end --\n\n\n -- begin --\n CREATE VIEW user_orders AS SELECT\n u.id as user_id,\n o.id as order_id,\n o.date,\n SUM(p.price*op.quantity) AS total,\n SUM(op.quantity) as total_quantity\n\n FROM \"user\" u\n INNER JOIN \"order\" o ON u.id=o.user_id\n INNER JOIN order_product op ON o.id=op.order_id\n INNER JOIN product p ON p.id=op.product_id\n\n GROUP BY o.id, u.id;\n -- end --\n\n\n -- begin --\n CREATE FUNCTION get_user_orders(_user_id INTEGER)\n RETURNS SETOF user_orders\n LANGUAGE SQL AS $$\n\n SELECT * FROM user_orders\n WHERE user_id=_user_id;\n\n $$;\n -- end --\n\nMigration text is self-explanatory: drop function and view, alter table and then\ncreate view and function, with respect to their dependencies.\n\nFinally, apply your changes::\n\n $ sqlibrist migrate\n Applying migration 0004-new product field... done\n\n\nRules of thumb\n==============\n\n* **do not add CASCADE to DROP statements, even when dropping views/functions/indexes**.\nYou may and will implicitly drop table(s) with your data;\n\n* **avoid circular dependencies**. If you create objects that depend on each other\nin circle, sqlibrist will not know, how to update them. I bet, you will try to\ndo so, but migration will not be created and sqlibrist will show you warning and\ndependency path;\n\n* **do not create --DOWN sections for tables**. Manually write ALTER TABLE instructions\nas described in the Tutorial;\n\n* **always test migrations on your test database before applying them to production**.\n\n\nDjango integration\n==================\n\nSqlibrist has a very small application to integrate itself into your Django\nproject and access DB configuration.\n\nInstallation\n------------\n\nAdd ``'django_sqlibrist'`` to INSTALLED_APPS\n\nSettings\n--------\n\n``SQLIBRIST_DIRECTORY`` - Path to the directory with schema and migrations files.\nDefaults to project's BASE_DIR/sql\n\nUsage\n-----\n::\n\n $ python manage.py sqlibrist [options]\n\nIf you want your tables to be accessible from Django ORM and/or for using\nDjango Admin for these tables, add following attributes to the model's ``Meta`` class:\n::\n\n class SomeTable(models.Model):\n field1 = models.CharField()\n ...\n class Meta:\n managed = False # will tell Django to not create migrations for that table\n table_name = 'sometable' # name of your table\n\nIf primary key has other name than ``id`` and type not Integer, add that field to\nmodel class with ``primary_key=True`` argument, for example::\n\n my_key = models.IntegerField(primary_key=True)\n\nMigrating existing models\n-------------------------\nTODO:\n\n\nAlternatives\n============\n\nSqlibrist is not new concept, it has a lot of alternatives, most notable, I think,\nis [sqitch](http://sqitch.org/). It is great tool, with rich development history and\ncommunity arount it. I started using it at first, however it did not make me completely\nhappy. My problem with sqitch was pretty hard installation progress\n(shame on me, first of all). It is written in Perl and has huge number of dependencies.\nFor man, unfamiliar with Perl pachage systems, it was quite a challenge to\ninstall sqitch on 3 different Linux distributions: Fedora, Ubuntu and Arch.\nIn addition, I found sqitch's dependency tracking being complicated and unobvious\nto perform relatively simple schema changes. Don't get me wrong - I am not\nadvocating you against using sqitch, you should try it yourself.\n\n\nTODO\n====\n\n- documentation\n * django_sqlibrist: Migrating existing models\n * detailed info on all commands\n\nChangelog\n=========\n\n0.1.10 string encoding fix\n\n0.1.9 config file parsing fixed, MAC installation added (thanks to https://github.com/tolyadouble); django integration improved\n\n0.1.8 fixes\n\n0.1.7 fixes\n\n0.1.6 fixes\n\n0.1.5 django_sqlibrist takes engine and connection from django project settings\n\n0.1.4 django_sqlibrist configurator fixed\n\n0.1.3 django_sqlibrist configurator fixed\n\n0.1.2 LazyConfig fixed\n\n0.1.1 fixed loading config file\n\n0.1.0 django_sqlibrist gets DB connection settings from Django project's settings instead of config file\n\n 0.0.7 django_sqlibrist moved to separate package and is importable in settings.py as \"django_sqlibrist\"", "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/condograde/sqlibrist", "keywords": "sqlibrist,db structure,sql,schema migration", "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "sqlibrist", "package_url": "https://pypi.org/project/sqlibrist/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sqlibrist/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/condograde/sqlibrist" }, "release_url": "https://pypi.org/project/sqlibrist/0.1.10/", "requires_dist": null, "requires_python": null, "summary": "Simple tool for managing DB structure, automating patch creation for DB structure migration.", "version": "0.1.10" }, "last_serial": 2326840, "releases": { "0.0.6": [ { "comment_text": "", "digests": { "md5": "2cef4bc32edce17a69f9f4fef321b2ab", "sha256": "89e956166c57b2eb437fff462bf9c91d4d49f2bbd58266e308d8285c8ae3dc02" }, "downloads": -1, "filename": "sqlibrist-0.0.6.tar.gz", "has_sig": false, "md5_digest": "2cef4bc32edce17a69f9f4fef321b2ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8555, "upload_time": "2016-03-20T10:24:03", "url": "https://files.pythonhosted.org/packages/17/f7/a1e6245c2a224c9f60fc3681159d57404305f9ecffc4d53e0a283854f1ab/sqlibrist-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "520cc7ad99b5f72993a5324589d5b1bb", "sha256": "d38c4d291d3b5f32579d7cda31ad80345975df6a21e5911f49f7e2b11e3043ab" }, "downloads": -1, "filename": "sqlibrist-0.0.7.tar.gz", "has_sig": false, "md5_digest": "520cc7ad99b5f72993a5324589d5b1bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10676, "upload_time": "2016-03-20T15:44:20", "url": "https://files.pythonhosted.org/packages/1e/8d/63093f13b174c87f1738e9fde88cdfbc43965fb206f3a391ee46e9ba25a5/sqlibrist-0.0.7.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "b00b7b4444ffa0b4631300eb7d2f500b", "sha256": "01caf35fa9a1751d3caa60c3f004f19a14b75278d36c310ba9d604a749400d4b" }, "downloads": -1, "filename": "sqlibrist-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b00b7b4444ffa0b4631300eb7d2f500b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16503, "upload_time": "2016-03-21T09:50:04", "url": "https://files.pythonhosted.org/packages/df/c0/64d23a96c011cd74b747596ab32c1a9014d34bdeedb4f90acace95b8a259/sqlibrist-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0e9fad75e12e279a563d32e35f5bd5af", "sha256": "4a0bd54607323a4d64fef5065da36c5d59b24b3a60964c38ade6cdb2db3d7e77" }, "downloads": -1, "filename": "sqlibrist-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0e9fad75e12e279a563d32e35f5bd5af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17268, "upload_time": "2016-03-22T12:16:18", "url": "https://files.pythonhosted.org/packages/78/d2/7fcb7fd78dc9ab2576621417a8f62ab38a6f54a145e31584f195b37a76b2/sqlibrist-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "7fba357c82878758c4c3b72d919ddd18", "sha256": "5f11eaeafc33285447c9e50f96f665f44daa4e892a8a9d8ea01ea0844fa37285" }, "downloads": -1, "filename": "sqlibrist-0.1.10.tar.gz", "has_sig": false, "md5_digest": "7fba357c82878758c4c3b72d919ddd18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17940, "upload_time": "2016-09-06T08:37:24", "url": "https://files.pythonhosted.org/packages/6b/7f/59cde541cea4ea63d042562ed3d4003f2e0d16e5422068accf04f86edc52/sqlibrist-0.1.10.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "29cf6e2940fbd66f841e2445fdb14be6", "sha256": "5e25a90fe7c699a69537f6dbb918410a57d9821b820f04c0d9efcc10ea5de2f8" }, "downloads": -1, "filename": "sqlibrist-0.1.2.tar.gz", "has_sig": false, "md5_digest": "29cf6e2940fbd66f841e2445fdb14be6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17323, "upload_time": "2016-03-23T15:53:24", "url": "https://files.pythonhosted.org/packages/9d/d2/a1c086fd0d45ecf726ba69fa0d4d8f04409c5e9bd0ba262b921f4c231df4/sqlibrist-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "1f2cd96789e3d56608e2cf322036adb7", "sha256": "1065c5a5e1a4a8c29ec1a1fe99031387ead5941163c739f44703553f87700222" }, "downloads": -1, "filename": "sqlibrist-0.1.3.tar.gz", "has_sig": false, "md5_digest": "1f2cd96789e3d56608e2cf322036adb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17332, "upload_time": "2016-03-23T15:59:58", "url": "https://files.pythonhosted.org/packages/b7/03/56aadc20d7a456ae4dc21046fe81b2a4a25db921f92d6743f592268046d3/sqlibrist-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "7e0e302e81740cabea1bb37e93140aa9", "sha256": "52975d4e2ac952ca0ad1bc48e26cadb0c3595ee7cc2312be9ad480a2dd0d7453" }, "downloads": -1, "filename": "sqlibrist-0.1.4.tar.gz", "has_sig": false, "md5_digest": "7e0e302e81740cabea1bb37e93140aa9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17347, "upload_time": "2016-03-24T07:31:37", "url": "https://files.pythonhosted.org/packages/f7/e8/8e69934488d827d844803aed5013bffbe3e9600a21e9b5761ee9a805c8ef/sqlibrist-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "17a9d9112df0d466d95801974e7e2f15", "sha256": "0edd32287bb1a1f3eb5ac135130455d853b668fbee1a3e2a3b6f56671199bb82" }, "downloads": -1, "filename": "sqlibrist-0.1.5.tar.gz", "has_sig": false, "md5_digest": "17a9d9112df0d466d95801974e7e2f15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17359, "upload_time": "2016-04-04T18:10:50", "url": "https://files.pythonhosted.org/packages/3d/30/5b09157d42a5fb11ebd69af5c70414a2096ec57a65b49e52e5a7df252ba8/sqlibrist-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "654f9c88a5c1f2fd7be25a61f1d16386", "sha256": "a9728cc6ffdcab06e721a4792e54bcc3350ce0d1fb9db805514acc047fb3440d" }, "downloads": -1, "filename": "sqlibrist-0.1.6.tar.gz", "has_sig": false, "md5_digest": "654f9c88a5c1f2fd7be25a61f1d16386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17334, "upload_time": "2016-04-04T18:15:15", "url": "https://files.pythonhosted.org/packages/4e/42/9c37dd9e969e0560b13eb803f115c93b097e96e0618200aec1f193f01571/sqlibrist-0.1.6.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "5b00d097b26db4ff190259eee6fd71cf", "sha256": "2492c4a3a4532710a2b5fff694dc6ddcb90f1c8c9c99e83617da9e1029c329a8" }, "downloads": -1, "filename": "sqlibrist-0.1.8.tar.gz", "has_sig": false, "md5_digest": "5b00d097b26db4ff190259eee6fd71cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17385, "upload_time": "2016-04-20T13:26:51", "url": "https://files.pythonhosted.org/packages/94/a2/b58ad6c61f3342fe095780c132e60558ed85f690d57d1bd10e0adfb3b55f/sqlibrist-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "52c84d7063fabe608aab044e873a3601", "sha256": "d011bbaea5dcab6cab9ade5d91ea1e472f981759d70949ecbcf1e297879cb60e" }, "downloads": -1, "filename": "sqlibrist-0.1.9.tar.gz", "has_sig": false, "md5_digest": "52c84d7063fabe608aab044e873a3601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17930, "upload_time": "2016-04-22T09:05:34", "url": "https://files.pythonhosted.org/packages/ec/11/40d929a0cbd03e1abed9a2fb0e491876faef889fd6dcb82e05464d91b1dc/sqlibrist-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7fba357c82878758c4c3b72d919ddd18", "sha256": "5f11eaeafc33285447c9e50f96f665f44daa4e892a8a9d8ea01ea0844fa37285" }, "downloads": -1, "filename": "sqlibrist-0.1.10.tar.gz", "has_sig": false, "md5_digest": "7fba357c82878758c4c3b72d919ddd18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17940, "upload_time": "2016-09-06T08:37:24", "url": "https://files.pythonhosted.org/packages/6b/7f/59cde541cea4ea63d042562ed3d4003f2e0d16e5422068accf04f86edc52/sqlibrist-0.1.10.tar.gz" } ] }