{ "info": { "author": "Christopher Perkins", "author_email": "chris@percious.com", "bugtrack_url": null, "classifiers": [], "description": "BootAlchemy\n=============\nBootAlchemy is a tool which allows you to load data into an SQL\ndatabase via yaml-formatted text. You provide bootalchemy with set\nof mapped objects, and some text, and it will push objects\nwith that text into the database. In addition to all of the functionality\nYAML provides, BootAlchemy can also de-obfuscate relationships and\nadd those to the database as well.\n\nCurrent Version\n------------------\n|version|\n\nRequirements\n---------------\n* SqlAlchemy>=0.5\n* PyYaml\n\nGetting Started With BootAlchemy\n---------------------------------\nLet us first consider this model, assume it is defined in a module called \"model\"::\n\n \n movie_directors_table = Table('movie_directors', metadata,\n Column('movie_id', Integer, ForeignKey('movies.movie_id'), primary_key = True),\n Column('director_id', Integer, ForeignKey('directors.director_id'), primary_key = True))\n \n class Genre(DeclarativeBase):\n __tablename__ = \"genres\"\n genre_id = Column(Integer, primary_key=True)\n name = Column(String(100))\n description = Column(String(300))\n \n class Movie(DeclarativeBase):\n __tablename__ = \"movies\"\n movie_id = Column(Integer, primary_key=True)\n title = Column(String(100), nullable=False)\n description = Column(Text, nullable=True)\n genre_id = Column(Integer, ForeignKey('genres.genre_id'))\n genre = relation('Genre', backref='movies')\n release_date = Column(Date, nullable=True)\n \n class Director(DeclarativeBase):\n __tablename__ = \"directors\"\n director_id = Column(Integer, primary_key=True)\n title = Column(String(100), nullable=False)\n movies = relation(Movie, secondary=movie_directors_table, backref=\"directors\")\n\nSimple Example\n----------------\nFirst let's explore the structure used to push data into the database. We\nwill use plain python to load in the data::\n\n from bootalchemy.loader import Loader\n data = [{'Genre':[{'name': \"action\", \n 'description':'Car chases, guns and violence.'\n }\n ]\n }\n ]\n\n\n loader = Loader(model)\n loader.from_list(session, data)\n \n genres = session.query(Genre).all()\n print [(genre.name, genre.description) for genre in genres]\n\nproduces::\n\n [('action', 'Car chases, guns and violence.')]\n\nNote that while the data is in the session, it has not yet been commited\nto the database. Boot alchemy does not commit by default but can be\nmade to do so.\n\nThe BootAlchemy Data Structure\n-----------------------------------\n\nThe basic structure of a BootAlchemy data structure is like this::\n\n [\n { #start of the first grouping\n ObjectName:[ #start of objects of type ObjectName\n {'attribute':'value', 'attribute':'value' ... more attributes},\n {'attribute':'value', 'attribute':'value' ... more attributes},\n ...\n } \n ]\n ObjectName: [ ... more attr dicts here ... ]\n [commit:None] #optionally commit at the end of this grouping\n [flush:None] #optionally flush at the end of this grouping\n }, #end of first grouping\n { #start of the next grouping\n ...\n } #end of the next grouping\n ]\n \nThe basic structure is a list of dictionaries. Each dictionary represents a \"group\" of objects.\nEach object can have one or more records associated with it.\n\nFlushing and Committing\n------------------------\nIf you provide keys with the name commit and flush to the grouping, the session will \nbe committed or flushed accordingly. One thing to note is that if you define any \nrelationships within a record, the grouping will be flushed at that point. \nThere is no way to avoid this flush.\n\nAbout Your Model\n------------------\n\nBootAlchemy expects that your models have the ability to pass a set of keyword pairs into\nyour objects. DeclarativeBase does this automatically, but if you have the standard SqlAlchemy object\ndefinitions, you may want to augment them with a superclass that looks something like this::\n\n class DBObject(object):\n \"\"\"\n This is the DBObject class which all other model classes rely on.\n It allows us to instantiate an object with attributes simply by passing\n them into the constructor.\n \n \"\"\"\n def __init__(self, **kw):\n for item, value in kw.iteritems():\n setattr(self, item, value)\n\nStoring References (think Autoincrement)\n-----------------------------------------\nYou can store references within your records and then use them later. For instance, let's\nstore the genre_id, and use it in a movie define.::\n\n data = [{'Genre':[{'genre_id':'&scifi_id',\n 'name': \"sci-fi\", \n 'description':'Science Fiction, see: 42'\n }\n ],\n 'flush':None},\n {'Movie':[{\"title\": \"Back to the Future\", \n \"description\": \"In 1985, Doc Brown invents time travel; in 1955,\\\n Marty McFly accidentally prevents his parents from\\\n meeting, putting his own existence at stake\",\n \"release_date\": \"1985-04-03\", \n \"genre_id\": '*scifi_id'}],\n 'flush':None\n }]\n \n loader.from_list(session, data)\n movies = session.query(Movie).all()\n print [(movie.title, movie.genre.name) for movie in movies]\n\nproduces::\n\n [('Back to the Future', 'sci-fi')]\n\nIf you provide a string with a '&' as one of the attribute values,\nboot alchemy will store the value of this item in a reference dictionary. This is then\nretrieved when you provide a string starting with '*'. The reference is set after the\nobject is flushed to the database, which means that if you have an auto-incrementing\nfield, it will be set to the incremented value.\nNotice that the genre was populated within the movie object. This is more of an affect of the\nORM than of bootalchemy, but we will see next how boot alchemy itself takes advantage of the\ninner workings of the orm. \n\nRelationships\n----------------\nSince we have an object mapping to tables, and not just tables in our database, we cann\nassign actual objects to the reference dictionary, not just id's. Here is another\nway to assign the genre to our movie::\n\n data = [{'Genre':[{'&comedy':{'name': \"comedy\", \n 'description':\"Don't you _like_ to laugh?\"\n }}\n ],\n 'flush':None},\n {'Movie':[{\"description\": '\"Dude\" Lebowski, mistaken for a millionaire Lebowski,\\\n seeks restitution for his ruined rug and enlists his \\\n bowling buddies to help get it.', \n \"title\": \"The Big Lebowski\", \n \"release_date\": \"1998-03-06\", \n \"genre\": \"*comedy\"}],\n 'flush':None\n }]\n \n loader.from_list(session, data)\n movies = session.query(Movie).all()\n print [(movie.title, movie.genre.name) for movie in movies]\n\nproduces::\n\n #[('Back to the Future', 'sci-fi'), ('The Big Lebowski', 'comedy')]\n\n\nThis also works for one-to-many and many-to-many relationships. If you profide a list of\nobjects, bootalchemy will retrieve them from the reference dictionary and attach them\nto the proper attribute of your object. Lets assign some directors to a movie.::\n\n data = [{'Director':[{'&andy':{'name': \"Andy Wachowski\"}},\n {'&larry':{'name': \"Larry Wachowski\"}} \n ],\n 'flush':None},\n {'Movie':[{\"description\": \"A computer hacker learns from mysterious rebels\\\n about the true nature of his reality and his\\\n role in the war against the controllers of it.\", \n \"title\": \"The Matrix\", \n \"release_date\": \"1999-03-31\", \n \"directors\": ['*andy', '*larry'], \"genre_id\": \"*scifi_id\"}],\n 'flush':None\n }]\n \n loader.from_list(session, data)\n movies = session.query(Movie).all()\n print [(movie.title, [d.name for d in movie.directors]) for movie in movies]\n\nproduces::\n\n [('Back to the Future', []), ('The Big Lebowski', []), ('The Matrix', ['Andy Wachowski', 'Larry Wachowski'])]\n \nYaml\n---------\nBootAlchemy has a very simple data structure because we wanted it to work with YAML. You can easily\nprovide a yaml string to BootAlchemy for parsing. Yaml has the benefit that it is a standard that\nnon-python developers can follow, and has a large set of functionality outside of what you can\ndo with simple strings in dictionaries. Take a look at the spec: http://www.yaml.org/spec/ . Here is\nan example Yaml string loaded into the database with bootalchemy::\n\n from bootalchemy.loader import YamlLoader\n\n data = \"\"\"\n - Movie:\n - description: An office employee and a soap salesman build a global organization to help vent male aggression.,\n title: Fight Club,\n release_date: 1999-10-14\n genre: \"*action\"\n flush:\n \"\"\"\n \n action = session.query(Genre).filter(Genre.name=='action').first()\n loader = YamlLoader(model, references={'action':action})\n loader.loads(session, data)\n movies = session.query(Movie).all()\n print [(movie.title, movie.genre.name) for movie in movies]\n\nproduces::\n\n [('Back to the Future', 'sci-fi'), ('The Big Lebowski', 'comedy'), ('The Matrix', 'sci-fi'), ('Fight Club,', 'action')]\n\nNotice too that we supplied existing references into this loader since it did not have them from the previous runs.\nAs a python programmer, you might find yaml pretty refreshing. It has simple syntax, rewards brevity, and is sensitive\nto indentation. In many ways it is nicer to set data up within than Python, as many of the quotes have been eliminated.\nPyYaml supplies readable debug output in case your yaml syntax is incorect. Here is an example where a stray \"}\" has been\nleft at the end of the genre line::\n\n yaml.parser.ParserError: while parsing a block mapping\n in \"\", line 3, column 7:\n - description: An office employee ... \n ^\n expected , but found '}'\n in \"\", line 6, column 23:\n genre: \"*action\"}\n ^\n\n\n:class:`YamlLoader` also provides a loadf function which takes a file name and loads it into the database.\n\nJson!\n------\nOne of the great things about YAML is that JSon is a subset of the specification for Yaml. Often times I find\nmyself with a bunch of data that I have hand-entered into a database, and I want to replicate that data for some\nkind of development process. I can output the database data into Json using my browser and then inject it as a\nstream into my bootloader program. \n\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "bootalchemy", "package_url": "https://pypi.org/project/bootalchemy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/bootalchemy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/bootalchemy/0.4.1/", "requires_dist": null, "requires_python": null, "summary": "A package to create database entries from yaml using sqlalchemy.", "version": "0.4.1" }, "last_serial": 786976, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "3f6ddbd1baafc8ab13067b684df88369", "sha256": "fd0d238cef3c05c0eda2db684dfa8ff2ed916298736dc6cbda5069420f1dffe0" }, "downloads": -1, "filename": "bootalchemy-0.1-py2.6.egg", "has_sig": false, "md5_digest": "3f6ddbd1baafc8ab13067b684df88369", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 3983, "upload_time": "2009-04-13T06:09:05", "url": "https://files.pythonhosted.org/packages/ee/91/22fb4f6b8905d6fb6571c3c38b331fd7c03af447da88ae6e48190f2e4714/bootalchemy-0.1-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "7c88d7d0f9bc9cb12ff76dd04a14bc87", "sha256": "3504e19d072df59fdc92b475f0f0765feba401d6d7aa78a1f7b94b1f3dcd3825" }, "downloads": -1, "filename": "bootalchemy-0.1.tar.gz", "has_sig": false, "md5_digest": "7c88d7d0f9bc9cb12ff76dd04a14bc87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1845, "upload_time": "2009-04-13T06:09:05", "url": "https://files.pythonhosted.org/packages/67/f3/0924b78edeec3b4987eaa5a85c38b2615fa25f1d415be39df21674aa255e/bootalchemy-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f4bd50d2687d163cd20c8cfd56cabb76", "sha256": "2059b88a73a10de3d988e9b7d2ec54d1ce550ef6137ed1729f4637e897d02bba" }, "downloads": -1, "filename": "bootalchemy-0.1.1-py2.5.egg", "has_sig": false, "md5_digest": "f4bd50d2687d163cd20c8cfd56cabb76", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 4627, "upload_time": "2009-04-20T22:30:23", "url": "https://files.pythonhosted.org/packages/cf/30/18cdeb0044394c9edaf97e0e97562425e0b09d386821a46cb59dc01a93c7/bootalchemy-0.1.1-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "b0d60ba5f36744ef920468bff145448c", "sha256": "5a66a8a2c172661d7ddd2fff0555acd9adb404388fba3b8f22102c437386339d" }, "downloads": -1, "filename": "bootalchemy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b0d60ba5f36744ef920468bff145448c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2086, "upload_time": "2009-04-20T22:30:22", "url": "https://files.pythonhosted.org/packages/43/50/6043965105cfb4f3394306d843279a31a75384f384860e1cf8819de7cfb7/bootalchemy-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f3b2954fb860bc533d33b8848a0a4e64", "sha256": "9a50ef386d5f4c30c1d8891be91b6d86952777fb656b4bf5b72b9f9458a03267" }, "downloads": -1, "filename": "bootalchemy-0.1.2-py2.5.egg", "has_sig": false, "md5_digest": "f3b2954fb860bc533d33b8848a0a4e64", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 9668, "upload_time": "2009-06-08T21:31:05", "url": "https://files.pythonhosted.org/packages/27/2d/52ddc9cab1d1e96fa782eb85d00af1d7a2c71f4faf647f0b72ac5ff7e453/bootalchemy-0.1.2-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "4e213178f586b110bddfd8299b70febd", "sha256": "3ca21b22e73bec70a9e54b769c8eecf887b11001078af37005fb73c17c06b113" }, "downloads": -1, "filename": "bootalchemy-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4e213178f586b110bddfd8299b70febd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 243539, "upload_time": "2009-06-08T21:31:04", "url": "https://files.pythonhosted.org/packages/b4/99/b3db31204ca4cccdee9ef1cd5f31748da6f962f686f4dc8bb7ea8c48a2d7/bootalchemy-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3760b2d131289de325135e7dc7a939f6", "sha256": "5ed3b526f9164425e3177fbd5cb342d35058ac149844f351db650c6cf0603fcb" }, "downloads": -1, "filename": "bootalchemy-0.1.3-py2.5.egg", "has_sig": false, "md5_digest": "3760b2d131289de325135e7dc7a939f6", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 13305, "upload_time": "2009-06-08T22:37:34", "url": "https://files.pythonhosted.org/packages/60/8f/194b147a939acfa41a18abe28da1cea1ddb3bc4ebb87116c97fe2740a870/bootalchemy-0.1.3-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "2554cef7c1023ece400840541e82e018", "sha256": "656e55c137926bf98c7e58bd4179182a31ee0f1376e6af4c4637d8c9c33f36b3" }, "downloads": -1, "filename": "bootalchemy-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2554cef7c1023ece400840541e82e018", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 244708, "upload_time": "2009-06-08T22:37:33", "url": "https://files.pythonhosted.org/packages/fe/26/16033ee05854dbc57cfd5fc2569ec30b98233705a2e624171f042e42a0ad/bootalchemy-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "956ab34823bc74d7539c705aac993823", "sha256": "d4de9ae6432eb571f54b90198b454da9c943bda6677f4c4cde02067e97f7ff94" }, "downloads": -1, "filename": "bootalchemy-0.1.4-py2.5.egg", "has_sig": false, "md5_digest": "956ab34823bc74d7539c705aac993823", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 13305, "upload_time": "2009-06-09T18:38:33", "url": "https://files.pythonhosted.org/packages/05/1e/e5a635ee3236447a6f785d2fefc3fb2ce22673f227064039432c978c13de/bootalchemy-0.1.4-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "d5cc554baa1f3c7de190dd09d961e073", "sha256": "875ec2278c9bbdf41e2834e5bdf75a38dc05514b33cc949dd6e5215beaba056a" }, "downloads": -1, "filename": "bootalchemy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "d5cc554baa1f3c7de190dd09d961e073", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 244695, "upload_time": "2009-06-09T18:38:32", "url": "https://files.pythonhosted.org/packages/38/c6/ce880efc767e85f89dd330c2c77537976da5363eda8aa234cdb66fcf9c20/bootalchemy-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "223ca808485c5b62f0f13bef706c5912", "sha256": "3db1572ec57ba3e1b03a5ca3bc078f365e0384611f2c5b326477dd06bf43fd10" }, "downloads": -1, "filename": "bootalchemy-0.1.5-py2.5.egg", "has_sig": false, "md5_digest": "223ca808485c5b62f0f13bef706c5912", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 13657, "upload_time": "2009-06-26T23:27:58", "url": "https://files.pythonhosted.org/packages/63/18/a17200cde3e6e82c3e3ee56caab298d8a40317598a617e6c44c016523cf4/bootalchemy-0.1.5-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "bb700352395ddd397d78ce67024bdfab", "sha256": "ed7881bc9c0ee2c9647e9a5047b9663ed416136ef6cddef97f48f93263c10153" }, "downloads": -1, "filename": "bootalchemy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "bb700352395ddd397d78ce67024bdfab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 244854, "upload_time": "2009-06-26T23:27:57", "url": "https://files.pythonhosted.org/packages/5d/35/934ada83016ef4df364b8dbbc600b6352df0ae1289c82e3318cc047b46f2/bootalchemy-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "117f7c03788037a168d3cbf14b916621", "sha256": "ab4771d891e798b0fe867ffb484a564aa2a5f15502c49c0433545c8c33e77f16" }, "downloads": -1, "filename": "bootalchemy-0.1.6-py2.6.egg", "has_sig": false, "md5_digest": "117f7c03788037a168d3cbf14b916621", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 14891, "upload_time": "2009-12-04T04:29:10", "url": "https://files.pythonhosted.org/packages/02/98/9a7d18a3d60b91fcb71681a61fa3e6da11cfd7627bcd08cb5f52109c62f6/bootalchemy-0.1.6-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "90651978076cd3d9ad3d0937ab5a1af3", "sha256": "9621417a694f990b0dbe142ca08dcef50dc565a8198071cda758336d9b3052c3" }, "downloads": -1, "filename": "bootalchemy-0.1.6.tar.gz", "has_sig": false, "md5_digest": "90651978076cd3d9ad3d0937ab5a1af3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 244768, "upload_time": "2009-12-04T04:29:08", "url": "https://files.pythonhosted.org/packages/d8/3c/80833db77f067239e69220bd955730069154c30adf90ad31d63969a439de/bootalchemy-0.1.6.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "5e4d90dbae0c6a0466fdd148e810f38d", "sha256": "6f97f4d456be43ff37c66b3ab3793235f9cf57b872378e6100d5278049e8e388" }, "downloads": -1, "filename": "bootalchemy-0.2-py2.5.egg", "has_sig": false, "md5_digest": "5e4d90dbae0c6a0466fdd148e810f38d", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 15128, "upload_time": "2009-12-15T00:17:55", "url": "https://files.pythonhosted.org/packages/39/d0/f5048cdef3345d2c58f0902a0a24e4a3e3a0d6e16d40f5cfabfbf311b1f6/bootalchemy-0.2-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "288caccb0a6d86fd079c025c1ba2d3f7", "sha256": "46578c6bcae3c202e2ad4da56dde7c4fdabec66299584a46b023e57f54ab8963" }, "downloads": -1, "filename": "bootalchemy-0.2.tar.gz", "has_sig": false, "md5_digest": "288caccb0a6d86fd079c025c1ba2d3f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 245297, "upload_time": "2009-12-15T00:17:54", "url": "https://files.pythonhosted.org/packages/c6/d6/a92a0ccf97149e2dccafcda5e735438ed1853d7b957c4c31e5c071edfafa/bootalchemy-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "a8949a393edd28049b0da60121210b45", "sha256": "1c8a6d3d875bbe979ad646d5c6840464cb77d8c94b4fa43ff48835d24d1b09b1" }, "downloads": -1, "filename": "bootalchemy-0.3-py2.6.egg", "has_sig": false, "md5_digest": "a8949a393edd28049b0da60121210b45", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 18211, "upload_time": "2009-12-30T19:58:49", "url": "https://files.pythonhosted.org/packages/a8/7f/20f1084fddd274d159bcef2be73e6a4a3596b10c99855f4e6ccf7cf7173a/bootalchemy-0.3-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "c258572ae946156f3463e6564a6024ce", "sha256": "a39c16e81a55915e49bd26ef02a48c13e6a2f0bfd3b14058f85643e779ff944e" }, "downloads": -1, "filename": "bootalchemy-0.3.tar.gz", "has_sig": false, "md5_digest": "c258572ae946156f3463e6564a6024ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246268, "upload_time": "2009-12-30T19:58:48", "url": "https://files.pythonhosted.org/packages/8d/86/48280c5559e84451764210a0280db6294041bfe69987aaa94bd7365ad042/bootalchemy-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "694d61ebc8c728bb9bced5c1aa358ca0", "sha256": "6cadc0bb40b26bc4b1e6d258f184b7f9f5ca025c342494066b505ab48ec39f9b" }, "downloads": -1, "filename": "bootalchemy-0.4-py2.6.egg", "has_sig": false, "md5_digest": "694d61ebc8c728bb9bced5c1aa358ca0", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 19267, "upload_time": "2010-06-03T06:56:20", "url": "https://files.pythonhosted.org/packages/5f/ee/dfd15e7c7bfbe882195d9aaf21543b6beb44462b79941168a6ffb3022e5b/bootalchemy-0.4-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "53013269f63a099866ff9bb863d1bdbb", "sha256": "2ce15ff063e50b7c8e7ed2935be7c16af9523aca1b0e29c4f0a4fe7034ea680c" }, "downloads": -1, "filename": "bootalchemy-0.4.tar.gz", "has_sig": false, "md5_digest": "53013269f63a099866ff9bb863d1bdbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246637, "upload_time": "2010-06-03T06:56:19", "url": "https://files.pythonhosted.org/packages/69/b7/79930e875b5951fb9e1d21d443bd34a130b57a33e127e04ab784a83d7b5f/bootalchemy-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a41c1ffb1ba3f04e982f8e92cc7ab7e9", "sha256": "3a967048b23e95ef6ebb6c18a381b57dd4d31635962ed6fd9d2bdbf9c603472a" }, "downloads": -1, "filename": "bootalchemy-0.4.1-py2.7.egg", "has_sig": false, "md5_digest": "a41c1ffb1ba3f04e982f8e92cc7ab7e9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19394, "upload_time": "2013-02-02T18:20:19", "url": "https://files.pythonhosted.org/packages/52/8f/372baf6f2f90e359a0aeb33136621100462ba1a8b4e81eb9498bb598e5db/bootalchemy-0.4.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "fbb66cf4e3085093ed5dcec2d1850751", "sha256": "299e089159977f4f5bc27f1f8d05b777f10ad4fedb778fbadcde86003685a66c" }, "downloads": -1, "filename": "bootalchemy-0.4.1.tar.gz", "has_sig": false, "md5_digest": "fbb66cf4e3085093ed5dcec2d1850751", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246597, "upload_time": "2013-02-02T18:20:16", "url": "https://files.pythonhosted.org/packages/64/67/9af08302782fc2933a144551559e57510972c56152ba0e0c290597c66f8e/bootalchemy-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a41c1ffb1ba3f04e982f8e92cc7ab7e9", "sha256": "3a967048b23e95ef6ebb6c18a381b57dd4d31635962ed6fd9d2bdbf9c603472a" }, "downloads": -1, "filename": "bootalchemy-0.4.1-py2.7.egg", "has_sig": false, "md5_digest": "a41c1ffb1ba3f04e982f8e92cc7ab7e9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19394, "upload_time": "2013-02-02T18:20:19", "url": "https://files.pythonhosted.org/packages/52/8f/372baf6f2f90e359a0aeb33136621100462ba1a8b4e81eb9498bb598e5db/bootalchemy-0.4.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "fbb66cf4e3085093ed5dcec2d1850751", "sha256": "299e089159977f4f5bc27f1f8d05b777f10ad4fedb778fbadcde86003685a66c" }, "downloads": -1, "filename": "bootalchemy-0.4.1.tar.gz", "has_sig": false, "md5_digest": "fbb66cf4e3085093ed5dcec2d1850751", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246597, "upload_time": "2013-02-02T18:20:16", "url": "https://files.pythonhosted.org/packages/64/67/9af08302782fc2933a144551559e57510972c56152ba0e0c290597c66f8e/bootalchemy-0.4.1.tar.gz" } ] }