{ "info": { "author": "Joe Tilsed", "author_email": "Joe@Tilsed.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7" ], "description": "# Python interface to the Google's Firebase REST APIs\n###### Author: [Joe Tilsed](http://linkedin.com/in/joetilsed) | Created: 09.02.2019 | Last Updated: 10.02.2019\n\n# Firebase 3.0.0\n\nPython interface to the Google's Firebase REST APIs\n\n[![Firebase](https://scontent-lht6-1.xx.fbcdn.net/v/t1.15752-9/53366399_550061025503351_3328814162246631424_n.png?_nc_cat=109&_nc_ht=scontent-lht6-1.xx&oh=11e061c6bb45ecf048dc1058c6879d56&oe=5D283AE9)](http://www.firebase.com)\n\n## Installation\n\n pip install firebase\n\n### Python Version\n\nFirebase was written for python 3 and above and will not work correctly with python 2.\n\n### Add Firebase to your Application\nYour Google's Firebase configuration data can be found on [Firebase](https://console.firebase.google.com) > Settings > Project Settings *Scroll to bottom* > Add to web app > config\n\nFor use with only user based authentication we can create the following configuration:\n\n\n```python\nfrom firebase import Firebase\n\nconfig = {\n \"apiKey\": \"apiKey\",\n \"authDomain\": \"projectId.firebaseapp.com\",\n \"databaseURL\": \"https://databaseName.firebaseio.com\",\n \"storageBucket\": \"projectId.appspot.com\"\n}\n\nfirebase = Firebase(config)\n```\n\nYou can optionally add a [service account credential](https://firebase.google.com/docs/server/setup#prerequisites) to our\nconfiguration that will allow your server to authenticate with Firebase as an admin and disregard any security rules.\n\n```python\nfrom firebase import Firebase\n\nconfig = {\n \"apiKey\": \"apiKey\",\n \"authDomain\": \"projectId.firebaseapp.com\",\n \"databaseURL\": \"https://databaseName.firebaseio.com\",\n \"storageBucket\": \"projectId.appspot.com\",\n \"serviceAccount\": \"path/to/serviceAccountCredentials.json\"\n}\n\nfirebase = Firebase(config)\n```\n\nAdding a service account will authenticate as an admin by default for all database queries, check out the\n[Authentication documentation](#authentication) for how to authenticate users.\n\n### Use Services\n\nA firebase app can use multiple Firebase services.\n\n```firebase.auth()``` - [Authentication](#authentication)\n\n```firebase.database()``` - [Database](#database)\n\n```firebase.storage()``` - [Storage](#storage)\n\nCheck out the documentation for each service for further details.\n\n## Authentication\n\nThe ```sign_in_with_email_and_password()``` method will return user data including a token you can use to adhere to security rules.\n\nEach of the following methods accepts a user token: ```get()```, ```push()```, ```set()```, ```update()```, ```remove()``` and ```stream()```.\n\n```python\n# Get a reference to the auth service\nauth = firebase.auth()\n\n# Log the user in\nuser = auth.sign_in_with_email_and_password(email, password)\n\n# Get a reference to the database service\ndb = firebase.database()\n\n# data to save\ndata = {\n \"name\": \"Joe Tilsed\"\n}\n\n# Pass the user's idToken to the push method\nresults = db.child(\"users\").push(data, user['idToken'])\n```\n\n### Token expiry\n\nA user's idToken expires after 1 hour, so be sure to use the user's refreshToken to avoid stale tokens.\n```\nuser = auth.sign_in_with_email_and_password(email, password)\n\n# before the 1 hour expiry:\nuser = auth.refresh(user['refreshToken'])\n\n# now we have a fresh token\nuser['idToken']\n```\n\n### Custom tokens\n\nYou can also create users using [custom tokens](https://firebase.google.com/docs/auth/server/create-custom-tokens), for example:\n```\ntoken = auth.create_custom_token(\"your_custom_id\")\n```\nYou can also pass in additional claims.\n```\ntoken_with_additional_claims = auth.create_custom_token(\"your_custom_id\", {\"premium_account\": True})\n```\nYou can then send these tokens to the client to sign in, or sign in as the user on the server.\n```\nuser = auth.sign_in_with_custom_token(token)\n```\n\n### Manage Users\n\n#### Creating users\n\n```python\nauth.create_user_with_email_and_password(email, password)\n```\nNote: Make sure you have the Email/password provider enabled in your Firebase dashboard under Auth -> Sign In Method.\n\n#### Verifying emails\n\n```python\nauth.send_email_verification(user['idToken'])\n```\n\n#### Sending password reset emails\n\n```python\nauth.send_password_reset_email(\"email\")\n```\n\n#### Get account information\n```python\nauth.get_account_info(user['idToken'])\n```\n\n#### Refreshing tokens\n```python\nuser = auth.refresh(user['refreshToken'])\n```\n\n## Database\n\nYou can build paths to your data by using the ```child()``` method.\n\n```python\ndb = firebase.database()\ndb.child(\"users\").child(\"Joe\")\n```\n\n### Save Data\n\n#### push\n\nTo save data with a unique, auto-generated, timestamp-based key, use the ```push()``` method.\n\n```python\ndata = {\"name\": \"Joe Tilsed\"}\ndb.child(\"users\").push(data)\n```\n\n#### set\n\nTo create your own keys use the ```set()``` method. The key in the example below is \"Joe\".\n\n```python\ndata = {\"name\": \"Joe Tilsed\"}\ndb.child(\"users\").child(\"Joe\").set(data)\n```\n\n#### update\n\nTo update data for an existing entry use the ```update()``` method.\n\n```python\ndb.child(\"users\").child(\"Joe\").update({\"name\": \"Joe W Tilsed\"})\n```\n\n#### remove\n\nTo delete data for an existing entry use the ```remove()``` method.\n\n```python\ndb.child(\"users\").child(\"Joe\").remove()\n```\n\n#### multi-location updates\n\nYou can also perform [multi-location updates](https://www.firebase.com/blog/2015-09-24-atomic-writes-and-more.html) with the ```update()``` method.\n\n```python\ndata = {\n \"users/Joe/\": {\n \"name\": \"Joe Tilsed\"\n },\n \"users/Syd/\": {\n \"name\": \"Sydney Cox\"\n }\n}\n\ndb.update(data)\n```\n\nTo perform multi-location writes to new locations we can use the ```generate_key()``` method.\n\n```python\ndata = {\n \"users/\"+ref.generate_key(): {\n \"name\": \"Joe Tilsed\"\n },\n \"users/\"+ref.generate_key(): {\n \"name\": \"Sydney Cox\"\n }\n}\n\ndb.update(data)\n```\n\n### Retrieve Data\n\n#### val\nQueries return a FirebaseResponse object. Calling ```val()``` on these objects returns the query data.\n\n```python\nusers = db.child(\"users\").get()\nprint(users.val())\n\n>> {\"Joe\": {\"name\": \"Joe Tilsed\"}, \"Syd\": {\"name\": \"Sydney Cox\"}}\n```\n\n#### key\nCalling ```key()``` returns the key for the query data.\n\n```python\nuser = db.child(\"users\").get()\nprint(user.key())\n\n>> users\n```\n\n#### each\nReturns a list of objects on each of which you can call ```val()``` and ```key()```.\n\n```python\nall_users = db.child(\"users\").get()\nfor user in all_users.each():\n print(user.key())\n\n >> Joe \n\n print(user.val()) \n\n >> {name\": \"Joe Tilsed\"}\n```\n\n#### get\n\nTo return data from a path simply call the ```get()``` method.\n\n```python\nall_users = db.child(\"users\").get()\n```\n\n#### shallow\n\nTo return just the keys at a particular path use the ```shallow()``` method.\n\n```python\nall_user_ids = db.child(\"users\").shallow().get()\n```\n\nNote: ```shallow()``` can not be used in conjunction with any complex queries.\n\n#### streaming\n\nYou can listen to live changes to your data with the ```stream()``` method.\n\n```python\ndef stream_handler(message):\n print(message[\"event\"])\n\n >> put\n\n print(message[\"path\"])\n\n >> /-K7yGTTEp7O549EzTYtI\n\n print(message[\"data\"])\n\n >> {'title': 'firebase', \"body\": \"Python interface to the Google's Firebase REST APIs\"}\n\nmy_stream = db.child(\"posts\").stream(stream_handler)\n```\n\nYou should at least handle `put` and `patch` events. Refer to [\"Streaming from the REST API\"][streaming] for details.\n\n[streaming]: https://firebase.google.com/docs/reference/rest/database/#section-streaming\n\nYou can also add a ```stream_id``` to help you identify a stream if you have multiple running:\n\n```\nmy_stream = db.child(\"posts\").stream(stream_handler, stream_id=\"new_posts\")\n```\n\n#### close the stream\n\n```python\nmy_stream.close()\n```\n\n### Complex Queries\n\nQueries can be built by chaining multiple query parameters together.\n\n```python\nusers_by_name = db.child(\"users\").order_by_child(\"name\").limit_to_first(3).get()\n```\nThis query will return the first three users ordered by name.\n\n#### order_by_child\n\nWe begin any complex query with ```order_by_child()```.\n\n```python\nusers_by_name = db.child(\"users\").order_by_child(\"name\").get()\n```\nThis query will return users ordered by name.\n\n#### equal_to\n\nReturn data with a specific value.\n\n```python\nusers_by_score = db.child(\"users\").order_by_child(\"score\").equal_to(10).get()\n```\nThis query will return users with a score of 10.\n\n#### start_at and end_at\n\nSpecify a range in your data.\n\n```python\nusers_by_score = db.child(\"users\").order_by_child(\"score\").start_at(3).end_at(10).get()\n```\nThis query returns users ordered by score and with a score between 3 and 10.\n\n#### limit_to_first and limit_to_last\n\nLimits data returned.\n\n```python\nusers_by_score = db.child(\"users\").order_by_child(\"score\").limit_to_first(5).get()\n```\nThis query returns the first five users ordered by score.\n\n#### order_by_key\n\nWhen using ```order_by_key()``` to sort your data, data is returned in ascending order by key.\n\n```python\nusers_by_key = db.child(\"users\").order_by_key().get()\n```\n\n#### order_by_value\n\nWhen using ```order_by_value()```, children are ordered by their value.\n\n```python\nusers_by_value = db.child(\"users\").order_by_value().get()\n```\n\n\n## Storage\n\nThe storage service allows you to upload images to Firebase.\n\n### child\n\nJust like with the Database service, you can build paths to your data with the Storage service.\n\n```python\nstorage.child(\"images/example.jpg\")\n```\n\n### put\n\nThe put method takes the path to the local file and an optional user token.\n\n```python\nstorage = firebase.storage()\n\n# as admin\nstorage.child(\"images/example.jpg\").put(\"example2.jpg\")\n\n# as user\nstorage.child(\"images/example.jpg\").put(\"example2.jpg\", user['idToken'])\n```\n\n### download\n\nThe download method takes the path to the saved database file and the name you want the downloaded file to have.\n\n```\nstorage.child(\"images/example.jpg\").download(\"downloaded.jpg\")\n```\n\n### get_url\n\nThe get_url method takes the path to the saved database file and returns the storage url.\n\n```\nstorage.child(\"images/example.jpg\").get_url()\n\n>> https://firebasestorage.googleapis.com/v0/b/storage-url.appspot.com/o/images%2Fexample.jpg?alt=media\n```\n\n### Helper Methods\n\n#### generate_key\n\n```db.generate_key()``` is an implementation of Firebase's [key generation algorithm](https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html).\n\nSee multi-location updates for a potential use case.\n\n#### sort\n\nSometimes we might want to sort our data multiple times. For example, we might want to retrieve all articles written between a\ncertain date then sort those articles based on the number of likes.\n\nCurrently the REST API only allows us to sort our data once, so the ```sort()``` method bridges this gap.\n\n```python\narticles = db.child(\"articles\").order_by_child(\"date\").start_at(startDate).end_at(endDate).get()\narticles_by_likes = db.sort(articles, \"likes\")\n```\n\n### Common Errors\n\n#### Index not defined\n\nIndexing is [not enabled](https://www.firebase.com/docs/security/guide/indexing-data.html) for the database reference.\n\n###### # That's all folks...\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://bitbucket.org/joetilsed/firebase/", "keywords": "firebase python", "license": "", "maintainer": "", "maintainer_email": "", "name": "firebase", "package_url": "https://pypi.org/project/firebase/", "platform": "", "project_url": "https://pypi.org/project/firebase/", "project_urls": { "Homepage": "https://bitbucket.org/joetilsed/firebase/" }, "release_url": "https://pypi.org/project/firebase/3.0.1/", "requires_dist": [ "requests" ], "requires_python": "", "summary": "Python interface to the Google's Firebase REST APIs", "version": "3.0.1" }, "last_serial": 4921712, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "0cdce42aad6002fc35ffe0829aac60f1", "sha256": "ffacf281226f287a1450dea4aff52311dfe6ce8006286c89a75d0bc07b509ac0" }, "downloads": -1, "filename": "firebase-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0cdce42aad6002fc35ffe0829aac60f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10116, "upload_time": "2019-02-09T10:55:57", "url": "https://files.pythonhosted.org/packages/39/7a/0c3b76ddc752d4c26c48cddc8782b198d9eaab1ae667fdea64788f6a17e9/firebase-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e6c320107acf8cc9f05d1a0dd5985b6", "sha256": "e3d4045c1d7a7ab4afd2da90fc5d0338ab6833838f448fd3f62d8032eafd2136" }, "downloads": -1, "filename": "firebase-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2e6c320107acf8cc9f05d1a0dd5985b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7900, "upload_time": "2019-02-09T10:55:59", "url": "https://files.pythonhosted.org/packages/15/7c/a42440a493d80404ce608207cf6d3f4c18be5407f0a206d125fb6fb41536/firebase-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5816380c532bca55d42d97141add3ea8", "sha256": "cb19dd50dacc3bfd9abbdcd77724442015aa029391cef59048d751b413b42bcb" }, "downloads": -1, "filename": "firebase-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5816380c532bca55d42d97141add3ea8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10163, "upload_time": "2019-02-09T11:02:30", "url": "https://files.pythonhosted.org/packages/39/a2/1545ed18ae4e5865eae73e83a5a5844bf106bf831de1f9536096ba7118b1/firebase-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a895795500edbed01a5cac29aba7874", "sha256": "558e179796bd9055fb35ea14433545368a14dad045288e920b9644f147ce5888" }, "downloads": -1, "filename": "firebase-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2a895795500edbed01a5cac29aba7874", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7924, "upload_time": "2019-02-09T11:02:32", "url": "https://files.pythonhosted.org/packages/d6/1b/55a63659e329218dd3d648d381dfcddbbf1d30e7cd50938c5f738994e9b2/firebase-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "694c54385d2dfecefe2f0c80fb5029a6", "sha256": "8e9329fb621a880a772e7596d546b7893fc2f135bd2b0fec1e06c9e34d86a6e0" }, "downloads": -1, "filename": "firebase-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "694c54385d2dfecefe2f0c80fb5029a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12327, "upload_time": "2019-02-09T11:25:30", "url": "https://files.pythonhosted.org/packages/b1/97/63f65345f07239f91f79194cd0b4b9fdc28df97d79cfa03db1598fdb36e8/firebase-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c67c714150fffae678a9a0b7a49960a5", "sha256": "d1d1325702364fe75132070ea4a134c7aaf36f0a58eebe6ac2f85d58950a2eb0" }, "downloads": -1, "filename": "firebase-2.0.0.tar.gz", "has_sig": false, "md5_digest": "c67c714150fffae678a9a0b7a49960a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12208, "upload_time": "2019-02-09T11:25:32", "url": "https://files.pythonhosted.org/packages/22/2e/0e3e6431bf7ab9da293ee590dea51664048799c47faf445f357ae5c5f867/firebase-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "5be42e58be4aadac9867b1e600e1c180", "sha256": "9a0b53f90bb3a5b54c44bdabaf726cff1da017dbce3507ff9da12cb34f9b2907" }, "downloads": -1, "filename": "firebase-2.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5be42e58be4aadac9867b1e600e1c180", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12326, "upload_time": "2019-02-09T11:29:14", "url": "https://files.pythonhosted.org/packages/be/24/ef736182a4ad37fea55acdce626283f56c69d394807dfdd9489c2a5576fa/firebase-2.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5218f49dff8326a77421f994f7c4e6b9", "sha256": "340b9ba2212b7a9d6c21bf524100834bd766c44a7516058ce991940124c27380" }, "downloads": -1, "filename": "firebase-2.0.1.tar.gz", "has_sig": false, "md5_digest": "5218f49dff8326a77421f994f7c4e6b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12229, "upload_time": "2019-02-09T11:29:17", "url": "https://files.pythonhosted.org/packages/04/91/db7454b2e7213f376e38aa746d609f0dd9544d7c2279f9fae830041f6d7a/firebase-2.0.1.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "fdf4d34292fac047d7a48faa9a26a055", "sha256": "7af9e15388ff101f2db5623f5e1eb11d94ee1b9cef82f26dcf66fde671044c7b" }, "downloads": -1, "filename": "firebase-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fdf4d34292fac047d7a48faa9a26a055", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12230, "upload_time": "2019-02-09T11:59:40", "url": "https://files.pythonhosted.org/packages/33/44/1e1baab00c6b2f381e24cec2b84730d7fcb3ae5627ad25eebd6ab4285320/firebase-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "390915a9a4677bbef728c9056e167c4b", "sha256": "838b20762f389ee01f7b809f92dd1a15cc26516f415766b80255054e80d29688" }, "downloads": -1, "filename": "firebase-2.1.0.tar.gz", "has_sig": false, "md5_digest": "390915a9a4677bbef728c9056e167c4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12496, "upload_time": "2019-02-09T11:59:43", "url": "https://files.pythonhosted.org/packages/45/29/ea05257f44875cbf4e3465a540b6510bef713870e292a45139a067af3ee4/firebase-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "6040c8cd932552d03a2be63900ee8858", "sha256": "9daaa6e08e6c05fc168d37221077ca61fba9717ace6e6f9de9eae4c74d1eb056" }, "downloads": -1, "filename": "firebase-2.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6040c8cd932552d03a2be63900ee8858", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10869, "upload_time": "2019-02-09T12:06:23", "url": "https://files.pythonhosted.org/packages/58/c2/ae04b2f5cc9d7ed7a2a22845fc2c0d99a0b382fa15bdc7fd36fd46996d1a/firebase-2.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07aaa16f6927c3655f51a0aad9a752f3", "sha256": "9cdd9f52d40d149da2a28ca7fa6a7edc60c2fb1a0e3b3df91920d88f3fd3438b" }, "downloads": -1, "filename": "firebase-2.1.1.tar.gz", "has_sig": false, "md5_digest": "07aaa16f6927c3655f51a0aad9a752f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10771, "upload_time": "2019-02-09T12:06:27", "url": "https://files.pythonhosted.org/packages/e4/0d/c68bd740e2a11c804cf4e7ac8c02995068f28446b1230c1898bf24f5dde2/firebase-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "b5413f47e39e8ed46e9684ee102ffd24", "sha256": "265efa4f849fd621a4101c59d49876effbc485bd68eaa0693ac0702b33d3c5e4" }, "downloads": -1, "filename": "firebase-2.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b5413f47e39e8ed46e9684ee102ffd24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12262, "upload_time": "2019-02-09T12:12:59", "url": "https://files.pythonhosted.org/packages/64/7c/eb2a20dc8f98316966e20661e9c1c7944320c9cec4ba2cf16a5c0ac44f92/firebase-2.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "106afdb3dde7fb4a994bd80e888c065f", "sha256": "e1d5c420709c5cad2c6647fc5df28d7f10f0d718e093df51f1f318b803a3a509" }, "downloads": -1, "filename": "firebase-2.1.2.tar.gz", "has_sig": false, "md5_digest": "106afdb3dde7fb4a994bd80e888c065f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12250, "upload_time": "2019-02-09T12:13:04", "url": "https://files.pythonhosted.org/packages/d5/bf/90528247d7caefd820592172f8b81604a04f9aa2d505480e43873b4d01e1/firebase-2.1.2.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "4188515aa84fc346e5e0fca5abd5bb08", "sha256": "db61e2af55b0453b710f827cf32326373b1dd9b92006416225a80e1c7349de87" }, "downloads": -1, "filename": "firebase-2.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4188515aa84fc346e5e0fca5abd5bb08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12257, "upload_time": "2019-02-09T12:16:05", "url": "https://files.pythonhosted.org/packages/9a/ea/62b6bc73bde917ea80d6d7d7ba2ff9e6512201a7955d77a9eaac42cddfb1/firebase-2.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85835c14f930168deb50b068345e09fb", "sha256": "91f770abe109ac7c8a5d8a915de2ef6433b991f2f8a56d6d5527f2c3a4fe000f" }, "downloads": -1, "filename": "firebase-2.1.3.tar.gz", "has_sig": false, "md5_digest": "85835c14f930168deb50b068345e09fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12037, "upload_time": "2019-02-09T12:16:10", "url": "https://files.pythonhosted.org/packages/2b/e9/362560c0f74fd3ddff7b961d805f497b821a514ff5722256e1e26b759448/firebase-2.1.3.tar.gz" } ], "2.1.4": [ { "comment_text": "", "digests": { "md5": "8ef56eae8baea8feb4de3ed700c1399a", "sha256": "f3b4f26c0a44448cadfb987dda11977782b3d6e6545a671dc17e8c94ac024128" }, "downloads": -1, "filename": "firebase-2.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8ef56eae8baea8feb4de3ed700c1399a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12258, "upload_time": "2019-02-09T12:19:46", "url": "https://files.pythonhosted.org/packages/fc/9a/cfb0163655ee9a88d2eb669b77e433b50f28989c26100e2be3003e9c9dde/firebase-2.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13510993579ad4639bd30884756836c4", "sha256": "53a438b854df7d7a2f88f683987d09c0e7bfa95cc17d947f35ae93c2708abb75" }, "downloads": -1, "filename": "firebase-2.1.4.tar.gz", "has_sig": false, "md5_digest": "13510993579ad4639bd30884756836c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12040, "upload_time": "2019-02-09T12:19:53", "url": "https://files.pythonhosted.org/packages/64/32/6436811aa50635bef9f767c856d9c47fbd631e88071dafc7c7ea8f1a192a/firebase-2.1.4.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "b992828cdbdeaa6a419accbd7e3c588a", "sha256": "327a1fca00deac35f25b6754c4abe392b91ebf3554a491085fd8afabe99daf9a" }, "downloads": -1, "filename": "firebase-2.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b992828cdbdeaa6a419accbd7e3c588a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12305, "upload_time": "2019-02-09T12:21:24", "url": "https://files.pythonhosted.org/packages/5b/2c/172b0dd38f52765e675e052e7f47ca16d6f021676b03c01e98b5f2725c5a/firebase-2.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfdf2d58c19caa71675f2fbbd2951a38", "sha256": "5f8794d024afcfae67898fc58c02d47d31dce6a27b9410e3e24a95788f3a1bf0" }, "downloads": -1, "filename": "firebase-2.2.0.tar.gz", "has_sig": false, "md5_digest": "cfdf2d58c19caa71675f2fbbd2951a38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12123, "upload_time": "2019-02-09T12:21:30", "url": "https://files.pythonhosted.org/packages/c7/81/77b267dbd2306c10183426ca97de5754a1fa5b70eacbd0e3ecc9e2ecadce/firebase-2.2.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "24bae600339825c07ce1ca4579536576", "sha256": "b7a0b720f640d1cf2cd288288d41cc30baed763e70300203646d56e5fb4b68b0" }, "downloads": -1, "filename": "firebase-3.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "24bae600339825c07ce1ca4579536576", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17957, "upload_time": "2019-02-10T11:09:39", "url": "https://files.pythonhosted.org/packages/db/39/b31dbf4b31438d32576b999070c43f471166726e9b656a31156e70282a68/firebase-3.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92ace630ecaeafff006d376dadc1095f", "sha256": "ae7506d0b2c1059df1e6e8adb2d76903eb4013f0b733a2839008a1692225740f" }, "downloads": -1, "filename": "firebase-3.0.0.tar.gz", "has_sig": false, "md5_digest": "92ace630ecaeafff006d376dadc1095f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13688, "upload_time": "2019-02-10T11:09:47", "url": "https://files.pythonhosted.org/packages/e1/9d/ece60ab72c6c6c6f0e4fb71156cd6befb930d39e9c4024c1deb212e64c5b/firebase-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "0356979a0e336dc947769a0d3a6f21ad", "sha256": "39f7a149bef90735a17fddda30cab3cb24b03e40ab221c12e1217ff0cfd38203" }, "downloads": -1, "filename": "firebase-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0356979a0e336dc947769a0d3a6f21ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18047, "upload_time": "2019-03-10T15:33:14", "url": "https://files.pythonhosted.org/packages/f8/33/6b2a24e349563f2d279ccc8321f26a9c0d6d2f8205adb68f3046c3ec7a89/firebase-3.0.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0356979a0e336dc947769a0d3a6f21ad", "sha256": "39f7a149bef90735a17fddda30cab3cb24b03e40ab221c12e1217ff0cfd38203" }, "downloads": -1, "filename": "firebase-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0356979a0e336dc947769a0d3a6f21ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18047, "upload_time": "2019-03-10T15:33:14", "url": "https://files.pythonhosted.org/packages/f8/33/6b2a24e349563f2d279ccc8321f26a9c0d6d2f8205adb68f3046c3ec7a89/firebase-3.0.1-py3-none-any.whl" } ] }