{ "info": { "author": "Jamie Alexandre", "author_email": "jamalex+python@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# notion-py\n\nUnofficial Python 3 client for Notion.so API v3.\n\n- Object-oriented interface (mapping database tables to Python classes/attributes)\n- Automatic conversion between internal Notion formats and appropriate Python objects\n- Local cache of data in a unified data store\n- Real-time reactive two-way data binding (changing Python object -> live updating of Notion UI, and vice-versa)\n- Callback system for responding to changes in Notion (e.g. for triggering actions, updating another API, etc)\n\n![](https://raw.githubusercontent.com/jamalex/notion-py/master/ezgif-3-a935fdcb7415.gif)\n\n[Read more about Notion and Notion-py on Jamie's blog](https://medium.com/@jamiealexandre/introducing-notion-py-an-unofficial-python-api-wrapper-for-notion-so-603700f92369)\n\n# Usage\n\n## Quickstart\n\nNote: the latest version of **notion-py** requires Python 3.5 or greater.\n\n`pip install notion`\n\n```Python\nfrom notion.client import NotionClient\n\n# Obtain the `token_v2` value by inspecting your browser cookies on a logged-in session on Notion.so\nclient = NotionClient(token_v2=\"\")\n\n# Replace this URL with the URL of the page you want to edit\npage = client.get_block(\"https://www.notion.so/myorg/Test-c0d20a71c0944985ae96e661ccc99821\")\n\nprint(\"The old title is:\", page.title)\n\n# Note: You can use Markdown! We convert on-the-fly to Notion's internal formatted text data structure.\npage.title = \"The title has now changed, and has *live-updated* in the browser!\"\n```\n\n## Concepts and notes\n\n- We map tables in the Notion database into Python classes (subclassing `Record`), with each instance of a class representing a particular record. Some fields from the records (like `title` in the example above) have been mapped to model properties, allowing for easy, instantaneous read/write of the record. Other fields can be read with the `get` method, and written with the `set` method, but then you'll need to make sure to match the internal structures exactly.\n- The tables we currently support are **block** (via [`Block` class and its subclasses](https://github.com/jamalex/notion-py/blob/c65c9b14ed5dcd6d9326264f2e888ab343d2b831/notion/block.py#L143), corresponding to different `type` of blocks), **space** (via [`Space` class](https://github.com/jamalex/notion-py/blob/c65c9b14ed5dcd6d9326264f2e888ab343d2b831/notion/space.py#L6)), **collection** (via [`Collection` class](https://github.com/jamalex/notion-py/blob/c65c9b14ed5dcd6d9326264f2e888ab343d2b831/notion/collection.py#L91)), **collection_view** (via [`CollectionView` and subclasses](https://github.com/jamalex/notion-py/blob/c65c9b14ed5dcd6d9326264f2e888ab343d2b831/notion/collection.py#L175)), and **notion_user** (via [`User` class](https://github.com/jamalex/notion-py/blob/master/notion/user.py)).\n- Data for all tables are stored in a central [`RecordStore`](https://github.com/jamalex/notion-py/blob/c65c9b14ed5dcd6d9326264f2e888ab343d2b831/notion/store.py#L69), with the `Record` instances not storing state internally, but always referring to the data in the central `RecordStore`. Many API operations return updating versions of a large number of associated records, which we use to update the store, so the data in `Record` instances may sometimes update without being explicitly requested. You can also call the `refresh` method on a `Record` to trigger an update, or pass `force_update` to methods like `get`.\n- The API doesn't have strong validation of most data, so be careful to maintain the structures Notion is expecting. You can view the full internal structure of a record by calling `myrecord.get()` with no arguments.\n- When you call `client.get_block`, you can pass in either an ID, or the URL of a page. Note that pages themselves are just `blocks`, as are all the chunks of content on the page. You can get the URL for a block within a page by clicking \"Copy Link\" in the context menu for the block, and pass that URL into `get_block` as well.\n\n## Updating records\n\nWe keep a local cache of all data that passes through. When you reference an attribute on a `Record`, we first look to that cache to retrieve the value. If it doesn't find it, it retrieves it from the server. You can also manually refresh the data for a `Record` by calling the `refresh` method on it. By default (unless we instantiate `NotionClient` with `monitor=False`), we also [subscribe to long-polling updates](https://github.com/jamalex/notion-py/blob/master/notion/monitor.py) for any instantiated `Record`, so the local cache data for these `Records` should be automatically live-updated shortly after any data changes on the server. The long-polling happens in a background daemon thread.\n\n## Example: Traversing the block tree\n\n```Python\nfor child in page.children:\n print(child.title)\n\nprint(\"Parent of {} is {}\".format(page.id, page.parent.id))\n```\n\n## Example: Adding a new node\n\n```Python\nfrom notion.block import TodoBlock\n\nnewchild = page.children.add_new(TodoBlock, title=\"Something to get done\")\nnewchild.checked = True\n```\n\n## Example: Deleting nodes\n\n```Python\n# soft-delete\npage.remove()\n\n# hard-delete\npage.remove(permanently=True)\n```\n\n## Example: Create an embedded content type (iframe, video, etc)\n\n```Python\nfrom notion.block import VideoBlock\n\nvideo = page.children.add_new(VideoBlock, width=200)\n# sets \"property.source\" to the URL, and \"format.display_source\" to the embedly-converted URL\nvideo.set_source_url(\"https://www.youtube.com/watch?v=oHg5SJYRHA0\")\n```\n\n## Example: Create a new embedded collection view block\n\n```Python\ncollection = client.get_collection(COLLECTION_ID) # get an existing collection\ncvb = page.children.add_new(CollectionViewBlock, collection=collection)\nview = cvb.views.add_new(view_type=\"table\")\n\n# now the filters and format options on the view can bet set as desired.\n# \n# for example:\n# view.set(\"query\", ...)\n# view.set(\"format.board_groups\", ...)\n# view.set(\"format.board_properties\", ...)\n```\n\n## Example: Moving blocks around\n\n```Python\n# move my block to after the video\nmy_block.move_to(video, \"after\")\n\n# move my block to the end of otherblock's children\nmy_block.move_to(otherblock, \"last-child\")\n\n# (you can also use \"before\" and \"first-child\")\n```\n\n## Example: Subscribing to updates\n\nWe can \"watch\" a `Record` so that we get a [callback](https://github.com/jamalex/notion-py/blob/master/notion/store.py) whenever it changes. Combined with the live-updating of records based on long-polling, this allows for a \"reactive\" design, where actions in our local application can be triggered in response to interactions with the Notion interface.\n\n```Python\n\n# define a callback (note: all arguments are optional, just include the ones you care about)\ndef my_callback(record, difference):\n print(\"The record's title is now:\" record.title)\n print(\"Here's what was changed:\")\n print(difference)\n\n# move my block to after the video\nmy_block.add_callback(my_callback)\n```\n\n## Example: Working with databases, aka \"collections\" (tables, boards, etc)\n\nHere's how things fit together:\n- Main container block: `CollectionViewBlock` (inline) / `CollectionViewPageBlock` (full-page)\n - `Collection` (holds the schema, and is parent to the database rows themselves)\n - `CollectionRowBlock`\n - `CollectionRowBlock`\n - ... (more database records)\n - `CollectionView` (holds filters/sort/etc about each specific view)\n\nNote: For convenience, we automatically map the database \"columns\" (aka properties), based on the schema defined in the `Collection`, into getter/setter attributes on the `CollectionRowBlock` instances. The attribute name is a \"slugified\" version of the name of the column. So if you have a column named \"Estimated value\", you can read and write it via `myrowblock.estimated_value`. Some basic validation may be conducted, and it will be converted into the appropriate internal format. For columns of type \"Person\", we expect a `User` instance, or a list of them, and for a \"Relation\" we expect a singular/list of instances of a subclass of `Block`.\n\n```Python\n# Access a database using the URL of the database page or the inline block\ncv = client.get_collection_view(\"https://www.notion.so/myorg/8511b9fc522249f79b90768b832599cc?v=8dee2a54f6b64cb296c83328adba78e1\")\n\n# List all the records with \"Bob\" in them\nfor row in cv.collection.get_rows(search=\"Bob\"):\n print(\"We estimate the value of '{}' at {}\".format(row.name, row.estimated_value))\n\n# Add a new record\nrow = cv.collection.add_row()\nrow.name = \"Just some data\"\nrow.is_confirmed = True\nrow.estimated_value = 399\nrow.files = [\"https://www.birdlife.org/sites/default/files/styles/1600/public/slide.jpg\"]\nrow.person = client.current_user\nrow.tags = [\"A\", \"C\"]\nrow.where_to = \"https://learningequality.org\"\n\n# Run a filtered/sorted query using a view's default parameters\nresult = cv.default_query().execute()\nfor row in result:\n print(row)\n\n# Run an \"aggregation\" query\naggregate_params = [{\n \"property\": \"estimated_value\",\n \"aggregation_type\": \"sum\",\n \"id\": \"total_value\",\n}]\nresult = cv.build_query(aggregate=aggregate_params).execute()\nprint(\"Total estimated value:\", result.get_aggregate(\"total_value\"))\n\n# Run a \"filtered\" query\nfilter_params = [{\n \"property\": \"assigned_to\",\n \"comparator\": \"enum_contains\",\n \"value\": client.current_user,\n}]\nresult = cv.build_query(filter=filter_params).execute()\nprint(\"Things assigned to me:\", result)\n\n# Run a \"sorted\" query\nsort_params = [{\n \"direction\": \"descending\",\n \"property\": \"estimated_value\",\n}]\nresult = cv.build_query(sort=sort_params).execute()\nprint(\"Sorted results, showing most valuable first:\", result)\n```\n\nNote: You can combine `filter`, `aggregate`, and `sort`. See more examples of queries by setting up complex views in Notion, and then inspecting `cv.get(\"query\")`\n\nYou can also see [more examples in action in the smoke test runner](https://github.com/jamalex/notion-py/blob/master/notion/smoke_test.py). Run it using:\n\n```sh\npython run_smoke_test.py\n```\n\n# _Quick plug: Learning Equality is hiring!_\n\nWe're a [small nonprofit](https://learningequality.org/) with [global impact](https://learningequality.org/ka-lite/map/), building [exciting tech](https://learningequality.org/kolibri/)! We're currently hiring [engineers](https://grnh.se/1edb335f1) and [other roles](https://grnh.se/2dd2be551) -- come join us!\n\n# TODO\n\n* Cloning pages hierarchically\n* Debounce cache-saving?\n* Support inline \"user\" and \"page\" links, and reminders, in markdown conversion\n* Utilities to support updating/creating collection schemas\n* Utilities to support updating/creating collection_view queries\n* Support for easily managing page permissions\n* Websocket support for live block cache updating\n* \"Render full page to markdown\" mode\n* \"Import page from html\" mode\n\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://github.com/jamalex/notion-py", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "notion", "package_url": "https://pypi.org/project/notion/", "platform": "", "project_url": "https://pypi.org/project/notion/", "project_urls": { "Homepage": "https://github.com/jamalex/notion-py" }, "release_url": "https://pypi.org/project/notion/0.0.24/", "requires_dist": [ "requests", "commonmark", "bs4", "tzlocal", "python-slugify", "dictdiffer", "cached-property" ], "requires_python": ">=3.5", "summary": "Unofficial Python API client for Notion.so", "version": "0.0.24" }, "last_serial": 5706577, "releases": { "0.0.15": [ { "comment_text": "", "digests": { "md5": "15b074fa27350b38c7b5eb9d9d40a775", "sha256": "388742ff89f78d98adcf62732c641608e4a15a8f87e0da7505f747b3a2e2b03b" }, "downloads": -1, "filename": "notion-0.0.15-py3-none-any.whl", "has_sig": true, "md5_digest": "15b074fa27350b38c7b5eb9d9d40a775", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 34977, "upload_time": "2018-12-17T20:53:44", "url": "https://files.pythonhosted.org/packages/08/17/abfd67a6dde25111eeebeea5c0ebc36acbde8b9222533be9aaf5059ca035/notion-0.0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b085450dce5b1f0ceb36f62619388aa", "sha256": "084f8c11fd8e955087160e99547087b6b734a1c972c5b7bcb22b66ae6d049769" }, "downloads": -1, "filename": "notion-0.0.15.tar.gz", "has_sig": true, "md5_digest": "2b085450dce5b1f0ceb36f62619388aa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 29735, "upload_time": "2018-12-17T20:53:45", "url": "https://files.pythonhosted.org/packages/85/eb/a61d7a3e72f97c3faee2612c7473a2e913ce3c6940bf58b70c19ecaeabe0/notion-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "71212080d05905b7ca4a9aa3adca50eb", "sha256": "dc891d827cf0523d78f182ff288a796e41300bc43b89d1cdae0ab3f9725a49e0" }, "downloads": -1, "filename": "notion-0.0.16-py3-none-any.whl", "has_sig": true, "md5_digest": "71212080d05905b7ca4a9aa3adca50eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 35032, "upload_time": "2018-12-19T01:47:18", "url": "https://files.pythonhosted.org/packages/a9/ea/24e15c2f9c2798eb74bdc3ce2655d0a3a4c2ada9cc7aab78553111ed04f5/notion-0.0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8253b2d5b68c40491a2d8b9c017e52a8", "sha256": "c5dfe596e76f7608ed13f1bcc2756ec17da8d486ddb5101d465cae0bf7ae1398" }, "downloads": -1, "filename": "notion-0.0.16.tar.gz", "has_sig": true, "md5_digest": "8253b2d5b68c40491a2d8b9c017e52a8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 29785, "upload_time": "2018-12-19T01:47:19", "url": "https://files.pythonhosted.org/packages/43/54/3ec4404ad10a84544d6803333ea901189d946e4e3571bc5939d5f23a040e/notion-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "2dc960fd187faa5147d83ec290e11699", "sha256": "60e94b1215be4b33015f204797fe36d8b09cb70cba04c6ed0dcfc74c597e0db6" }, "downloads": -1, "filename": "notion-0.0.17-py3-none-any.whl", "has_sig": true, "md5_digest": "2dc960fd187faa5147d83ec290e11699", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 35868, "upload_time": "2019-01-18T06:00:05", "url": "https://files.pythonhosted.org/packages/a8/17/0b5c279c90e50e154676f882cee4807cebdfec71f44c6914736ce5664da0/notion-0.0.17-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3ea8d972d3ab5f6d6a5367ce615ff519", "sha256": "0dd9989e480ab2f45b483a4275a54da1d8545a38d2c713a8d3645505cf0ac00c" }, "downloads": -1, "filename": "notion-0.0.17.tar.gz", "has_sig": true, "md5_digest": "3ea8d972d3ab5f6d6a5367ce615ff519", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 30695, "upload_time": "2019-01-18T06:00:07", "url": "https://files.pythonhosted.org/packages/9b/38/57107e305752bc3a0033f6b8371d69b9926f7bb0eeac915da21e7023f1c8/notion-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "190c193c19bb8db2fb74297dc8c599a0", "sha256": "1779fd87ae947cafc35a863f6e7daea724a1de41b29051de295d6e85ccc08470" }, "downloads": -1, "filename": "notion-0.0.18-py3-none-any.whl", "has_sig": true, "md5_digest": "190c193c19bb8db2fb74297dc8c599a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 36480, "upload_time": "2019-01-27T20:31:54", "url": "https://files.pythonhosted.org/packages/ba/5e/ce0cd93107df0707ebd0ef037afd25b10b51d4486cda8f0bfdde842a871c/notion-0.0.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38338c05c627ca3066d52c88b4acad25", "sha256": "44788b68cf0da355245f815fe6d796ef343285d020f729720e0596b2155b8da0" }, "downloads": -1, "filename": "notion-0.0.18.tar.gz", "has_sig": true, "md5_digest": "38338c05c627ca3066d52c88b4acad25", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 31397, "upload_time": "2019-01-27T20:31:56", "url": "https://files.pythonhosted.org/packages/ee/78/f82818cbf15d5304c22a416268cec23c5f5a1c7eff556060564f70f6d060/notion-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "8cf83ad14486082220a9d3bdac64fce2", "sha256": "1408d434ee38c5022fd7f10e2d2e77123d0275ff560cc3fee5c822a9ad17d85a" }, "downloads": -1, "filename": "notion-0.0.19-py3-none-any.whl", "has_sig": true, "md5_digest": "8cf83ad14486082220a9d3bdac64fce2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 36352, "upload_time": "2019-02-06T04:41:04", "url": "https://files.pythonhosted.org/packages/49/38/78d27ed311d575eae941eb50f7875ee0c237cf849382993a82a12857317e/notion-0.0.19-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1acc0dfe2bbfa007d0f91ca441ee095", "sha256": "4d93fbdc40dace7e0c55f5d3e87a23e9900bd3dc063943ff5e1e5827075d4314" }, "downloads": -1, "filename": "notion-0.0.19.tar.gz", "has_sig": true, "md5_digest": "b1acc0dfe2bbfa007d0f91ca441ee095", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 31291, "upload_time": "2019-02-06T04:41:06", "url": "https://files.pythonhosted.org/packages/58/03/96769681b0116f2b3cf9ca6dcf73d299eaf882824b5260b4ac61c05e5678/notion-0.0.19.tar.gz" } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "68acc04ceac93b4de8fcd8a4d7108077", "sha256": "e95f7d984ff0f44e77bc3e450f6f481f7e7a267a7b68b5544c560ce971e2f313" }, "downloads": -1, "filename": "notion-0.0.20-py3-none-any.whl", "has_sig": true, "md5_digest": "68acc04ceac93b4de8fcd8a4d7108077", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 36508, "upload_time": "2019-04-21T00:45:39", "url": "https://files.pythonhosted.org/packages/82/84/3ad983e90c07f7f366bdab084812ab5bbcdd4a83ead2cfb3c8a50c8d3ffd/notion-0.0.20-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db913f3d94d8d921755d7fbf9ff5542b", "sha256": "22c148e02199ec0cb9cf911a4fec925394fb99a60fb2ef41a5801c470b5d40bd" }, "downloads": -1, "filename": "notion-0.0.20.tar.gz", "has_sig": true, "md5_digest": "db913f3d94d8d921755d7fbf9ff5542b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 31407, "upload_time": "2019-04-21T00:45:41", "url": "https://files.pythonhosted.org/packages/04/4e/59ae0c47600290a19c01f510853b39f79b6211243b11f0fd5d3d442d7d9a/notion-0.0.20.tar.gz" } ], "0.0.21": [ { "comment_text": "", "digests": { "md5": "44a44c4301a286bf19946b3f2f60ac63", "sha256": "ab4883fe1cd7a39644fd29a50c52a69cdaddb43f5fa91b78ec5061822b4e2e87" }, "downloads": -1, "filename": "notion-0.0.21-py3-none-any.whl", "has_sig": true, "md5_digest": "44a44c4301a286bf19946b3f2f60ac63", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 36755, "upload_time": "2019-05-08T01:15:03", "url": "https://files.pythonhosted.org/packages/de/f0/741ba657de5cac11118f4d931f56fc04e72cbcf545672cf257e7153a7539/notion-0.0.21-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2134ed1c76505618f181198937a5de72", "sha256": "4163e1cf37a4125e476f6a6f6af5fb67aa2cb60f97d575081e1e3d9f580d554a" }, "downloads": -1, "filename": "notion-0.0.21.tar.gz", "has_sig": true, "md5_digest": "2134ed1c76505618f181198937a5de72", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 31667, "upload_time": "2019-05-08T01:15:05", "url": "https://files.pythonhosted.org/packages/37/45/1e7023a3a271702b1e5128f18b585ba4701743f7ba7234e71da41ee11010/notion-0.0.21.tar.gz" } ], "0.0.22": [ { "comment_text": "", "digests": { "md5": "b3e4f2764c923cd38c4a872883037ccf", "sha256": "8b09a02c62f82d297d98a5dbb6a9af0c80cf5c4f2beda9fd683263cc79ec65d2" }, "downloads": -1, "filename": "notion-0.0.22-py3-none-any.whl", "has_sig": true, "md5_digest": "b3e4f2764c923cd38c4a872883037ccf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 37152, "upload_time": "2019-05-13T19:41:51", "url": "https://files.pythonhosted.org/packages/1a/ee/1af66db3506de58841896bea5b4ba180c21574aff7bcffa435346ac7fa4f/notion-0.0.22-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "925151a08d57e0cc7b76d700498a2b94", "sha256": "19b53498604c1215d40fb494cebc03b0982ec9e3507185d7091b39fbaadf9638" }, "downloads": -1, "filename": "notion-0.0.22.tar.gz", "has_sig": true, "md5_digest": "925151a08d57e0cc7b76d700498a2b94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 32042, "upload_time": "2019-05-13T19:41:53", "url": "https://files.pythonhosted.org/packages/58/d0/2086009164d46e98b21fbf40168c03dde7b81fd6d8ac9760a88e47ebcd24/notion-0.0.22.tar.gz" } ], "0.0.23": [ { "comment_text": "", "digests": { "md5": "7ca38f9d49efa5c485c54054e623e7b0", "sha256": "8d87cbdf21dd5fed8fa4892e4d60a60cf221332137e0335b84fbd82d93de72e9" }, "downloads": -1, "filename": "notion-0.0.23-py3-none-any.whl", "has_sig": true, "md5_digest": "7ca38f9d49efa5c485c54054e623e7b0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37182, "upload_time": "2019-05-13T19:47:44", "url": "https://files.pythonhosted.org/packages/15/7e/01ff7e521fd30fa607d12f79de8479914868d0c6b248e81778c6eb5e184b/notion-0.0.23-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b911d936098844ccad7169605074049", "sha256": "a67ab83b805f240b2dccae51cbde7f71260e83f5bcd818f8070cc04c37a71e59" }, "downloads": -1, "filename": "notion-0.0.23.tar.gz", "has_sig": true, "md5_digest": "2b911d936098844ccad7169605074049", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 32072, "upload_time": "2019-05-13T19:47:46", "url": "https://files.pythonhosted.org/packages/08/6e/ea63df93b370201757c3dacc9e427f768c31444acc2e14f93f6c93fc622d/notion-0.0.23.tar.gz" } ], "0.0.24": [ { "comment_text": "", "digests": { "md5": "5f3ebfd288410966e06c6ad6ccf219fa", "sha256": "06c9709451ee5dde51681d6e12fb4549f769534c231f61d4f61a15ed3df238f0" }, "downloads": -1, "filename": "notion-0.0.24-py3-none-any.whl", "has_sig": true, "md5_digest": "5f3ebfd288410966e06c6ad6ccf219fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 38423, "upload_time": "2019-08-21T01:53:49", "url": "https://files.pythonhosted.org/packages/8a/35/5e461b6669f4b3ab0be5d28522e0d0d37aed641cabf84d59f38b106b4946/notion-0.0.24-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b057c0872d99dbdc0e4d5bba3bc905a6", "sha256": "675197ee4b2d3759a2aff1cd560830c424257b789ca0a4ed2fb7a0579b305896" }, "downloads": -1, "filename": "notion-0.0.24.tar.gz", "has_sig": true, "md5_digest": "b057c0872d99dbdc0e4d5bba3bc905a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33326, "upload_time": "2019-08-21T01:53:51", "url": "https://files.pythonhosted.org/packages/28/ce/e0c6f206683bebf5fcc527c1e4edbf05dabded4cf6ecc5ba45984e0b9383/notion-0.0.24.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5f3ebfd288410966e06c6ad6ccf219fa", "sha256": "06c9709451ee5dde51681d6e12fb4549f769534c231f61d4f61a15ed3df238f0" }, "downloads": -1, "filename": "notion-0.0.24-py3-none-any.whl", "has_sig": true, "md5_digest": "5f3ebfd288410966e06c6ad6ccf219fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 38423, "upload_time": "2019-08-21T01:53:49", "url": "https://files.pythonhosted.org/packages/8a/35/5e461b6669f4b3ab0be5d28522e0d0d37aed641cabf84d59f38b106b4946/notion-0.0.24-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b057c0872d99dbdc0e4d5bba3bc905a6", "sha256": "675197ee4b2d3759a2aff1cd560830c424257b789ca0a4ed2fb7a0579b305896" }, "downloads": -1, "filename": "notion-0.0.24.tar.gz", "has_sig": true, "md5_digest": "b057c0872d99dbdc0e4d5bba3bc905a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33326, "upload_time": "2019-08-21T01:53:51", "url": "https://files.pythonhosted.org/packages/28/ce/e0c6f206683bebf5fcc527c1e4edbf05dabded4cf6ecc5ba45984e0b9383/notion-0.0.24.tar.gz" } ] }