diff --git a/docs/_data/pypi.json b/docs/_data/pypi.json
index 717136e..3e6cdc4 100644
--- a/docs/_data/pypi.json
+++ b/docs/_data/pypi.json
@@ -1 +1 @@
-{"info":{"author":"Dan McKinley","author_email":"mcfunley@gmail.com","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","Intended Audience :: Developers","License :: OSI Approved :: Apache Software License","Operating System :: OS Independent","Programming Language :: Python :: 3","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Python :: 3.10","Topic :: Database :: Front-Ends"],"description":"[PugSQL](https://pugsql.org) is a simple Python interface for using parameterized SQL, in files, with [any SQLAlchemy-supported database](https://docs.sqlalchemy.org/en/13/dialects/index.html).\n\nFor more information and full documentation, visit [pugsql.org](https://pugsql.org).\n\n```\nimport pugsql\n\n# Create a module of database functions from a set of sql files on disk.\nqueries = pugsql.module('resources/sql')\n\n# Point the module at your database.\nqueries.connect('sqlite:///foo.db')\n\n# Invoke parameterized queries, receive dicts!\nuser = queries.find_user(user_id=42)\n\n# -> { 'user_id': 42, 'username': 'mcfunley' }\n```\n\nIn the example above, the query would be specified like this:\n\n```\n--- :name find_user :one\nselect * from users where user_id = :user_id\n```\n\nSo _throw away_ your bulky ORM and talk to your database the way the gods intended! Install PugSQL today!\n","description_content_type":"text/markdown","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"https://pugsql.org","keywords":"","license":"Apache-2.0","maintainer":"","maintainer_email":"","name":"pugsql","package_url":"https://pypi.org/project/pugsql/","platform":null,"project_url":"https://pypi.org/project/pugsql/","project_urls":{"Homepage":"https://pugsql.org","Repository":"https://github.com/mcfunley/pugsql"},"release_url":"https://pypi.org/project/pugsql/0.2.4/","requires_dist":["sqlalchemy (>=1.3,<2.0)"],"requires_python":">=3.7","summary":"PugSQL is an anti-ORM that facilitates interacting with databases using SQL in files.","version":"0.2.4","yanked":false,"yanked_reason":null},"last_serial":13165145,"releases":{"0.1.0":[{"comment_text":"","digests":{"md5":"e538debc11970078530d1581d87d304f","sha256":"ad07a3df558c01d7cddec40cf43a91ac32306577bcabfcc62cbc387596e415f1"},"downloads":-1,"filename":"pugsql-0.1.0-py3-none-any.whl","has_sig":false,"md5_digest":"e538debc11970078530d1581d87d304f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":3325,"upload_time":"2019-05-23T20:25:03","upload_time_iso_8601":"2019-05-23T20:25:03.058254Z","url":"https://files.pythonhosted.org/packages/2c/af/7fe81eecef83fcaecaf8cf5a74471ae638703cfae24cf63ee85e17793229/pugsql-0.1.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"ba337eeb0cf7ab6d07826d79e9b4128f","sha256":"faab0faea0f579adff91a049ff7071ff726083b7d73e253749f20d996dda7640"},"downloads":-1,"filename":"pugsql-0.1.0.tar.gz","has_sig":false,"md5_digest":"ba337eeb0cf7ab6d07826d79e9b4128f","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":2371,"upload_time":"2019-05-23T20:25:05","upload_time_iso_8601":"2019-05-23T20:25:05.039118Z","url":"https://files.pythonhosted.org/packages/c0/07/26145447d59b0f3efe39333b829fd5c3154b99b187d3687f54ea29739d47/pugsql-0.1.0.tar.gz","yanked":false,"yanked_reason":null}],"0.1.1":[{"comment_text":"","digests":{"md5":"e637edc85b200691f57d39eb37a10276","sha256":"b477a0cc2a5b8e27cd10f9f68cc153251bb62293cca5c922fc753b9d0121c2f7"},"downloads":-1,"filename":"pugsql-0.1.1-py3-none-any.whl","has_sig":false,"md5_digest":"e637edc85b200691f57d39eb37a10276","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":7440,"upload_time":"2019-05-24T05:12:30","upload_time_iso_8601":"2019-05-24T05:12:30.298929Z","url":"https://files.pythonhosted.org/packages/a3/05/c47cf0a0372694a6965fcd7a93daa97da343da3f119e92e4fe6c0e0e08b1/pugsql-0.1.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"3be281dc16a7c32cd863e34da08a1b4b","sha256":"95d49af0f70228d4b85fa76218c02342c21ce13f42e1af9542a9c9bd5f92186b"},"downloads":-1,"filename":"pugsql-0.1.1.tar.gz","has_sig":false,"md5_digest":"3be281dc16a7c32cd863e34da08a1b4b","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":6424,"upload_time":"2019-05-24T05:12:31","upload_time_iso_8601":"2019-05-24T05:12:31.530744Z","url":"https://files.pythonhosted.org/packages/da/51/cb6e8832c60a2615b4b7ecabe405f20ca5db75e3169c7ed85ee0dce072b7/pugsql-0.1.1.tar.gz","yanked":false,"yanked_reason":null}],"0.1.10":[{"comment_text":"","digests":{"md5":"36e7bbcf3770e872d287371207509b20","sha256":"1ac4464134c1b8aa2febaf87d857e6fd40fb4108863a74ea9545cf52cde46e17"},"downloads":-1,"filename":"pugsql-0.1.10-py3-none-any.whl","has_sig":false,"md5_digest":"36e7bbcf3770e872d287371207509b20","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12929,"upload_time":"2019-06-11T16:24:26","upload_time_iso_8601":"2019-06-11T16:24:26.713809Z","url":"https://files.pythonhosted.org/packages/f2/97/64b8e4800f84f90e19eb78c1468080e0adb6dd9f7556fb6818ec8a2681d2/pugsql-0.1.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"6ec1c13fd0363057faab5a50cd051d48","sha256":"4c458307c7a129dafc932aa67b8960eba7f0f1f8a8225b7821820bf6b6686b1a"},"downloads":-1,"filename":"pugsql-0.1.10.tar.gz","has_sig":false,"md5_digest":"6ec1c13fd0363057faab5a50cd051d48","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11052,"upload_time":"2019-06-11T16:24:27","upload_time_iso_8601":"2019-06-11T16:24:27.900028Z","url":"https://files.pythonhosted.org/packages/52/40/33644f7fd32af14ca94db9e5291326ba6839a365927292f97addb7a4644e/pugsql-0.1.10.tar.gz","yanked":false,"yanked_reason":null}],"0.1.11":[{"comment_text":"","digests":{"md5":"05ad814184737d0b025d464973772ec4","sha256":"717d07021d23421a7675aa600f725ff603f79f6f298005617b1e09476bcbf01e"},"downloads":-1,"filename":"pugsql-0.1.11-py3-none-any.whl","has_sig":false,"md5_digest":"05ad814184737d0b025d464973772ec4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13000,"upload_time":"2019-06-14T16:25:28","upload_time_iso_8601":"2019-06-14T16:25:28.653213Z","url":"https://files.pythonhosted.org/packages/5e/38/610dab3625e1dc8d20ea26c1f8d6b0ebbb2525d87c5b2e512713963b6bc0/pugsql-0.1.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"a0ec3ef4903ceefdb3afc42c34c67c5f","sha256":"93e46cb50d26cc919c17521fb6aaaece2c9a084115bdcece8a007623bef6ae63"},"downloads":-1,"filename":"pugsql-0.1.11.tar.gz","has_sig":false,"md5_digest":"a0ec3ef4903ceefdb3afc42c34c67c5f","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11161,"upload_time":"2019-06-14T16:25:29","upload_time_iso_8601":"2019-06-14T16:25:29.938623Z","url":"https://files.pythonhosted.org/packages/96/49/02efcea5998f82100089265a780717cf80eb818f12173637ecce7b3a32f7/pugsql-0.1.11.tar.gz","yanked":false,"yanked_reason":null}],"0.1.12":[{"comment_text":"","digests":{"md5":"50abda1166dddbccacc0c14ccd3f617f","sha256":"2ce4b30c861d3b6e38b2696b50407511f29bb7b034b3467eba0e9dfee69c89e1"},"downloads":-1,"filename":"pugsql-0.1.12-py3-none-any.whl","has_sig":false,"md5_digest":"50abda1166dddbccacc0c14ccd3f617f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13124,"upload_time":"2019-06-23T01:58:28","upload_time_iso_8601":"2019-06-23T01:58:28.668770Z","url":"https://files.pythonhosted.org/packages/19/35/e65e1ad5f64e90d63fb93a6936897e1a0555c7d6f4461ab4aecda6d30944/pugsql-0.1.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"1d6ec45a76aeb0dc5da44c608dbe1630","sha256":"0bd3c9b13c22a175377a99ff4821e54532ed3795c7fec3ca9333af51b9e76aca"},"downloads":-1,"filename":"pugsql-0.1.12.tar.gz","has_sig":false,"md5_digest":"1d6ec45a76aeb0dc5da44c608dbe1630","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11275,"upload_time":"2019-06-23T01:58:30","upload_time_iso_8601":"2019-06-23T01:58:30.209892Z","url":"https://files.pythonhosted.org/packages/5f/d5/7517111ebf4c21b164eb99d0c0faeb3504219c080c1402a0b9228d3dad91/pugsql-0.1.12.tar.gz","yanked":false,"yanked_reason":null}],"0.1.13":[{"comment_text":"","digests":{"md5":"d47628ac6248bbdbbeed54785e237916","sha256":"3619b31c4ef859bf3d36e2f00a339b41989ca40bc3cb5c0d7714582386382824"},"downloads":-1,"filename":"pugsql-0.1.13-py3-none-any.whl","has_sig":false,"md5_digest":"d47628ac6248bbdbbeed54785e237916","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13404,"upload_time":"2019-06-28T21:11:33","upload_time_iso_8601":"2019-06-28T21:11:33.395341Z","url":"https://files.pythonhosted.org/packages/a5/d7/7c0f264e63ed03a056cb265aba9860ff651000347be5548957731540df7b/pugsql-0.1.13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d7f92487da2010dcbc7d14055de95a34","sha256":"831787c81353c0450b16fd10c76e522a01cd1a30e2604f35af33ad07882b5e26"},"downloads":-1,"filename":"pugsql-0.1.13.tar.gz","has_sig":false,"md5_digest":"d7f92487da2010dcbc7d14055de95a34","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11499,"upload_time":"2019-06-28T21:11:35","upload_time_iso_8601":"2019-06-28T21:11:35.138362Z","url":"https://files.pythonhosted.org/packages/9a/72/a6aa98e791383272199220c224a14b60f85d76a087cc58f8e25328dcf47e/pugsql-0.1.13.tar.gz","yanked":false,"yanked_reason":null}],"0.1.14":[{"comment_text":"","digests":{"md5":"a82ba389e3abb02194bad494243d96db","sha256":"01a8eb8bf989bbdfb44915ec800005c66fe438d36bd030ba504dc773316a2222"},"downloads":-1,"filename":"pugsql-0.1.14-py3-none-any.whl","has_sig":false,"md5_digest":"a82ba389e3abb02194bad494243d96db","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13495,"upload_time":"2019-06-29T16:49:50","upload_time_iso_8601":"2019-06-29T16:49:50.101019Z","url":"https://files.pythonhosted.org/packages/2f/39/602618c0348130b41f31d7435e024a40a7a9264b618b3cd5f15f26854897/pugsql-0.1.14-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"dbc524fd7ecc0e3c46325ca23168905c","sha256":"81711de248661e26607fae72ed74ce62e0ac2e6342f56deb562b7813d6c44b06"},"downloads":-1,"filename":"pugsql-0.1.14.tar.gz","has_sig":false,"md5_digest":"dbc524fd7ecc0e3c46325ca23168905c","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11591,"upload_time":"2019-06-29T16:49:51","upload_time_iso_8601":"2019-06-29T16:49:51.409170Z","url":"https://files.pythonhosted.org/packages/3c/de/ac9b67693d0086b19c7944a420a4e57d71061a757389becda2aea426e747/pugsql-0.1.14.tar.gz","yanked":false,"yanked_reason":null}],"0.1.15":[{"comment_text":"","digests":{"md5":"e977c791555939b68f5284c366f3bf51","sha256":"fe65d07a901a5faab9786b175fd7641f2691edf093f014af6ef9171fcefcc8c8"},"downloads":-1,"filename":"pugsql-0.1.15-py3-none-any.whl","has_sig":false,"md5_digest":"e977c791555939b68f5284c366f3bf51","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13542,"upload_time":"2019-06-29T17:14:16","upload_time_iso_8601":"2019-06-29T17:14:16.671824Z","url":"https://files.pythonhosted.org/packages/61/42/1e4bc6e4fccbfd2f7e7546578a8ae661980afd68377889bc9dcd20f15588/pugsql-0.1.15-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"58e586ed3044a490035ed7f9a884ec19","sha256":"169c1f3007970c62e1556b3d451b8526615662ede00d939ea4e1e89a39c00ce9"},"downloads":-1,"filename":"pugsql-0.1.15.tar.gz","has_sig":false,"md5_digest":"58e586ed3044a490035ed7f9a884ec19","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11633,"upload_time":"2019-06-29T17:14:18","upload_time_iso_8601":"2019-06-29T17:14:18.043651Z","url":"https://files.pythonhosted.org/packages/36/09/de60e9173b1f40bfe1c551f2000bad1a850876170bdb8136b38a02f4b69b/pugsql-0.1.15.tar.gz","yanked":false,"yanked_reason":null}],"0.1.16":[{"comment_text":"","digests":{"md5":"ca25b3111edc67b07f5d002c50361422","sha256":"883b1e59615cd848fb64929bbd0458ec2bd9685a4d50021bc1f4759ba0b7b042"},"downloads":-1,"filename":"pugsql-0.1.16-py3-none-any.whl","has_sig":false,"md5_digest":"ca25b3111edc67b07f5d002c50361422","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13626,"upload_time":"2020-01-12T04:52:28","upload_time_iso_8601":"2020-01-12T04:52:28.526777Z","url":"https://files.pythonhosted.org/packages/df/a1/9c25a2b801388eb609118babeabac338acffa32655d922b1e529f70236fe/pugsql-0.1.16-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"3e5f875b646981d00a85c347d9946495","sha256":"d5e462313463e30311d62dbf4def5fe035381c2d9ee5ce5a7d9586ff053d4160"},"downloads":-1,"filename":"pugsql-0.1.16.tar.gz","has_sig":false,"md5_digest":"3e5f875b646981d00a85c347d9946495","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11723,"upload_time":"2020-01-12T04:52:30","upload_time_iso_8601":"2020-01-12T04:52:30.294719Z","url":"https://files.pythonhosted.org/packages/06/b6/06af0b71496b2ba47ea87d549933ce10955471ea5716744811230c2825e5/pugsql-0.1.16.tar.gz","yanked":false,"yanked_reason":null}],"0.1.17":[{"comment_text":"","digests":{"md5":"10ed9a7deab752c9502eaa11ae3ee43c","sha256":"7b9b835c8b4b1216c8881413b9db1269ce2c9153ecf19e12b4a52a9a24b7261d"},"downloads":-1,"filename":"pugsql-0.1.17-py3-none-any.whl","has_sig":false,"md5_digest":"10ed9a7deab752c9502eaa11ae3ee43c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13702,"upload_time":"2020-02-09T18:57:23","upload_time_iso_8601":"2020-02-09T18:57:23.844489Z","url":"https://files.pythonhosted.org/packages/d9/40/41d1c78d222648be4631dc29a19d56c441a29fa47084a7008919bb1bd64c/pugsql-0.1.17-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"f9437e3357e43949cef548ef4f71fa3a","sha256":"2e33fa6906037af060f7f9ef3326156b53fd61c05fd4612248ed05097ad13e63"},"downloads":-1,"filename":"pugsql-0.1.17.tar.gz","has_sig":false,"md5_digest":"f9437e3357e43949cef548ef4f71fa3a","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11789,"upload_time":"2020-02-09T18:57:25","upload_time_iso_8601":"2020-02-09T18:57:25.203471Z","url":"https://files.pythonhosted.org/packages/01/eb/66294d0b1c339e0c8885905689dc2a557826238b448ed8bfbb4406a90b78/pugsql-0.1.17.tar.gz","yanked":false,"yanked_reason":null}],"0.1.18":[{"comment_text":"","digests":{"md5":"c90f088e7608d99e38f3aed530dc586f","sha256":"39667ca3df3db88f33077e51965e5dc4419cd1e85882b3b70a49b8bf07ced456"},"downloads":-1,"filename":"pugsql-0.1.18-py3-none-any.whl","has_sig":false,"md5_digest":"c90f088e7608d99e38f3aed530dc586f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13707,"upload_time":"2020-02-09T19:04:07","upload_time_iso_8601":"2020-02-09T19:04:07.439569Z","url":"https://files.pythonhosted.org/packages/33/4e/de73076973b5a012aeb0567531a6c29f08a6200b83ec835f0c41084f8434/pugsql-0.1.18-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"234cf99600efdd55cb8da611111f04cd","sha256":"1cba41ef8eba8ade3441d817e7555774f39f6334412cee16ecec9404f26ede29"},"downloads":-1,"filename":"pugsql-0.1.18.tar.gz","has_sig":false,"md5_digest":"234cf99600efdd55cb8da611111f04cd","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11794,"upload_time":"2020-02-09T19:04:09","upload_time_iso_8601":"2020-02-09T19:04:09.014269Z","url":"https://files.pythonhosted.org/packages/2f/0a/87bc5ab209afa1e4bc2757389ff2c308ef8520312a7d3c54e754a152f49d/pugsql-0.1.18.tar.gz","yanked":false,"yanked_reason":null}],"0.1.19":[{"comment_text":"","digests":{"md5":"4440fc445dd717e2a6487ed1ef6cc73d","sha256":"fbdc9713f653ab50d76fc1fbd2ec35e8d65a2d2ab635347f43ed40876fae92a3"},"downloads":-1,"filename":"pugsql-0.1.19-py3-none-any.whl","has_sig":false,"md5_digest":"4440fc445dd717e2a6487ed1ef6cc73d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13917,"upload_time":"2020-08-27T17:41:04","upload_time_iso_8601":"2020-08-27T17:41:04.674698Z","url":"https://files.pythonhosted.org/packages/e3/8f/fa5fad4064736ecabdfdb1d4cf260c69d1c1dc60a8c4c799f185e1724e91/pugsql-0.1.19-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"1b38c88c3f91dbb7b98a5e2c80afe8ec","sha256":"1ed46b182edf8f23f56a828663b8f2e9863d4ab082d59e8415a4d558e4947748"},"downloads":-1,"filename":"pugsql-0.1.19.tar.gz","has_sig":false,"md5_digest":"1b38c88c3f91dbb7b98a5e2c80afe8ec","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11925,"upload_time":"2020-08-27T17:41:05","upload_time_iso_8601":"2020-08-27T17:41:05.855451Z","url":"https://files.pythonhosted.org/packages/74/69/d538c9e64c7c2d1f4327713441934d5f3b4aa0443d0488b13a6acb5aba52/pugsql-0.1.19.tar.gz","yanked":false,"yanked_reason":null}],"0.1.2":[{"comment_text":"","digests":{"md5":"e47315e93b4bd3ba30ea808344a6f168","sha256":"e66ff40484f78343ae9dee0e70ec34d52b769e369891c49a7d021d5b063eac77"},"downloads":-1,"filename":"pugsql-0.1.2-py3-none-any.whl","has_sig":false,"md5_digest":"e47315e93b4bd3ba30ea808344a6f168","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":7441,"upload_time":"2019-05-24T06:04:37","upload_time_iso_8601":"2019-05-24T06:04:37.119216Z","url":"https://files.pythonhosted.org/packages/6f/2f/64be5238997e32d4c2e8b4b04dde8807e080536d63d2ce9a83e8fb4f17ee/pugsql-0.1.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"65949698da2131b209529d9bfb0f1763","sha256":"475030180853a8a87c9c784e8bdd4c1960d0ec61b9fa586d19975171343eca52"},"downloads":-1,"filename":"pugsql-0.1.2.tar.gz","has_sig":false,"md5_digest":"65949698da2131b209529d9bfb0f1763","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":6425,"upload_time":"2019-05-24T06:04:38","upload_time_iso_8601":"2019-05-24T06:04:38.438538Z","url":"https://files.pythonhosted.org/packages/5f/fe/3c86dfc2044d3633d986cd2d096afd0e68e238dc507771c5861a4f7bbc0d/pugsql-0.1.2.tar.gz","yanked":false,"yanked_reason":null}],"0.1.3":[{"comment_text":"","digests":{"md5":"4552a34831d4eb20d49c8ec64e53e63e","sha256":"8eb84438534e37b8e37ca3e43d57bcc24e0b55fb0223d7eb5e55dcdec9a79899"},"downloads":-1,"filename":"pugsql-0.1.3-py3-none-any.whl","has_sig":false,"md5_digest":"4552a34831d4eb20d49c8ec64e53e63e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":7459,"upload_time":"2019-05-25T01:10:16","upload_time_iso_8601":"2019-05-25T01:10:16.288154Z","url":"https://files.pythonhosted.org/packages/db/6e/7db97d728830e90e09d5a3eae0fe1e63fbd475c3ee31610d647e5745d732/pugsql-0.1.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"f2e67b4498e65d51a7473050630113c0","sha256":"6076bdbcc869bebf8e01d317c023f626e0986504eae2848232bd15e3fe05bf3c"},"downloads":-1,"filename":"pugsql-0.1.3.tar.gz","has_sig":false,"md5_digest":"f2e67b4498e65d51a7473050630113c0","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":6460,"upload_time":"2019-05-25T01:10:17","upload_time_iso_8601":"2019-05-25T01:10:17.637160Z","url":"https://files.pythonhosted.org/packages/da/da/448a977f1d427343ad8152b0bc19751f10180bb7ae0e34cb2e5573f3e6c3/pugsql-0.1.3.tar.gz","yanked":false,"yanked_reason":null}],"0.1.4":[{"comment_text":"","digests":{"md5":"191bf41c5cc1131fdbdecbd825f5dde0","sha256":"37fc84e1d372c06e36745e45de687be31e2460a0ee97d07acabfc9dea1ff7687"},"downloads":-1,"filename":"pugsql-0.1.4-py3-none-any.whl","has_sig":false,"md5_digest":"191bf41c5cc1131fdbdecbd825f5dde0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":8564,"upload_time":"2019-05-25T20:21:56","upload_time_iso_8601":"2019-05-25T20:21:56.590487Z","url":"https://files.pythonhosted.org/packages/b5/b6/00825a3b82e8c71e5d40504efabf6f254a4d00b19dd799d76e104798c203/pugsql-0.1.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"8ff1a7a73f7ba6ae541fe04ead6d3436","sha256":"3a420e18c2125fb31eaa80b27c23f8e12068a147d0355a714f47d47a798eaa06"},"downloads":-1,"filename":"pugsql-0.1.4.tar.gz","has_sig":false,"md5_digest":"8ff1a7a73f7ba6ae541fe04ead6d3436","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":7456,"upload_time":"2019-05-25T20:21:57","upload_time_iso_8601":"2019-05-25T20:21:57.815569Z","url":"https://files.pythonhosted.org/packages/26/cc/387001b3869af5671416c15f19849ff7aa4addab8ff6e392432e0556129d/pugsql-0.1.4.tar.gz","yanked":false,"yanked_reason":null}],"0.1.5":[{"comment_text":"","digests":{"md5":"b9abec274e171fc06789b11681c82468","sha256":"0fea82a4cd8ff560fd628e6c329650684f99946952bd13e2f1b34815245b24db"},"downloads":-1,"filename":"pugsql-0.1.5-py3-none-any.whl","has_sig":false,"md5_digest":"b9abec274e171fc06789b11681c82468","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":8567,"upload_time":"2019-05-25T20:39:06","upload_time_iso_8601":"2019-05-25T20:39:06.132238Z","url":"https://files.pythonhosted.org/packages/ad/e3/4f9f2d02e81f21777d00df673894f5e7417acd04290adb21aaccc742f7fc/pugsql-0.1.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"bf8481961bb42ad9288d838f163cb1c0","sha256":"e52aecd583fc6a598d08125ec0b8c2727babfa01b239959776525c5f6267d6fc"},"downloads":-1,"filename":"pugsql-0.1.5.tar.gz","has_sig":false,"md5_digest":"bf8481961bb42ad9288d838f163cb1c0","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":7472,"upload_time":"2019-05-25T20:39:07","upload_time_iso_8601":"2019-05-25T20:39:07.329349Z","url":"https://files.pythonhosted.org/packages/75/28/5ab871b90ed02c624f4fc977f1af951cd718b78cf281fba34eb14a0e851f/pugsql-0.1.5.tar.gz","yanked":false,"yanked_reason":null}],"0.1.6":[{"comment_text":"","digests":{"md5":"eadef40d23dd5df907aa86706d44a95c","sha256":"87f1dfb3affe35754e18c4fae8c1b59a518693b7ff74efc74e5364befa6e5328"},"downloads":-1,"filename":"pugsql-0.1.6-py3-none-any.whl","has_sig":false,"md5_digest":"eadef40d23dd5df907aa86706d44a95c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":10050,"upload_time":"2019-05-26T17:25:58","upload_time_iso_8601":"2019-05-26T17:25:58.982271Z","url":"https://files.pythonhosted.org/packages/2e/2a/abe4f60e1cf43f66a54624e04bdafd226bf0b9de6a7293b251314633fbe1/pugsql-0.1.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"0539b6a63340e9fd06524f3c81d3c448","sha256":"15d8e5f4563e27a99c941d015b718c63ea3ba28c2fe225672b434c2ddd0f0f0d"},"downloads":-1,"filename":"pugsql-0.1.6.tar.gz","has_sig":false,"md5_digest":"0539b6a63340e9fd06524f3c81d3c448","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":8521,"upload_time":"2019-05-26T17:26:00","upload_time_iso_8601":"2019-05-26T17:26:00.247528Z","url":"https://files.pythonhosted.org/packages/c8/3a/f5c3fe16421876c8de9d0b40638a6db0b3d2df445a00c0f4922b4faef9cf/pugsql-0.1.6.tar.gz","yanked":false,"yanked_reason":null}],"0.1.7":[{"comment_text":"","digests":{"md5":"2a3f5f7912ee0f8d484e8a6caa293c8a","sha256":"6276ecdbaa1f8a47d54a90c66d52111563db1e7a8be01ae8793d435f7e0265b1"},"downloads":-1,"filename":"pugsql-0.1.7-py3-none-any.whl","has_sig":false,"md5_digest":"2a3f5f7912ee0f8d484e8a6caa293c8a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":11914,"upload_time":"2019-05-28T03:52:35","upload_time_iso_8601":"2019-05-28T03:52:35.203485Z","url":"https://files.pythonhosted.org/packages/99/9c/15ffff9b0d980b8fa82eb91878d7ecded188c87cf85f7c958dcf043fc051/pugsql-0.1.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"741c82f150230f78ae42d81ae62857ee","sha256":"ecc26e37ba28e880e59d2ba37e72786417ba6af72cba4466317dafc61eb6d460"},"downloads":-1,"filename":"pugsql-0.1.7.tar.gz","has_sig":false,"md5_digest":"741c82f150230f78ae42d81ae62857ee","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":10084,"upload_time":"2019-05-28T03:52:36","upload_time_iso_8601":"2019-05-28T03:52:36.580080Z","url":"https://files.pythonhosted.org/packages/5b/a0/640985789fd1ce7cea6b3779ba01f2cfbf2fbe6e1fd37d1ccaf4729d9976/pugsql-0.1.7.tar.gz","yanked":false,"yanked_reason":null}],"0.1.8":[{"comment_text":"","digests":{"md5":"6830e8a699d657b032bccc461dcc6cb9","sha256":"b9d7f88c1237ac3168071edbae078661337213b4ea04e932dff4ffd7e3470bb1"},"downloads":-1,"filename":"pugsql-0.1.8-py3-none-any.whl","has_sig":false,"md5_digest":"6830e8a699d657b032bccc461dcc6cb9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12166,"upload_time":"2019-06-08T01:37:26","upload_time_iso_8601":"2019-06-08T01:37:26.005113Z","url":"https://files.pythonhosted.org/packages/b2/bb/456644c3c0063ccfe783ef511e1873d328f36cfd831e4fbe64796fa30b56/pugsql-0.1.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"e86e91d50523a8d258583c5ed2d754fb","sha256":"9dbd2e26f263ba39f5801352e80966b821093f8b805077edbbc8e98cb999f314"},"downloads":-1,"filename":"pugsql-0.1.8.tar.gz","has_sig":false,"md5_digest":"e86e91d50523a8d258583c5ed2d754fb","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":10387,"upload_time":"2019-06-08T01:37:27","upload_time_iso_8601":"2019-06-08T01:37:27.462643Z","url":"https://files.pythonhosted.org/packages/d6/ee/1819b940aad72ad1c30781e20f7c5325adecdcd1bbbb3199382f9550d407/pugsql-0.1.8.tar.gz","yanked":false,"yanked_reason":null}],"0.1.9":[{"comment_text":"","digests":{"md5":"e227bd9d3e0fe886f67e2f58fdec1f39","sha256":"c1596017fc40cb6f763c4f747eab33aefa39580c2981baa648741c1e78f0aef0"},"downloads":-1,"filename":"pugsql-0.1.9-py3-none-any.whl","has_sig":false,"md5_digest":"e227bd9d3e0fe886f67e2f58fdec1f39","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12909,"upload_time":"2019-06-10T22:27:36","upload_time_iso_8601":"2019-06-10T22:27:36.832728Z","url":"https://files.pythonhosted.org/packages/f2/74/ee5e7e55c5a73de3499c5b83d0f852aacc2e8b91b254b9d1d684567fe0fb/pugsql-0.1.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"25d400ec852669f2db2a8ab8a8bd6357","sha256":"0d3cf1a454edd5a0387fbd1e436be738498ee22f102a28a0215884d2264d03de"},"downloads":-1,"filename":"pugsql-0.1.9.tar.gz","has_sig":false,"md5_digest":"25d400ec852669f2db2a8ab8a8bd6357","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11039,"upload_time":"2019-06-10T22:27:38","upload_time_iso_8601":"2019-06-10T22:27:38.079608Z","url":"https://files.pythonhosted.org/packages/62/e3/818903ed838fb260fdddd97e970962b2e76c0c27439e5a95e029b7ac14cf/pugsql-0.1.9.tar.gz","yanked":false,"yanked_reason":null}],"0.2.0":[{"comment_text":"","digests":{"md5":"845e4d16651445a0052ac9c6764671e7","sha256":"338bb24716ef43a7e787a43c15903bb988135d5f9a3cbe89480ea1292a8e98cd"},"downloads":-1,"filename":"pugsql-0.2.0-py3-none-any.whl","has_sig":false,"md5_digest":"845e4d16651445a0052ac9c6764671e7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13598,"upload_time":"2020-09-03T17:21:02","upload_time_iso_8601":"2020-09-03T17:21:02.006780Z","url":"https://files.pythonhosted.org/packages/b9/8d/bafe2c3964a325c02aa94e6608ebfb981f7e5e8039c75b391419746072cc/pugsql-0.2.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d4adee25c75e99dd3c2cf51ddef65ce5","sha256":"cd315bd2168cb572a3e6e20b9450b56692e5f3378fd6f821d12086b786449dc4"},"downloads":-1,"filename":"pugsql-0.2.0.tar.gz","has_sig":false,"md5_digest":"d4adee25c75e99dd3c2cf51ddef65ce5","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11676,"upload_time":"2020-09-03T17:21:03","upload_time_iso_8601":"2020-09-03T17:21:03.426780Z","url":"https://files.pythonhosted.org/packages/b7/46/5bde8040c5a667f8892917096ebd71467029e2f0e26f9c57d1aa20c63b3d/pugsql-0.2.0.tar.gz","yanked":false,"yanked_reason":null}],"0.2.1":[{"comment_text":"","digests":{"md5":"7ff59a4575e8ae916b8607c0fc188dc2","sha256":"4274b72948b3dbad1d7acc2a73287c7d41c1043de95b4f66ffa58d25dc301de6"},"downloads":-1,"filename":"pugsql-0.2.1-py3-none-any.whl","has_sig":false,"md5_digest":"7ff59a4575e8ae916b8607c0fc188dc2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13719,"upload_time":"2020-09-03T22:44:19","upload_time_iso_8601":"2020-09-03T22:44:19.643081Z","url":"https://files.pythonhosted.org/packages/95/ef/801b3f722c0870fa3db8d7e96553bce18e065f30f91ecd1551f2af851f3b/pugsql-0.2.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"befa305c8b7840fa4f6d9686f0d3d77a","sha256":"1cf541af32c8b1b030c3d60803b0463a0490fb6cea9e3f373861984fff7375ec"},"downloads":-1,"filename":"pugsql-0.2.1.tar.gz","has_sig":false,"md5_digest":"befa305c8b7840fa4f6d9686f0d3d77a","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11795,"upload_time":"2020-09-03T22:44:20","upload_time_iso_8601":"2020-09-03T22:44:20.786099Z","url":"https://files.pythonhosted.org/packages/b7/90/9a2fd37bae313856b5bdb0ee0706f7789d8c0729a6dc7bbc194585623ba7/pugsql-0.2.1.tar.gz","yanked":false,"yanked_reason":null}],"0.2.2":[{"comment_text":"","digests":{"md5":"f28adb85fe0ad5337b6fecfdc19fa1bc","sha256":"adadcc015ba59b17887cf7fa72fc2aa0bbf22faf993a10761930e2294546828e"},"downloads":-1,"filename":"pugsql-0.2.2-py3-none-any.whl","has_sig":false,"md5_digest":"f28adb85fe0ad5337b6fecfdc19fa1bc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13781,"upload_time":"2020-09-13T05:35:42","upload_time_iso_8601":"2020-09-13T05:35:42.119859Z","url":"https://files.pythonhosted.org/packages/15/33/4ec36b431229ee7607f199650a0a81d0fd0a3eeefbff6423b7b09b9ca387/pugsql-0.2.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"b5cf74cebcf3e77a5c52a267f9dfd3ab","sha256":"f61c596215412969e06662b6ba073e5697949f420b2797c20db08a38f6a19ab4"},"downloads":-1,"filename":"pugsql-0.2.2.tar.gz","has_sig":false,"md5_digest":"b5cf74cebcf3e77a5c52a267f9dfd3ab","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11848,"upload_time":"2020-09-13T05:35:43","upload_time_iso_8601":"2020-09-13T05:35:43.121082Z","url":"https://files.pythonhosted.org/packages/82/97/73dce9b4a9a0e49c9913ed30f8588dff981dffa0c72545327dd0b8741f1c/pugsql-0.2.2.tar.gz","yanked":false,"yanked_reason":null}],"0.2.3":[{"comment_text":"","digests":{"md5":"7772435f7525343f545d22bf7ab89840","sha256":"8970a421388bf7d6277517d361e0e1a4bf7d5b0ffaa7c77123aabfec9f3f58b6"},"downloads":-1,"filename":"pugsql-0.2.3-py3-none-any.whl","has_sig":false,"md5_digest":"7772435f7525343f545d22bf7ab89840","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13781,"upload_time":"2020-09-13T06:06:09","upload_time_iso_8601":"2020-09-13T06:06:09.234448Z","url":"https://files.pythonhosted.org/packages/f4/85/742aff5b46e2f7415d485a46516b79bcbce13a199d94bebe3b32ab3be5a1/pugsql-0.2.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"3f7f47a4d9086fd4f59cb6c0c6f6de92","sha256":"b3caf1a0c9fee25529761c0b3bad75cf22e775720e4a60ea189fa5c30ec0fc8b"},"downloads":-1,"filename":"pugsql-0.2.3.tar.gz","has_sig":false,"md5_digest":"3f7f47a4d9086fd4f59cb6c0c6f6de92","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11877,"upload_time":"2020-09-13T06:06:10","upload_time_iso_8601":"2020-09-13T06:06:10.324371Z","url":"https://files.pythonhosted.org/packages/4e/5b/2459568d9bbb08c2837ce83e73aa35a7c772e4cf5a1fd8b0f93e5ee83c27/pugsql-0.2.3.tar.gz","yanked":false,"yanked_reason":null}],"0.2.4":[{"comment_text":"","digests":{"md5":"caed0f3850aea87f2e2f7c5bb27a87c7","sha256":"fb0a7c64cbcc8990cb37673cfc85ee2d2acd3786889948eb848ae168af784781"},"downloads":-1,"filename":"pugsql-0.2.4-py3-none-any.whl","has_sig":false,"md5_digest":"caed0f3850aea87f2e2f7c5bb27a87c7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14021,"upload_time":"2022-03-13T23:32:45","upload_time_iso_8601":"2022-03-13T23:32:45.020017Z","url":"https://files.pythonhosted.org/packages/70/2a/969b4ef1f2d350f33263ba874f0cc2ab0a6ae757b5de6a0d9420ccc53061/pugsql-0.2.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"4c5293dfbf74c292876d19c0fc94fc76","sha256":"5c7ef34ad08a929b3a93bf4e675d65fc8952732161b37d52fa8adff0cae978ba"},"downloads":-1,"filename":"pugsql-0.2.4.tar.gz","has_sig":false,"md5_digest":"4c5293dfbf74c292876d19c0fc94fc76","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":12075,"upload_time":"2022-03-13T23:32:47","upload_time_iso_8601":"2022-03-13T23:32:47.442289Z","url":"https://files.pythonhosted.org/packages/04/13/528ad70afccad1b83c61c1629444f351660eafca1c287602e9bcab842d20/pugsql-0.2.4.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":"","digests":{"md5":"caed0f3850aea87f2e2f7c5bb27a87c7","sha256":"fb0a7c64cbcc8990cb37673cfc85ee2d2acd3786889948eb848ae168af784781"},"downloads":-1,"filename":"pugsql-0.2.4-py3-none-any.whl","has_sig":false,"md5_digest":"caed0f3850aea87f2e2f7c5bb27a87c7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14021,"upload_time":"2022-03-13T23:32:45","upload_time_iso_8601":"2022-03-13T23:32:45.020017Z","url":"https://files.pythonhosted.org/packages/70/2a/969b4ef1f2d350f33263ba874f0cc2ab0a6ae757b5de6a0d9420ccc53061/pugsql-0.2.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"4c5293dfbf74c292876d19c0fc94fc76","sha256":"5c7ef34ad08a929b3a93bf4e675d65fc8952732161b37d52fa8adff0cae978ba"},"downloads":-1,"filename":"pugsql-0.2.4.tar.gz","has_sig":false,"md5_digest":"4c5293dfbf74c292876d19c0fc94fc76","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":12075,"upload_time":"2022-03-13T23:32:47","upload_time_iso_8601":"2022-03-13T23:32:47.442289Z","url":"https://files.pythonhosted.org/packages/04/13/528ad70afccad1b83c61c1629444f351660eafca1c287602e9bcab842d20/pugsql-0.2.4.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]}
\ No newline at end of file
+{"info":{"author":"Dan McKinley","author_email":"mcfunley@gmail.com","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","Intended Audience :: Developers","License :: OSI Approved :: Apache Software License","Operating System :: OS Independent","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.9","Topic :: Database :: Front-Ends"],"description":"[PugSQL](https://pugsql.org) is a simple Python interface for using parameterized SQL, in files, with [any SQLAlchemy-supported database](https://docs.sqlalchemy.org/en/13/dialects/index.html).\n\nFor more information and full documentation, visit [pugsql.org](https://pugsql.org).\n\n```\nimport pugsql\n\n# Create a module of database functions from a set of sql files on disk.\nqueries = pugsql.module('resources/sql')\n\n# Point the module at your database.\nqueries.connect('sqlite:///foo.db')\n\n# Invoke parameterized queries, receive dicts!\nuser = queries.find_user(user_id=42)\n\n# -> { 'user_id': 42, 'username': 'mcfunley' }\n```\n\nIn the example above, the query would be specified like this:\n\n```\n--- :name find_user :one\nselect * from users where user_id = :user_id\n```\n\nSo _throw away_ your bulky ORM and talk to your database the way the gods intended! Install PugSQL today!\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":"https://pugsql.org","keywords":null,"license":"Apache-2.0","maintainer":null,"maintainer_email":null,"name":"pugsql","package_url":"https://pypi.org/project/pugsql/","platform":null,"project_url":"https://pypi.org/project/pugsql/","project_urls":{"Homepage":"https://pugsql.org","Repository":"https://github.com/mcfunley/pugsql"},"provides_extra":null,"release_url":"https://pypi.org/project/pugsql/0.3.0/","requires_dist":["sqlalchemy>=2.0"],"requires_python":">=3.8.1","summary":"PugSQL is an anti-ORM that facilitates interacting with databases using SQL in files.","version":"0.3.0","yanked":false,"yanked_reason":null},"last_serial":23680285,"releases":{"0.1.0":[{"comment_text":"","digests":{"blake2b_256":"2caf7fe81eecef83fcaecaf8cf5a74471ae638703cfae24cf63ee85e17793229","md5":"e538debc11970078530d1581d87d304f","sha256":"ad07a3df558c01d7cddec40cf43a91ac32306577bcabfcc62cbc387596e415f1"},"downloads":-1,"filename":"pugsql-0.1.0-py3-none-any.whl","has_sig":false,"md5_digest":"e538debc11970078530d1581d87d304f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":3325,"upload_time":"2019-05-23T20:25:03","upload_time_iso_8601":"2019-05-23T20:25:03.058254Z","url":"https://files.pythonhosted.org/packages/2c/af/7fe81eecef83fcaecaf8cf5a74471ae638703cfae24cf63ee85e17793229/pugsql-0.1.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"c00726145447d59b0f3efe39333b829fd5c3154b99b187d3687f54ea29739d47","md5":"ba337eeb0cf7ab6d07826d79e9b4128f","sha256":"faab0faea0f579adff91a049ff7071ff726083b7d73e253749f20d996dda7640"},"downloads":-1,"filename":"pugsql-0.1.0.tar.gz","has_sig":false,"md5_digest":"ba337eeb0cf7ab6d07826d79e9b4128f","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":2371,"upload_time":"2019-05-23T20:25:05","upload_time_iso_8601":"2019-05-23T20:25:05.039118Z","url":"https://files.pythonhosted.org/packages/c0/07/26145447d59b0f3efe39333b829fd5c3154b99b187d3687f54ea29739d47/pugsql-0.1.0.tar.gz","yanked":false,"yanked_reason":null}],"0.1.1":[{"comment_text":"","digests":{"blake2b_256":"a305c47cf0a0372694a6965fcd7a93daa97da343da3f119e92e4fe6c0e0e08b1","md5":"e637edc85b200691f57d39eb37a10276","sha256":"b477a0cc2a5b8e27cd10f9f68cc153251bb62293cca5c922fc753b9d0121c2f7"},"downloads":-1,"filename":"pugsql-0.1.1-py3-none-any.whl","has_sig":false,"md5_digest":"e637edc85b200691f57d39eb37a10276","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":7440,"upload_time":"2019-05-24T05:12:30","upload_time_iso_8601":"2019-05-24T05:12:30.298929Z","url":"https://files.pythonhosted.org/packages/a3/05/c47cf0a0372694a6965fcd7a93daa97da343da3f119e92e4fe6c0e0e08b1/pugsql-0.1.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"da51cb6e8832c60a2615b4b7ecabe405f20ca5db75e3169c7ed85ee0dce072b7","md5":"3be281dc16a7c32cd863e34da08a1b4b","sha256":"95d49af0f70228d4b85fa76218c02342c21ce13f42e1af9542a9c9bd5f92186b"},"downloads":-1,"filename":"pugsql-0.1.1.tar.gz","has_sig":false,"md5_digest":"3be281dc16a7c32cd863e34da08a1b4b","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":6424,"upload_time":"2019-05-24T05:12:31","upload_time_iso_8601":"2019-05-24T05:12:31.530744Z","url":"https://files.pythonhosted.org/packages/da/51/cb6e8832c60a2615b4b7ecabe405f20ca5db75e3169c7ed85ee0dce072b7/pugsql-0.1.1.tar.gz","yanked":false,"yanked_reason":null}],"0.1.10":[{"comment_text":"","digests":{"blake2b_256":"f29764b8e4800f84f90e19eb78c1468080e0adb6dd9f7556fb6818ec8a2681d2","md5":"36e7bbcf3770e872d287371207509b20","sha256":"1ac4464134c1b8aa2febaf87d857e6fd40fb4108863a74ea9545cf52cde46e17"},"downloads":-1,"filename":"pugsql-0.1.10-py3-none-any.whl","has_sig":false,"md5_digest":"36e7bbcf3770e872d287371207509b20","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12929,"upload_time":"2019-06-11T16:24:26","upload_time_iso_8601":"2019-06-11T16:24:26.713809Z","url":"https://files.pythonhosted.org/packages/f2/97/64b8e4800f84f90e19eb78c1468080e0adb6dd9f7556fb6818ec8a2681d2/pugsql-0.1.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"524033644f7fd32af14ca94db9e5291326ba6839a365927292f97addb7a4644e","md5":"6ec1c13fd0363057faab5a50cd051d48","sha256":"4c458307c7a129dafc932aa67b8960eba7f0f1f8a8225b7821820bf6b6686b1a"},"downloads":-1,"filename":"pugsql-0.1.10.tar.gz","has_sig":false,"md5_digest":"6ec1c13fd0363057faab5a50cd051d48","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11052,"upload_time":"2019-06-11T16:24:27","upload_time_iso_8601":"2019-06-11T16:24:27.900028Z","url":"https://files.pythonhosted.org/packages/52/40/33644f7fd32af14ca94db9e5291326ba6839a365927292f97addb7a4644e/pugsql-0.1.10.tar.gz","yanked":false,"yanked_reason":null}],"0.1.11":[{"comment_text":"","digests":{"blake2b_256":"5e38610dab3625e1dc8d20ea26c1f8d6b0ebbb2525d87c5b2e512713963b6bc0","md5":"05ad814184737d0b025d464973772ec4","sha256":"717d07021d23421a7675aa600f725ff603f79f6f298005617b1e09476bcbf01e"},"downloads":-1,"filename":"pugsql-0.1.11-py3-none-any.whl","has_sig":false,"md5_digest":"05ad814184737d0b025d464973772ec4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13000,"upload_time":"2019-06-14T16:25:28","upload_time_iso_8601":"2019-06-14T16:25:28.653213Z","url":"https://files.pythonhosted.org/packages/5e/38/610dab3625e1dc8d20ea26c1f8d6b0ebbb2525d87c5b2e512713963b6bc0/pugsql-0.1.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"964902efcea5998f82100089265a780717cf80eb818f12173637ecce7b3a32f7","md5":"a0ec3ef4903ceefdb3afc42c34c67c5f","sha256":"93e46cb50d26cc919c17521fb6aaaece2c9a084115bdcece8a007623bef6ae63"},"downloads":-1,"filename":"pugsql-0.1.11.tar.gz","has_sig":false,"md5_digest":"a0ec3ef4903ceefdb3afc42c34c67c5f","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11161,"upload_time":"2019-06-14T16:25:29","upload_time_iso_8601":"2019-06-14T16:25:29.938623Z","url":"https://files.pythonhosted.org/packages/96/49/02efcea5998f82100089265a780717cf80eb818f12173637ecce7b3a32f7/pugsql-0.1.11.tar.gz","yanked":false,"yanked_reason":null}],"0.1.12":[{"comment_text":"","digests":{"blake2b_256":"1935e65e1ad5f64e90d63fb93a6936897e1a0555c7d6f4461ab4aecda6d30944","md5":"50abda1166dddbccacc0c14ccd3f617f","sha256":"2ce4b30c861d3b6e38b2696b50407511f29bb7b034b3467eba0e9dfee69c89e1"},"downloads":-1,"filename":"pugsql-0.1.12-py3-none-any.whl","has_sig":false,"md5_digest":"50abda1166dddbccacc0c14ccd3f617f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13124,"upload_time":"2019-06-23T01:58:28","upload_time_iso_8601":"2019-06-23T01:58:28.668770Z","url":"https://files.pythonhosted.org/packages/19/35/e65e1ad5f64e90d63fb93a6936897e1a0555c7d6f4461ab4aecda6d30944/pugsql-0.1.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"5fd57517111ebf4c21b164eb99d0c0faeb3504219c080c1402a0b9228d3dad91","md5":"1d6ec45a76aeb0dc5da44c608dbe1630","sha256":"0bd3c9b13c22a175377a99ff4821e54532ed3795c7fec3ca9333af51b9e76aca"},"downloads":-1,"filename":"pugsql-0.1.12.tar.gz","has_sig":false,"md5_digest":"1d6ec45a76aeb0dc5da44c608dbe1630","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11275,"upload_time":"2019-06-23T01:58:30","upload_time_iso_8601":"2019-06-23T01:58:30.209892Z","url":"https://files.pythonhosted.org/packages/5f/d5/7517111ebf4c21b164eb99d0c0faeb3504219c080c1402a0b9228d3dad91/pugsql-0.1.12.tar.gz","yanked":false,"yanked_reason":null}],"0.1.13":[{"comment_text":"","digests":{"blake2b_256":"a5d77c0f264e63ed03a056cb265aba9860ff651000347be5548957731540df7b","md5":"d47628ac6248bbdbbeed54785e237916","sha256":"3619b31c4ef859bf3d36e2f00a339b41989ca40bc3cb5c0d7714582386382824"},"downloads":-1,"filename":"pugsql-0.1.13-py3-none-any.whl","has_sig":false,"md5_digest":"d47628ac6248bbdbbeed54785e237916","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13404,"upload_time":"2019-06-28T21:11:33","upload_time_iso_8601":"2019-06-28T21:11:33.395341Z","url":"https://files.pythonhosted.org/packages/a5/d7/7c0f264e63ed03a056cb265aba9860ff651000347be5548957731540df7b/pugsql-0.1.13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"9a72a6aa98e791383272199220c224a14b60f85d76a087cc58f8e25328dcf47e","md5":"d7f92487da2010dcbc7d14055de95a34","sha256":"831787c81353c0450b16fd10c76e522a01cd1a30e2604f35af33ad07882b5e26"},"downloads":-1,"filename":"pugsql-0.1.13.tar.gz","has_sig":false,"md5_digest":"d7f92487da2010dcbc7d14055de95a34","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11499,"upload_time":"2019-06-28T21:11:35","upload_time_iso_8601":"2019-06-28T21:11:35.138362Z","url":"https://files.pythonhosted.org/packages/9a/72/a6aa98e791383272199220c224a14b60f85d76a087cc58f8e25328dcf47e/pugsql-0.1.13.tar.gz","yanked":false,"yanked_reason":null}],"0.1.14":[{"comment_text":"","digests":{"blake2b_256":"2f39602618c0348130b41f31d7435e024a40a7a9264b618b3cd5f15f26854897","md5":"a82ba389e3abb02194bad494243d96db","sha256":"01a8eb8bf989bbdfb44915ec800005c66fe438d36bd030ba504dc773316a2222"},"downloads":-1,"filename":"pugsql-0.1.14-py3-none-any.whl","has_sig":false,"md5_digest":"a82ba389e3abb02194bad494243d96db","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13495,"upload_time":"2019-06-29T16:49:50","upload_time_iso_8601":"2019-06-29T16:49:50.101019Z","url":"https://files.pythonhosted.org/packages/2f/39/602618c0348130b41f31d7435e024a40a7a9264b618b3cd5f15f26854897/pugsql-0.1.14-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"3cdeac9b67693d0086b19c7944a420a4e57d71061a757389becda2aea426e747","md5":"dbc524fd7ecc0e3c46325ca23168905c","sha256":"81711de248661e26607fae72ed74ce62e0ac2e6342f56deb562b7813d6c44b06"},"downloads":-1,"filename":"pugsql-0.1.14.tar.gz","has_sig":false,"md5_digest":"dbc524fd7ecc0e3c46325ca23168905c","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11591,"upload_time":"2019-06-29T16:49:51","upload_time_iso_8601":"2019-06-29T16:49:51.409170Z","url":"https://files.pythonhosted.org/packages/3c/de/ac9b67693d0086b19c7944a420a4e57d71061a757389becda2aea426e747/pugsql-0.1.14.tar.gz","yanked":false,"yanked_reason":null}],"0.1.15":[{"comment_text":"","digests":{"blake2b_256":"61421e4bc6e4fccbfd2f7e7546578a8ae661980afd68377889bc9dcd20f15588","md5":"e977c791555939b68f5284c366f3bf51","sha256":"fe65d07a901a5faab9786b175fd7641f2691edf093f014af6ef9171fcefcc8c8"},"downloads":-1,"filename":"pugsql-0.1.15-py3-none-any.whl","has_sig":false,"md5_digest":"e977c791555939b68f5284c366f3bf51","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13542,"upload_time":"2019-06-29T17:14:16","upload_time_iso_8601":"2019-06-29T17:14:16.671824Z","url":"https://files.pythonhosted.org/packages/61/42/1e4bc6e4fccbfd2f7e7546578a8ae661980afd68377889bc9dcd20f15588/pugsql-0.1.15-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"3609de60e9173b1f40bfe1c551f2000bad1a850876170bdb8136b38a02f4b69b","md5":"58e586ed3044a490035ed7f9a884ec19","sha256":"169c1f3007970c62e1556b3d451b8526615662ede00d939ea4e1e89a39c00ce9"},"downloads":-1,"filename":"pugsql-0.1.15.tar.gz","has_sig":false,"md5_digest":"58e586ed3044a490035ed7f9a884ec19","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11633,"upload_time":"2019-06-29T17:14:18","upload_time_iso_8601":"2019-06-29T17:14:18.043651Z","url":"https://files.pythonhosted.org/packages/36/09/de60e9173b1f40bfe1c551f2000bad1a850876170bdb8136b38a02f4b69b/pugsql-0.1.15.tar.gz","yanked":false,"yanked_reason":null}],"0.1.16":[{"comment_text":"","digests":{"blake2b_256":"dfa19c25a2b801388eb609118babeabac338acffa32655d922b1e529f70236fe","md5":"ca25b3111edc67b07f5d002c50361422","sha256":"883b1e59615cd848fb64929bbd0458ec2bd9685a4d50021bc1f4759ba0b7b042"},"downloads":-1,"filename":"pugsql-0.1.16-py3-none-any.whl","has_sig":false,"md5_digest":"ca25b3111edc67b07f5d002c50361422","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13626,"upload_time":"2020-01-12T04:52:28","upload_time_iso_8601":"2020-01-12T04:52:28.526777Z","url":"https://files.pythonhosted.org/packages/df/a1/9c25a2b801388eb609118babeabac338acffa32655d922b1e529f70236fe/pugsql-0.1.16-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"06b606af0b71496b2ba47ea87d549933ce10955471ea5716744811230c2825e5","md5":"3e5f875b646981d00a85c347d9946495","sha256":"d5e462313463e30311d62dbf4def5fe035381c2d9ee5ce5a7d9586ff053d4160"},"downloads":-1,"filename":"pugsql-0.1.16.tar.gz","has_sig":false,"md5_digest":"3e5f875b646981d00a85c347d9946495","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11723,"upload_time":"2020-01-12T04:52:30","upload_time_iso_8601":"2020-01-12T04:52:30.294719Z","url":"https://files.pythonhosted.org/packages/06/b6/06af0b71496b2ba47ea87d549933ce10955471ea5716744811230c2825e5/pugsql-0.1.16.tar.gz","yanked":false,"yanked_reason":null}],"0.1.17":[{"comment_text":"","digests":{"blake2b_256":"d94041d1c78d222648be4631dc29a19d56c441a29fa47084a7008919bb1bd64c","md5":"10ed9a7deab752c9502eaa11ae3ee43c","sha256":"7b9b835c8b4b1216c8881413b9db1269ce2c9153ecf19e12b4a52a9a24b7261d"},"downloads":-1,"filename":"pugsql-0.1.17-py3-none-any.whl","has_sig":false,"md5_digest":"10ed9a7deab752c9502eaa11ae3ee43c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13702,"upload_time":"2020-02-09T18:57:23","upload_time_iso_8601":"2020-02-09T18:57:23.844489Z","url":"https://files.pythonhosted.org/packages/d9/40/41d1c78d222648be4631dc29a19d56c441a29fa47084a7008919bb1bd64c/pugsql-0.1.17-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"01eb66294d0b1c339e0c8885905689dc2a557826238b448ed8bfbb4406a90b78","md5":"f9437e3357e43949cef548ef4f71fa3a","sha256":"2e33fa6906037af060f7f9ef3326156b53fd61c05fd4612248ed05097ad13e63"},"downloads":-1,"filename":"pugsql-0.1.17.tar.gz","has_sig":false,"md5_digest":"f9437e3357e43949cef548ef4f71fa3a","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11789,"upload_time":"2020-02-09T18:57:25","upload_time_iso_8601":"2020-02-09T18:57:25.203471Z","url":"https://files.pythonhosted.org/packages/01/eb/66294d0b1c339e0c8885905689dc2a557826238b448ed8bfbb4406a90b78/pugsql-0.1.17.tar.gz","yanked":false,"yanked_reason":null}],"0.1.18":[{"comment_text":"","digests":{"blake2b_256":"334ede73076973b5a012aeb0567531a6c29f08a6200b83ec835f0c41084f8434","md5":"c90f088e7608d99e38f3aed530dc586f","sha256":"39667ca3df3db88f33077e51965e5dc4419cd1e85882b3b70a49b8bf07ced456"},"downloads":-1,"filename":"pugsql-0.1.18-py3-none-any.whl","has_sig":false,"md5_digest":"c90f088e7608d99e38f3aed530dc586f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13707,"upload_time":"2020-02-09T19:04:07","upload_time_iso_8601":"2020-02-09T19:04:07.439569Z","url":"https://files.pythonhosted.org/packages/33/4e/de73076973b5a012aeb0567531a6c29f08a6200b83ec835f0c41084f8434/pugsql-0.1.18-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"2f0a87bc5ab209afa1e4bc2757389ff2c308ef8520312a7d3c54e754a152f49d","md5":"234cf99600efdd55cb8da611111f04cd","sha256":"1cba41ef8eba8ade3441d817e7555774f39f6334412cee16ecec9404f26ede29"},"downloads":-1,"filename":"pugsql-0.1.18.tar.gz","has_sig":false,"md5_digest":"234cf99600efdd55cb8da611111f04cd","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11794,"upload_time":"2020-02-09T19:04:09","upload_time_iso_8601":"2020-02-09T19:04:09.014269Z","url":"https://files.pythonhosted.org/packages/2f/0a/87bc5ab209afa1e4bc2757389ff2c308ef8520312a7d3c54e754a152f49d/pugsql-0.1.18.tar.gz","yanked":false,"yanked_reason":null}],"0.1.19":[{"comment_text":"","digests":{"blake2b_256":"e38ffa5fad4064736ecabdfdb1d4cf260c69d1c1dc60a8c4c799f185e1724e91","md5":"4440fc445dd717e2a6487ed1ef6cc73d","sha256":"fbdc9713f653ab50d76fc1fbd2ec35e8d65a2d2ab635347f43ed40876fae92a3"},"downloads":-1,"filename":"pugsql-0.1.19-py3-none-any.whl","has_sig":false,"md5_digest":"4440fc445dd717e2a6487ed1ef6cc73d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13917,"upload_time":"2020-08-27T17:41:04","upload_time_iso_8601":"2020-08-27T17:41:04.674698Z","url":"https://files.pythonhosted.org/packages/e3/8f/fa5fad4064736ecabdfdb1d4cf260c69d1c1dc60a8c4c799f185e1724e91/pugsql-0.1.19-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7469d538c9e64c7c2d1f4327713441934d5f3b4aa0443d0488b13a6acb5aba52","md5":"1b38c88c3f91dbb7b98a5e2c80afe8ec","sha256":"1ed46b182edf8f23f56a828663b8f2e9863d4ab082d59e8415a4d558e4947748"},"downloads":-1,"filename":"pugsql-0.1.19.tar.gz","has_sig":false,"md5_digest":"1b38c88c3f91dbb7b98a5e2c80afe8ec","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11925,"upload_time":"2020-08-27T17:41:05","upload_time_iso_8601":"2020-08-27T17:41:05.855451Z","url":"https://files.pythonhosted.org/packages/74/69/d538c9e64c7c2d1f4327713441934d5f3b4aa0443d0488b13a6acb5aba52/pugsql-0.1.19.tar.gz","yanked":false,"yanked_reason":null}],"0.1.2":[{"comment_text":"","digests":{"blake2b_256":"6f2f64be5238997e32d4c2e8b4b04dde8807e080536d63d2ce9a83e8fb4f17ee","md5":"e47315e93b4bd3ba30ea808344a6f168","sha256":"e66ff40484f78343ae9dee0e70ec34d52b769e369891c49a7d021d5b063eac77"},"downloads":-1,"filename":"pugsql-0.1.2-py3-none-any.whl","has_sig":false,"md5_digest":"e47315e93b4bd3ba30ea808344a6f168","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":7441,"upload_time":"2019-05-24T06:04:37","upload_time_iso_8601":"2019-05-24T06:04:37.119216Z","url":"https://files.pythonhosted.org/packages/6f/2f/64be5238997e32d4c2e8b4b04dde8807e080536d63d2ce9a83e8fb4f17ee/pugsql-0.1.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"5ffe3c86dfc2044d3633d986cd2d096afd0e68e238dc507771c5861a4f7bbc0d","md5":"65949698da2131b209529d9bfb0f1763","sha256":"475030180853a8a87c9c784e8bdd4c1960d0ec61b9fa586d19975171343eca52"},"downloads":-1,"filename":"pugsql-0.1.2.tar.gz","has_sig":false,"md5_digest":"65949698da2131b209529d9bfb0f1763","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":6425,"upload_time":"2019-05-24T06:04:38","upload_time_iso_8601":"2019-05-24T06:04:38.438538Z","url":"https://files.pythonhosted.org/packages/5f/fe/3c86dfc2044d3633d986cd2d096afd0e68e238dc507771c5861a4f7bbc0d/pugsql-0.1.2.tar.gz","yanked":false,"yanked_reason":null}],"0.1.3":[{"comment_text":"","digests":{"blake2b_256":"db6e7db97d728830e90e09d5a3eae0fe1e63fbd475c3ee31610d647e5745d732","md5":"4552a34831d4eb20d49c8ec64e53e63e","sha256":"8eb84438534e37b8e37ca3e43d57bcc24e0b55fb0223d7eb5e55dcdec9a79899"},"downloads":-1,"filename":"pugsql-0.1.3-py3-none-any.whl","has_sig":false,"md5_digest":"4552a34831d4eb20d49c8ec64e53e63e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":7459,"upload_time":"2019-05-25T01:10:16","upload_time_iso_8601":"2019-05-25T01:10:16.288154Z","url":"https://files.pythonhosted.org/packages/db/6e/7db97d728830e90e09d5a3eae0fe1e63fbd475c3ee31610d647e5745d732/pugsql-0.1.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"dada448a977f1d427343ad8152b0bc19751f10180bb7ae0e34cb2e5573f3e6c3","md5":"f2e67b4498e65d51a7473050630113c0","sha256":"6076bdbcc869bebf8e01d317c023f626e0986504eae2848232bd15e3fe05bf3c"},"downloads":-1,"filename":"pugsql-0.1.3.tar.gz","has_sig":false,"md5_digest":"f2e67b4498e65d51a7473050630113c0","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":6460,"upload_time":"2019-05-25T01:10:17","upload_time_iso_8601":"2019-05-25T01:10:17.637160Z","url":"https://files.pythonhosted.org/packages/da/da/448a977f1d427343ad8152b0bc19751f10180bb7ae0e34cb2e5573f3e6c3/pugsql-0.1.3.tar.gz","yanked":false,"yanked_reason":null}],"0.1.4":[{"comment_text":"","digests":{"blake2b_256":"b5b600825a3b82e8c71e5d40504efabf6f254a4d00b19dd799d76e104798c203","md5":"191bf41c5cc1131fdbdecbd825f5dde0","sha256":"37fc84e1d372c06e36745e45de687be31e2460a0ee97d07acabfc9dea1ff7687"},"downloads":-1,"filename":"pugsql-0.1.4-py3-none-any.whl","has_sig":false,"md5_digest":"191bf41c5cc1131fdbdecbd825f5dde0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":8564,"upload_time":"2019-05-25T20:21:56","upload_time_iso_8601":"2019-05-25T20:21:56.590487Z","url":"https://files.pythonhosted.org/packages/b5/b6/00825a3b82e8c71e5d40504efabf6f254a4d00b19dd799d76e104798c203/pugsql-0.1.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"26cc387001b3869af5671416c15f19849ff7aa4addab8ff6e392432e0556129d","md5":"8ff1a7a73f7ba6ae541fe04ead6d3436","sha256":"3a420e18c2125fb31eaa80b27c23f8e12068a147d0355a714f47d47a798eaa06"},"downloads":-1,"filename":"pugsql-0.1.4.tar.gz","has_sig":false,"md5_digest":"8ff1a7a73f7ba6ae541fe04ead6d3436","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":7456,"upload_time":"2019-05-25T20:21:57","upload_time_iso_8601":"2019-05-25T20:21:57.815569Z","url":"https://files.pythonhosted.org/packages/26/cc/387001b3869af5671416c15f19849ff7aa4addab8ff6e392432e0556129d/pugsql-0.1.4.tar.gz","yanked":false,"yanked_reason":null}],"0.1.5":[{"comment_text":"","digests":{"blake2b_256":"ade34f9f2d02e81f21777d00df673894f5e7417acd04290adb21aaccc742f7fc","md5":"b9abec274e171fc06789b11681c82468","sha256":"0fea82a4cd8ff560fd628e6c329650684f99946952bd13e2f1b34815245b24db"},"downloads":-1,"filename":"pugsql-0.1.5-py3-none-any.whl","has_sig":false,"md5_digest":"b9abec274e171fc06789b11681c82468","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":8567,"upload_time":"2019-05-25T20:39:06","upload_time_iso_8601":"2019-05-25T20:39:06.132238Z","url":"https://files.pythonhosted.org/packages/ad/e3/4f9f2d02e81f21777d00df673894f5e7417acd04290adb21aaccc742f7fc/pugsql-0.1.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"75285ab871b90ed02c624f4fc977f1af951cd718b78cf281fba34eb14a0e851f","md5":"bf8481961bb42ad9288d838f163cb1c0","sha256":"e52aecd583fc6a598d08125ec0b8c2727babfa01b239959776525c5f6267d6fc"},"downloads":-1,"filename":"pugsql-0.1.5.tar.gz","has_sig":false,"md5_digest":"bf8481961bb42ad9288d838f163cb1c0","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":7472,"upload_time":"2019-05-25T20:39:07","upload_time_iso_8601":"2019-05-25T20:39:07.329349Z","url":"https://files.pythonhosted.org/packages/75/28/5ab871b90ed02c624f4fc977f1af951cd718b78cf281fba34eb14a0e851f/pugsql-0.1.5.tar.gz","yanked":false,"yanked_reason":null}],"0.1.6":[{"comment_text":"","digests":{"blake2b_256":"2e2aabe4f60e1cf43f66a54624e04bdafd226bf0b9de6a7293b251314633fbe1","md5":"eadef40d23dd5df907aa86706d44a95c","sha256":"87f1dfb3affe35754e18c4fae8c1b59a518693b7ff74efc74e5364befa6e5328"},"downloads":-1,"filename":"pugsql-0.1.6-py3-none-any.whl","has_sig":false,"md5_digest":"eadef40d23dd5df907aa86706d44a95c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.4","size":10050,"upload_time":"2019-05-26T17:25:58","upload_time_iso_8601":"2019-05-26T17:25:58.982271Z","url":"https://files.pythonhosted.org/packages/2e/2a/abe4f60e1cf43f66a54624e04bdafd226bf0b9de6a7293b251314633fbe1/pugsql-0.1.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"c83af5c3fe16421876c8de9d0b40638a6db0b3d2df445a00c0f4922b4faef9cf","md5":"0539b6a63340e9fd06524f3c81d3c448","sha256":"15d8e5f4563e27a99c941d015b718c63ea3ba28c2fe225672b434c2ddd0f0f0d"},"downloads":-1,"filename":"pugsql-0.1.6.tar.gz","has_sig":false,"md5_digest":"0539b6a63340e9fd06524f3c81d3c448","packagetype":"sdist","python_version":"source","requires_python":">=3.4","size":8521,"upload_time":"2019-05-26T17:26:00","upload_time_iso_8601":"2019-05-26T17:26:00.247528Z","url":"https://files.pythonhosted.org/packages/c8/3a/f5c3fe16421876c8de9d0b40638a6db0b3d2df445a00c0f4922b4faef9cf/pugsql-0.1.6.tar.gz","yanked":false,"yanked_reason":null}],"0.1.7":[{"comment_text":"","digests":{"blake2b_256":"999c15ffff9b0d980b8fa82eb91878d7ecded188c87cf85f7c958dcf043fc051","md5":"2a3f5f7912ee0f8d484e8a6caa293c8a","sha256":"6276ecdbaa1f8a47d54a90c66d52111563db1e7a8be01ae8793d435f7e0265b1"},"downloads":-1,"filename":"pugsql-0.1.7-py3-none-any.whl","has_sig":false,"md5_digest":"2a3f5f7912ee0f8d484e8a6caa293c8a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":11914,"upload_time":"2019-05-28T03:52:35","upload_time_iso_8601":"2019-05-28T03:52:35.203485Z","url":"https://files.pythonhosted.org/packages/99/9c/15ffff9b0d980b8fa82eb91878d7ecded188c87cf85f7c958dcf043fc051/pugsql-0.1.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"5ba0640985789fd1ce7cea6b3779ba01f2cfbf2fbe6e1fd37d1ccaf4729d9976","md5":"741c82f150230f78ae42d81ae62857ee","sha256":"ecc26e37ba28e880e59d2ba37e72786417ba6af72cba4466317dafc61eb6d460"},"downloads":-1,"filename":"pugsql-0.1.7.tar.gz","has_sig":false,"md5_digest":"741c82f150230f78ae42d81ae62857ee","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":10084,"upload_time":"2019-05-28T03:52:36","upload_time_iso_8601":"2019-05-28T03:52:36.580080Z","url":"https://files.pythonhosted.org/packages/5b/a0/640985789fd1ce7cea6b3779ba01f2cfbf2fbe6e1fd37d1ccaf4729d9976/pugsql-0.1.7.tar.gz","yanked":false,"yanked_reason":null}],"0.1.8":[{"comment_text":"","digests":{"blake2b_256":"b2bb456644c3c0063ccfe783ef511e1873d328f36cfd831e4fbe64796fa30b56","md5":"6830e8a699d657b032bccc461dcc6cb9","sha256":"b9d7f88c1237ac3168071edbae078661337213b4ea04e932dff4ffd7e3470bb1"},"downloads":-1,"filename":"pugsql-0.1.8-py3-none-any.whl","has_sig":false,"md5_digest":"6830e8a699d657b032bccc461dcc6cb9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12166,"upload_time":"2019-06-08T01:37:26","upload_time_iso_8601":"2019-06-08T01:37:26.005113Z","url":"https://files.pythonhosted.org/packages/b2/bb/456644c3c0063ccfe783ef511e1873d328f36cfd831e4fbe64796fa30b56/pugsql-0.1.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"d6ee1819b940aad72ad1c30781e20f7c5325adecdcd1bbbb3199382f9550d407","md5":"e86e91d50523a8d258583c5ed2d754fb","sha256":"9dbd2e26f263ba39f5801352e80966b821093f8b805077edbbc8e98cb999f314"},"downloads":-1,"filename":"pugsql-0.1.8.tar.gz","has_sig":false,"md5_digest":"e86e91d50523a8d258583c5ed2d754fb","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":10387,"upload_time":"2019-06-08T01:37:27","upload_time_iso_8601":"2019-06-08T01:37:27.462643Z","url":"https://files.pythonhosted.org/packages/d6/ee/1819b940aad72ad1c30781e20f7c5325adecdcd1bbbb3199382f9550d407/pugsql-0.1.8.tar.gz","yanked":false,"yanked_reason":null}],"0.1.9":[{"comment_text":"","digests":{"blake2b_256":"f274ee5e7e55c5a73de3499c5b83d0f852aacc2e8b91b254b9d1d684567fe0fb","md5":"e227bd9d3e0fe886f67e2f58fdec1f39","sha256":"c1596017fc40cb6f763c4f747eab33aefa39580c2981baa648741c1e78f0aef0"},"downloads":-1,"filename":"pugsql-0.1.9-py3-none-any.whl","has_sig":false,"md5_digest":"e227bd9d3e0fe886f67e2f58fdec1f39","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":12909,"upload_time":"2019-06-10T22:27:36","upload_time_iso_8601":"2019-06-10T22:27:36.832728Z","url":"https://files.pythonhosted.org/packages/f2/74/ee5e7e55c5a73de3499c5b83d0f852aacc2e8b91b254b9d1d684567fe0fb/pugsql-0.1.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"62e3818903ed838fb260fdddd97e970962b2e76c0c27439e5a95e029b7ac14cf","md5":"25d400ec852669f2db2a8ab8a8bd6357","sha256":"0d3cf1a454edd5a0387fbd1e436be738498ee22f102a28a0215884d2264d03de"},"downloads":-1,"filename":"pugsql-0.1.9.tar.gz","has_sig":false,"md5_digest":"25d400ec852669f2db2a8ab8a8bd6357","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11039,"upload_time":"2019-06-10T22:27:38","upload_time_iso_8601":"2019-06-10T22:27:38.079608Z","url":"https://files.pythonhosted.org/packages/62/e3/818903ed838fb260fdddd97e970962b2e76c0c27439e5a95e029b7ac14cf/pugsql-0.1.9.tar.gz","yanked":false,"yanked_reason":null}],"0.2.0":[{"comment_text":"","digests":{"blake2b_256":"b98dbafe2c3964a325c02aa94e6608ebfb981f7e5e8039c75b391419746072cc","md5":"845e4d16651445a0052ac9c6764671e7","sha256":"338bb24716ef43a7e787a43c15903bb988135d5f9a3cbe89480ea1292a8e98cd"},"downloads":-1,"filename":"pugsql-0.2.0-py3-none-any.whl","has_sig":false,"md5_digest":"845e4d16651445a0052ac9c6764671e7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13598,"upload_time":"2020-09-03T17:21:02","upload_time_iso_8601":"2020-09-03T17:21:02.006780Z","url":"https://files.pythonhosted.org/packages/b9/8d/bafe2c3964a325c02aa94e6608ebfb981f7e5e8039c75b391419746072cc/pugsql-0.2.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"b7465bde8040c5a667f8892917096ebd71467029e2f0e26f9c57d1aa20c63b3d","md5":"d4adee25c75e99dd3c2cf51ddef65ce5","sha256":"cd315bd2168cb572a3e6e20b9450b56692e5f3378fd6f821d12086b786449dc4"},"downloads":-1,"filename":"pugsql-0.2.0.tar.gz","has_sig":false,"md5_digest":"d4adee25c75e99dd3c2cf51ddef65ce5","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11676,"upload_time":"2020-09-03T17:21:03","upload_time_iso_8601":"2020-09-03T17:21:03.426780Z","url":"https://files.pythonhosted.org/packages/b7/46/5bde8040c5a667f8892917096ebd71467029e2f0e26f9c57d1aa20c63b3d/pugsql-0.2.0.tar.gz","yanked":false,"yanked_reason":null}],"0.2.1":[{"comment_text":"","digests":{"blake2b_256":"95ef801b3f722c0870fa3db8d7e96553bce18e065f30f91ecd1551f2af851f3b","md5":"7ff59a4575e8ae916b8607c0fc188dc2","sha256":"4274b72948b3dbad1d7acc2a73287c7d41c1043de95b4f66ffa58d25dc301de6"},"downloads":-1,"filename":"pugsql-0.2.1-py3-none-any.whl","has_sig":false,"md5_digest":"7ff59a4575e8ae916b8607c0fc188dc2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13719,"upload_time":"2020-09-03T22:44:19","upload_time_iso_8601":"2020-09-03T22:44:19.643081Z","url":"https://files.pythonhosted.org/packages/95/ef/801b3f722c0870fa3db8d7e96553bce18e065f30f91ecd1551f2af851f3b/pugsql-0.2.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"b7909a2fd37bae313856b5bdb0ee0706f7789d8c0729a6dc7bbc194585623ba7","md5":"befa305c8b7840fa4f6d9686f0d3d77a","sha256":"1cf541af32c8b1b030c3d60803b0463a0490fb6cea9e3f373861984fff7375ec"},"downloads":-1,"filename":"pugsql-0.2.1.tar.gz","has_sig":false,"md5_digest":"befa305c8b7840fa4f6d9686f0d3d77a","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11795,"upload_time":"2020-09-03T22:44:20","upload_time_iso_8601":"2020-09-03T22:44:20.786099Z","url":"https://files.pythonhosted.org/packages/b7/90/9a2fd37bae313856b5bdb0ee0706f7789d8c0729a6dc7bbc194585623ba7/pugsql-0.2.1.tar.gz","yanked":false,"yanked_reason":null}],"0.2.2":[{"comment_text":"","digests":{"blake2b_256":"15334ec36b431229ee7607f199650a0a81d0fd0a3eeefbff6423b7b09b9ca387","md5":"f28adb85fe0ad5337b6fecfdc19fa1bc","sha256":"adadcc015ba59b17887cf7fa72fc2aa0bbf22faf993a10761930e2294546828e"},"downloads":-1,"filename":"pugsql-0.2.2-py3-none-any.whl","has_sig":false,"md5_digest":"f28adb85fe0ad5337b6fecfdc19fa1bc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13781,"upload_time":"2020-09-13T05:35:42","upload_time_iso_8601":"2020-09-13T05:35:42.119859Z","url":"https://files.pythonhosted.org/packages/15/33/4ec36b431229ee7607f199650a0a81d0fd0a3eeefbff6423b7b09b9ca387/pugsql-0.2.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"829773dce9b4a9a0e49c9913ed30f8588dff981dffa0c72545327dd0b8741f1c","md5":"b5cf74cebcf3e77a5c52a267f9dfd3ab","sha256":"f61c596215412969e06662b6ba073e5697949f420b2797c20db08a38f6a19ab4"},"downloads":-1,"filename":"pugsql-0.2.2.tar.gz","has_sig":false,"md5_digest":"b5cf74cebcf3e77a5c52a267f9dfd3ab","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11848,"upload_time":"2020-09-13T05:35:43","upload_time_iso_8601":"2020-09-13T05:35:43.121082Z","url":"https://files.pythonhosted.org/packages/82/97/73dce9b4a9a0e49c9913ed30f8588dff981dffa0c72545327dd0b8741f1c/pugsql-0.2.2.tar.gz","yanked":false,"yanked_reason":null}],"0.2.3":[{"comment_text":"","digests":{"blake2b_256":"f485742aff5b46e2f7415d485a46516b79bcbce13a199d94bebe3b32ab3be5a1","md5":"7772435f7525343f545d22bf7ab89840","sha256":"8970a421388bf7d6277517d361e0e1a4bf7d5b0ffaa7c77123aabfec9f3f58b6"},"downloads":-1,"filename":"pugsql-0.2.3-py3-none-any.whl","has_sig":false,"md5_digest":"7772435f7525343f545d22bf7ab89840","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.5","size":13781,"upload_time":"2020-09-13T06:06:09","upload_time_iso_8601":"2020-09-13T06:06:09.234448Z","url":"https://files.pythonhosted.org/packages/f4/85/742aff5b46e2f7415d485a46516b79bcbce13a199d94bebe3b32ab3be5a1/pugsql-0.2.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"4e5b2459568d9bbb08c2837ce83e73aa35a7c772e4cf5a1fd8b0f93e5ee83c27","md5":"3f7f47a4d9086fd4f59cb6c0c6f6de92","sha256":"b3caf1a0c9fee25529761c0b3bad75cf22e775720e4a60ea189fa5c30ec0fc8b"},"downloads":-1,"filename":"pugsql-0.2.3.tar.gz","has_sig":false,"md5_digest":"3f7f47a4d9086fd4f59cb6c0c6f6de92","packagetype":"sdist","python_version":"source","requires_python":">=3.5","size":11877,"upload_time":"2020-09-13T06:06:10","upload_time_iso_8601":"2020-09-13T06:06:10.324371Z","url":"https://files.pythonhosted.org/packages/4e/5b/2459568d9bbb08c2837ce83e73aa35a7c772e4cf5a1fd8b0f93e5ee83c27/pugsql-0.2.3.tar.gz","yanked":false,"yanked_reason":null}],"0.2.4":[{"comment_text":"","digests":{"blake2b_256":"702a969b4ef1f2d350f33263ba874f0cc2ab0a6ae757b5de6a0d9420ccc53061","md5":"caed0f3850aea87f2e2f7c5bb27a87c7","sha256":"fb0a7c64cbcc8990cb37673cfc85ee2d2acd3786889948eb848ae168af784781"},"downloads":-1,"filename":"pugsql-0.2.4-py3-none-any.whl","has_sig":false,"md5_digest":"caed0f3850aea87f2e2f7c5bb27a87c7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14021,"upload_time":"2022-03-13T23:32:45","upload_time_iso_8601":"2022-03-13T23:32:45.020017Z","url":"https://files.pythonhosted.org/packages/70/2a/969b4ef1f2d350f33263ba874f0cc2ab0a6ae757b5de6a0d9420ccc53061/pugsql-0.2.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"0413528ad70afccad1b83c61c1629444f351660eafca1c287602e9bcab842d20","md5":"4c5293dfbf74c292876d19c0fc94fc76","sha256":"5c7ef34ad08a929b3a93bf4e675d65fc8952732161b37d52fa8adff0cae978ba"},"downloads":-1,"filename":"pugsql-0.2.4.tar.gz","has_sig":false,"md5_digest":"4c5293dfbf74c292876d19c0fc94fc76","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":12075,"upload_time":"2022-03-13T23:32:47","upload_time_iso_8601":"2022-03-13T23:32:47.442289Z","url":"https://files.pythonhosted.org/packages/04/13/528ad70afccad1b83c61c1629444f351660eafca1c287602e9bcab842d20/pugsql-0.2.4.tar.gz","yanked":false,"yanked_reason":null}],"0.3.0":[{"comment_text":"","digests":{"blake2b_256":"dd272946b63096479be1b6a38f35e00ed0d8cea541314e569107888e342af6c3","md5":"b1f6a44afe6283f70636f4e5244e677d","sha256":"6fbe6b8323d459097276b39a8bf589d288db97d8e1b72720e9e18b0bf617068c"},"downloads":-1,"filename":"pugsql-0.3.0-py3-none-any.whl","has_sig":false,"md5_digest":"b1f6a44afe6283f70636f4e5244e677d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8.1","size":14133,"upload_time":"2024-06-14T17:33:01","upload_time_iso_8601":"2024-06-14T17:33:01.177088Z","url":"https://files.pythonhosted.org/packages/dd/27/2946b63096479be1b6a38f35e00ed0d8cea541314e569107888e342af6c3/pugsql-0.3.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7ef0bd7d9aaddc37f3e32bc70b103391b91fb28cd6088389838d1e635d789135","md5":"e46e8083ef0e53b6222ac3efc63cf55a","sha256":"da373fc1249e31511f36ca6273577578fb98e019bd56d6fa6e7c828d372c4d6e"},"downloads":-1,"filename":"pugsql-0.3.0.tar.gz","has_sig":false,"md5_digest":"e46e8083ef0e53b6222ac3efc63cf55a","packagetype":"sdist","python_version":"source","requires_python":">=3.8.1","size":11873,"upload_time":"2024-06-14T17:33:03","upload_time_iso_8601":"2024-06-14T17:33:03.009084Z","url":"https://files.pythonhosted.org/packages/7e/f0/bd7d9aaddc37f3e32bc70b103391b91fb28cd6088389838d1e635d789135/pugsql-0.3.0.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":"","digests":{"blake2b_256":"dd272946b63096479be1b6a38f35e00ed0d8cea541314e569107888e342af6c3","md5":"b1f6a44afe6283f70636f4e5244e677d","sha256":"6fbe6b8323d459097276b39a8bf589d288db97d8e1b72720e9e18b0bf617068c"},"downloads":-1,"filename":"pugsql-0.3.0-py3-none-any.whl","has_sig":false,"md5_digest":"b1f6a44afe6283f70636f4e5244e677d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8.1","size":14133,"upload_time":"2024-06-14T17:33:01","upload_time_iso_8601":"2024-06-14T17:33:01.177088Z","url":"https://files.pythonhosted.org/packages/dd/27/2946b63096479be1b6a38f35e00ed0d8cea541314e569107888e342af6c3/pugsql-0.3.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7ef0bd7d9aaddc37f3e32bc70b103391b91fb28cd6088389838d1e635d789135","md5":"e46e8083ef0e53b6222ac3efc63cf55a","sha256":"da373fc1249e31511f36ca6273577578fb98e019bd56d6fa6e7c828d372c4d6e"},"downloads":-1,"filename":"pugsql-0.3.0.tar.gz","has_sig":false,"md5_digest":"e46e8083ef0e53b6222ac3efc63cf55a","packagetype":"sdist","python_version":"source","requires_python":">=3.8.1","size":11873,"upload_time":"2024-06-14T17:33:03","upload_time_iso_8601":"2024-06-14T17:33:03.009084Z","url":"https://files.pythonhosted.org/packages/7e/f0/bd7d9aaddc37f3e32bc70b103391b91fb28cd6088389838d1e635d789135/pugsql-0.3.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]}
diff --git a/docs/_pdoc/version.mako b/docs/_pdoc/version.mako
index f82e068..268b033 100644
--- a/docs/_pdoc/version.mako
+++ b/docs/_pdoc/version.mako
@@ -1 +1 @@
-v0.2.4
+v0.3.0
diff --git a/docs/doc/0.3.0/pugsql/compiler.html b/docs/doc/0.3.0/pugsql/compiler.html
new file mode 100644
index 0000000..938e27c
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/compiler.html
@@ -0,0 +1,641 @@
+
+
+
Code that processes SQL files and returns modules of database functions.
+
+Source code
+
"""
+Code that processes SQL files and returns modules of database functions.
+"""
+import os
+import re
+import threading
+from contextlib import contextmanager, suppress
+from glob import glob
+
+from sqlalchemy import create_engine
+from sqlalchemy.exc import ResourceClosedError
+from sqlalchemy.orm import sessionmaker
+
+from . import context, parser
+from .exceptions import NoConnectionError
+
+__pdoc__ = {}
+
+
+class Module(object):
+ """
+ Holds a set of SQL functions loaded from files.
+ """
+ sqlpaths = None
+ engine = None
+
+ def __init__(self, sqlpath, encoding=None):
+ """
+ Loads functions found in the *sql files specified by `sqlpath` into
+ properties on this object. An `encoding` for the files can optionally
+ be provided.
+
+ The named sql functions in files should be unique.
+ """
+ self.sqlpaths = set()
+ self._statements = {}
+ self._sessionmaker = None
+ self._locals = threading.local()
+
+ self.add_queries(sqlpath, encoding=encoding)
+
+ def add_queries(self, *paths, encoding=None):
+ """
+ Adds queries from *sql files in one or more `paths` to the module.
+ An `encoding` for the files can optionally be provided.
+
+ The named sql functions in files should be unique.
+ """
+ for p in paths:
+ self._add_path(p, encoding=encoding)
+ self.sqlpaths |= set(paths)
+
+ def _add_path(self, sqlpath, encoding=None):
+ if not os.path.isdir(sqlpath):
+ raise ValueError('Directory not found: %s' % sqlpath)
+
+ for sqlfile in sorted(glob(os.path.join(sqlpath, '*sql'))):
+ with open(sqlfile, 'r', encoding=encoding) as f:
+ pugsql = f.read()
+
+ # handle multiple statements per file
+ statements = re.split(r'\n+(?=--\s*:name)', pugsql)
+ for statement in statements:
+ s = parser.parse(statement, ctx=context.Context(sqlfile))
+
+ if hasattr(self, s.name):
+ if s.name not in self._statements:
+ raise ValueError(
+ 'Error loading %s - the function name "%s" is '
+ 'reserved. Please choose another name.' % (
+ sqlfile, s.name))
+ raise ValueError(
+ 'Error loading %s - a SQL function named %s was '
+ 'already defined in %s.' % (
+ sqlfile,
+ s.name,
+ self._statements[s.name].filename))
+
+ s.set_module(self)
+
+ setattr(self, s.name, s)
+ self._statements[s.name] = s
+
+ @contextmanager
+ def transaction(self):
+ """
+ Returns a session that manages a transaction scope, in which
+ many statements can be run. Statements run on this module will
+ automatically use this transaction. The normal use case is to use this
+ like a context manager, rather than interact with the result:
+
+ foo = pugsql.module('sql/foo')
+ with foo.transaction():
+ x = foo.get_x(x_id=1234)
+ foo.update_x(x_id=1234, x+1)
+
+ # when the context manager exits, the transaction is committed.
+ # if an exception occurs, it is rolled back.
+
+ The transaction is active for statements executed on the current thread
+ only.
+
+ For engines that support SAVEPOINT, calling this method a second time
+ begins a nested transaction.
+
+ For more info, see here:
+ https://docs.sqlalchemy.org/en/13/orm/session_transaction.html
+ """
+ if not getattr(self._locals, 'session', None):
+ if not self._sessionmaker:
+ raise NoConnectionError()
+
+ self._locals.session = self._sessionmaker()
+
+ session = self._locals.session
+ try:
+ yield session
+ session.commit()
+ except Exception as e:
+ session.rollback()
+ raise e
+ finally:
+ session.close()
+ self._locals.session = None
+ else:
+ session = self._locals.session.begin_nested()
+ try:
+ yield session
+ except Exception as e:
+ session.rollback()
+ raise e
+ else:
+ with suppress(ResourceClosedError):
+ session.commit()
+
+ def _execute(self, clause, *multiparams, **params):
+ if getattr(self._locals, 'session', None):
+ return self._locals.session.execute(clause, multiparams or params)
+
+ if not self.engine:
+ raise NoConnectionError()
+
+ with self.engine.connect() as conn:
+ if multiparams:
+ result = conn.execute(clause, *multiparams)
+ else:
+ result = conn.execute(clause, params)
+ conn.commit()
+ return result
+
+ @property
+ def _dialect(self):
+ """
+ Gets the dialect for the SQLAlchemy engine.
+ """
+ if not self.engine:
+ raise NoConnectionError()
+ return self.engine.dialect
+
+ def connect(self, connstr, **kwargs):
+ """
+ Sets the connection string for SQL functions on this module.
+
+ See https://docs.sqlalchemy.org/en/13/core/engines.html for examples of
+ legal connection strings for different databases.
+ """
+ self.setengine(create_engine(connstr, **kwargs))
+
+ def setengine(self, engine):
+ """
+ Sets the SQLAlchemy engine for SQL functions on this module. This can
+ be used instead of the connect method, when more customization of the
+ connection engine is desired.
+
+ See also: https://docs.sqlalchemy.org/en/13/core/connections.html
+ """
+ self.engine = engine
+ self._sessionmaker = sessionmaker(bind=engine)
+
+ def disconnect(self):
+ """
+ Disassociates the module from any connection it was previously given.
+ """
+ self.engine = None
+ self._sessionmaker = None
+
+ def __iter__(self):
+ return iter(self._statements.values())
+
+
+__pdoc__['Module.sqlpaths'] = (
+ 'A list of paths that the `pugsql.compiler.Module` was loaded from.')
+__pdoc__['Module.engine'] = (
+ 'The sqlalchemy engine object being used by the `pugsql.compiler.Module`.')
+
+
+
+
+
+
+
+
+
+
Classes
+
+
+class Module
+(sqlpath, encoding=None)
+
+
+
Holds a set of SQL functions loaded from files.
+
Loads functions found in the *sql files specified by sqlpath into
+properties on this object. An encoding for the files can optionally
+be provided.
+
The named sql functions in files should be unique.
+
+Source code
+
class Module(object):
+ """
+ Holds a set of SQL functions loaded from files.
+ """
+ sqlpaths = None
+ engine = None
+
+ def __init__(self, sqlpath, encoding=None):
+ """
+ Loads functions found in the *sql files specified by `sqlpath` into
+ properties on this object. An `encoding` for the files can optionally
+ be provided.
+
+ The named sql functions in files should be unique.
+ """
+ self.sqlpaths = set()
+ self._statements = {}
+ self._sessionmaker = None
+ self._locals = threading.local()
+
+ self.add_queries(sqlpath, encoding=encoding)
+
+ def add_queries(self, *paths, encoding=None):
+ """
+ Adds queries from *sql files in one or more `paths` to the module.
+ An `encoding` for the files can optionally be provided.
+
+ The named sql functions in files should be unique.
+ """
+ for p in paths:
+ self._add_path(p, encoding=encoding)
+ self.sqlpaths |= set(paths)
+
+ def _add_path(self, sqlpath, encoding=None):
+ if not os.path.isdir(sqlpath):
+ raise ValueError('Directory not found: %s' % sqlpath)
+
+ for sqlfile in sorted(glob(os.path.join(sqlpath, '*sql'))):
+ with open(sqlfile, 'r', encoding=encoding) as f:
+ pugsql = f.read()
+
+ # handle multiple statements per file
+ statements = re.split(r'\n+(?=--\s*:name)', pugsql)
+ for statement in statements:
+ s = parser.parse(statement, ctx=context.Context(sqlfile))
+
+ if hasattr(self, s.name):
+ if s.name not in self._statements:
+ raise ValueError(
+ 'Error loading %s - the function name "%s" is '
+ 'reserved. Please choose another name.' % (
+ sqlfile, s.name))
+ raise ValueError(
+ 'Error loading %s - a SQL function named %s was '
+ 'already defined in %s.' % (
+ sqlfile,
+ s.name,
+ self._statements[s.name].filename))
+
+ s.set_module(self)
+
+ setattr(self, s.name, s)
+ self._statements[s.name] = s
+
+ @contextmanager
+ def transaction(self):
+ """
+ Returns a session that manages a transaction scope, in which
+ many statements can be run. Statements run on this module will
+ automatically use this transaction. The normal use case is to use this
+ like a context manager, rather than interact with the result:
+
+ foo = pugsql.module('sql/foo')
+ with foo.transaction():
+ x = foo.get_x(x_id=1234)
+ foo.update_x(x_id=1234, x+1)
+
+ # when the context manager exits, the transaction is committed.
+ # if an exception occurs, it is rolled back.
+
+ The transaction is active for statements executed on the current thread
+ only.
+
+ For engines that support SAVEPOINT, calling this method a second time
+ begins a nested transaction.
+
+ For more info, see here:
+ https://docs.sqlalchemy.org/en/13/orm/session_transaction.html
+ """
+ if not getattr(self._locals, 'session', None):
+ if not self._sessionmaker:
+ raise NoConnectionError()
+
+ self._locals.session = self._sessionmaker()
+
+ session = self._locals.session
+ try:
+ yield session
+ session.commit()
+ except Exception as e:
+ session.rollback()
+ raise e
+ finally:
+ session.close()
+ self._locals.session = None
+ else:
+ session = self._locals.session.begin_nested()
+ try:
+ yield session
+ except Exception as e:
+ session.rollback()
+ raise e
+ else:
+ with suppress(ResourceClosedError):
+ session.commit()
+
+ def _execute(self, clause, *multiparams, **params):
+ if getattr(self._locals, 'session', None):
+ return self._locals.session.execute(clause, multiparams or params)
+
+ if not self.engine:
+ raise NoConnectionError()
+
+ with self.engine.connect() as conn:
+ if multiparams:
+ result = conn.execute(clause, *multiparams)
+ else:
+ result = conn.execute(clause, params)
+ conn.commit()
+ return result
+
+ @property
+ def _dialect(self):
+ """
+ Gets the dialect for the SQLAlchemy engine.
+ """
+ if not self.engine:
+ raise NoConnectionError()
+ return self.engine.dialect
+
+ def connect(self, connstr, **kwargs):
+ """
+ Sets the connection string for SQL functions on this module.
+
+ See https://docs.sqlalchemy.org/en/13/core/engines.html for examples of
+ legal connection strings for different databases.
+ """
+ self.setengine(create_engine(connstr, **kwargs))
+
+ def setengine(self, engine):
+ """
+ Sets the SQLAlchemy engine for SQL functions on this module. This can
+ be used instead of the connect method, when more customization of the
+ connection engine is desired.
+
+ See also: https://docs.sqlalchemy.org/en/13/core/connections.html
+ """
+ self.engine = engine
+ self._sessionmaker = sessionmaker(bind=engine)
+
+ def disconnect(self):
+ """
+ Disassociates the module from any connection it was previously given.
+ """
+ self.engine = None
+ self._sessionmaker = None
+
+ def __iter__(self):
+ return iter(self._statements.values())
+
+
Class variables
+
+
var engine
+
+
The sqlalchemy engine object being used by the Module.
Adds queries from *sql files in one or more paths to the module.
+An encoding for the files can optionally be provided.
+
The named sql functions in files should be unique.
+
+Source code
+
def add_queries(self, *paths, encoding=None):
+ """
+ Adds queries from *sql files in one or more `paths` to the module.
+ An `encoding` for the files can optionally be provided.
+
+ The named sql functions in files should be unique.
+ """
+ for p in paths:
+ self._add_path(p, encoding=encoding)
+ self.sqlpaths |= set(paths)
+
+
+
+def connect(self, connstr, **kwargs)
+
+
+
Sets the connection string for SQL functions on this module.
def connect(self, connstr, **kwargs):
+ """
+ Sets the connection string for SQL functions on this module.
+
+ See https://docs.sqlalchemy.org/en/13/core/engines.html for examples of
+ legal connection strings for different databases.
+ """
+ self.setengine(create_engine(connstr, **kwargs))
+
+
+
+def disconnect(self)
+
+
+
Disassociates the module from any connection it was previously given.
+
+Source code
+
def disconnect(self):
+ """
+ Disassociates the module from any connection it was previously given.
+ """
+ self.engine = None
+ self._sessionmaker = None
+
+
+
+def setengine(self, engine)
+
+
+
Sets the SQLAlchemy engine for SQL functions on this module. This can
+be used instead of the connect method, when more customization of the
+connection engine is desired.
def setengine(self, engine):
+ """
+ Sets the SQLAlchemy engine for SQL functions on this module. This can
+ be used instead of the connect method, when more customization of the
+ connection engine is desired.
+
+ See also: https://docs.sqlalchemy.org/en/13/core/connections.html
+ """
+ self.engine = engine
+ self._sessionmaker = sessionmaker(bind=engine)
+
+
+
+def transaction(self)
+
+
+
Returns a session that manages a transaction scope, in which
+many statements can be run. Statements run on this module will
+automatically use this transaction. The normal use case
+is to use this
+like a context manager, rather than interact with the result:
+
foo = pugsql.module('sql/foo')
+with foo.transaction():
+ x = foo.get_x(x_id=1234)
+ foo.update_x(x_id=1234, x+1)
+
+# when the context manager exits, the transaction is committed.
+# if an exception occurs, it is rolled back.
+
+
The transaction is active for statements executed on the current thread
+only.
+
For engines that support SAVEPOINT, calling this method a second time
+begins a nested transaction.
@contextmanager
+def transaction(self):
+ """
+ Returns a session that manages a transaction scope, in which
+ many statements can be run. Statements run on this module will
+ automatically use this transaction. The normal use case is to use this
+ like a context manager, rather than interact with the result:
+
+ foo = pugsql.module('sql/foo')
+ with foo.transaction():
+ x = foo.get_x(x_id=1234)
+ foo.update_x(x_id=1234, x+1)
+
+ # when the context manager exits, the transaction is committed.
+ # if an exception occurs, it is rolled back.
+
+ The transaction is active for statements executed on the current thread
+ only.
+
+ For engines that support SAVEPOINT, calling this method a second time
+ begins a nested transaction.
+
+ For more info, see here:
+ https://docs.sqlalchemy.org/en/13/orm/session_transaction.html
+ """
+ if not getattr(self._locals, 'session', None):
+ if not self._sessionmaker:
+ raise NoConnectionError()
+
+ self._locals.session = self._sessionmaker()
+
+ session = self._locals.session
+ try:
+ yield session
+ session.commit()
+ except Exception as e:
+ session.rollback()
+ raise e
+ finally:
+ session.close()
+ self._locals.session = None
+ else:
+ session = self._locals.session.begin_nested()
+ try:
+ yield session
+ except Exception as e:
+ session.rollback()
+ raise e
+ else:
+ with suppress(ResourceClosedError):
+ session.commit()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/doc/0.3.0/pugsql/context.html b/docs/doc/0.3.0/pugsql/context.html
new file mode 100644
index 0000000..019489e
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/context.html
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+pugsql.context API documentation
+
+
+
+
+
+
+
+
+
+
+
+
Objects and methods used to keep track of positions in source files.
+
+Source code
+
"""
+Objects and methods used to keep track of positions in source files.
+"""
+from collections import namedtuple
+
+
+_Context = namedtuple('Context', ['sqlfile', 'line', 'col'])
+
+
+def Context(sqlfile, line=0, col=1):
+ """
+ Returns a context object, which is a named tuple with the following fields:
+
+ * `sqlfile` - the path of the .sql file that is being processed.
+ * `line` - the line number currently being processed.
+ * `col` - the column number currently being processed.
+
+ Context objects are not mutable. Use the `pugsql.context.advance` method or
+ create new copies to change source context.
+ """
+ return _Context(sqlfile, line, col)
+
+
+def advance(context, lines=0, cols=0):
+ """
+ Advances the provided context object to indicate a farther position in the
+ same file. Passing `lines` advances lines, and passing `cols` advances
+ columns.
+
+ Returns a new Context object.
+
+ When advancing `lines`, e.g.
+
+ context.advance(ctx, lines=1)
+
+ The current `cols` is reset to zero.
+ """
+ c = context.col + cols if lines == 0 else 1
+ return _Context(context.sqlfile, context.line + lines, c)
+
+
+
+
+
+
+
+
Functions
+
+
+def Context(sqlfile, line=0, col=1)
+
+
+
Returns a context object, which is a named tuple with the following fields:
+
+
sqlfile - the path of the .sql file that is being processed.
+
line - the line number currently being processed.
+
col - the column number currently being processed.
+
+
Context objects are not mutable. Use the advance() method or
+create new copies to change source context.
+
+Source code
+
def Context(sqlfile, line=0, col=1):
+ """
+ Returns a context object, which is a named tuple with the following fields:
+
+ * `sqlfile` - the path of the .sql file that is being processed.
+ * `line` - the line number currently being processed.
+ * `col` - the column number currently being processed.
+
+ Context objects are not mutable. Use the `pugsql.context.advance` method or
+ create new copies to change source context.
+ """
+ return _Context(sqlfile, line, col)
+
+
+
+def advance(context, lines=0, cols=0)
+
+
+
Advances the provided context object to indicate a farther position in the
+same file. Passing lines advances lines, and passing cols advances
+columns.
+
Returns a new Context object.
+
When advancing lines, e.g.
+
context.advance(ctx, lines=1)
+
+
The current cols is reset to zero.
+
+Source code
+
def advance(context, lines=0, cols=0):
+ """
+ Advances the provided context object to indicate a farther position in the
+ same file. Passing `lines` advances lines, and passing `cols` advances
+ columns.
+
+ Returns a new Context object.
+
+ When advancing `lines`, e.g.
+
+ context.advance(ctx, lines=1)
+
+ The current `cols` is reset to zero.
+ """
+ c = context.col + cols if lines == 0 else 1
+ return _Context(context.sqlfile, context.line + lines, c)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/doc/0.3.0/pugsql/exceptions.html b/docs/doc/0.3.0/pugsql/exceptions.html
new file mode 100644
index 0000000..ed8e2a8
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/exceptions.html
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+pugsql.exceptions API documentation
+
+
+
+
+
+
+
+
+
+
+
+
Exception types raised by PugSQL. PugSQL will also raise built-in exceptions
+when they're appropriate.
+
+Source code
+
"""
+Exception types raised by PugSQL. PugSQL will also raise built-in exceptions
+when they're appropriate.
+"""
+
+__pdoc__ = {}
+
+
+class ParserError(ValueError):
+ """
+ Exception raised when syntax errors are encountered parsing PugSQL files.
+ """
+ token = None
+
+ def __init__(self, message, token):
+ """
+ Creates a new ParserError given a message and the token indicating the
+ position of the error. Builds a user-facing error message indicating
+ the file, line, and column of the error.
+ """
+ super(ParserError, self).__init__(
+ 'Error in %s:%s:%s - %s' % (
+ token.context.sqlfile,
+ token.context.line,
+ token.context.col,
+ message))
+ self.token = token
+
+
+__pdoc__['ParserError.token'] = (
+ 'The `pugsql.lexer.Token` indicating the position of the error '
+ 'encountered during parsing.')
+
+
+class NoConnectionError(RuntimeError):
+ """
+ Exception raised when a PugSQL module is not connected to a database.
+ """
+ def __init__(self):
+ super(NoConnectionError, self).__init__(
+ 'No connection engine is configured. Pass a connection string '
+ "to the module's connect method, or pass a SQLAlchemy engine "
+ 'to the set_engine method.')
+
+
+class InvalidArgumentError(AttributeError):
+ """
+ Exception raised when a PugSQL statement is called with incorrect
+ arguments.
+ """
+
+
+
+
+
+
+
+
+
+
Classes
+
+
+class InvalidArgumentError
+(*args, **kwargs)
+
+
+
Exception raised when a PugSQL statement is called with incorrect
+arguments.
+
+Source code
+
class InvalidArgumentError(AttributeError):
+ """
+ Exception raised when a PugSQL statement is called with incorrect
+ arguments.
+ """
+
+
Ancestors
+
+
builtins.AttributeError
+
builtins.Exception
+
builtins.BaseException
+
+
+
+class NoConnectionError
+
+
+
Exception raised when a PugSQL module is not connected to a database.
+
+Source code
+
class NoConnectionError(RuntimeError):
+ """
+ Exception raised when a PugSQL module is not connected to a database.
+ """
+ def __init__(self):
+ super(NoConnectionError, self).__init__(
+ 'No connection engine is configured. Pass a connection string '
+ "to the module's connect method, or pass a SQLAlchemy engine "
+ 'to the set_engine method.')
+
+
Ancestors
+
+
builtins.RuntimeError
+
builtins.Exception
+
builtins.BaseException
+
+
+
+class ParserError
+(message, token)
+
+
+
Exception raised when syntax errors are encountered parsing PugSQL files.
+
Creates a new ParserError given a message and the token indicating the
+position of the error. Builds a user-facing error message indicating
+the file, line, and column of the error.
+
+Source code
+
class ParserError(ValueError):
+ """
+ Exception raised when syntax errors are encountered parsing PugSQL files.
+ """
+ token = None
+
+ def __init__(self, message, token):
+ """
+ Creates a new ParserError given a message and the token indicating the
+ position of the error. Builds a user-facing error message indicating
+ the file, line, and column of the error.
+ """
+ super(ParserError, self).__init__(
+ 'Error in %s:%s:%s - %s' % (
+ token.context.sqlfile,
+ token.context.line,
+ token.context.col,
+ message))
+ self.token = token
+
+
Ancestors
+
+
builtins.ValueError
+
builtins.Exception
+
builtins.BaseException
+
+
Class variables
+
+
var token
+
+
The Token indicating the position of the error encountered during parsing.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/doc/0.3.0/pugsql/index.html b/docs/doc/0.3.0/pugsql/index.html
new file mode 100644
index 0000000..e990706
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/index.html
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+pugsql API documentation
+
+
+
+
+
+
+
+
+
+
+
+
PugSQL is an anti-ORM that facilitates interacting with databases using SQL
+in files. A minimal usage example:
+
# create a module from sql files on disk
+queries = pugsql.module('path/to/sql/files')
+
+# connect to the database and use the sql queries as functions
+queries.connect(connection_string)
+queries.update_username(user_id=42, username='mcfunley')
+
+
+Source code
+
"""
+PugSQL is an anti-ORM that facilitates interacting with databases using SQL
+in files. A minimal usage example:
+
+ # create a module from sql files on disk
+ queries = pugsql.module('path/to/sql/files')
+
+ # connect to the database and use the sql queries as functions
+ queries.connect(connection_string)
+ queries.update_username(user_id=42, username='mcfunley')
+
+"""
+from . import compiler
+
+__version__ = '0.3.0'
+
+
+def module(sqlpath, encoding=None):
+ """
+ Compiles a set of SQL files in the directory specified by sqlpath, and
+ returns a module. The module contains a function for each named query
+ found in the files.
+
+ # create a module from sql files on disk
+ queries = pugsql.module('path/to/sql/files')
+
+ # connect to the database and use the sql queries as functions
+ queries.connect(connection_string)
+ queries.update_username(user_id=42, username='mcfunley')
+ """
+ return compiler.Module(sqlpath, encoding=encoding)
+
+
+__all__ = ['__version__', 'module',]
Compiles a set of SQL files in the directory specified by sqlpath, and
+returns a module. The module contains a function for each named query
+found in the files.
+
# create a module from sql files on disk
+queries = pugsql.module('path/to/sql/files')
+
+# connect to the database and use the sql queries as functions
+queries.connect(connection_string)
+queries.update_username(user_id=42, username='mcfunley')
+
+
+Source code
+
def module(sqlpath, encoding=None):
+ """
+ Compiles a set of SQL files in the directory specified by sqlpath, and
+ returns a module. The module contains a function for each named query
+ found in the files.
+
+ # create a module from sql files on disk
+ queries = pugsql.module('path/to/sql/files')
+
+ # connect to the database and use the sql queries as functions
+ queries.connect(connection_string)
+ queries.update_username(user_id=42, username='mcfunley')
+ """
+ return compiler.Module(sqlpath, encoding=encoding)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/doc/0.3.0/pugsql/lexer.html b/docs/doc/0.3.0/pugsql/lexer.html
new file mode 100644
index 0000000..245c580
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/lexer.html
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+pugsql.lexer API documentation
+
+
+
+
+
+
+
+
+
+
+
+
Code that consumes PugSQL-dialect sql strings and returns validated
+Statement objects.
+
+Source code
+
"""
+Code that consumes PugSQL-dialect sql strings and returns validated
+`pugsql.statement.Statement` objects.
+"""
+from . import lexer, statement, context
+from .exceptions import ParserError
+from itertools import takewhile
+import re
+
+
+_one = statement.One()
+_many = statement.Many()
+_affected = statement.Affected()
+_scalar = statement.Scalar()
+_insert = statement.Insert()
+_raw = statement.Raw()
+
+
+def parse(pugsql, ctx=None):
+ """
+ Processes the SQL string given in `pugsql` and returns a valid
+ `pugsql.statement.Statement` object.
+
+ Will raise a `pugsql.exceptions.ParserError` in any number of cases in
+ which the PugSQL metadata isn't valid. However, this does not parse and
+ validate the SQL statement.
+
+ `ctx` is a context object provided by the `pugsql.context.Context`
+ function, or `None`. If it is `None` a default context is created which
+ will indicate that the SQL is being parsed from a literal string.
+ """
+ ctx = ctx or context.Context('<literal>')
+
+ stream = lexer.lex(pugsql, ctx)
+ leading_comments = _leading_comments(stream)
+ rest = stream[len(leading_comments):]
+
+ cpr = _parse_comments(leading_comments)
+ sql = '\n'.join(cpr['unconsumed'] + [token.value for token in rest])
+
+ return statement.Statement(
+ name=cpr['name'],
+ sql=sql,
+ doc=cpr['doc'],
+ result=cpr['result'],
+ filename=ctx.sqlfile if ctx.sqlfile != '<literal>' else None)
+
+
+def _leading_comments(stream):
+ def is_comment(t):
+ # allow blank whitespace lines in the leading comment
+ return t.tag == 'C' or t.value == '' or re.match(r'^\s+$', t.value)
+ return list(takewhile(is_comment, stream))
+
+
+def _parse_comments(comments):
+ cpr = {
+ 'name': None,
+ 'result': _raw,
+ 'doc': None,
+ 'unconsumed': [],
+ }
+
+ for comment_token in comments:
+ toks = lexer.lex_comment(comment_token)
+ if not toks:
+ cpr['unconsumed'].append(comment_token.value)
+ elif toks['keyword'].value == ':name':
+ _consume_name(cpr, toks['rest'])
+ elif toks['keyword'].value == ':result':
+ _consume_result(cpr, toks['rest'])
+ else:
+ cpr['unconsumed'].append(comment_token.value)
+
+ return cpr
+
+
+def _consume_result(cpr, rest):
+ if not rest.value:
+ raise ParserError('expected keyword', rest)
+ _set_result(cpr, rest)
+
+
+def _consume_name(cpr, rest):
+ tokens = lexer.lex_name(rest)
+ if not tokens:
+ raise ParserError('expected a query name.', rest)
+
+ name = tokens['name'].value
+ if not _is_legal_name(name):
+ raise ParserError(
+ "'%s' is not a legal Python function name." % name,
+ tokens['name'])
+
+ cpr['name'] = name
+
+ if not tokens['keyword'].value:
+ if tokens['rest'].value:
+ raise ParserError(
+ 'encountered unexpected input after query name.',
+ tokens['rest'])
+ return
+
+ if tokens['rest'].value:
+ raise ParserError(
+ 'encountered unexpected input after result type.',
+ tokens['rest'])
+
+ _set_result(cpr, tokens['keyword'])
+
+
+def _set_result(cpr, ktok):
+ tokens = lexer.lex_result(ktok)
+ if not tokens:
+ raise ParserError('expected keyword', ktok)
+
+ if tokens['rest'].value:
+ raise ParserError(
+ 'encountered unexpected input after result type',
+ tokens['rest'])
+
+ keyword = tokens['keyword'].value
+
+ if keyword == ':one' or keyword == ':1':
+ cpr['result'] = _one
+ elif keyword == ':many' or keyword == ':*':
+ cpr['result'] = _many
+ elif keyword == ':affected' or keyword == ':n':
+ cpr['result'] = _affected
+ elif keyword == ':insert':
+ cpr['result'] = _insert
+ elif keyword == ':scalar':
+ cpr['result'] = _scalar
+ elif keyword != ':raw':
+ raise ParserError("unrecognized keyword '%s'" % keyword, ktok)
+
+
+def _is_legal_name(value):
+ return re.match(r'^[a-zA-Z_][a-zA-Z0-9_]+$', value) is not None
+
+
+
+
+
+
+
+
Functions
+
+
+def parse(pugsql, ctx=None)
+
+
+
Processes the SQL string given in pugsql and returns a valid
+Statement object.
+
Will raise a ParserError in any number of cases in
+which the PugSQL metadata isn't valid. However, this does not parse and
+validate the SQL statement.
+
ctx is a context object provided by the Context()
+function, or None. If it is None a default context is created which
+will indicate that the SQL is being parsed from a literal string.
+
+Source code
+
def parse(pugsql, ctx=None):
+ """
+ Processes the SQL string given in `pugsql` and returns a valid
+ `pugsql.statement.Statement` object.
+
+ Will raise a `pugsql.exceptions.ParserError` in any number of cases in
+ which the PugSQL metadata isn't valid. However, this does not parse and
+ validate the SQL statement.
+
+ `ctx` is a context object provided by the `pugsql.context.Context`
+ function, or `None`. If it is `None` a default context is created which
+ will indicate that the SQL is being parsed from a literal string.
+ """
+ ctx = ctx or context.Context('<literal>')
+
+ stream = lexer.lex(pugsql, ctx)
+ leading_comments = _leading_comments(stream)
+ rest = stream[len(leading_comments):]
+
+ cpr = _parse_comments(leading_comments)
+ sql = '\n'.join(cpr['unconsumed'] + [token.value for token in rest])
+
+ return statement.Statement(
+ name=cpr['name'],
+ sql=sql,
+ doc=cpr['doc'],
+ result=cpr['result'],
+ filename=ctx.sqlfile if ctx.sqlfile != '<literal>' else None)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/doc/0.3.0/pugsql/statement.html b/docs/doc/0.3.0/pugsql/statement.html
new file mode 100644
index 0000000..c04cd88
--- /dev/null
+++ b/docs/doc/0.3.0/pugsql/statement.html
@@ -0,0 +1,815 @@
+
+
+
+
+
+
+pugsql.statement API documentation
+
+
+
+
+
+
+
+
+
+
+
+
class Many(Result):
+ def transform(self, r):
+ ks = r.keys()
+ return ({ k: v for k, v in zip(ks, row)} for row in r.fetchall())
+
+ @property
+ def display_type(self):
+ return 'rows'