{ "info": { "author": "Niteo", "author_email": "info@niteo.co", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "## Integrate your [Pyramid](https://trypyramid.com) app with [Mixpanel](https://mixpanel.com/) to learn who your users are and how they are using your app.\n\n

\n \n

\n\n

\n \n \"CircleCI\n \n \"Test\n \"Test\n \n \"latest\n \n \n \"Supported\n \n \n \"License:\n \n \n \"Built\n \n \n \"Talk\n \n

\n\n## Opinionated Mixpanel integration\n\nThe reason this package exists is to provide sane defaults when integrating with Mixpanel. Instead of chasing down event name typos and debugging why tracking does not work, you can focus on learning what is important to your users.\n\n- You **never have typo-duplicated events** in Mixpanel, because every event name comes from a dataclass, never from a string that can be miss-typed by mistake.\n- Same for properties. Like events, **properties are hardcoded** as dataclasses.\n- All **\"special\" and \"reserved\" events and properties are already provided**, no need to chase them down in various Mixpanel docs.\n- Your **app never stops working if Mixpanel is down**, but you still get errors in your logs so you know what is going on.\n- You **never forget to call `flush()`** on the events buffer, since `pyramid_mixpanel` hooks into the request life-cycle and calls `flush()` at the end of the request processing.\n- You **defer sending events until the entire request is processed successfully**, i.e. never send events like \"User added a thing\" if adding the thing to DB failed at a later stage in the request life-cycle.\n\n\n## Features\n\n- Builds on top of https://mixpanel.github.io/mixpanel-python/.\n- Provides a handy `request.mixpanel.*` helper for sending events and setting profile properties.\n- Makes sure to call `.flush()` at the end of request life-cycle.\n- Provides dataclasses for events and properties, to avoid typos.\n- You can roll your own [`Consumer`](https://mixpanel.github.io/mixpanel-python/#built-in-consumers), for example one that schedules a background task to send events, to increase request processing speed, since HTTP requests to Mixpanel are offloaded to a background task.\n- Provides a MixpanelQuery helper to use [JQL](https://mixpanel.com/jql/) to query Mixpanel for data. Some common queries like one for getting profiles by email are included.\n- In local development and unit testing, all messages are stored in `request.mixpanel.api._consumer.mocked_messages` which makes writing integration tests a breeze.\n- Automatically sets Mixpanel tracking `distinct_id` if `request.user` exists. Otherwise, you need to set it manually with `request.mixpanel.distinct_id = 'foo'`.\n\n\n## Getting started\n\n1. Declare `pyramid_mixpanel` as a dependency in your Pyramid project.\n\n1. Include the following lines:\n\n ```python\n config.include(\"pyramid_mixpanel\")\n ```\n\n1. Tell mixpanel_mixpanel how you want to use it:\n\n\n ```ini\n # for local development and unit testing\n # events will be stored in request.mixpanel.api._consumer.mocked_messages\n mixpanel.token = false\n\n # minimal configuration\n mixpanel.token = \n\n # enable support for querying Mixpanel data\n mixpanel.api_secret = \n\n # custom events and properties\n mixpanel.events = myapp.mixpanel.Events\n mixpanel.event_properties = myapp.mixpanel.EventProperties\n mixpanel.profile_properties = myapp.mixpanel.ProfileProperties\n\n # defer sending of Mixpanel messages to a background task queue\n mixpanel.consumer = myapp.mixpanel.QueuedConsumer\n ```\n\nFor view code dealing with requests, a pre-configured `request.mixpanel`\nis available.\n\n\n## Design defense\n\nThe authors of `pyramid_openapi3` believe that while Mixpanel allows sending schema-less data, that can change as requirements for the project change, it is better to be precise about what \"events\" you send and what the properties of those events will be called. Same for \"profiles\". Here are the reasons that accumulated over 5 years of using Mixpanel at [Niteo](https://niteo.co):\n\na) There will be typos in event and property names. They will clutter your Mixpanel dashboard and slow you down.\n\nb) There will be differently named events for similar actions sent from different parts of your codebase. Then in your Mixpanel dashboard you'll have `User Clicked Button` and `Button Clicked` events in you won't be sure which to use, and what's the difference between them.\n\nc) Your events and properties will not be consistently named, because they will be sent from different parts of your codebase, by different authors. Your Mixpanel dashboard will feel somewhat \"broken\" because some events will be in past tense (`User Logged In`), some in all lowers caps (`generated invoice`), some with only the action verb (`click`) and so on.\n\nAll issues outlined above are alleviated using this package because all event & property names are defined as dataclasses, in a [single source of truth](https://github.com/niteoweb/pyramid_mixpanel/blob/eb47dcaa41e1f5de4134b066b90e9530d9318de2/pyramid_mixpanel/__init__.py#L29) manner. No typos are possible once the initial specification is done. You immediately recognize bad naming patterns because all event & property names are in a single file.\n\n## Naming best practice\n\nIn order to have nice and consistent event and property names, the authors of this package suggest using the following guidelines when coming up with names:\n\n* Use the ` ` format in past tense, i.e. `Button Clicked`, `Page Viewed`, `File Downloaded`.\n* Use [Title Case](https://en.wikipedia.org/wiki/Letter_case#Title_Case).\n* Frontend only sends two Mixpanel events: `Button/Link Clicked` and `Page Viewed`. We then construct custom events such as `Password Reset Button Clicked` or `Pricing Page Viewed` inside Mixpanel dashboard based on button name, URL, etc. Custom events can be modified retroactively, regular events cannot.\n* Backend sends \"action\" events, when those actions finish successfully, such as `Site Deployed`, `PDF generated`, `Backup Completed`.\n\n\n## Running tests\n\nYou need to have [pipenv](https://pipenv.readthedocs.io/) and Python 3.7 installed on your machine. Then you can run:\n\n $ make tests\n\n## Related packages\n\nThese packages are in the same problem-space:\n\n- [old release of pyramid_mixpanel](https://pypi.org/project/pyramid_mixpanel/0.1.65/) by @hadrien had some neat ideas that this project built upon, even though it is a complete rewrite;\n- the official [mixpanel-python](https://mixpanel.github.io/mixpanel-python/) is a lower-level library that this project depends on;\n- mostly deprecated [Mixpanel-api](https://github.com/mixpanel/mixpanel_api) for querying data, superseded by [JQL](https://mixpanel.com/jql/);\n- [mixpanel-jql](https://github.com/ownaginatious/mixpanel-jql) provides a Pythonic interface to writing JQL queries.\n\n\n## Use in the wild\n\nA couple of projects that use pyramid_mixpanel in production:\n\n- [WooCart](https://woocart.com) - Managed WooCommerce service.\n- [EasyBlogNetworks](https://easyblognetworks.com) - PBN hosting and autopilot maintenance.\n- [Kafkai](https://kafkai.com) - AI generated content.\n- [Docsy](https://docsy.org/) - Faceted search for private projects and teams.\n\n\n## Changelog\n\n0.6.0 (2019-08-26)\n------------------\n\n* Added support for configuring a custom Consumer.\n [zupo]\n\n\n0.5.0 (2019-08-25)\n------------------\n\n* Require that all Consumers implement a `flush()` method.\n [zupo]\n\n\n0.4.3 (2019-08-24)\n------------------\n\n* Include py.typed in the package, third time is the charm?\n [zupo]\n\n\n0.4.2 (2019-08-24)\n------------------\n\n* Include py.typed in the package, now for real.\n [zupo]\n\n\n0.4.1 (2019-08-24)\n------------------\n\n* Include py.typed in the package.\n [zupo]\n\n\n0.4.0 (2019-08-19)\n------------------\n\n* Prepare for PYPI release of the rewrite.\n [zupo]\n\n* Small performance optimization.\n [zupo]\n\n\n0.3.0 (2019-08-09)\n------------------\n\n* Add guards that make sure parameters sent to MixpanelTrack are valid.\n [zupo]\n\n* Don't flood logs with \"mixpanel configured\" messages.\n [zupo]\n\n* Support for the `people_append` method.\n [suryasr007]\n\n* Lots of cleanup of legacy assumptions:\n * `profile_sync` method was removed\n * request.user no longer required\n * MixpanelTrack init now accepts `distinct_id` instead of `user`\n * `state` ProfileProperty no longer required\n [zupo]\n\n\n0.2.1 (2019-07-28)\n------------------\n\n* Not all consumers have a .flush() method.\n [zupo]\n\n\n0.2.0 (2019-07-27)\n------------------\n\n* Rewrite based on 5 years of Mixpanel usage in production at Niteo.\n [@zupo, @vanclevstik, @dz0ny, @karantan, @am-on, @rokcarl]\n\n\n0.1.14 - 0.1.65 (2012-2014)\n---------------------------\n\n* Legacy version developed by @hadrien.\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/niteoweb/pyramid_mixpanel", "keywords": "pyramid mixpanel pylons web", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyramid-mixpanel", "package_url": "https://pypi.org/project/pyramid-mixpanel/", "platform": "", "project_url": "https://pypi.org/project/pyramid-mixpanel/", "project_urls": { "Homepage": "https://github.com/niteoweb/pyramid_mixpanel" }, "release_url": "https://pypi.org/project/pyramid-mixpanel/0.6.0/", "requires_dist": [ "pyramid", "requests", "structlog", "mixpanel" ], "requires_python": "", "summary": "Opinionated Pyramid integration with Mixpanel, a user behavioural analytics platform and CRM.", "version": "0.6.0" }, "last_serial": 5732167, "releases": { "0.1.14": [ { "comment_text": "", "digests": { "md5": "89ce09136ef8a1c436b01c868e532034", "sha256": "d09153ee04b07e4e96d44ce58a85b8af45be2f4d751f8799fcedc3671d8c2339" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.14.tar.gz", "has_sig": false, "md5_digest": "89ce09136ef8a1c436b01c868e532034", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2201, "upload_time": "2013-07-17T19:24:53", "url": "https://files.pythonhosted.org/packages/49/e1/bfb4f9c15277868f6f3691ee8d4be7617f0f8d02c57d2c0ae235218facc3/pyramid_mixpanel-0.1.14.tar.gz" } ], "0.1.21": [ { "comment_text": "", "digests": { "md5": "d9b956878abc090a5020538b434c0893", "sha256": "48eb05a38991e0abdac320f17f8e251c6149a04dbe66c7e884cad023a8f298d4" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.21.tar.gz", "has_sig": false, "md5_digest": "d9b956878abc090a5020538b434c0893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2391, "upload_time": "2012-12-05T21:27:59", "url": "https://files.pythonhosted.org/packages/ed/4b/7777e927bb13ecd8ca78e6fc2ea522d830b5c720c3fd15299ed53d6bedb0/pyramid_mixpanel-0.1.21.tar.gz" } ], "0.1.24": [ { "comment_text": "", "digests": { "md5": "b65436ecdcea3511abba8b8519143df0", "sha256": "c9f11272f30d0fb30aa2b99166b93adc6d37c0549ffd0d1f72727ec8a43eb7a8" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.24.tar.gz", "has_sig": false, "md5_digest": "b65436ecdcea3511abba8b8519143df0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2418, "upload_time": "2012-12-05T22:53:38", "url": "https://files.pythonhosted.org/packages/3f/00/d96b61e3b1527570f047852c0ceff9df18c417edf42c94e5cb474d28f6b4/pyramid_mixpanel-0.1.24.tar.gz" } ], "0.1.28": [ { "comment_text": "", "digests": { "md5": "e2a3dbd33f3d215e230771ae6bfa7084", "sha256": "1a80c94bbfcffdc0d93b8415c9a8c3b1d0d211786df7f18da7aeaea7043a2052" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.28.tar.gz", "has_sig": false, "md5_digest": "e2a3dbd33f3d215e230771ae6bfa7084", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2434, "upload_time": "2012-12-06T17:12:46", "url": "https://files.pythonhosted.org/packages/97/98/29ac0dacae0b748a8f9ab78c9edf6860944c9fcef1ab9fdc3885adb8bb56/pyramid_mixpanel-0.1.28.tar.gz" } ], "0.1.32": [ { "comment_text": "", "digests": { "md5": "c8269d074a1c3302203fcd77cf03f750", "sha256": "a9ff75b8f4e1c40cde9b6190ea79505fab035608ff21c45145c71ab73a1097ad" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.32.tar.gz", "has_sig": false, "md5_digest": "c8269d074a1c3302203fcd77cf03f750", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2639, "upload_time": "2013-01-28T17:16:18", "url": "https://files.pythonhosted.org/packages/3d/f2/d06125344abff4cbaa6313d88d979fdee727b448a368806dfa001e8a7124/pyramid_mixpanel-0.1.32.tar.gz" } ], "0.1.35": [ { "comment_text": "", "digests": { "md5": "eae3441d8d5fb4538c1cb337623620b8", "sha256": "fdc3ae81dab26369a0a23115040918e4bf870741213b15f7e62dddaa5536ceab" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.35.tar.gz", "has_sig": false, "md5_digest": "eae3441d8d5fb4538c1cb337623620b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2729, "upload_time": "2013-01-29T22:02:54", "url": "https://files.pythonhosted.org/packages/5d/82/c55ce43a73990ae0d3e0cd9163ec7ee933e1111c70485624fcdd628239cb/pyramid_mixpanel-0.1.35.tar.gz" } ], "0.1.41": [ { "comment_text": "", "digests": { "md5": "f3d33562a7f59e5fadd7ae35f8ff3045", "sha256": "82ccecad7d9d31bde32a444eec118d023a4569fd72bc78896711faf30bc68f4c" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.41.tar.gz", "has_sig": false, "md5_digest": "f3d33562a7f59e5fadd7ae35f8ff3045", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2761, "upload_time": "2013-01-30T15:46:02", "url": "https://files.pythonhosted.org/packages/fa/f8/a14c5e09c826eb4d899bbf98edb014bcce78839fb5e581f9e840170582db/pyramid_mixpanel-0.1.41.tar.gz" } ], "0.1.57": [ { "comment_text": "", "digests": { "md5": "80400d770d63effef172a396b6f8ea7d", "sha256": "7bf5e4af519916a4a3d51f3a81f3b227a4d076e6ce8eb78eae98551c62ad0866" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.57.tar.gz", "has_sig": false, "md5_digest": "80400d770d63effef172a396b6f8ea7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3001, "upload_time": "2013-04-16T20:00:59", "url": "https://files.pythonhosted.org/packages/54/44/f121a38396acc29654266a7cdb329b4f79bfe5c75e9b99d725fe5a850d59/pyramid_mixpanel-0.1.57.tar.gz" } ], "0.1.62": [ { "comment_text": "", "digests": { "md5": "33a4293ba13148aac772c6721a5e4a65", "sha256": "115488349fe8d2252f5e448d4b0d5e3bef11ef503bdf1f31513f7e380cb09aa9" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.62.tar.gz", "has_sig": false, "md5_digest": "33a4293ba13148aac772c6721a5e4a65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2980, "upload_time": "2013-06-06T21:54:54", "url": "https://files.pythonhosted.org/packages/f5/fa/b8cc665a9c820d845e77598b22fda6ed266133f08eb6be2c80b911f1c8a3/pyramid_mixpanel-0.1.62.tar.gz" } ], "0.1.63": [ { "comment_text": "", "digests": { "md5": "1250f4862190f172a3e0e2db5c729a0c", "sha256": "40a177b8239d51d5ddcb1672a96eeea0647f084f1b9b397f9d773639cb6437aa" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.63.tar.gz", "has_sig": false, "md5_digest": "1250f4862190f172a3e0e2db5c729a0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3021, "upload_time": "2014-07-28T21:12:22", "url": "https://files.pythonhosted.org/packages/d7/ec/a53d8df33c26a597ef666d132a8cbc2992f8141b9c0d7ae5afb1cff612fe/pyramid_mixpanel-0.1.63.tar.gz" } ], "0.1.64": [ { "comment_text": "", "digests": { "md5": "8ecae5a4ea1468e61195e670e71b6644", "sha256": "03a6659815386005969ff709a7a6595db62d924a2e33b6d6263fafa3a95c1b63" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.64.tar.gz", "has_sig": false, "md5_digest": "8ecae5a4ea1468e61195e670e71b6644", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3034, "upload_time": "2014-12-05T01:01:34", "url": "https://files.pythonhosted.org/packages/d2/90/08a3e678b6b489b35e8734fc06c9a7c88942535ead5f25a803b112e00846/pyramid_mixpanel-0.1.64.tar.gz" } ], "0.1.65": [ { "comment_text": "", "digests": { "md5": "b75e145a4992e98d0e38b5482136c268", "sha256": "bdbc1c5a1eb44111b6f70eabedb59a62d3c3682d3d9dc37d64a385dbdf8454d1" }, "downloads": -1, "filename": "pyramid_mixpanel-0.1.65.tar.gz", "has_sig": false, "md5_digest": "b75e145a4992e98d0e38b5482136c268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3134, "upload_time": "2014-12-11T19:07:14", "url": "https://files.pythonhosted.org/packages/e1/82/97ce4010af164c89eaf01082e06bc36231e1e6d8bd68d13c8fff66c662f5/pyramid_mixpanel-0.1.65.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "17ed57773dea5dd0de89ad1b541d1c2b", "sha256": "d8427e7f6c4cb27320e0a6084d2f45704d392ed5ca921b48c52a6a5751355bcb" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17ed57773dea5dd0de89ad1b541d1c2b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18661, "upload_time": "2019-08-19T20:23:35", "url": "https://files.pythonhosted.org/packages/8f/5a/5db8c741444a39572c229debd1940157bb9abc1a763601a91bff73eed393/pyramid_mixpanel-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae2c4fd4bbc6a34c2e24a9b3c1b7e960", "sha256": "e24b6b7cae06680d93ca942f7c059c47419c6b2741c956e621b06ea7da46c6ea" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ae2c4fd4bbc6a34c2e24a9b3c1b7e960", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20766, "upload_time": "2019-08-19T20:23:36", "url": "https://files.pythonhosted.org/packages/54/55/e8f11ef67b30c8835f29f05be9e99e0835490e0ec0dcf3987e64a7bd57c0/pyramid_mixpanel-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e650d8901dc6d969a4d172a2ba64fed8", "sha256": "44e32deb872e0123ba63c3768e06020e6f5080b2f8f42839ba4dbdf7caa5f859" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e650d8901dc6d969a4d172a2ba64fed8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18683, "upload_time": "2019-08-24T14:57:25", "url": "https://files.pythonhosted.org/packages/cd/fe/6367aee82ed97109226c9ee07ed6780ea09130dcbc3b8e1fd9b693b76627/pyramid_mixpanel-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df819b37d94e8835f4c3715a450bd72d", "sha256": "92b166e74bc1c1a510763b8cf7fc9441edd0983ce5b80c982b552aecd1453ebd" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.1.tar.gz", "has_sig": false, "md5_digest": "df819b37d94e8835f4c3715a450bd72d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20834, "upload_time": "2019-08-24T14:57:27", "url": "https://files.pythonhosted.org/packages/2c/8d/fac301586f46de8ec92d59b363c77de318817500c86d23003b944d830034/pyramid_mixpanel-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "52a7c1cec37b7a35afc9273770d21a04", "sha256": "e034ea918f4be1d062c138bdab9876edbd50ab2f2f08cc9bbb528b02696b90ad" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52a7c1cec37b7a35afc9273770d21a04", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18698, "upload_time": "2019-08-24T20:10:07", "url": "https://files.pythonhosted.org/packages/83/41/ae4f6865699947abd50148b06bf3fd2bff4d995c4e837f1ca935d3c905ee/pyramid_mixpanel-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7ba1ab8e8d8c2b0eccef22d6523989f", "sha256": "6fb62b99281beadb0d6fbfd316fc2c7ecb009cc7379e0e166caf46b6a52dc7d6" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a7ba1ab8e8d8c2b0eccef22d6523989f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20870, "upload_time": "2019-08-24T20:10:08", "url": "https://files.pythonhosted.org/packages/5b/a5/38edbdbc201d61aab9ba883589ecc0982a018d3890b19ae06d12e6a91d1c/pyramid_mixpanel-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "96c9a539fa262a0ba061939bfab8ae6c", "sha256": "a71413df8d6bbbd307a2bed05719f8dabfd3f56dd635d13b273ebd390a6bc763" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "96c9a539fa262a0ba061939bfab8ae6c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18892, "upload_time": "2019-08-24T20:30:06", "url": "https://files.pythonhosted.org/packages/21/20/6052af9da798b607ef1d13746a44f9063fbd96ec70046f87416bba864f76/pyramid_mixpanel-0.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3fe18b7d564aa9c1d348bfe714a0018", "sha256": "1232092177495ced50f8072ddfe23d4d1834d4ad698644ead5a72441487fdb9a" }, "downloads": -1, "filename": "pyramid_mixpanel-0.4.3.tar.gz", "has_sig": false, "md5_digest": "b3fe18b7d564aa9c1d348bfe714a0018", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20993, "upload_time": "2019-08-24T20:30:08", "url": "https://files.pythonhosted.org/packages/49/a7/906e26ceef5b3819bf69ee8c8c990244aef767213e8e0eeae4fdc45aabd4/pyramid_mixpanel-0.4.3.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "0b199a666ce21c3b592351f243ba5c8b", "sha256": "f45d9572de2c30f99b421b22d99d975e2492a6724a0cd786e17c4a1500f51c65" }, "downloads": -1, "filename": "pyramid_mixpanel-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0b199a666ce21c3b592351f243ba5c8b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18915, "upload_time": "2019-08-25T20:36:00", "url": "https://files.pythonhosted.org/packages/f3/53/0868e44a04ce6a2f1de428516f76332c04c95f6be63938e5db0f2cb7c017/pyramid_mixpanel-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dbc7d20bdbaa3f7a62905f9f01adf1f7", "sha256": "52c351bdb8a6ae22405d52f9f9a8f0e8f540c63190cd29f62cec091622488889" }, "downloads": -1, "filename": "pyramid_mixpanel-0.5.0.tar.gz", "has_sig": false, "md5_digest": "dbc7d20bdbaa3f7a62905f9f01adf1f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21079, "upload_time": "2019-08-25T20:36:02", "url": "https://files.pythonhosted.org/packages/d7/c5/cbffada688c6f845a3a746f5769c3b4d9b5ddc085f81520edae51be0dba9/pyramid_mixpanel-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "2d3a9b3c31861f6246966c34581db6de", "sha256": "b6caa4c0f97c1a1c78740fffa72e54ff572be35428d67448fbcfd8aff0a6d980" }, "downloads": -1, "filename": "pyramid_mixpanel-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d3a9b3c31861f6246966c34581db6de", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19159, "upload_time": "2019-08-26T17:37:28", "url": "https://files.pythonhosted.org/packages/b2/03/1b7d31845d3c21e620eaa7d6c3f6df8b62c75525c06f0c5add2ea092ff06/pyramid_mixpanel-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebbdb59fb01b68cc967f42dae7a6ff73", "sha256": "67f5acc930644d06fce8eb1fd5be42310eb06b5695ff601a44eca0bdd088eb01" }, "downloads": -1, "filename": "pyramid_mixpanel-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ebbdb59fb01b68cc967f42dae7a6ff73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21340, "upload_time": "2019-08-26T17:37:30", "url": "https://files.pythonhosted.org/packages/75/05/1735fdc3683b0ece3a95ff8b5048a4d5ffc05c374a589ab60980da1572fb/pyramid_mixpanel-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2d3a9b3c31861f6246966c34581db6de", "sha256": "b6caa4c0f97c1a1c78740fffa72e54ff572be35428d67448fbcfd8aff0a6d980" }, "downloads": -1, "filename": "pyramid_mixpanel-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d3a9b3c31861f6246966c34581db6de", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19159, "upload_time": "2019-08-26T17:37:28", "url": "https://files.pythonhosted.org/packages/b2/03/1b7d31845d3c21e620eaa7d6c3f6df8b62c75525c06f0c5add2ea092ff06/pyramid_mixpanel-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebbdb59fb01b68cc967f42dae7a6ff73", "sha256": "67f5acc930644d06fce8eb1fd5be42310eb06b5695ff601a44eca0bdd088eb01" }, "downloads": -1, "filename": "pyramid_mixpanel-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ebbdb59fb01b68cc967f42dae7a6ff73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21340, "upload_time": "2019-08-26T17:37:30", "url": "https://files.pythonhosted.org/packages/75/05/1735fdc3683b0ece3a95ff8b5048a4d5ffc05c374a589ab60980da1572fb/pyramid_mixpanel-0.6.0.tar.gz" } ] }