{ "info": { "author": "Gary Monson", "author_email": "gary.monson@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Topic :: Database :: Front-Ends", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware" ], "description": "Falcon-AutoCRUD\n===============\n\nMakes RESTful CRUD easier.\n\nTest status\n-----------\n\n|Codeship Status for garymonson/falcon-autocrud|\n\nIMPORTANT CHANGE IN 1.0.0\n-------------------------\n\nPreviously, the CollectionResource and SingleResource classes took\ndb\\_session as a parameter to the constructor. As of 1.0.0, they now\ntake db\\_engine instead. The reason for this is to keep the sessions\nshort-lived and under autocrud's control to explicitly close the\nsessions.\n\nThis WILL impact you as your routing should now pass the db\\_engine\ninstead of the db\\_session, and if you override these classes, then, if\nyou have overridden the constructor, you may also have to update that.\n\nQuick start for contributing\n----------------------------\n\n::\n\n virtualenv -p `which python3` virtualenv\n source virtualenv/bin/activate\n pip install -r requirements.txt\n pip install -r dev_requirements.txt\n nosetests\n\nThis runs the tests with SQLite. To run the tests with Postgres (using\npg8000), you must have a Postgres server running, and a postgres user\nwith permission to create databases:\n\n::\n\n export AUTOCRUD_DSN=postgresql+pg8000://myuser:mypassword@localhost:5432\n nosetests\n\nSome tests are run only when testing on Postgres due to only being\nrelevant to Postgres, such as when testing features to do with Postgres\ndata types.\n\nUsage\n-----\n\nDeclare your SQLAlchemy models:\n\n::\n\n from sqlalchemy.ext.declarative import declarative_base\n from sqlalchemy import create_engine, Column, Integer, String\n\n Base = declarative_base()\n\n class Employee(Base):\n __tablename__ = 'employees'\n id = Column(Integer, primary_key=True)\n name = Column(String(50))\n age = Column(Integer)\n\nDeclare your resources:\n\n::\n\n from falcon_autocrud.resource import CollectionResource, SingleResource\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n\n class EmployeeResource(SingleResource):\n model = Employee\n\nApply them to your app, ensuring you pass an SQLAlchemy engine to the\nresource classes:\n\n::\n\n from sqlalchemy import create_engine\n import falcon\n from falcon_autocrud.middleware import Middleware\n\n db_engine = create_engine('sqlite:///stuff.db')\n\n app = falcon.API(\n middleware=[Middleware()],\n )\n\n app.add_route('/employees', EmployeeCollectionResource(db_engine))\n app.add_route('/employees/{id}', EmployeeResource(db_engine))\n\nThis automatically creates RESTful endpoints for your resources:\n\n::\n\n http GET http://localhost/employees\n http GET http://localhost/employees?name=Bob\n http GET http://localhost/employees?age__gt=24\n http GET http://localhost/employees?age__gte=25\n http GET http://localhost/employees?age__lt=25\n http GET http://localhost/employees?age__lte=24\n http GET http://localhost/employees?name__contains=John\n http GET http://localhost/employees?name__startswith=John\n http GET http://localhost/employees?company_id__null=1\n http GET http://localhost/employees?company_id__null=0\n echo '{\"name\": \"Jim\"}' | http POST http://localhost/employees\n http GET http://localhost/employees/100\n echo '{\"name\": \"Jim\"}' | http PUT http://localhost/employees/100\n echo '{\"name\": \"Jim\"}' | http PATCH http://localhost/employees/100\n http DELETE http://localhost/employees/100\n # PATCHing a collection to add entities in bulk\n echo '{\"patches\": [{\"op\": \"add\", \"path\": \"/\", \"value\": {\"name\": \"Jim\"}}]}' | http PATCH http://localhost/employees\n\nNote that by default, PUT will only update, and will not insert a new\nresource if a matching one does not exist at the address. If you wish\nnew resources to be created, then add the following to your resource:\n\n::\n\n allow_put_insert = True\n\nLimiting methods\n~~~~~~~~~~~~~~~~\n\nBy default collections will autogenerate methods GET, POST and PATCH,\nwhile single resources will autogenerate methods GET, PUT, PATCH,\nDELETE.\n\nTo limit which methods are autogenerated for your resource, simply list\nmethod names as follows:\n\n::\n\n # Able to create and search collection:\n class AccountCollectionResource(CollectionResource):\n model = Account\n methods = ['GET', 'POST']\n\n # Only able to read individual accounts:\n class AccountResource(CollectionResource):\n model = Account\n methods = ['GET']\n\nPre-method functionality.\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo do something before a POST or PATCH method is called, add special\nmethods as follows:\n\n::\n\n class AccountCollectionResource(CollectionResource):\n model = Account\n\n def before_post(self, req, resp, db_session, resource, *args, **kwargs):\n # Anything you do with db_session is in the same transaction as the\n # resource creation. Resource is the new resource not yet added to the\n # database.\n pass\n\n class AccountResource(SingleResource):\n model = Account\n\n def before_patch(self, req, resp, db_session, resource, *args, **kwargs):\n # Anything you do with db_session is in the same transaction as the\n # resource update. Resource is the modified resource not yet saved to\n # the database.\n pass\n\n def before_delete(self, req, resp, db_session, resource, *args, **kwargs):\n # Anything you do with db_session is in the same transaction as the\n # resource delete. Resource is the resource to be deleted (or \"marked as\n deleted\" - see section on \"not really deleting\").\n pass\n\nPost-method functionality\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo do something after success of a method, add special methods as\nfollows:\n\n::\n\n class AccountCollectionResource(CollectionResource):\n model = Account\n\n def after_get(self, req, resp, collection, *args, **kwargs):\n # 'collection' is the SQLAlchemy collection resulting from the search\n pass\n\n def after_post(self, req, resp, new, *args, **kwargs):\n # 'new' is the created SQLAlchemy instance\n pass\n\n def after_patch(self, req, resp, *args, **kwargs):\n pass\n\n\n class AccountResource(CollectionResource):\n model = Account\n\n def after_get(self, req, resp, item, *args, **kwargs):\n # 'item' is the retrieved SQLAlchemy instance\n pass\n\n def after_put(self, req, resp, item, *args, **kwargs):\n # 'item' is the changed SQLAlchemy instance\n pass\n\n def after_patch(self, req, resp, item, *args, **kwargs):\n # 'item' is the patched SQLAlchemy instance\n pass\n\n def after_delete(self, req, resp, item, *args, **kwargs):\n pass\n\nBe careful not to throw an exception in the above methods, as this will\nend up propagating a 500 Internal Server Error.\n\nModifying a patch\n~~~~~~~~~~~~~~~~~\n\nIf you want to modify the patched resource before it is saved (e.g. to\nset default values), you can override the default empty method in\nSingleResource:\n\n::\n\n class AccountResource(SingleResource):\n model = Account\n\n def modify_patch(self, req, resp, resource, *args, **kwargs):\n \"\"\"\n Add 'arino' to people's names\n \"\"\"\n resource.name = resource.name + 'arino'\n\nIdentification and Authorization\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nDefine classes that know how to identify and authorize users:\n\n::\n\n class TestIdentifier(object):\n def identify(self, req, resp, resource, params):\n req.context['user'] = req.get_header('Authorization')\n if req.context['user'] is None:\n raise HTTPUnauthorized('Authentication Required', 'No credentials supplied')\n\n class TestAuthorizer(object):\n def authorize(self, req, resp, resource, params):\n if 'user' not in req.context or req.context['user'] != 'Jim':\n raise HTTPForbidden('Permission Denied', 'User does not have access to this resource')\n\nThen declare which class identifies/authorizes what resource or method:\n\n::\n\n # Authorizes for all methods\n @identify(TestIdentifier)\n @authorize(TestAuthorizer)\n class AccountCollectionResource(CollectionResource):\n model = Account\n\n # Or only some methods\n @identify(TestIdentifier)\n @authorize(TestAuthorizer, methods=['GET', 'POST'])\n @authorize(OtherAuthorizer, methods=['PATCH'])\n class OtherAccountCollectionResource(CollectionResource):\n model = Account\n\nFilters/Preconditions\n~~~~~~~~~~~~~~~~~~~~~\n\nYou may filter on GET, and set preconditions on single resource PATCH or\nDELETE:\n\n::\n\n class AccountCollectionResource(CollectionResource):\n model = Account\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n # Only allow getting accounts below id 5\n return query.filter(Account.id < 5)\n\n class AccountResource(SingleResource):\n model = Account\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n # Only allow getting accounts below id 5\n return query.filter(Account.id < 5)\n\n def patch_precondition(self, req, resp, query, *args, **kwargs):\n # Only allow setting owner of non-owned account\n if 'owner' in req.context['doc'] and req.context['doc']['owner'] is not None:\n return query.filter(Account.owner == None)\n else:\n return query\n\n def delete_precondition(self, req, resp, query, *args, **kwargs):\n # Only allow deletes of non-owned accounts\n return query.filter(Account.owner == None)\n\nNote that there is an opportunity for a race condition here, where\nanother process updates the row AFTER the check triggered by\npatch\\_precondition is run, but BEFORE the row update. This would leave\ninconsistent data in your application if the other update would make the\nprecondition no longer hold.\n\nTo prevent this, you can simply add a `versioning\ncolumn `__ to\nyour model. When your model contains such a column, then as long as you\nhave a precondition to check for the correct conditions before updating,\nyou will be guaranteed that if another process changes the row in the\nmeantime, you will fail to update, and a 409 response will be returned.\nThis doesn't necessarily mean the row no longer conforms to the\nprecondition, so you can try the update again, and it will update if the\nprecondition still holds.\n\nThis versioning only helps you on an UPDATE, not a DELETE, so if you\nwant a delete\\_precondition to be protected, you will need to use\nmark\\_deleted to update the row (see \"not really deleting\", next),\ninstead of doing a true delete.\n\nNot really deleting\n~~~~~~~~~~~~~~~~~~~\n\nIf you want to just mark a resource as deleted in the database, but not\nreally delete the row, define a 'mark\\_deleted' in your SingleResource\nsubclass:\n\n::\n\n class AccountResource(SingleResource):\n model = Account\n\n def mark_deleted(self, req, resp, instance, *args, **kwargs):\n instance.deleted = datetime.utcnow()\n\nThis will cause the changed instance to be updated in the database\ninstead of doing a DELETE.\n\nOf course, the database row will still be accessible via GET, but you\ncan automatically filter out \"deleted\" rows like this:\n\n::\n\n class AccountCollectionResource(CollectionResource):\n model = Account\n\n def get_filter(self, req, resp, resources, *args, **kwargs):\n return resources.filter(Account.deleted == None)\n\n class AccountResource(SingleResource):\n model = Account\n\n def get_filter(self, req, resp, resources, *args, **kwargs):\n return resources.filter(Account.deleted == None)\n\n def mark_deleted(self, req, resp, instance, *args, **kwargs):\n instance.deleted = datetime.utcnow()\n\nYou could also look at the request to only filter out \"deleted\" rows for\nsome users.\n\nJoins\n~~~~~\n\nIf you want to add query parameters to your collection queries, that do\nnot refer to a resource attribute, but which refer to an attribute in a\nlinked table, you can do this in get\\_filter, as with the below example.\nEnsure that you remove the extra parameter value from req.params before\nreturning from get\\_filter, as falcon-autocrud will try (and fail) to\nlook up the parameter in the main resource class.\n\n::\n\n class Company(Base):\n __tablename__ = 'companies'\n id = Column(Integer, primary_key=True)\n name = Column(String(50), unique=True)\n employees = relationship('Employee')\n\n class Employee(Base):\n __tablename__ = 'employees'\n id = Column(Integer, primary_key=True)\n name = Column(String(50), unique=True)\n company_id = Column(Integer, ForeignKey('companies.id'), nullable=True)\n company = relationship('Company', back_populates='employees')\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n if 'company_name' in req.params:\n company_name = req.params['company_name']\n del req.params['company_name']\n query = query.join(Employee.company).filter(Company.name == company_name)\n return query\n\nAlternatively, for arguments that are part of the URL you may use\nlookup\\_attr\\_map directly (note that attr\\_map is now deprecated - see\nbelow):\n\n::\n\n class CompanyEmployeeCollectionResource(CollectionResource):\n model = Employee\n\n lookup_attr_map = {\n 'company_id': lambda req, resp, query, *args, **kwargs: query.join(Employee.company).filter(Company.id == kwargs['company_id'])\n }\n\nThis is useful for the following sort of URL:\n\n::\n\n GET /companies/{company_id}/employees\n\nMapping\n~~~~~~~\n\nMapping used to be done with attr\\_map. This is now deprecated in favour\nof lookup\\_attr\\_map and inbound\\_attr\\_map (since attr\\_map was used\nfor two different purposes before).\n\nTo look up an entry via part of the URL:\n\n::\n\n GET /companies/{company_id}/employees\n\nUse the name of the column to map to:\n\n::\n\n class CompanyEmployeeCollectionResource(CollectionResource):\n model = Employee\n\n lookup_attr_map = {\n 'company_id': 'coy_id'\n }\n\nOr use a lambda to return a modified query:\n\n::\n\n class CompanyEmployeeCollectionResource(CollectionResource):\n model = Employee\n\n lookup_attr_map = {\n 'company_id': lambda req, resp, query, *args, **kwargs: query.join(Employee.company).filter(Company.id == kwargs['company_id'])\n }\n\nYou may use inbound\\_attr\\_map to specify mappings to place the value\nfrom a URL component into another field:\n\n::\n\n class CompanyEmployeeCollectionResource(CollectionResource):\n model = Employee\n\n inbound_attr_map = {\n 'company_id': 'coy_id'\n }\n\nBoth lookup\\_attr\\_map and inbound\\_attr\\_map may have a mapping value\nset to None, in which case the mapping key in the URL component is\nignored.\n\nSorting\n~~~~~~~\n\nYou can specify a default sorting of results from the collection search.\nThe below example sorts firstly by name, then by salary descending:\n\n::\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n default_sort = ['name', '-salary']\n\nThe caller can specify a sort (which overrides the default if defined):\n\n::\n\n GET /path/to/collection?__sort=name,-salary\n\nPaging\n~~~~~~\n\nThe caller can specify an offset and/or limit to collection GET to\nprovide paging of search results.\n\n::\n\n GET /path/to/collection?__offset=10&limit=10\n\nThis is generally most useful in combination with \\_\\_sort to ensure\nconsistency of sorting.\n\nLimiting response fields\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can limit which fields are returned to the client like this:\n\n::\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n response_fields = ['id', 'name']\n\nOr you can limit them programmatically like this:\n\n::\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n\n def response_fields(self, req, resp, resource, *args, **kwargs):\n # Determine response fields via things such as authenticated user\n return fields\n\nCreating linked resources\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe collection POST method allows creation of linked resources in the\none POST call. If your model includes a relationship to the linked\nresource, you can include the attributes to use in the new linked\nresource, and the link will be automatically made in the database:\n\n::\n\n class Company(Base):\n __tablename__ = 'companies'\n id = Column(Integer, primary_key=True)\n name = Column(String(50), unique=True)\n employees = relationship('Employee')\n\n class Employee(Base):\n __tablename__ = 'employees'\n id = Column(Integer, primary_key=True)\n name = Column(String(50), unique=True)\n company_id = Column(Integer, ForeignKey('companies.id'), nullable=True)\n company = relationship('Company', back_populates='employees')\n\n class CompanyCollectionResource(CollectionResource):\n model = Company\n allow_subresources = True\n\n::\n\n cat post.json\n {\n name: \"Initech\",\n employees: [\n {\n name: \"Alice\"\n },\n {\n name: \"Bob\"\n }\n ]\n }\n\n cat post.json | http POST http://localhost/companies\n\nThis will create a company called Initech and two employees, who will be\nlinked to Initech via Employee.company\\_id. Note the that\nCollectionResource subclass must have the attribute allow\\_subresources\nand set it to True, for this feature to be enabled.\n\nBulk operations\n~~~~~~~~~~~~~~~\n\nYou can bulk add entities using a PATCH method to a collection. If the\ncollection is defined in the standard way, you are limited to adding to\nonly that model:\n\n::\n\n class EmployeeCollectionResource(CollectionResource):\n model = Employee\n\nTo add to the employee collection, each operation's path must be '/':\n\n::\n\n echo '{\"patches\": [{\"op\": \"add\", \"path\": \"/\", \"value\": {\"name\": \"Jim\"}}]}' | http PATCH http://localhost/employees\n\nIf you would like to be able to add to multiple types of collection in\none bulk update, define the path and model for each in a special\ncollection:\n\n::\n\n class RootResource(CollectionResource):\n patch_paths = {\n '/employees': Employee,\n '/accounts': Account,\n }\n\n app.add_route('/', RootResource(db_engine))\n\nTo add to the collections, each operation's path must be in the defined\npatch\\_paths:\n\n::\n\n cat patches.json\n {\n \"patches\": [\n {\"op\": \"add\", \"path\": \"/employees\", \"value\": {\"name\": \"Jim\"}}\n {\"op\": \"add\", \"path\": \"/accounts\", \"value\": {\"name\": \"Sales\"}}\n ]\n }\n cat patches.json | http PATCH http://localhost/employees\n\nAll the operations done in a single PATCH are performed within a\ntransaction.\n\nNaive datetimes\n~~~~~~~~~~~~~~~\n\nNormally a datetime is assumed to be in UTC, so they are expected to be\nin the format 'YYYY-mm-ddTHH:MM:SSZ', and are also output like that.\n\nSometimes (not often!) you need to store a \"naive\" datetime, where time\nzone is not relevant (e.g. to store the datetime of a nationwide public\nholiday, where the time zone is not relevant, and the \"real\" date/time\nis simply in the local time zone, whatever that might be - i.e. the\nclient can treat is as being in their own localtime.\n\nFor cases such as this, simply list the field among the naive datetimes\nlike so:\n\n::\n\n class PublicHolidayCollectionResource(CollectionResource):\n model = PublicHoliday\n naive_datetimes = ['start', 'end']\n\nThese fields will then be parsed and returned in the format\n'YYYY-mm-ddTHH:MM:SS', i.e. without the 'Z' suffix.\n\nMeta-information\n~~~~~~~~~~~~~~~~\n\nTo add meta-information to each resource in a collection response,\nassuming your models are:\n\n::\n\n class Team(Base):\n __tablename__ = 'teams'\n id = Column(Integer, primary_key=True)\n name = Column(String(50))\n characters = relationship('Character')\n\n class Character(Base):\n __tablename__ = 'characters'\n id = Column(Integer, primary_key=True)\n name = Column(String(50))\n\n team_id = Column(Integer, ForeignKey('teams.id'), nullable=True)\n team = relationship('Team', back_populates='characters')\n\nThen include the following:\n\n::\n\n catchphrases = {\n 'Oliver': 'You have failed this city',\n 'Cisco': \"OK, you don't get to pick the names\",\n }\n\n class CharacterCollectionResource(CollectionResource):\n model = Character\n resource_meta = {\n 'catchphrase': lambda resource: catchphrases.get(resource.name, None)\n }\n\nTo add meta-information to the top level of a single resource response,\ninclude the following:\n\n::\n\n catchphrases = {\n 'Oliver': 'You have failed this city',\n 'Cisco': \"OK, you don't get to pick the names\",\n }\n\n class CharacterResource(SingleResource):\n model = Character\n meta = {\n 'catchphrase': lambda resource: catchphrases.get(resource.name, None)\n }\n\nYou can join another table to get the meta information:\n\n::\n\n class CharacterCollectionResource(CollectionResource):\n model = Character\n resource_meta = {\n 'catchphrase': lambda resource, team_name: catchphrases.get(resource.name, None),\n 'team_name': lambda resource, team_name: team_name,\n }\n extra_select = [Team.name]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Team)\n\n class CharacterResource(SingleResource):\n model = Character\n meta = {\n 'catchphrase': lambda resource, team_name: catchphrases.get(resource.name, None),\n 'team_name': lambda resource, team_name: team_name,\n }\n extra_select = [Team.name]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Team)\n\nYou can even use SQL functions to calculate the values in the\nmeta-information:\n\n::\n\n from sqlalchemy import func\n\n class TeamCollectionResource(CollectionResource):\n model = Team\n resource_meta = {\n 'team_size': lambda resource, team_size: team_size,\n }\n extra_select = [func.count(Character.id)]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Character).group_by(Team.id)\n\n class TeamResource(SingleResource):\n model = Team\n meta = {\n 'team_size': lambda resource, team_size: team_size,\n }\n extra_select = [func.count(Character.id)]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Character).group_by(Team.id)\n\nOr you can determine them entirely programmatically like this:\n\n::\n\n class TeamCollectionResource(CollectionResource):\n model = Team\n def resource_meta(self, req, resp, resource, team_size, *args, **kwargs):\n return {\n 'team_size': team_size,\n }\n extra_select = [func.count(Character.id)]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Character).group_by(Team.id)\n\n class TeamResource(SingleResource):\n model = Team\n def meta(self, req, resp, resource, team_size, *args, **kwargs):\n return {\n 'team_size': team_size,\n }\n extra_select = [func.count(Character.id)]\n\n def get_filter(self, req, resp, query, *args, **kwargs):\n return query.join(Character).group_by(Team.id)\n\nThe advantage of using the above method is that the keys can also be\ndetermined at runtime, and may change in difference circumstances (e.g.\naccording to query parameters, or the permissions of the caller). To\ninclude NO meta at all for the resource, return None from\n``resource_meta`` or ``meta`` functions.\n\n.. |Codeship Status for garymonson/falcon-autocrud| image:: https://codeship.com/projects/ed5bb4c0-b517-0133-757f-3e023a4cadff/status?branch=master\n :target: https://codeship.com/projects/134046\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/garymonson/falcon-autocrud", "keywords": "falcon crud rest database", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "falcon-autocrud", "package_url": "https://pypi.org/project/falcon-autocrud/", "platform": "", "project_url": "https://pypi.org/project/falcon-autocrud/", "project_urls": { "Homepage": "https://bitbucket.org/garymonson/falcon-autocrud" }, "release_url": "https://pypi.org/project/falcon-autocrud/1.0.36/", "requires_dist": null, "requires_python": "", "summary": "Makes RESTful CRUD easier", "version": "1.0.36" }, "last_serial": 4315121, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "2001def4b506d9dc8b48258bd22a3dc9", "sha256": "0eddbda4424d76eca4acafcd1ea3ea1a398bedb6449bb0649753381074095a1c" }, "downloads": -1, "filename": "falcon-autocrud-0.0.10.tar.gz", "has_sig": false, "md5_digest": "2001def4b506d9dc8b48258bd22a3dc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7130, "upload_time": "2016-02-27T18:45:01", "url": "https://files.pythonhosted.org/packages/a6/e2/8ba0784be6a2b485d0caa2693f884b851c57f3b0be3df774b221a38ab2c2/falcon-autocrud-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "323bae52f0d470cfa5afc0eb817c16bf", "sha256": "299e288a1d913657347c2d7aeb6025fac35c75a4474642241a6e587fabeed8b9" }, "downloads": -1, "filename": "falcon-autocrud-0.0.11.tar.gz", "has_sig": false, "md5_digest": "323bae52f0d470cfa5afc0eb817c16bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7730, "upload_time": "2016-02-27T23:33:57", "url": "https://files.pythonhosted.org/packages/79/86/04c039555d7b3fa87fd2daadd891105a063d8a2f063e8a6d0e62de9c2967/falcon-autocrud-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "f5d702b06aa05d4eea7397ff24309947", "sha256": "6fb633468a7d41e19daf6a8419018d0062b14e45efe2fee1257660df55ca1041" }, "downloads": -1, "filename": "falcon-autocrud-0.0.12.tar.gz", "has_sig": false, "md5_digest": "f5d702b06aa05d4eea7397ff24309947", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8169, "upload_time": "2016-03-07T04:04:29", "url": "https://files.pythonhosted.org/packages/d1/c8/f1c9697f1158b6b0ea52d5c7a9e232ea9ebe5f62633f53e908292d22d4d7/falcon-autocrud-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "d0146a978998f47deecd85a2e7d113e4", "sha256": "e81a107470badb18c2132bfe22a66447ddf6795fd65891706cab13ce6ffadd38" }, "downloads": -1, "filename": "falcon-autocrud-0.0.13.tar.gz", "has_sig": false, "md5_digest": "d0146a978998f47deecd85a2e7d113e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8346, "upload_time": "2016-03-08T01:21:40", "url": "https://files.pythonhosted.org/packages/1e/ba/7530704500e79e8e9edebbd2f2bac9d409ffe7194495076e124c60caadf7/falcon-autocrud-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "02549289633a4d5b0fd1327bc31e33d2", "sha256": "d03c0c88a8be5106f4a7a9163f0774be992917c4ce6265cb999217ddf51946ff" }, "downloads": -1, "filename": "falcon-autocrud-0.0.14.tar.gz", "has_sig": false, "md5_digest": "02549289633a4d5b0fd1327bc31e33d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8456, "upload_time": "2016-03-08T06:50:53", "url": "https://files.pythonhosted.org/packages/e1/79/722978b2e7bef91c743a710a6632cbc1494db9923d7f0809d3f4333244dc/falcon-autocrud-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "169cc644494583124aa40f593b4514e0", "sha256": "9fc5bf32cc7250d1e2a334cdb7d92e4166affb6fb65718da8c51adb144c47c73" }, "downloads": -1, "filename": "falcon-autocrud-0.0.15.tar.gz", "has_sig": false, "md5_digest": "169cc644494583124aa40f593b4514e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8486, "upload_time": "2016-03-08T22:51:45", "url": "https://files.pythonhosted.org/packages/7b/88/49581df11b3eea0e4100e07cbc9c789248b633e7b97e61f502baddba8b68/falcon-autocrud-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "fb42fc3916eda4d87150ba6e2b011f51", "sha256": "a22a4346ac7f90a45aef3124c2867b02fefb432bdcea6be17632f45474823d7f" }, "downloads": -1, "filename": "falcon-autocrud-0.0.16.tar.gz", "has_sig": false, "md5_digest": "fb42fc3916eda4d87150ba6e2b011f51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8537, "upload_time": "2016-03-10T03:58:55", "url": "https://files.pythonhosted.org/packages/a4/20/a0ee07298513a65f16c7039cdf4fa7de06e77b87276d51907d53e999ec66/falcon-autocrud-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "a0eb2b706a92ee4d3d13cc4339b22678", "sha256": "4a6d31697db7b82f8a08df8c19cd33fb3f748a5575aa252cae943752d59643f5" }, "downloads": -1, "filename": "falcon-autocrud-0.0.17.tar.gz", "has_sig": false, "md5_digest": "a0eb2b706a92ee4d3d13cc4339b22678", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8584, "upload_time": "2016-03-10T04:13:56", "url": "https://files.pythonhosted.org/packages/0f/fc/a2a9ba430733abc2010be283aa7c8e119134f35a320bb870929f340ae245/falcon-autocrud-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "44757348ebdc09e68da7a0cd670b0404", "sha256": "8554f667ad393fa92f2217277e7568f48accaffbadd579e36a4c8930ddafc6f5" }, "downloads": -1, "filename": "falcon-autocrud-0.0.18.tar.gz", "has_sig": false, "md5_digest": "44757348ebdc09e68da7a0cd670b0404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8588, "upload_time": "2016-03-10T04:19:22", "url": "https://files.pythonhosted.org/packages/aa/ba/89b2a857ef0db25b8d12b40a63fcf7a3ceffc1951921236cbc54d9e95e72/falcon-autocrud-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "ddd73ab4f0ff3708401c2be69a7a73b9", "sha256": "02f7eb49ab0e378ee36111213f159b054da14b6fa56f7c3acbbf8fbb228084a1" }, "downloads": -1, "filename": "falcon-autocrud-0.0.19.tar.gz", "has_sig": false, "md5_digest": "ddd73ab4f0ff3708401c2be69a7a73b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8876, "upload_time": "2016-03-12T10:54:57", "url": "https://files.pythonhosted.org/packages/f1/10/d6a6868f4700f3b4e5af433cda2c34f9b47d1cde4c7f42a462bc0ae9eca3/falcon-autocrud-0.0.19.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "57c90198c1ff2247d8b7e3f9ca2582f5", "sha256": "e09531730325ac089f1cbdfcbf1f47d2295e628a5a0954046db8e0aa3e6458cb" }, "downloads": -1, "filename": "falcon-autocrud-0.0.2.tar.gz", "has_sig": false, "md5_digest": "57c90198c1ff2247d8b7e3f9ca2582f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4666, "upload_time": "2015-11-26T12:30:03", "url": "https://files.pythonhosted.org/packages/a0/19/a3d93a0a97cbcc0056416061b44592a8fe09b4d8654779caa965f348bd0c/falcon-autocrud-0.0.2.tar.gz" } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "5aae7d5f6a5b5c1c9f65eaf1015a06e7", "sha256": "b059e5ae1824b83c81a244b70052bd042eb693f1822f1c2830a21d138f30886e" }, "downloads": -1, "filename": "falcon-autocrud-0.0.20.tar.gz", "has_sig": false, "md5_digest": "5aae7d5f6a5b5c1c9f65eaf1015a06e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9015, "upload_time": "2016-03-16T05:07:24", "url": "https://files.pythonhosted.org/packages/a0/aa/dcbe2a368ad4491fcbbb0cd61e3e9455ff336581626d5b05beae0c89013f/falcon-autocrud-0.0.20.tar.gz" } ], "0.0.21": [ { "comment_text": "", "digests": { "md5": "c145ded8a4ffa149fe1ab71241c8a360", "sha256": "2f2150ddc06d7b854a0a16535847665902039d32f7628db38e28f5a5ccfbc83c" }, "downloads": -1, "filename": "falcon-autocrud-0.0.21.tar.gz", "has_sig": false, "md5_digest": "c145ded8a4ffa149fe1ab71241c8a360", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9103, "upload_time": "2016-03-17T04:21:23", "url": "https://files.pythonhosted.org/packages/98/81/5c7f989fdc1e733fca9f96a3edad91d6d3ddd750fd209fad205ad51200d6/falcon-autocrud-0.0.21.tar.gz" } ], "0.0.22": [ { "comment_text": "", "digests": { "md5": "196126f9e501fb65de19bbc190f77029", "sha256": "e204fe0c9cf23c861c493d404fcefc65e03629b7d83db5bb8c775a7faa068b8c" }, "downloads": -1, "filename": "falcon-autocrud-0.0.22.tar.gz", "has_sig": false, "md5_digest": "196126f9e501fb65de19bbc190f77029", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9191, "upload_time": "2016-03-28T22:14:45", "url": "https://files.pythonhosted.org/packages/e2/4e/454180afde3f53c2ec977a8c69a06b0678006043b363ea3c7b652a521826/falcon-autocrud-0.0.22.tar.gz" } ], "0.0.23": [ { "comment_text": "", "digests": { "md5": "c047ce250d6c2113a46a2dfe69079a9c", "sha256": "d32341d46f669e1ff0c19964c3747b139ec8409a3c482f616614dd3411abb1fe" }, "downloads": -1, "filename": "falcon-autocrud-0.0.23.tar.gz", "has_sig": false, "md5_digest": "c047ce250d6c2113a46a2dfe69079a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9470, "upload_time": "2016-03-28T23:44:13", "url": "https://files.pythonhosted.org/packages/99/1b/887caf773bbe67251d6b40753468194df3532c93286271a98a3f6be66c61/falcon-autocrud-0.0.23.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "6321f62e59b4265d25f80e08dbc11fe6", "sha256": "2210420fcdbacf0e210a094bd3b76fbefd93141990da0d533895b6f4e89685ee" }, "downloads": -1, "filename": "falcon-autocrud-0.0.3.tar.gz", "has_sig": false, "md5_digest": "6321f62e59b4265d25f80e08dbc11fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4926, "upload_time": "2015-12-04T00:01:15", "url": "https://files.pythonhosted.org/packages/28/90/05ed5342a933e1c4bf6877bdfb4c06447607616a591fb434934c76c477ac/falcon-autocrud-0.0.3.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "89a973073550c2eddd9c6d2aa8f5d2cc", "sha256": "561922a10b8f4a49981f51ccf8d49de96820df2f64f9c9b932963d8508b7e284" }, "downloads": -1, "filename": "falcon-autocrud-0.0.5.tar.gz", "has_sig": false, "md5_digest": "89a973073550c2eddd9c6d2aa8f5d2cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5419, "upload_time": "2016-01-17T12:41:48", "url": "https://files.pythonhosted.org/packages/fa/52/bdd8af64f4791b9209a6bc10d93775a15b54a875848ba8ec7dd5412ab4be/falcon-autocrud-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "48c8fdae7b0d37834b27e01c40641c41", "sha256": "0b8ed0dcc4aff949a3ea051a21cf189a728313da7e022bfd99214e3cc9610f35" }, "downloads": -1, "filename": "falcon-autocrud-0.0.6.tar.gz", "has_sig": false, "md5_digest": "48c8fdae7b0d37834b27e01c40641c41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5633, "upload_time": "2016-01-26T23:09:55", "url": "https://files.pythonhosted.org/packages/4b/c9/7d4b198dcb0ea9b9f050aea66b7700090c6d8f1f84e097f3af4de65ab7e7/falcon-autocrud-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "512fa07f4f88a3dcf49c1a70c486f57c", "sha256": "47cff051d9005e6154a6074274c520efb820fad6f9b439e679c512585486e52b" }, "downloads": -1, "filename": "falcon-autocrud-0.0.7.tar.gz", "has_sig": false, "md5_digest": "512fa07f4f88a3dcf49c1a70c486f57c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6219, "upload_time": "2016-01-28T10:53:00", "url": "https://files.pythonhosted.org/packages/56/e3/b9252f22b4102482e727d58ca6dbb6c397d692c09f101f6434f0ed9c9676/falcon-autocrud-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "9cfccda091b53838e34be275fe27bf43", "sha256": "b9ba8c8ddde7658a80b204845633c0087688d6666275d7d06010ca3f4040f448" }, "downloads": -1, "filename": "falcon-autocrud-0.0.8.tar.gz", "has_sig": false, "md5_digest": "9cfccda091b53838e34be275fe27bf43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6511, "upload_time": "2016-02-24T11:39:29", "url": "https://files.pythonhosted.org/packages/c5/25/8133605a067b26a71c8ab561adb71ac67fc10929d86a9b1e3cc01a67d006/falcon-autocrud-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "aa6560516313945cf0097709eb15eacd", "sha256": "65bb90ee0cebec744e38500c94fa6acfdaf849216cd49b84f4734acfd74d167d" }, "downloads": -1, "filename": "falcon-autocrud-0.0.9.tar.gz", "has_sig": false, "md5_digest": "aa6560516313945cf0097709eb15eacd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6799, "upload_time": "2016-02-26T10:24:10", "url": "https://files.pythonhosted.org/packages/b4/39/b2476453a508976196a16f576b0ecdf6025137df2a7485265d02b39b5b8e/falcon-autocrud-0.0.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "cd36f8b79e196d0f14f5a16dc4e4f04c", "sha256": "835b0cfc4b5c948f382c6ebf4a8cc45aa098f7b1a179b5780a083c161bf1cd01" }, "downloads": -1, "filename": "falcon-autocrud-1.0.0.tar.gz", "has_sig": false, "md5_digest": "cd36f8b79e196d0f14f5a16dc4e4f04c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10073, "upload_time": "2016-04-20T11:06:24", "url": "https://files.pythonhosted.org/packages/44/46/9a1b3e5a8dfe26a65f0ec54cc4cadd2ff90802a8dc28479e799dcc0c090d/falcon-autocrud-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "c6c1052a337b29180e096b99b98491ad", "sha256": "20e0c28cbc8fad30768ab09020e4e42b748d6a4a28d8746029ee8c00e832d319" }, "downloads": -1, "filename": "falcon-autocrud-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c6c1052a337b29180e096b99b98491ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10293, "upload_time": "2016-04-24T05:29:38", "url": "https://files.pythonhosted.org/packages/00/4b/a431a6c78a07d3e6c1e864688eb85ea27b6f7e8bfc870a0dbe6d5bddd586/falcon-autocrud-1.0.1.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "3a62dcef5166ce04f729dc356978dab0", "sha256": "d58d86937cf1bd2dc8b740a8e7c4ca3d5ebd3151546d93b324a1cf1f888eaa77" }, "downloads": -1, "filename": "falcon-autocrud-1.0.10.tar.gz", "has_sig": false, "md5_digest": "3a62dcef5166ce04f729dc356978dab0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15684, "upload_time": "2016-07-27T11:18:07", "url": "https://files.pythonhosted.org/packages/0b/ea/507883c00cfd06abf8a8034cf6a9be04e48837a9410e360f5a3634a81ac0/falcon-autocrud-1.0.10.tar.gz" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "42865ed8c3b46509e565fb9152d482b9", "sha256": "57c5787c1369157e06027e29fccc955bd50928cff6edfe9c619efada92a26b95" }, "downloads": -1, "filename": "falcon-autocrud-1.0.11.tar.gz", "has_sig": false, "md5_digest": "42865ed8c3b46509e565fb9152d482b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15807, "upload_time": "2016-07-28T10:58:15", "url": "https://files.pythonhosted.org/packages/dd/34/8e4e29e1143e05d7406182741e82ae251c066c680535e066f53a5a50bc57/falcon-autocrud-1.0.11.tar.gz" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "0ef4097f360a83c86f728c623de68ee6", "sha256": "930b3de37009544d36fc3a9d2e3bb024e94779fda60a9979a767358374e6ff8a" }, "downloads": -1, "filename": "falcon-autocrud-1.0.12.tar.gz", "has_sig": false, "md5_digest": "0ef4097f360a83c86f728c623de68ee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16618, "upload_time": "2016-08-06T02:03:04", "url": "https://files.pythonhosted.org/packages/5c/31/0a0a4f5afa425dc739aa46a37bc2a2246c1be8fcdff718dac746d07c2abd/falcon-autocrud-1.0.12.tar.gz" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "78923982dd12188c54e6b031c4205981", "sha256": "ad21deda65bfd74019d7e8b31824362bbc113f9f4b2e4df597d1913e9c83afc2" }, "downloads": -1, "filename": "falcon-autocrud-1.0.13.tar.gz", "has_sig": false, "md5_digest": "78923982dd12188c54e6b031c4205981", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16643, "upload_time": "2016-08-09T06:33:57", "url": "https://files.pythonhosted.org/packages/50/66/bdc9c5c2f4637ed1016e4b7e1fb0af8d4e80a7d7f7b679a4c2e566baac4b/falcon-autocrud-1.0.13.tar.gz" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "01d39ba1fb8170be5d802732aef8e61d", "sha256": "d0811a1370a3095d60f941188021aab11739bd6392c0c905f8380a238c6e183b" }, "downloads": -1, "filename": "falcon-autocrud-1.0.14.tar.gz", "has_sig": false, "md5_digest": "01d39ba1fb8170be5d802732aef8e61d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18246, "upload_time": "2016-08-23T10:37:28", "url": "https://files.pythonhosted.org/packages/c8/a5/f8cc02f4bb9a6aa80b5432ecbf6ed6960da7c665244b65801e9b4a8d4bdc/falcon-autocrud-1.0.14.tar.gz" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "1ebe2feca39aed8d28de509484884e2b", "sha256": "2ed4b45e46b891b5f0180f851e8be097f5c9c80684b9c667a744fdacab6fedd2" }, "downloads": -1, "filename": "falcon-autocrud-1.0.15.tar.gz", "has_sig": false, "md5_digest": "1ebe2feca39aed8d28de509484884e2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18962, "upload_time": "2016-08-26T05:07:26", "url": "https://files.pythonhosted.org/packages/cd/cb/ad512f5226a0c72d97971064e395e0e6908a7de1281edc075a37fad5518a/falcon-autocrud-1.0.15.tar.gz" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "b4dd960a4f54579df9afbefd766e5465", "sha256": "abc04ab6449b31951f545b435e64200f9a3ef2506bbbf1b2ae1e7e7494e5918e" }, "downloads": -1, "filename": "falcon-autocrud-1.0.16.tar.gz", "has_sig": false, "md5_digest": "b4dd960a4f54579df9afbefd766e5465", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19416, "upload_time": "2016-08-29T00:37:15", "url": "https://files.pythonhosted.org/packages/f8/68/f25a7092c1e6e6a6dc42e30c4b659b08fea5a1e7e8e02c68ec409c601deb/falcon-autocrud-1.0.16.tar.gz" } ], "1.0.17": [ { "comment_text": "", "digests": { "md5": "aa77c372f95197f6284d5b412edca84e", "sha256": "06828138d02190fc2ed4880db3dcdd0b7f1b99b786f658bf804934472b7e51dc" }, "downloads": -1, "filename": "falcon-autocrud-1.0.17.tar.gz", "has_sig": false, "md5_digest": "aa77c372f95197f6284d5b412edca84e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20107, "upload_time": "2016-08-30T01:23:07", "url": "https://files.pythonhosted.org/packages/06/c7/f905a54610d5772dea37057282e7ff9162b0504686b94d68bc31b69b9870/falcon-autocrud-1.0.17.tar.gz" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "1dca73fa10048336b32267fa685fa8fc", "sha256": "f5f2819679d82c2cd314d6be2a32fc928e594fcb8606fae58877542a10628563" }, "downloads": -1, "filename": "falcon-autocrud-1.0.18.tar.gz", "has_sig": false, "md5_digest": "1dca73fa10048336b32267fa685fa8fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20865, "upload_time": "2016-08-30T02:21:51", "url": "https://files.pythonhosted.org/packages/8f/b2/4b70e2a56c0c0a5a5bccf20161062ba68a077f4a4134d256cb4dfe22e950/falcon-autocrud-1.0.18.tar.gz" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "06ea1d8ebc88b900a6ec115f3a6f2201", "sha256": "b24930c6f4be5532eb0ce4c56bdbe79ce105a8a62436a9f62415656a7aa7965f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.19.tar.gz", "has_sig": false, "md5_digest": "06ea1d8ebc88b900a6ec115f3a6f2201", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21714, "upload_time": "2016-09-02T08:42:16", "url": "https://files.pythonhosted.org/packages/ed/b7/d78d51e11721deebf2b5124eb5c540663905b30f3628f424ef1737358a0d/falcon-autocrud-1.0.19.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "3311845856f36f65d4db984c369a4da9", "sha256": "a9b8264291719c833e32bdc6c2c953dfe6233802d84fd007297b128d78403029" }, "downloads": -1, "filename": "falcon-autocrud-1.0.2.tar.gz", "has_sig": false, "md5_digest": "3311845856f36f65d4db984c369a4da9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10211, "upload_time": "2016-04-25T14:03:03", "url": "https://files.pythonhosted.org/packages/af/dd/cf6adc76e9f3a214f4c8f3e44bc5f50b5da060658675df27e65e02eb6e0a/falcon-autocrud-1.0.2.tar.gz" } ], "1.0.20": [ { "comment_text": "", "digests": { "md5": "b2d25716b94b6908492c42a2b1c9ec95", "sha256": "94019cb41dd20bb033782d82ad75f1e593f839eba1763cf2969727771799817c" }, "downloads": -1, "filename": "falcon-autocrud-1.0.20.tar.gz", "has_sig": false, "md5_digest": "b2d25716b94b6908492c42a2b1c9ec95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21657, "upload_time": "2016-09-02T09:36:17", "url": "https://files.pythonhosted.org/packages/10/c5/8a16ee76b756e740daa7b9ca678a341385900e4be5275765af459f89b1f0/falcon-autocrud-1.0.20.tar.gz" } ], "1.0.21": [ { "comment_text": "", "digests": { "md5": "53ccde49c8ec8723138498d60f070eb7", "sha256": "45af489c814f7e4302862556728cad9a4f203006c3abab6b543210adf2c397de" }, "downloads": -1, "filename": "falcon-autocrud-1.0.21.tar.gz", "has_sig": false, "md5_digest": "53ccde49c8ec8723138498d60f070eb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21801, "upload_time": "2016-09-03T02:55:03", "url": "https://files.pythonhosted.org/packages/ee/d4/c5b80be336219566ac483f156cc38cb2fd159530bb16131ba88fcd924c68/falcon-autocrud-1.0.21.tar.gz" } ], "1.0.22": [ { "comment_text": "", "digests": { "md5": "e6de1146e02dc035beaa261f005ec3b7", "sha256": "f0603282c5cf394d126bfe93c680ca0245da87089e10fd6bd18d2901c4d3674d" }, "downloads": -1, "filename": "falcon-autocrud-1.0.22.tar.gz", "has_sig": false, "md5_digest": "e6de1146e02dc035beaa261f005ec3b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22062, "upload_time": "2016-09-06T00:35:44", "url": "https://files.pythonhosted.org/packages/e9/71/67d37b4e52ef1e29c0bb26c397991df8315e5e14a64fd96ff1931aa19509/falcon-autocrud-1.0.22.tar.gz" } ], "1.0.23": [ { "comment_text": "", "digests": { "md5": "d45a16405b6b074301f5e792e9575b60", "sha256": "1aef4dcef981d05696c292d03abd28a7489ceba0f57eff123a8c0f08c75813f2" }, "downloads": -1, "filename": "falcon-autocrud-1.0.23.tar.gz", "has_sig": false, "md5_digest": "d45a16405b6b074301f5e792e9575b60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22902, "upload_time": "2016-10-22T13:37:01", "url": "https://files.pythonhosted.org/packages/84/94/b38c9bc56b35bae86c1e76d3a4afa1caf5886fd8d61949e8ef8a7205b2b7/falcon-autocrud-1.0.23.tar.gz" } ], "1.0.24": [ { "comment_text": "", "digests": { "md5": "797d1f5900ee74f5caa15e8c8e3f20cc", "sha256": "26da1a6efe05090bd967619453b25c1e0526c8b56cdcda2c5eb72a360aac4e53" }, "downloads": -1, "filename": "falcon-autocrud-1.0.24.tar.gz", "has_sig": false, "md5_digest": "797d1f5900ee74f5caa15e8c8e3f20cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24184, "upload_time": "2016-10-29T11:26:08", "url": "https://files.pythonhosted.org/packages/b8/df/fa2defcd7204150bdf61e63a2531326d766525712f0aa682831b6858ffaf/falcon-autocrud-1.0.24.tar.gz" } ], "1.0.25": [ { "comment_text": "", "digests": { "md5": "e41013e2ab67827052bf567268d7d183", "sha256": "3398bb30f9e31cee2dafd694bb6d3230ad331d42695bbd28a9f85fb7200e515c" }, "downloads": -1, "filename": "falcon-autocrud-1.0.25.tar.gz", "has_sig": false, "md5_digest": "e41013e2ab67827052bf567268d7d183", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29334, "upload_time": "2016-10-31T00:42:49", "url": "https://files.pythonhosted.org/packages/6f/fc/7427ff33a9fb94e03961bc0f876153b00c5ea3676c772682cba63f991531/falcon-autocrud-1.0.25.tar.gz" } ], "1.0.26": [ { "comment_text": "", "digests": { "md5": "d9ed32ad6639257dc56fe632f043bc50", "sha256": "4b912c348577d5fb27e01d66e5fce989ae6d3286326363bf83eb4d6c29e0b05a" }, "downloads": -1, "filename": "falcon-autocrud-1.0.26.tar.gz", "has_sig": false, "md5_digest": "d9ed32ad6639257dc56fe632f043bc50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29892, "upload_time": "2016-11-10T09:43:03", "url": "https://files.pythonhosted.org/packages/c8/54/23ca85d006ae6257136089183af9275ea2ec7deb658afdb8a971ec5be288/falcon-autocrud-1.0.26.tar.gz" } ], "1.0.27": [ { "comment_text": "", "digests": { "md5": "013a8dadedd1d1dc1d23b68eccb11ee8", "sha256": "327d282ed01988f6960b716e526f84707860ff37ac7ab9df1fe3c606d6efb37f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.27.tar.gz", "has_sig": false, "md5_digest": "013a8dadedd1d1dc1d23b68eccb11ee8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32697, "upload_time": "2017-01-05T13:24:56", "url": "https://files.pythonhosted.org/packages/30/c5/d0edd517d52078196465c6dc735c0b67a9dcc9875e967f07c8a0b0151dee/falcon-autocrud-1.0.27.tar.gz" } ], "1.0.28": [ { "comment_text": "", "digests": { "md5": "b408ceb6f8bbf96604d243ed958e9893", "sha256": "863508a7c750c9446bcdba1a280daa5f66293513756e8f0ec31c25b7ec669a79" }, "downloads": -1, "filename": "falcon-autocrud-1.0.28.tar.gz", "has_sig": false, "md5_digest": "b408ceb6f8bbf96604d243ed958e9893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33149, "upload_time": "2017-01-21T06:18:36", "url": "https://files.pythonhosted.org/packages/40/f9/a68a9b1bb66555e53435f5bfd81075c8447c2e0f173036ec0c7882dbfd97/falcon-autocrud-1.0.28.tar.gz" } ], "1.0.29": [ { "comment_text": "", "digests": { "md5": "0c978358f2b4cd6a957bf3f0ed92fee6", "sha256": "fd17d1c010bf2c5f3b0cdc3c790bac2c6d3cbaa00fcc0ff820e11c1bf2e4c809" }, "downloads": -1, "filename": "falcon-autocrud-1.0.29.tar.gz", "has_sig": false, "md5_digest": "0c978358f2b4cd6a957bf3f0ed92fee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32854, "upload_time": "2017-01-24T06:04:40", "url": "https://files.pythonhosted.org/packages/1e/36/88a43130b9387720d4afba4163f28efde7c997c5f6e111ec94359943c236/falcon-autocrud-1.0.29.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "83faa2c2198c0d1d93ba45a4d1e226e4", "sha256": "e975e765fefe088dbe8d50109e7c569255bf43830f0a9a9d064d85c7c06d04c7" }, "downloads": -1, "filename": "falcon-autocrud-1.0.3.tar.gz", "has_sig": false, "md5_digest": "83faa2c2198c0d1d93ba45a4d1e226e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10366, "upload_time": "2016-05-08T10:23:33", "url": "https://files.pythonhosted.org/packages/ef/36/8820f04fcf303e56f0c1999b5702d54dfb552dd940d7c709dd2a24f14dca/falcon-autocrud-1.0.3.tar.gz" } ], "1.0.30": [ { "comment_text": "", "digests": { "md5": "291181fe745e8b532f84960b03416cff", "sha256": "040f8fc04a5b0a640ae7ac7671ff0b4df1a7cb1d07d90b474916bf67c3acb7ff" }, "downloads": -1, "filename": "falcon-autocrud-1.0.30.tar.gz", "has_sig": false, "md5_digest": "291181fe745e8b532f84960b03416cff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32858, "upload_time": "2017-01-27T00:36:08", "url": "https://files.pythonhosted.org/packages/2f/8c/f5af971959ee6fda542036cfd502fe8d43b21dfe8321a4843a40c1ff2ab5/falcon-autocrud-1.0.30.tar.gz" } ], "1.0.31": [ { "comment_text": "", "digests": { "md5": "909a9ed5625fab8e9da77fe295396dec", "sha256": "b183d0b42be420e9518b893193f5aec4da6c4807a8bad2dcd7d33c85849be089" }, "downloads": -1, "filename": "falcon-autocrud-1.0.31.tar.gz", "has_sig": false, "md5_digest": "909a9ed5625fab8e9da77fe295396dec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32895, "upload_time": "2017-03-21T04:38:23", "url": "https://files.pythonhosted.org/packages/c4/c9/1edbc7c779b4c499326eb8b852e7aef41f82c5db974735a0cf64a5ededd9/falcon-autocrud-1.0.31.tar.gz" } ], "1.0.32": [ { "comment_text": "", "digests": { "md5": "436e93592f4b5bed4a0b55ab9f582f23", "sha256": "98979a52866a1fb5d7c9947cfa6d761678e99a6f3a3f91a75ae9efd49941fa81" }, "downloads": -1, "filename": "falcon-autocrud-1.0.32.tar.gz", "has_sig": false, "md5_digest": "436e93592f4b5bed4a0b55ab9f582f23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33695, "upload_time": "2017-09-26T12:17:59", "url": "https://files.pythonhosted.org/packages/9d/25/3d16d184585fc94a9dae6584cc75f2c1602a097a4ecb6c999e535de35d65/falcon-autocrud-1.0.32.tar.gz" } ], "1.0.33": [ { "comment_text": "", "digests": { "md5": "3b62673d984595f08487925c6bdf5ae8", "sha256": "dcae4ab766b57f3df86b9004211e3a4defe043b29aa38a06d000dbc3585afb73" }, "downloads": -1, "filename": "falcon-autocrud-1.0.33.tar.gz", "has_sig": false, "md5_digest": "3b62673d984595f08487925c6bdf5ae8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35027, "upload_time": "2017-10-26T05:52:44", "url": "https://files.pythonhosted.org/packages/14/08/e84e1b67e3d38b94cb58eaa71822df812f6a8180d4036e0c9589fcf9053d/falcon-autocrud-1.0.33.tar.gz" } ], "1.0.34": [ { "comment_text": "", "digests": { "md5": "a2e36b0837460fb6edd6b52dc45cb54a", "sha256": "d736b4d2f91bb327b3b450329fac386556d8c00e7f05b16de9cab28d0417050f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.34.tar.gz", "has_sig": false, "md5_digest": "a2e36b0837460fb6edd6b52dc45cb54a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35477, "upload_time": "2018-01-12T09:02:49", "url": "https://files.pythonhosted.org/packages/f4/c4/5eff1e3c17c379d29c25705d99d1d5a8b76590924df91e8ae54342708d94/falcon-autocrud-1.0.34.tar.gz" } ], "1.0.35": [ { "comment_text": "", "digests": { "md5": "e0b0afe2053986a2d1789e5e958a4d19", "sha256": "0150a28876cf2c942328eca120f23541df543f6464e941c5be6ab2bcc1c204e5" }, "downloads": -1, "filename": "falcon-autocrud-1.0.35.tar.gz", "has_sig": false, "md5_digest": "e0b0afe2053986a2d1789e5e958a4d19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37699, "upload_time": "2018-09-14T05:55:38", "url": "https://files.pythonhosted.org/packages/77/ac/5966c32ba64dc5bf473fcce95c0e04b477f9a5befe69407aab0571e642ec/falcon-autocrud-1.0.35.tar.gz" } ], "1.0.36": [ { "comment_text": "", "digests": { "md5": "8106734d1616db8a93b45a28f70545ac", "sha256": "8ff34b9b23a845fd40b6c902dd5768941c3cc03dba1837600812dcce3e73b93f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.36.tar.gz", "has_sig": false, "md5_digest": "8106734d1616db8a93b45a28f70545ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44043, "upload_time": "2018-09-27T05:33:01", "url": "https://files.pythonhosted.org/packages/40/31/45c9adc73fc6ab04bac12f318a6deea51fefe95332f375b34f0a1d1ccd0d/falcon-autocrud-1.0.36.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "dbb88848ae328435702735afd9e71d98", "sha256": "17c40e1a73fbe1253ae358f00dcb84e6cc670e99058211d2f708619682213dbf" }, "downloads": -1, "filename": "falcon-autocrud-1.0.5.tar.gz", "has_sig": false, "md5_digest": "dbb88848ae328435702735afd9e71d98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12558, "upload_time": "2016-05-27T06:01:34", "url": "https://files.pythonhosted.org/packages/33/51/8fb595a18c31d2c58c31d762881f9545b566c8da3e6f659bf4f999f1cbd6/falcon-autocrud-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "b2928704c102eed52f65e6e70ed3c576", "sha256": "28595aa9b791ec9f0c487b0554648bd449fa22b8c704dbcd8cb88de94466509e" }, "downloads": -1, "filename": "falcon-autocrud-1.0.6.tar.gz", "has_sig": false, "md5_digest": "b2928704c102eed52f65e6e70ed3c576", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13486, "upload_time": "2016-06-09T01:04:02", "url": "https://files.pythonhosted.org/packages/a6/04/f44a1903d825bd3a625e8ed8fd43f5c93f1a8982454ba45384ee8e8afc40/falcon-autocrud-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "2db07b718f3c444baedb7510f0aa8445", "sha256": "d2f2e98feb0d9e38a40b5446b309a22a57d22f53eb2626fb248f914d4034ee7f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.7.tar.gz", "has_sig": false, "md5_digest": "2db07b718f3c444baedb7510f0aa8445", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13553, "upload_time": "2016-06-10T02:55:58", "url": "https://files.pythonhosted.org/packages/cf/3a/1ea4a8db444174136234145a42d64605ac22211dcd2bc846798d9f20c9fa/falcon-autocrud-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "df1f8671bd20acc6bbac82f483731c93", "sha256": "9f065beee87bbfcfff0bf8466c14b8c78a047d7e0ad104e2d3c15ffc621bd8c5" }, "downloads": -1, "filename": "falcon-autocrud-1.0.8.tar.gz", "has_sig": false, "md5_digest": "df1f8671bd20acc6bbac82f483731c93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13635, "upload_time": "2016-06-10T04:08:35", "url": "https://files.pythonhosted.org/packages/2e/a9/0cec3a6f4b9d062cb399765bb473a18ad9d29b7faf450a8d037cd3ecf852/falcon-autocrud-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "6a893bd474613ece1666d7d591d23d11", "sha256": "a4887d1d90aa8fecac4bbfe79fc775937ddc3c8e9a223318b726e2838472af14" }, "downloads": -1, "filename": "falcon-autocrud-1.0.9.tar.gz", "has_sig": false, "md5_digest": "6a893bd474613ece1666d7d591d23d11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13617, "upload_time": "2016-06-10T04:20:24", "url": "https://files.pythonhosted.org/packages/e5/d3/30103e164127969fc870eb21bd2d6f7cccac5a5739fee4f1a7ccd776562a/falcon-autocrud-1.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8106734d1616db8a93b45a28f70545ac", "sha256": "8ff34b9b23a845fd40b6c902dd5768941c3cc03dba1837600812dcce3e73b93f" }, "downloads": -1, "filename": "falcon-autocrud-1.0.36.tar.gz", "has_sig": false, "md5_digest": "8106734d1616db8a93b45a28f70545ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44043, "upload_time": "2018-09-27T05:33:01", "url": "https://files.pythonhosted.org/packages/40/31/45c9adc73fc6ab04bac12f318a6deea51fefe95332f375b34f0a1d1ccd0d/falcon-autocrud-1.0.36.tar.gz" } ] }