{ "info": { "author": "Yiorgis Gozadinos", "author_email": "ggozad@jarn.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Plone", "Intended Audience :: Developers", "Programming Language :: Python" ], "description": "============\nIntroduction\n============\n\n``jarn.xmpp.core`` is a Plone add-on providing the following functionality based on XMPP services:\n\n* Integration of plone user accounts with XMPP accounts and authentication.\n* A microblogging environment similar to twitter/yammer based on XMPP PubSub.\n* Messaging.\n\nIt is part of a suite of packages aiming to provide XMPP services to Plone. The other two packages are\n\n* `jarn.xmpp.twisted`_, provides XMPP-specific protocol implementation for twisted.\n* `jarn.xmpp.collaboration`_ provides an XMPP protocol to do real-time collaborative editing as well as a Plone-targeted implementation.\n\n============\nInstallation\n============\n\nBefore setting up the package you need to have a working XMPP server and access to the administration account on the server. The package has only been tested with ejabberd version 2.1.5 and above which is recommended. In any case the following XMPP extensions need to be supported by the server you are going to use:\n\n* `XEP-0071`_ XHTML-IM.\n* `XEP-0054`_ vCard-temp.\n* `XEP-0144`_ Roster Item Exchange.\n* `XEP-0060`_ Publish-Subscribe.\n* `XEP-0248`_ PubSub Collection Nodes.\n* `XEP-0133`_ Service Administration.\n* `XEP-0124`_ Bidirectional-streams Over Synchronous HTTP (BOSH)\n* `XEP-0206`_ XMPP over BOSH\n* `XEP-0049`_ Private XML Storage\n\n--------\nBuildout\n--------\nA sample buildout you can use as a starting point can be found at `jarn.xmpp.buildout`_.\n\n-----------------------------\nSetting up ejabberd (>=2.1.5)\n-----------------------------\n\nAutomatic configuration\n-----------------------\n* Use the recipe provided in `jarn.xmpp.buildout`_ (in which case you will need to have erlang installed) or download the `ejabberd`_ installer.\n* A minimal configuration for ejabberd can be generated for convenience by the ``ejabberd.cfg`` part of `jarn.xmpp.buildout`_. You will need to copy the ``templates`` directory and modify the recipe configuration accordingly::\n\n [ejabberd.cfg]\n recipe = collective.recipe.template\n input = templates/ejabberd.cfg.in\n output = ${buildout:directory}/etc/ejabberd.cfg\n xmppdomain = localhost\n admin_userid = admin\n collaboration_allowed_subnet = 0,0,0,0\n collaboration_port = 5347\n component_password = secret\n\n\nwhere ``xmppdomain`` is the domain (or virtual host) running on your XMPP server and ``admin_userid`` is the id the the administrator account that Plone is going to use to interact with the server. The rest of the options are used by ``jarn.xmpp.collaboration`` for the collaborative editing component connecting to the XMPP server. Here, ``collaboration_allowed_subnet`` specifies from which IPs the XMPP server is going to accept connections and should match the IPs your Plone instances are going to be using. Leaving it to ``0,0,0,0`` will allow all IPs, ``127,0,0,1`` will allow only ``localhost``. Finally ``collaboration_port`` is the port to which the collaboration component is going to connect to and ``component_password`` is the shared password between the component and the XMPP server.\n\nManual configuration\n--------------------\nIf you already run an XMPP server here are some hints on how to set it up:\n\n* We assume that your xmpp domain is ``localhost``. There should exist an administrator account ``admin@localhost``. In addition if you intend to run some of the tests in any of the ``jarn.xmpp.*`` packages you will need to be running an additional XMPP node on ``localhost`` if you use some other domain for production. You can safely remove any references to ``localhost`` if you are not interested in doing that.\n\n* Make sure you have enabled the `http_bind` module, as this is what the javascript clients will use to connect. You should have something like this in your ejabberd.cfg:\n\n ::\n\n {5280, ejabberd_http, [\n http_bind,\n web_admin\n ]}\n\n* Because ejabberd's implementation of XEP-0060 is not standard use of the ejabberd's ``dag`` module is necessary. So, make sure your pubsub module is configured appropriately:\n\n ::\n\n {mod_pubsub, [\n {access_createnode, pubsub_createnode},\n {ignore_pep_from_offline, true},\n {last_item_cache, false},\n {nodetree, \"dag\"},\n {plugins, [\"dag\", \"flat\", \"hometree\", \"pep\"]},\n {max_items_node, 1000}\n ]},\n\n* In order to test and run custom XMPP components (for instance the collaborative editing component provided by ``jarn.xmpp.collaboration``) you will need to allow them to connect. This means you should have something similar to this configuration:\n\n ::\n\n {5347, ejabberd_service, [\n {access, all}, \n {shaper_rule, fast},\n {ip, {127, 0, 0, 1}},\n {hosts,\n [\"collaboration.localhost\"],\n [{password, \"secret\"}]\n }\n ]},\n\nThe rest of the standard options should be fine.\n\nAdministrator account\n---------------------\nIf you have not done so during installation you might need to create manually the administrator account. In the ejabberd folder execute::\n\n ./bin/ejabberdctl register admin localhost your_password\n\nTest that you can access your ejabberd by logging to the admin interface (typically ``http://localhost:5280/admin``). You should also be able to access the ``http-bind`` interface at ``http://localhost:5280/http-bind``.\n\n-------------------------------\nSetting up your front-end proxy\n-------------------------------\nOn the client-side every authenticated user will be connected to your jabber server through an emulated bidirectional stream through HTTP. To allow for this you need a proxy in front of Plone that will be redirecting the XMPP stream to your XMPP server. It is possible to do without one using the inferior solution of Flash plugins but this is not going to be supported. \n\nSo assuming you run ``nginx`` as a proxy at port ``8080`` for the domain ``localhost``, Zope listens on ``8081``, there exists a Plone site with id ``Plone`` and your ejabberd has the ``http_bind`` configured for port ``5280``, your ``nginx`` configuration will look like this:\n\n ::\n\n http {\n server {\n listen 8080;\n server_name localhost;\n location ~ ^/http-bind/ {\n proxy_pass http://localhost:5280;\n }\n\n location / {\n proxy_pass http://localhost:8081/VirtualHostBase/http/localhost:8080/Plone/VirtualHostRoot/;\n }\n }\n }\n\n-------------------------------\nSetting up your Plone instances\n-------------------------------\nYour instances will need to maintain a connection to the administrator account of your XMPP server. This is accomplished through ``Twisted`` and you will need to run a Twisted reactor on each of them. To do so include this in your instance section of your buildout:\n\n ::\n\n zcml-additional =\n \n \n \n\nAgain, it will help you to have a look at the sample buildout provided in `jarn.xmpp.buildout`_.\n\n---------------------------\nSetting up a new Plone site\n---------------------------\n* Start ejabberd (if you used the recipe to build ejabberd, ``bin/ejabberd`` will do the job).\n* Start the Nginx frontend. ``bin/frontend start``\n* Start your zope instance.\n* Access Zope directly at ``http://localhost:8081/manage`` and create a new Plone site with ``jarn.xmpp.core`` (or ``jarn.xmpp.collaboration`` if you want that package installed as well).\n* Go to the Plone control panel, into the registry settings. Edit the jarn.xmpp.* settings to reflect your installation, passwords etc.\n* Restart your Plone instance.\n* Upon the first request the administrator will log to his account. You should see things happening in the logs and if there are any errors something might be wrong with your installation.\n* Setup the the users and pubsub nodes. You do this by calling ``@@setup-xmpp`` like ``http://localhost:8080/@@setup-xmpp``. The form will not report any errors as everything will happen asynchronously but you will get the results/failures on the console.\n\nIf you are going to use this on an existing site, you only need to perform the last step after making sure that your XMPP admin is connected.\n\n--------------------------\nMaking sure things work ;)\n--------------------------\n\nThis is a complex infrastructure so it can be hard to know what goes wrong sometimes. Do not despair, here are a few things to try:\n\n* Make sure your ejabberd is running. Connect to it normal client as the admin user.\n* Verify that http-binding is setup properly on ejabberd. Visiting ``http://localhost:5280/http-bind`` should tell you it's working.\n* Verify that XMPP requests will get properly through your proxy. Visiting ``http://localhost:8080/http-bind/`` should give you the same result as above.\n* When you start your Zope instance in foreground you can verify the Twisted reactor is running fine:\n\n ::\n\n 2011-09-01 14:37:38 INFO jarn.xmpp.twisted Starting Twisted reactor...\n 2011-09-01 14:37:38 INFO jarn.xmpp.twisted Twisted reactor started\n 2011-09-01 14:37:38 INFO Zope Ready to handle requests\n\n* After the first request to the site, you should also see in the logs:\n\n ::\n\n 2011-09-01 14:45:48 INFO jarn.xmpp.core XMPP admin client has authenticated succesfully.\n\n* After having run ``@@setup-xmpp``, logging-in to the Plone site with a user should also authenticate him with the XMPP server. This is indicated in the logs by:\n\n ::\n\n 2011-09-01 14:45:50 INFO jarn.xmpp.core Pre-binded ggozad@localhost/auto-QravOoyEeE\n\n=============\nExperimenting\n=============\n\n-------------\nUsage\n-------------\n\n* Add a few users.\n* Login as one of them, and in a different browser as some other. Use the frontend to access the site, if you used the settings above this should be ``http://localhost:8080``.\n* All actions are performed through the viewlet on the top right: ``Online users`` will display the users currently logged in. Clicking it will give you the list of users. You can message them directly or look at their personal feed.\n* Try posting an entry to your feed. Links will be transformed automatically. As soon as you submit other logged-in users will receive a notification in real-time. Using a recent browser that supports geolocation will allow you also share your location at the time of the post.\n* Try commenting on a feed post.\n* By clicking on the \"Following\" user action you can select which users you want to follow, or follow them all.\n* You can see all posts by clicking on ``Site feed`` on the viewlet.\n\n========\nSecurity\n========\n\n``jarn.xmpp.twisted`` includes an implementation of an authenticating client over BOSH according to `XEP-0206`_. This practically means that the javascript client never needs to know the password of the XMPP user. Instead, the user is authenticated directly between the XMPP server and the Plone instance. A pair of secret tokens are exchanged, valid for a short time (~2 minutes). It is this pair that is given to the javascript client and not the password.\n\nWhen a user is created (either through the Plone interface or by running ``@@setup-xmpp`` for existing users), a random password is generated and stored internally in a persistent utility.\n\nIf you do not need to access the XMPP accounts outside of the Plone instance you can additionally hide the entire XMPP service behind a firewall and only allow connections to it from the Plone instances. This in combination with HTTPS should be enough for the paranoid among us.\n\n=======\nTesting\n=======\n\nSome of the included tests are functional tests that require a XMPP server running on ``localhost`` as well as an administrator account setup up on this server with JID ``admin@localhost`` and password ``admin``. If you wish to run those you have to specify a *level* 2 on your testrunner, i.e.\n\n ::\n\n ./bin/test -a 2 -s jarn.xmpp.core\n\n=======\nCredits\n=======\n\n* The UI was designed and implemented by Denys Mishunov.\n* Most of this work was done using the 10% time available to `Jarn AS`_ employees for the development of open-source projects.\n\n.. _XEP-0071: http://xmpp.org/extensions/xep-0071.html\n.. _XEP-0054: http://xmpp.org/extensions/xep-0054.html\n.. _XEP-0144: http://xmpp.org/extensions/xep-0144.html\n.. _XEP-0060: http://xmpp.org/extensions/xep-0060.html\n.. _XEP-0248: http://xmpp.org/extensions/xep-0248.html\n.. _XEP-0133: http://xmpp.org/extensions/xep-0133.html\n.. _XEP-0124: http://xmpp.org/extensions/xep-0124.html\n.. _XEP-0206: http://xmpp.org/extensions/xep-0206.html\n.. _XEP-0049: http://xmpp.org/extensions/xep-0049.html\n.. _ejabberd: http://www.ejabberd.im\n.. _Jarn AS: http://jarn.com\n.. _jarn.xmpp.buildout: http://github.com/ggozad/jarn.xmpp.buildout\n.. _jarn.xmpp.twisted: http://pypi.python.org/pypi/jarn.xmpp.twisted\n.. _jarn.xmpp.collaboration: http://pypi.python.org/pypi/jarn.xmpp.collaboration\n\n=========\nChangelog\n=========\n\n----------------\n0.34 - 2011-12-9\n----------------\n\n- Fix Google maps initialization.\n [ggozad]\n\n-----------------\n0.33 - 2011-12-07\n-----------------\n\n- IE9 compatibility.\n [ggozad]\n\n- No-cache for BOSH authentication.\n [ggozad]\n\n-----------------\n0.32 - 2011-11-30\n-----------------\n\n- UI/UX improvements.\n [mishunov]\n\n- Fixed a title-less portlet bug.\n [ggozad]\n\n- Fixed a bug that would allow the storage to load only 10 items from each \n node.\n [ggozad]\n\n- Fixed json views to set properly json headers.\n [ggozad]\n\n-----------------\n0.31 - 2011-11-28\n-----------------\n\n- Version fix.\n [ggozad]\n\n----------------\n0.3 - 2011-11-28\n----------------\n\n- Support one-level threading on pubsub nodes.\n [ggozad]\n\n- Allow users to subscribe to individual nodes.\n [ggozad]\n\n- Load PubSub items asyncronously.\n [ggozad]\n\n- Implement XEP-0049 private storage on XMPP.\n [ggozad]\n\n- Implement vCard 2.0 support. Allows all user meta-data/avatars to be stored\n on the XMPP server, avoiding all calls to Plone.\n [ggozad]\n\n- Fix rare condition where a Safari browser would really misbehave and\n sometimes crash. Reverted patch to Strophe to allow WebKit browsers to make\n a synchronous instead of async call to disconnect on page unload.\n [ggozad]\n\n- Styling!\n [mishunov]\n\n- Update German translations\n [potzenheimer]\n\n- Update french translation\n [toutpt]\n\n-----------------\n0.23 - 2011-11-02\n-----------------\n\n- Add German translations\n [potzenheimer]\n\n- Added Italian translation\n [giacomos]\n\n- Added French translation\n [toutpt]\n\n-----------------\n0.22 - 2011-11-02\n-----------------\n\n- i18n support. Norwegian and Greek for the time being.\n [ggozad]\n\n- Provide a portlet that shows a PubSub feed.\n [ggozad]\n\n- Fixed magic link error when the url points to a binary. \n https://github.com/ggozad/jarn.xmpp.core/issues/13\n [ggozad]\n\n-----------------\n0.21 - 2011-10-27\n-----------------\n\n- Do not track user's geolocation unless it's necessary.\n [ggozad]\n\n- Proxy the downloading of favicons (Closes #11).\n [ggozad]\n\n- Link portrait to personal stream in feed views. (Closes #10).\n [ggozad]\n\n- \"Pretty dates\" for the pubsub feed. (Closes #8).\n [ggozad]\n\n----------------\n0.2 - 2011-10-20\n----------------\n\n- Add geolocation capabilities. Posting to feeds can now include geolocation\n data.\n [ggozad]\n\n- Use sessionStorage for user-info data, so that they are only fetched once\n per session.\n [ggozad]\n\n------------------\n0.2b1 - 2011-10-09\n------------------\n\n- Design and implement awesome UI for messaging, presence, pubsub feeds.\n [mishunov, ggozad]\n\n- Replace python views/utilities for publishing to nodes by js.\n [ggozad]\n\n- Provide a pubsub item view and load them asynchronously in the pubsub feed\n view.\n [ggozad]\n\n- Start using sessionStorage in browsers where this is supported.\n [ggozad]\n\n- Remove multi-user chat. It will go in again properly when the use-cases have\n been defined.\n [ggozad]\n\n------------------\n0.1b4 - 2011-09-30\n------------------\n\n- Revert to using Strophe 1.0.1 as a workaround against broken xml parser that\n insists on escaping everything.\n [ggozad]\n\n------------------\n0.1b3 - 2011-09-18\n------------------\n\n- Patch strophe to make synchronous requests in order to be able to *really*\n disconnect on onbeforeunload. This is to stop WebKit-based browsers from\n keeping users connected until they timeout. Also, no longer use minified\n versions of strophe libraries, since we patch them.\n [ggozad]\n\n- Documentation updates.\n [tkimnguyen]\n\n------------------\n0.1b2 - 2011-09-02\n------------------\n\n- Fix startup subscriber to not do anything if the product has not been\n installed. This allows you to install on an existing site.\n [ggozad]\n\n- Update to Strophe 1.0.2\n [ggozad]\n\n------------------\n0.1b1 - 2011-09-01\n------------------\n\n- Simplified configuration and fixed confusing typos in the registry\n [ggozad]\n\n- The admin client now handles failures to connect as well as getting\n disconnected. When this happens, the admin client utility will\n get unregistered and will retry on the next request.\n [ggozad]\n\n- A viewlet is now available through which all actions can be performed.\n [ggozad]\n\n- Added recipe in buildout to build ejabberd. Requires a working erlang\n installation.\n [ggozad]\n\n- JS fixes\n [ggozad]\n\n------------------\n0.1a3 - 2011-06-06\n------------------\n\n- Included recipe to generate a working ejabberd.cfg using \n collective.recipe.template.\n [ggozad]\n\n- Added some basic tests for pubsub.\n [ggozad]\n\n- Run tests requiring the EJABBERD layer only when level 2 is specified on the\n testrunner.\n [ggozad]\n\n------------------\n0.1a2 - 2011-05-11\n------------------\n\n- Updated documentation on how to add a recent wokkel.\n [ggozad]\n\n------------------\n0.1a1 - 2011-05-09\n------------------\n\n- Initial release\n [ggozad]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ggozad/jarn.xmpp.core", "keywords": "plone xmpp twisted microblogging", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "jarn.xmpp.core", "package_url": "https://pypi.org/project/jarn.xmpp.core/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/jarn.xmpp.core/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/ggozad/jarn.xmpp.core" }, "release_url": "https://pypi.org/project/jarn.xmpp.core/0.34/", "requires_dist": null, "requires_python": null, "summary": "Core package for jarn.xmpp", "version": "0.34" }, "last_serial": 793578, "releases": { "0.1a1": [ { "comment_text": "", "digests": { "md5": "53e257fc1e4ec70ebc9c0238e89ce573", "sha256": "39027034b8d3e0aafd26bb3d7ee3ac4a4e0a8e88e3d701f4fc0c85d7fa9cea59" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1a1.zip", "has_sig": false, "md5_digest": "53e257fc1e4ec70ebc9c0238e89ce573", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82084, "upload_time": "2011-05-09T15:19:06", "url": "https://files.pythonhosted.org/packages/55/54/1743eae95581ff44c1c10c1978354dbb39c02d763b8c8916fce792db7f5a/jarn.xmpp.core-0.1a1.zip" } ], "0.1a2": [ { "comment_text": "", "digests": { "md5": "c26bad3178e92acd4f02d6b64ee530bd", "sha256": "64708ad7e0a854ddc686d2fa973e1eff788e73d02a050a69213be0edceaa6c92" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1a2.zip", "has_sig": false, "md5_digest": "c26bad3178e92acd4f02d6b64ee530bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82617, "upload_time": "2011-05-11T12:58:48", "url": "https://files.pythonhosted.org/packages/bc/2c/abd6863ff9f10e2f00b1cb26489b7f917b5b9b88e32e263f8e375c5dfa9f/jarn.xmpp.core-0.1a2.zip" } ], "0.1a3": [ { "comment_text": "", "digests": { "md5": "171b05ddda1d6e243fe72cb0895b6571", "sha256": "aeebeb6b6d055f5a6104da4a97b45ab894f6e1ad23602e2be079b6c08ecf092d" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1a3.zip", "has_sig": false, "md5_digest": "171b05ddda1d6e243fe72cb0895b6571", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86228, "upload_time": "2011-06-06T22:55:32", "url": "https://files.pythonhosted.org/packages/6e/0e/4679540e979d6d0e280a12d8444e9501981a46c0ffede1647cf92067ce46/jarn.xmpp.core-0.1a3.zip" } ], "0.1b1": [ { "comment_text": "", "digests": { "md5": "1b96cbdc70e07d9421aeea1a44d54d80", "sha256": "6847a2cf7e521cc3d8c04b8cc9c9d2f8d322a36bca2e8d921cb60226b2e47749" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1b1.zip", "has_sig": false, "md5_digest": "1b96cbdc70e07d9421aeea1a44d54d80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88393, "upload_time": "2011-09-01T17:28:29", "url": "https://files.pythonhosted.org/packages/e7/d5/af1cb2e4c1a41c04cd385973c64a738e7775efafe173845e0b0fa77293ca/jarn.xmpp.core-0.1b1.zip" } ], "0.1b2": [ { "comment_text": "", "digests": { "md5": "6f42f23ef6fbe1fa67bcad60cfc1186e", "sha256": "55058eb87b733733a6aa51e84dd99af0b845bf3e2620eedae62b43bed50a78c1" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1b2.zip", "has_sig": false, "md5_digest": "6f42f23ef6fbe1fa67bcad60cfc1186e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88660, "upload_time": "2011-09-02T11:17:05", "url": "https://files.pythonhosted.org/packages/6a/e5/340af69d1c9aaaafa324a1717bd4f492e4c7ccdaae15f88584f5d94d3d27/jarn.xmpp.core-0.1b2.zip" } ], "0.1b3": [ { "comment_text": "", "digests": { "md5": "2be105c517cc275e2c5f40220992587f", "sha256": "2160036645aa306da0add6acb60b377cfdefdc46a46bc65fdba40983aacf0f5c" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1b3.zip", "has_sig": false, "md5_digest": "2be105c517cc275e2c5f40220992587f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107022, "upload_time": "2011-09-18T12:57:15", "url": "https://files.pythonhosted.org/packages/8c/20/ce103f2762a2278721965b1bfa5e0e780169507e69cd24715e01dcc68655/jarn.xmpp.core-0.1b3.zip" } ], "0.1b4": [ { "comment_text": "", "digests": { "md5": "40126fd883d79eb2bf8ff118b8742387", "sha256": "8581a531dd89fd53eb8cbf70ab06290e8ccb975eb047c9ba27e261feb1b0779f" }, "downloads": -1, "filename": "jarn.xmpp.core-0.1b4.zip", "has_sig": false, "md5_digest": "40126fd883d79eb2bf8ff118b8742387", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106745, "upload_time": "2011-09-30T17:40:47", "url": "https://files.pythonhosted.org/packages/1e/7f/33afdb6f849c7bf40b3c3458eb0ad51899310400380dc859c8799287547b/jarn.xmpp.core-0.1b4.zip" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "30dab4d7a20895d8426f4a1062bb585c", "sha256": "8e996e8b698072900b99492ff886568e368886dfb31ecd667339d9ba2196a56d" }, "downloads": -1, "filename": "jarn.xmpp.core-0.2.zip", "has_sig": false, "md5_digest": "30dab4d7a20895d8426f4a1062bb585c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110652, "upload_time": "2011-10-20T09:45:59", "url": "https://files.pythonhosted.org/packages/0b/5c/85619fedb183b5c911d2a56804b3f65b133be86e8af62cb28eb24bd13457/jarn.xmpp.core-0.2.zip" } ], "0.21": [ { "comment_text": "", "digests": { "md5": "8fc585f7da227303a2c3b1222eca6d27", "sha256": "384d6ed39c453977fbc1a79d341f6a53ca259d70fb834b49bb9b8671b6eb3235" }, "downloads": -1, "filename": "jarn.xmpp.core-0.21.zip", "has_sig": false, "md5_digest": "8fc585f7da227303a2c3b1222eca6d27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111767, "upload_time": "2011-10-27T13:44:23", "url": "https://files.pythonhosted.org/packages/47/ae/1277fb5b821d45ac65671fd75e5f22fe9634dd86365ad6a50601e793ca7a/jarn.xmpp.core-0.21.zip" } ], "0.22": [ { "comment_text": "", "digests": { "md5": "ee1e9946eabb2e0bc4c02536aaec6622", "sha256": "2b51b2dd3507024aecd0eff5c1a30eaf05b1307cb5fae54f3080b58004bc1901" }, "downloads": -1, "filename": "jarn.xmpp.core-0.22.zip", "has_sig": false, "md5_digest": "ee1e9946eabb2e0bc4c02536aaec6622", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 129197, "upload_time": "2011-11-02T10:14:50", "url": "https://files.pythonhosted.org/packages/4c/58/950a6c0fd1c33c8464598b0e01ca38f3dca099f2b39b9d54d35f7efe7463/jarn.xmpp.core-0.22.zip" } ], "0.23": [ { "comment_text": "", "digests": { "md5": "455009f66e66f3634a0e60056175f602", "sha256": "6b00201f622eeaa4a6e96c8386852fa11e8add17d868f0e3b66a220799f17994" }, "downloads": -1, "filename": "jarn.xmpp.core-0.23.zip", "has_sig": false, "md5_digest": "455009f66e66f3634a0e60056175f602", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 143643, "upload_time": "2011-11-02T15:41:25", "url": "https://files.pythonhosted.org/packages/7f/b4/d689fb0e3c23d37b13f360a8f83ddb290321eedc464fd3567d9e2d754796/jarn.xmpp.core-0.23.zip" } ], "0.2b1": [ { "comment_text": "", "digests": { "md5": "e4d8e00f8e61d3083c06380dceb7e58d", "sha256": "08b467612ade7a01daa1087464ad79913b7c671dca83cf7208318f53a561ce64" }, "downloads": -1, "filename": "jarn.xmpp.core-0.2b1.zip", "has_sig": false, "md5_digest": "e4d8e00f8e61d3083c06380dceb7e58d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106923, "upload_time": "2011-10-09T11:54:30", "url": "https://files.pythonhosted.org/packages/df/ea/955b650084a5cd4eec41a4b80ddf7007a07dae440fa17bd3baf39bf1fd21/jarn.xmpp.core-0.2b1.zip" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "f009b844eb0c09b38287fcc648f80c7f", "sha256": "f54e4b70461736dd783791b320b7f48f6b78f612b94246337b34cfeca30e7fe8" }, "downloads": -1, "filename": "jarn.xmpp.core-0.3.zip", "has_sig": false, "md5_digest": "f009b844eb0c09b38287fcc648f80c7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 160072, "upload_time": "2011-11-28T15:27:56", "url": "https://files.pythonhosted.org/packages/32/41/49eb834d45c5b5f7fc04c81aad1b377c490dca5d22bb1e0dece326bc7c05/jarn.xmpp.core-0.3.zip" } ], "0.31": [ { "comment_text": "", "digests": { "md5": "536dda63337c73bea70076b9f62b7468", "sha256": "7f5df483aaa63e0b76494739eb540ad591a425b928f05c0eec3bd33875f664af" }, "downloads": -1, "filename": "jarn.xmpp.core-0.31.zip", "has_sig": false, "md5_digest": "536dda63337c73bea70076b9f62b7468", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 160329, "upload_time": "2011-11-28T17:30:00", "url": "https://files.pythonhosted.org/packages/bb/86/f907bff24425979858986db5415da68a4ac7d67172a0bb03064c9d0d96ee/jarn.xmpp.core-0.31.zip" } ], "0.32": [ { "comment_text": "", "digests": { "md5": "cf62dc3ae82e7beef81ef28845c5a27e", "sha256": "cf18f4acf42ebd0358a72d120fd13cc7a3d12edc8d0e100bdf13ba2f575da3bd" }, "downloads": -1, "filename": "jarn.xmpp.core-0.32.zip", "has_sig": false, "md5_digest": "cf62dc3ae82e7beef81ef28845c5a27e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 160800, "upload_time": "2011-11-30T16:37:37", "url": "https://files.pythonhosted.org/packages/ba/cd/2b2fbbfce7b00d8919c456c667ccb36ffafb8a9a4953c71493f1b2b92b00/jarn.xmpp.core-0.32.zip" } ], "0.33": [ { "comment_text": "", "digests": { "md5": "3e7d6af1c0dfa12dcaaa86a370c70855", "sha256": "d75b1535af0df5734fb7da95b70b2780bd10720fd61ca25ad343ba5bc58cb4d9" }, "downloads": -1, "filename": "jarn.xmpp.core-0.33.zip", "has_sig": false, "md5_digest": "3e7d6af1c0dfa12dcaaa86a370c70855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161332, "upload_time": "2011-12-07T11:57:03", "url": "https://files.pythonhosted.org/packages/2e/e8/9f0f5c20521147dd0f1ec22b7928dfb7b75d29d8cc75ab64534dc41f8588/jarn.xmpp.core-0.33.zip" } ], "0.34": [ { "comment_text": "", "digests": { "md5": "a402710b88c37ee718e7254a45cd38ed", "sha256": "fa2af2c1f42f71bd66c591a125fc5399fb30093ff6f916742401bd1a904fdd7c" }, "downloads": -1, "filename": "jarn.xmpp.core-0.34.zip", "has_sig": false, "md5_digest": "a402710b88c37ee718e7254a45cd38ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161420, "upload_time": "2011-12-09T19:56:33", "url": "https://files.pythonhosted.org/packages/f0/86/3f62be8a554a7a5afb4d68305fcbab70fc2c0b74127fca714ac05e6c4c29/jarn.xmpp.core-0.34.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a402710b88c37ee718e7254a45cd38ed", "sha256": "fa2af2c1f42f71bd66c591a125fc5399fb30093ff6f916742401bd1a904fdd7c" }, "downloads": -1, "filename": "jarn.xmpp.core-0.34.zip", "has_sig": false, "md5_digest": "a402710b88c37ee718e7254a45cd38ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161420, "upload_time": "2011-12-09T19:56:33", "url": "https://files.pythonhosted.org/packages/f0/86/3f62be8a554a7a5afb4d68305fcbab70fc2c0b74127fca714ac05e6c4c29/jarn.xmpp.core-0.34.zip" } ] }