{ "info": { "author": "Eric van de Paverd | McKinnon Secondary College", "author_email": "ericv@mckinnonsc.vic.edu.au", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Topic :: Database" ], "description": "# README #\n\nThis tool provides one-way idempotent sync from python dicts. Uses airtable-python-wrapper for access to airtable REST API.\n\n## Installing ##\n```\npip install atsync\n```\n\n## Documentation ##\n\nJust this README so far\n\n### Usage example ###\n\nThis library is small and simple and only does one thing: upsert dicts into airtable.\n\n```python\n# Define each related table in a list of dicts\nrelated_tables = [\n {\n 'table_name': 'Contact Details',\n 'primary_key': 'Email Address', # primary key of this related table\n 'related_on': 'Email', # key in our target table that is related to this table\n },\n]\n\n# Define your target table with an atsync Table instance\nsync_table = atsync.Table(table_name='User Table',\n primary_key='User ID', # primary key as seen in the airtable user interface\n 'base_key': 'appZZZZZZZZZZZZZZ', # Can be found in the url of your api doco (see below)*\n 'api_key': 'keyABCDEFG', # Can be found in the api doco (see below)*\n related_tables=related_tables)\n\n# Assumes all the fields in users.csv are also in airtable\nwith open('users.csv', 'r') as user_file:\n import csv\n users = csv.DictReader(user_file)\n for user in users:\n sync_table.update_record(user) # updates existing reocrd with same primary key, otherwise inserts a new record\n```\n\n\\* To find your `base_key` and `api_key`, open Airtable, click the help link on the top right, choose \"API Documentation\".\n* Your `base_key` will be the first section of url after the domain: airtable.com/__**>>this bit<<**__/api/docs#...\n* Your `api_key` can be found by clicking the \"show API key\" checkbox at the top right of the page\n\n## License ##\n\n[MIT](https://opensource.org/licenses/MIT)\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/mckinnonsc-ericv/atsync/", "keywords": "airtable etl database sync", "license": "", "maintainer": "", "maintainer_email": "", "name": "atsync", "package_url": "https://pypi.org/project/atsync/", "platform": "", "project_url": "https://pypi.org/project/atsync/", "project_urls": { "Bug Reports": "https://bitbucket.org/mckinnonsc-ericv/atsync/issues/", "Homepage": "https://bitbucket.org/mckinnonsc-ericv/atsync/", "Source": "https://bitbucket.org/mckinnonsc-ericv/atsync/src/" }, "release_url": "https://pypi.org/project/atsync/1.0.1/", "requires_dist": [ "airtable-python-wrapper" ], "requires_python": "", "summary": "One way sync python dicts to airtable.", "version": "1.0.1" }, "last_serial": 3817841, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "c1109cf749a6325375375d9b7269ac99", "sha256": "f31502d0dcd6121eca4604acf4ac3860d1094f92a46c6d4adcc9fa9ad358b4cc" }, "downloads": -1, "filename": "atsync-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1109cf749a6325375375d9b7269ac99", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2524, "upload_time": "2018-04-29T00:19:18", "url": "https://files.pythonhosted.org/packages/3b/bd/2ced1bcee6548a5e27188bb64c20dfe3f7bb5a240b761b9cac967857045a/atsync-1.0.0-py2.py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "56cf7f53329cb3af95c9c5135f59a78d", "sha256": "49b031a570bdea07eb187b8d4a5215c1f9cd2866e73c53b18ea62d990b6a5361" }, "downloads": -1, "filename": "atsync-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "56cf7f53329cb3af95c9c5135f59a78d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3247, "upload_time": "2018-04-29T00:19:19", "url": "https://files.pythonhosted.org/packages/5a/fd/cedb77e7826d689031dc8bb13e2bbe99521a9d4410e70121fb2302ca56e2/atsync-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba9b038cbbb67b08a77204ba52aff77a", "sha256": "894ada8b1b4f35c56a48ec23933781664a129e747eea575f4e5731b2c9756229" }, "downloads": -1, "filename": "atsync-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ba9b038cbbb67b08a77204ba52aff77a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3159, "upload_time": "2018-04-29T00:19:20", "url": "https://files.pythonhosted.org/packages/f7/f0/616bd57674f1bbb17ea4bae923c0cc8439994cb713f092e0e2e2336294ed/atsync-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "56cf7f53329cb3af95c9c5135f59a78d", "sha256": "49b031a570bdea07eb187b8d4a5215c1f9cd2866e73c53b18ea62d990b6a5361" }, "downloads": -1, "filename": "atsync-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "56cf7f53329cb3af95c9c5135f59a78d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3247, "upload_time": "2018-04-29T00:19:19", "url": "https://files.pythonhosted.org/packages/5a/fd/cedb77e7826d689031dc8bb13e2bbe99521a9d4410e70121fb2302ca56e2/atsync-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba9b038cbbb67b08a77204ba52aff77a", "sha256": "894ada8b1b4f35c56a48ec23933781664a129e747eea575f4e5731b2c9756229" }, "downloads": -1, "filename": "atsync-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ba9b038cbbb67b08a77204ba52aff77a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3159, "upload_time": "2018-04-29T00:19:20", "url": "https://files.pythonhosted.org/packages/f7/f0/616bd57674f1bbb17ea4bae923c0cc8439994cb713f092e0e2e2336294ed/atsync-1.0.1.tar.gz" } ] }