{ "info": { "author": "metagriffin", "author_email": "mg.pypi@uberdev.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet", "Topic :: Other/Nonlisted Topic", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Distributed Computing", "Topic :: System :: Filesystems", "Topic :: Utilities" ], "description": "=======================\nPython SyncML Framework\n=======================\n\nWelcome to the ``pysyncml`` library, a pure-python implementation of\nthe SyncML adapter framework and protocol. SyncML_ is a protocol to\nsynchronize opaque objects between multiple clients and a\nserver. Although pysyncml does provide some utilities to synchronize\ncertain types of content and is therefore useful as-is, it is\nprimarily intended to be used as a library by other applications that\nwant to add data synchronization support via SyncML.\n\n.. important::\n\n 2013/12/15: pysyncml is currently beta. That means it has not had\n much \"real-world\" experience and you may encounter many\n bugs. However, it is being actively developed, so check back in a\n couple of months.\n\n If you decide to use it anyway, you are strongly encouraged to do a\n full backup of your data *before* you use pysyncml to synchronize\n production data.\n\n Working components as of 0.2.0:\n\n * Client-side SyncML framework with support for CRUD operations,\n i.e. Add/Replace/Delete Sync commands.\n\n * Server-side SyncML framework with support for CRUD operations,\n i.e. Add/Replace/Delete Sync commands, **BUT** it is not\n recommended to use server-side yet, as some API changes are\n expected.\n\n * Server-side conflict detection and multi-policy resolution.\n\n * Native support for \"note\" datatype.\n\n\nGoals\n=====\n\nThe pysyncml project has the following goals, some of them diverge\ncritically from other SyncML implementations and are the reasons for\ncreating a new package instead of building on other existing\nimplementations:\n\n* Can be installed and used with a single \"``pip install pysyncml``\"\n (or easy_install).\n* Is python 2.7+ and 3+ compatible.\n* Implements a sufficiently large subset of the SyncML 1.2.2 (a.k.a.\n the OMA Data Synchronization specification) as to be interoperable\n with other implementations without necessarily being \"conformant\".\n* Can be easily integrated into SQLAlchemy_ based projects to\n store data in the application's database instead of separated out\n (so that integrated database triggers and cascading can be applied).\n* Can be extended in order to make properly crafted clients able\n to operate in \"distributed\" mode - this means that in the absence\n of a network, SyncML client peers are able to synchronize with\n each other in the anticipation that the central server may or may\n not eventually become available again.\n* Differentiates as little as possible between \"client\" and \"server\"\n modes to enable the previous goal.\n* Makes basic synchronization easy and complicated synchronization\n possible by providing standard implementations for commonly used\n approaches, while allowing these components to be overriden or\n extended.\n* Provides basic command line tools for commonly synchronized data\n types.\n* Provides a framework of server-push notifications which are\n transport agnostic.\n* Auto-discovery of SyncML server URI locations; i.e. finding the\n \"right\" paths to bind object types is done automatically instead\n of needing error-prone user configuration.\n\n\nLimitations\n===========\n\nIt is the goal of the project to get a minimally functional library going\nin the shortest possible timeframe. To that end, the following features\nof SyncML will *NOT* be implemented until a later phase, even if this means\nthat the library does not provide a conformant implementation:\n\n* NOT supported: filtering of searches or synchronization targets.\n* NOT supported: data split over multiple messages.\n* NOT supported: soft-deletes.\n* NOT supported: memory constraint management.\n* NOT supported: suspend, resume and busy signaling.\n* NOT supported: MD5 authentication scheme.\n* NOT supported: per-database-layer authorization.\n\n\nInstallation\n============\n\nInstallation of pysyncml is near-trivial with PIP_:\n\n.. code-block:: bash\n\n $ pip install pysyncml\n\nor, using easy_install_:\n\n.. code-block:: bash\n\n $ easy_install pysyncml\n\n\nPre-Requisites\n==============\n\nPython 2.7 or better is required, as the following is \"taken for\ngranted\" by the pysyncml developers:\n\n* relative imports,\n* \"with\" context manager statement,\n* native ElementTree,\n* ternary expression (EXPR if EXPR else EXPR),\n* and something else which was found to not work in 2.6.4 but the\n author cannot remember what it was and does not wish to run into\n that limitation ever again...\n\n\nDocumentation\n=============\n\nFor downloaded packages, please see the generated documents in the\n\"doc\" directory, otherwise you can find links to the latest how-to and\nAPI reference documentation at pysyncml_.\n\n.. _SyncML: http://en.wikipedia.org/wiki/SyncML\n.. _SQLAlchemy: http://www.sqlalchemy.org\n.. _PIP: http://www.pip-installer.org\n.. _easy_install: http://peak.telecommunity.com/DevCenter/EasyInstall\n.. _pysyncml: http://www.pysyncml.org", "description_content_type": null, "docs_url": "https://pythonhosted.org/pysyncml/", "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/metagriffin/pysyncml", "keywords": "syncml python synchronize mobile desktop framework adapter open mobile alliance contacts agenda calendar files notes", "license": "GPLv3+", "maintainer": null, "maintainer_email": null, "name": "pysyncml", "package_url": "https://pypi.org/project/pysyncml/", "platform": "any", "project_url": "https://pypi.org/project/pysyncml/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/metagriffin/pysyncml" }, "release_url": "https://pypi.org/project/pysyncml/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "A pure-python implementation of the SyncML adapter framework and protocol.", "version": "0.2.0" }, "last_serial": 945028, "releases": { "0.1.dev": [], "0.1.dev-r2": [], "0.1.dev-r22": [], "0.1.dev-r29": [], "0.1.dev-r30": [ { "comment_text": "", "digests": { "md5": "aa68ab1ae542c7e8b21ff3fd482a1250", "sha256": "a8f716819aa21ec2eb79a970675a2ea71fe3b5f509d6de6c5a769da91619150f" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r30-py2.6.egg", "has_sig": false, "md5_digest": "aa68ab1ae542c7e8b21ff3fd482a1250", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 182101, "upload_time": "2012-07-01T15:51:27", "url": "https://files.pythonhosted.org/packages/9f/de/ad49455d520712bef5115a0d6cb4abd4c8bfe3355cb855678dd6aa914f51/pysyncml-0.1.dev_r30-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "0ca5bd188208b2e4ae3e96fb32334ea5", "sha256": "d48971e3ce8f6ff70c9842ad7b6441c65604f72dedb6b30b045ec93704f4e9f7" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r30-py2.7.egg", "has_sig": false, "md5_digest": "0ca5bd188208b2e4ae3e96fb32334ea5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 181312, "upload_time": "2012-07-01T15:51:31", "url": "https://files.pythonhosted.org/packages/83/87/7f8f66adef8b6de6b1dcdd11743437f03ea184d5a8d69d81ed35b043e46b/pysyncml-0.1.dev_r30-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9490a1b5bd324311a7bd8bc686bf34d0", "sha256": "066c66c359c49a112e1d2cf48ca9604aaf4ebb24d38699ab3ccdffb0d1a40684" }, "downloads": -1, "filename": "pysyncml-0.1.dev-r30.tar.gz", "has_sig": false, "md5_digest": "9490a1b5bd324311a7bd8bc686bf34d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68464, "upload_time": "2012-07-01T15:51:34", "url": "https://files.pythonhosted.org/packages/a8/e6/dc901f5becc64552165ac5e22883cb56645731f55d71ffe6413431299241/pysyncml-0.1.dev-r30.tar.gz" } ], "0.1.dev-r35": [ { "comment_text": "", "digests": { "md5": "20c1effdfcc9053e00985d034c79e5f0", "sha256": "0097d447f6ad4b1920139fded1bdad095edb7f7504c1cf54b6c7393e1bf081c0" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r35-py2.6.egg", "has_sig": false, "md5_digest": "20c1effdfcc9053e00985d034c79e5f0", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 183890, "upload_time": "2012-07-03T05:11:04", "url": "https://files.pythonhosted.org/packages/be/24/60426937e1fa7d01b8d648cd4b69fd6956128b78a5048c00196869e64650/pysyncml-0.1.dev_r35-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "2b08f279aec5efdc8d2e0a2aa38242a7", "sha256": "336cf22535a5e2fcfec90c8baa0d8fdcbd860294770e0528e8e73b4f2284974c" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r35-py2.7.egg", "has_sig": false, "md5_digest": "2b08f279aec5efdc8d2e0a2aa38242a7", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 183112, "upload_time": "2012-07-03T05:11:08", "url": "https://files.pythonhosted.org/packages/44/c1/a90fcfde4bded745dcf0ce1216c3c090e8c6db4e5d1cfc9e53fe29015714/pysyncml-0.1.dev_r35-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "217a93c19cbc2eab428b9319295d800d", "sha256": "e0bff92a248ef9beb0aff56c03184138d041e0821103d7e57562ee2d6e548cc9" }, "downloads": -1, "filename": "pysyncml-0.1.dev-r35.tar.gz", "has_sig": false, "md5_digest": "217a93c19cbc2eab428b9319295d800d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 193786, "upload_time": "2012-07-03T05:11:13", "url": "https://files.pythonhosted.org/packages/4c/f1/b0b10dd01952252fd705a01eb8b2c5ec491098a9d3696b875ca0be2f37a4/pysyncml-0.1.dev-r35.tar.gz" } ], "0.1.dev-r41": [ { "comment_text": "", "digests": { "md5": "ab31b910155babce4faad6953179c6ee", "sha256": "ebed60cdb86eaf5334b8d34a676849be425c20b1699a656d41862ba8d191736d" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r41-py2.6.egg", "has_sig": false, "md5_digest": "ab31b910155babce4faad6953179c6ee", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 200694, "upload_time": "2012-07-22T21:03:06", "url": "https://files.pythonhosted.org/packages/07/4f/daeee7e5f58394f57e5fa4a533aff044d10d7aa5382d9c4850d79213cd09/pysyncml-0.1.dev_r41-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "e0f1874b6de6a7e4843b693c139a7dc5", "sha256": "7e606bae8c0c76d2deafa245dbe91b957cbf9a76b64418293e29940b622a5897" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r41-py2.7.egg", "has_sig": false, "md5_digest": "e0f1874b6de6a7e4843b693c139a7dc5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 199603, "upload_time": "2012-07-22T21:03:10", "url": "https://files.pythonhosted.org/packages/0a/34/661d58a615f266e055eeca96f74883cea53b98b5939a2b45c5d8a05d6e1d/pysyncml-0.1.dev_r41-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "7d5ff6a57e5a52984deb19377b24ebc5", "sha256": "23b720050c8234226da14b06956da48a035417db6564f936dd1eb8bcc51d1092" }, "downloads": -1, "filename": "pysyncml-0.1.dev-r41.tar.gz", "has_sig": false, "md5_digest": "7d5ff6a57e5a52984deb19377b24ebc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206798, "upload_time": "2012-07-22T21:03:20", "url": "https://files.pythonhosted.org/packages/ef/af/0b630b9d019ae5e18044cc2a15f1825d301cf3639bb6a5f60c78dd232249/pysyncml-0.1.dev-r41.tar.gz" } ], "0.1.dev-r62": [ { "comment_text": "", "digests": { "md5": "d3717e8b844727c36c17bc81c1cb30c8", "sha256": "19ce856e6fbd6830ed8b4429f1370bc77b5414c0187e5731971d1b4e211944bf" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r62-py2.6.egg", "has_sig": false, "md5_digest": "d3717e8b844727c36c17bc81c1cb30c8", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 303249, "upload_time": "2012-09-16T21:53:58", "url": "https://files.pythonhosted.org/packages/fe/57/c09e1a4fd1c1f5a20fe3aed218f634fef179d56921e4c4392ce0e8190abc/pysyncml-0.1.dev_r62-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "412b6bda7df8e8f15679f27f61d89058", "sha256": "3c8803e0c7061771c55b9938a665e81c16a39030fbb3e8f60a880f6425f607ce" }, "downloads": -1, "filename": "pysyncml-0.1.dev_r62-py2.7.egg", "has_sig": false, "md5_digest": "412b6bda7df8e8f15679f27f61d89058", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 301399, "upload_time": "2012-09-16T21:54:03", "url": "https://files.pythonhosted.org/packages/d6/34/bc324ea326ba3caba46c979d107ff9e44560b04140e7a833e43d3aa09c3a/pysyncml-0.1.dev_r62-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "aeb1c93ccbbfc3d7a99121216cda72e2", "sha256": "afc3d024acca61457f5e4b13e3cbadfc27c87257b62ffa3f482a1904b5a6665b" }, "downloads": -1, "filename": "pysyncml-0.1.dev-r62.tar.gz", "has_sig": false, "md5_digest": "aeb1c93ccbbfc3d7a99121216cda72e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 339919, "upload_time": "2012-09-16T21:54:08", "url": "https://files.pythonhosted.org/packages/15/5e/0a250995ae97267d7b6fe928cc072a964e9515e4869de1c2a69e28dcc57a/pysyncml-0.1.dev-r62.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "73a32d3f0610cfcaf8371fbfb1c75712", "sha256": "c75f429b73726604864f83c293753402d56ba8fc61bbc95d6d6ac3fb069330ec" }, "downloads": -1, "filename": "pysyncml-0.2.0.tar.gz", "has_sig": false, "md5_digest": "73a32d3f0610cfcaf8371fbfb1c75712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 128552, "upload_time": "2013-12-15T16:00:47", "url": "https://files.pythonhosted.org/packages/ec/99/b703e9af0ea9813403dd217f197f6a6f3a33ab39bb0898960bd0cc6d7d9c/pysyncml-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "73a32d3f0610cfcaf8371fbfb1c75712", "sha256": "c75f429b73726604864f83c293753402d56ba8fc61bbc95d6d6ac3fb069330ec" }, "downloads": -1, "filename": "pysyncml-0.2.0.tar.gz", "has_sig": false, "md5_digest": "73a32d3f0610cfcaf8371fbfb1c75712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 128552, "upload_time": "2013-12-15T16:00:47", "url": "https://files.pythonhosted.org/packages/ec/99/b703e9af0ea9813403dd217f197f6a6f3a33ab39bb0898960bd0cc6d7d9c/pysyncml-0.2.0.tar.gz" } ] }