{ "info": { "author": "Peter A. Donis", "author_email": "peterdonis@alum.mit.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Environment :: MacOS X", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications :: GTK", "Environment :: X11 Applications :: KDE", "Environment :: X11 Applications :: Qt", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "The PLIB package contains a number of useful sub-packages and\nmodules, all within the ``plib`` package namespace in order to\nminimize clutter in the top-level namespace of your Python\ninstallation. Each sub-directory of the ``plib`` directory\ncontains a sub-package, except for the ``test`` directory, which\ncontains the PLIB test suite. The source distribution also\ncontains an ``examples`` directory, which has example programs\nusing PLIB, and a ``scripts`` directory, which has a few\npost-install scripts. Finally, the ``setup.py`` script for\nPLIB uses the ``setuputils`` helper module, which helps to\nautomate away much of the boilerplate in Python setup scripts.\nThis module is available as a separate release at\nhttp://pypi.python.org/pypi/setuputils.\n\nThis version of PLIB is intended to run on the latest Python\n2 versions. It has been tested on 2.7, but most of it should\nrun on 2.6 as well; the main known exception is the ``options``\nmodule in ``plib.stdlib``, which uses the ``argparse`` standard\nlibrary module that was added in 2.7. If you need to run PLIB\non earlier Python versions, the \"legacy\" version of PLIB is\navailable at http://pypi.python.org/pypi/plib2 as the ``plib2``\npackage. However, the PLIB API in this and future versions is\nconsiderably changed from the \"legacy\" API, so programs written\nusing ``plib2`` will have to be ported to the new API to use\nthis or future PLIB versions.\n\nThe PLIB Sub-Packages\n=====================\n\nThe individual sub-packages and modules contain docstrings\nwith more information about their usage; here they are\nbriefly listed and described.\n\n**(Note: This is intended to be the final release of PLIB as\na complete package including all its sub-packages. The next\nPLIB release is intended to be a Beta release of the STDLIB\nsub-package, followed by the GUI and IO sub-packages. The\nXML sub-package might or might not be released later; the\n``lxml`` package has evolved a lot since PLIB.XML was last\ntested. The ``plib.gui`` and ``plib.io`` releases will each\nrequire ``plib.stdlib``, so ``pip install plib.gui`` or\n``pip install plib.io`` should also install ``plib.stdlib``.\nSplitting the sub-packages this way allows you to only install\nwhat you need, and also allows each sub-package to have its\nown release schedule, independent of the others.)**\n\nPLIB.GUI\n--------\n\nThis sub-package contains a simple GUI application framework\nwith two main features:\n\n- It lets the same high-level code work with a number of\n different underlying GUI toolkits. Currently supported:\n Qt (versions 3 and 4), KDE (versions 3 and 4), wxWidgets,\n and GTK. (The original reason for writing this sub-package\n was that wxWidgets doesn't use Qt and I like the Qt/KDE\n widgets better, but I wanted code that would run\n cross-platform.)\n\n- It allows you to express the layout of your GUI in terms\n of Python lists and dicts, enabling a much more declarative\n and easy to read (and maintain) coding style.\n\nOther than selecting the toolkit (which may not be necessary:\nthe main module of the sub-package can 'auto-detect' which\ntoolkit to use--the ``plib-setup-gui`` post-install script\ndoes most of the work to enable this--so you only need to\noverride if you don't like the default), you should not have\nto worry about any toolkit internal details; the goal of this\nsub-package is to make them all look the same to your code.\n\nNote that the GTK toolkit support in this sub-package is\n\"experimental\" and may be removed if it proves to be more\ntrouble than it's worth. It's currently included because\nwxWidgets' behavior when using GTK as its underlying GUI\nframework has some quirks that I haven't been able to work\naround yet. However, the GTK implementation of a number of\nwidgets (particularly tables and list/tree views) is much\nless capable than the wxWidgets one, so the Python code for\nGTK ends up relying much more on ugly hacks.\n\nPLIB.IO\n-------\n\nThis sub-package contains classes that encapsulate various forms\nof client/server I/O channels. It is organized into sub-packages\nitself to make the namespace easier to use. First, the ``base``\nsub-package contains base classes that implement common basic\nfunctionality that is built on by the rest of PLIB.IO.\n\nMost of the remaining sub-packages fall into three main categories,\nand each sub-package in a given category contains the same basic\nclass names, so they're easier to remember. The categories are:\n\n- **Device Types**: ``socket`` and ``serial``. Each device type has\n a ``BaseClient`` and ``BaseServer`` class; the ``socket`` type\n also has a ``BaseRequest`` class. These will usually not need to\n be used directly; they are used by the I/O mode classes, and are\n factored out so that each I/O mode sees the same API for a given\n device type.\n\n- **I/O modes**: ``async`` and ``blocking`` (the latter does not just\n mean synchronous: it includes a forking TCP socket server). Each\n I/O mode has a client and server class for both device types, and\n a request class for the ``socket`` device type: the class names are\n ``SerialClient``, ``SerialServer``, ``SocketClient``, ``SocketServer``,\n and ``BaseRequestHandler``. The ``async`` type also has \"persistent\"\n classes, which support full-duplex asynchronous communication; these\n are the ``PersistentSerial``, ``PersistentSocket``, and\n ``PersistentRequestHandler`` classes. Mixin versions of these classes\n (class names with ``Mixin`` at the end) are also provided, for use\n if alternate data handling is desired (see next bullet), but it is\n normally not necessary to use these \"by hand\"--see \"automatic mixins\"\n below.\n\n- **Data Handling**: the I/O mode classes given above include basic\n data handling, but it is *very* basic: the only way it can detect\n that a \"message\" has been fully received is to detect a closed\n channel. For some applications this is enough, but often more\n sophisticated and robust data handling is needed. The ``data``\n sub-package provides three mixin classes for this purpose,\n ``ShutdownReadWrite``, ``TerminatorReadWrite`` and ``ReadWrite``.\n The first of these detects the end of a received message by a\n shutdown of the other end of the data channel, but keeps the channel\n open to allow further writes (all the other classes default to\n closing the channel when the other end closes). The other two\n classes allow the detection of multiple \"messages\" in the data\n stream, either by detecting a \"terminator\" string or by having\n each message include its length at the beginning. These classes\n also format outgoing messages the same way.\n\nThere is also a ``mixins`` sub-package containing classes that\nare used as mixins by the other sub-packages, and a ``classes``\nsub-package containing higher-level classes that use the API.\nFinally, there is a ``chatgen`` module which contains a simple\nclass, ``chat_replies``, that yields replies from a remote server\nas a generator, and a ``utils`` module that implements the automatic\nmixin functionality described below.\n\n*Automatic Mixins*: To derive your own client or server classes with\nalternate data handling \"by hand\", you would need to use the \"mixin\"\nversions of the appropriate I/O mode classes, and splice the data\nhandling class into the middle of the base class list; for example::\n\n from plib.io.async import SerialClientMixin, SerialBase\n from plib.io.data import TerminatorReadWrite\n \n class AsyncSerialClientWithTerminator(SerialClientMixin,\n TerminatorReadWrite, SerialBase): pass\n\nThis is a bit clumsy, but necessary since the read/write handling has\nto be *before* the client/server class in the MRO, but *after* the\nbase device type, for the cooperative ``super`` calls that underlie\nthe functionality to work properly. However, since the pattern is the\nsame in each case, it can be automated, and this has been done in the\n``async`` and ``blocking`` sub-package namespaces, so that instead of\ndoing the above class construction \"by hand\", you can just append a\nsuffix to your desired class name, thus::\n\n from plib.io.async import SerialClientWithTerminator\n\nThe ``WithTerminator`` suffix (or, alternately, ``WithShutdown``\nor ``WithReadWrite``) will cause the equivalent of the above class\ndefinition to occur on the fly, so that the resulting class appears\nin the ``plib.io.async`` namespace (of course the\n``plib.io.blocking`` namespace has the same capability).\nOnce this has happened the first time, however, the class definition\nis stored in the appropriate namespace, so additional imports of the\nsame class name (in different modules of your application) will not\nre-do the \"on the fly\" construction; they will just retrieve the\nsame class object that was previously constructed.\n\nThe above machinery is also made available for use with your own custom\nread/write handling classes; the ``async`` and ``blocking`` sub-packages\neach export a ``get_readwrite_class`` function that does the same\non-the-fly class definition as above, but with your custom read/write\nclass instead of one of the built-in ones. All you have to do is pass\nthe function the name of your desired I/O class and your custom\nread/write class object::\n\n from plib.io import async\n \n class CustomReadWrite(object):\n # class definition\n \n MyAsyncSerialClient = async.get_readwrite_class('SerialClient',\n CustomReadWrite)\n\n*API Notes*: One of the goals of this sub-package is to provide a\ncommon, consistent API for all the different types of I/O, so that\nswitching one specific implementation of a certain functionality\nfor another can be done transparently to the rest of your application's\ncode. Thus, all of the usable classes follow the same basic pattern of\nmixing in the various pieces of functionality: from left to right\nin a class's MRO, one finds the type of endpoint (a client or\nserver mixin class, which may be specialized to the type of I/O),\nthe type of data formatting, if any (a mixin class from the\n``ReadWrite`` module), and the type of I/O, including device type\n(socket, serial port, etc.), mode (non-blocking/asynchronous vs.\nblocking), and basic data handling. Also, each endpoint type has\na common API independent of the specific type of I/O and mode; a\nclient can always use the ``client_communicate`` method to send\ndata to the server and receive a response; a server can always use\nthe ``serve_forever`` method to start itself; and all I/O objects\noverride the same methods to implement application-specific\nfunctionality: ``process_data``, to deal with data as it comes in,\nand ``query_done``, to determine when the I/O channel should be\nclosed. (To see examples of all this in action, look at the test\nsuite in ``test_io.py`` and the library module for it,\n``io_testlib.py``; the library module can use the same\nmixin classes to implement test functionality for *all* of the\ndifferent mixes of I/O classes in the test suite.)\n\nPLIB.STDLIB\n-----------\n\nThis is a namespace for various functions and classes that\nextend or emulate the Python standard library. Some,\nlike the ``cached_property`` decorator, are implementations of\npatterns that have been known for some time, but which don't\nhave a \"canonical\" version in the stdlib yet; rather than\nhave PLIB depend on some other third-party package, I've\nsimply provided my own implementations here. Others, like\nthe ``abstractcontainer`` class and its subclasses, are\nre-implementations of standard Python data structures,\nwritten to enable PLIB to make as many things as possible\nlook like those data structures without having to subclass\nthe built-ins (which has some downsides for the use cases\nI've had thus far--see the docstrings for more information).\n\nThe following modules or sub-packages are available in the\n``plib.stdlib`` namespace:\n\n- The ``builtins`` module contains some funtions that should be\n Python builtins, but aren't. :) Importing the module adds those\n functions to the built-in namespace; this is mostly useful for\n interactive shells. The functions can also be imported directly\n from ``plib.stdlib.builtins``, to make it easier to understand\n where the functions are coming from in module code.\n\n- The ``classes`` sub-package provides some miscellaneous useful\n classes.\n\n- The ``classtools`` module provides some utilities for working\n with classes and class attributes.\n\n- The ``cmdline`` module provides utilities useful for command\n line programs and interactive shells.\n\n- The ``coll`` sub-package provides various collection classes,\n including abstract collections built on the ``collections``\n ABCs from the standard library.\n\n- The ``comm`` sub-package provides utilities for managing and\n communicating with child threads and processes.\n\n- The ``decotools`` module provides functions and factories for\n working with decorators.\n\n- The ``extensions`` sub-package provides a namespace for functions\n (and possibly, in the future, other objects) exported from an\n extension module written using the Python/C API. The general\n philosophy of PLIB is to do everything possible in pure\n Python, so the only functions that appear in this sub-package\n are those which by their very nature cannot be done in pure\n Python.\n\n- The ``fdtools`` module provides utilities for working with file\n descriptors.\n\n- The ``imp`` module provides the ``import_from_module`` function,\n which should be in the standard library ``importlib`` module\n but isn't. :)\n\n- The ``ini`` sub-package implements an abstract 'INI file' API that\n uses ``ConfigParser`` on POSIX systems, and the Windows registry\n on Windows systems. This API allows the configuration file\n structure to be declared using Python lists and dicts.\n\n- The ``iters`` module provides various functions dealing with\n or returning iterables.\n\n- The ``localize`` module provides useful functions for getting\n locale-specific information.\n\n- The ``mail`` module provides a useful shortcut function for\n sending email from programs.\n\n- The ``mathlib`` module provides some additional math functions\n to supplement those in the standard library.\n\n- The ``net`` module provides utilities for getting information\n about networks.\n\n- The ``options`` module provides an easier-to-use overlay for\n the ``argparse`` module which allows you to express your option\n configuration in the form of Python lists, tuples, and dicts.\n\n- The ``ostools`` module provides utilities for working with the\n operating system.\n\n- The ``proc`` module provides a shortcut function for getting\n the output of a subprocess.\n\n- The ``sigtools`` module provides a low-level implementation of\n the self-pipe trick for signal handling.\n\n- The ``strings`` module provides functions and constants for\n working with strings.\n\n- The ``systools`` module exposes some useful variables giving\n information about the Python runtime system and PLIB itself.\n\n- The ``timer`` module provides functions for timing code, with\n an alternate API to the standard library's ``timeit`` module\n that is easier to use when timing functions that you already\n have as objects, instead of source code strings.\n\n- The ``tztools`` module provides some useful ``tzinfo`` subclasses\n based on those in the Python docs for the ``datetime`` module,\n and a function to return the local system timezone name.\n\n- The ``util`` sub-package provides the ``ModuleProxy`` class, which\n is used by a number of PLIB sub-packages. See the docstrings\n for the class and the sub-packages using it for more information.\n\nPLIB.XML\n--------\n\nThis sub-package requires the ``lxml`` extension, which uses\nthe very fast ``libxml2`` library but provides a Pythonic API\nsimilar to ``ElementTree``. The reason for using ``lxml`` instead\nof ``ElementTree`` itself is that ``lxml`` has two key additional\nfeatures:\n\n- Custom element classes: the ``classes`` module in this\n sub-package builds on this feature by using metaclasses\n to automate DTD generation and validation, but the\n feature is also great for many XML applications.\n\n- Full and *fast* XPATH support: this was key in the XML\n application that first prompted me to write this sub-package.\n Yes, I know there are plenty of other Python XML packages\n that do XPATH; the point is to have it *plus* the standard\n ``ElementTree`` API *plus* the speed of ``libxml2``.\n\nInstallation\n============\n\nTo install PLIB, you can simply run::\n\n $ python setup.py install\n\nat a shell prompt from the directory into which you\nunzipped the source tarball (the same directory that this\nREADME file is in). This will install PLIB and then\nrun each of the post-install scripts in the scripts\ndirectory.\n\nExample Programs\n================\n\nPLIB comes with example programs that illustrate key features\nof the package. After installation, these can be found in the\n``$PREFIX/share/plib/examples`` directory. If you have a\nPOSIX system (Linux or Mac OSX), the ``plib-setup-examples``\npost-install script will install symlinks to the example\nprograms in the ``$PREFIX/bin`` directory.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/plib", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "plib", "package_url": "https://pypi.org/project/plib/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/plib/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/plib" }, "release_url": "https://pypi.org/project/plib/0.8.9/", "requires_dist": null, "requires_python": null, "summary": "A namespace package for a number of useful sub-packages and modules.", "version": "0.8.9" }, "last_serial": 751276, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "3008d05968e1df32f7f554a48eb9a39e", "sha256": "3bef55d44c2c9a7d34549a9048dcc41e441d07ff164bea1643a779f3d526c81c" }, "downloads": -1, "filename": "plib-0.1.tar.gz", "has_sig": false, "md5_digest": "3008d05968e1df32f7f554a48eb9a39e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125742, "upload_time": "2008-01-26T02:33:00", "url": "https://files.pythonhosted.org/packages/34/84/357d890b8bff97cdbb4a696219993f6bdcbae569f19d4857f164d2303e47/plib-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "5779234fbc36b1c89fe81e1bbe8314c7", "sha256": "72c44342da071701a175c5584cb28eb925e5410c726ef3d36afaf33b4a0b5138" }, "downloads": -1, "filename": "plib-0.2.tar.gz", "has_sig": false, "md5_digest": "5779234fbc36b1c89fe81e1bbe8314c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 148736, "upload_time": "2008-02-16T01:23:18", "url": "https://files.pythonhosted.org/packages/26/f6/29b518804394c05c42f9903447a8ef6d3a38b8b253da0e90e195c96d2d53/plib-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0d752e3d72116fa91d2ededfc3c10f6d", "sha256": "aaf0bf8fc00602453cd86ccf0fa87e47f8d3588610ea7f32851567412d458f21" }, "downloads": -1, "filename": "plib-0.2.1.tar.gz", "has_sig": false, "md5_digest": "0d752e3d72116fa91d2ededfc3c10f6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 150182, "upload_time": "2008-02-26T05:06:05", "url": "https://files.pythonhosted.org/packages/ad/56/87dbf9c170fdd6ae5c3f31c46db2f992a39c564c7e2d0aebecf115cc02d9/plib-0.2.1.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "585cb3fa970f9956f4dcd374c13b7de8", "sha256": "3e50ffd5c76965b996ca3d4aa6fe54bea9420fde724446faa91dd24c15193185" }, "downloads": -1, "filename": "plib-0.3.tar.gz", "has_sig": false, "md5_digest": "585cb3fa970f9956f4dcd374c13b7de8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162375, "upload_time": "2008-03-03T04:07:02", "url": "https://files.pythonhosted.org/packages/8b/89/4829626e62055ddb1558610f59a308f61ff3c5320596196dcccf3d8e5ee6/plib-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "746cc9e8c63ff2b4a1b1ab9c0305d092", "sha256": "f27157d74dc30dbad4efd0aba18be488d9efc6738aaee83d6501cd7ac6da5072" }, "downloads": -1, "filename": "plib-0.4.tar.gz", "has_sig": false, "md5_digest": "746cc9e8c63ff2b4a1b1ab9c0305d092", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 172116, "upload_time": "2008-06-15T03:34:05", "url": "https://files.pythonhosted.org/packages/d5/67/9ec9038c517f9a4c5a102209f8382ee897f833757371faa5e102719359a7/plib-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "ecedc8066d4f3da620c2b47834bb894a", "sha256": "10a6b6a6511482f10b8b57a694281a20e95bc22be4f03df49d6bbe9b0edefa8d" }, "downloads": -1, "filename": "plib-0.4.1.tar.gz", "has_sig": false, "md5_digest": "ecedc8066d4f3da620c2b47834bb894a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 173471, "upload_time": "2008-06-21T00:46:11", "url": "https://files.pythonhosted.org/packages/3d/d9/e461207c55808a1795db5c2ec7710d541f2ae76841cf65da974cdb2b0c51/plib-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "989f3ae71359f837f4c3bd91085f2487", "sha256": "1cbc1ec2893ca03964412c04f2eff39daac5d71c5e35650e06b021ff2dd6f305" }, "downloads": -1, "filename": "plib-0.4.2.tar.gz", "has_sig": false, "md5_digest": "989f3ae71359f837f4c3bd91085f2487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 199426, "upload_time": "2008-06-25T01:46:25", "url": "https://files.pythonhosted.org/packages/9f/e1/28d1630b86a08f39be829128d457144740ec3e4c16ed3d3b5d2a4a7dab9e/plib-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "d206090ef4658eb259ebfa3e44fcce3c", "sha256": "0233c35cea5a78943d1e0299bf15f0dc710143b0f3a63476db10dd935f1a2e52" }, "downloads": -1, "filename": "plib-0.4.3.tar.gz", "has_sig": false, "md5_digest": "d206090ef4658eb259ebfa3e44fcce3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204502, "upload_time": "2008-06-29T03:09:41", "url": "https://files.pythonhosted.org/packages/0c/d2/70b8f0ecac88005e403a4757297fc7708dbd1ac8ec9dfe32ec1f154b59d5/plib-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "46ebe28bc977a2c539834a921f6e7b56", "sha256": "7bd4e3f8eb1cc49da2538a99654b51b6bbfea6cdde1cfd1a571e80daadd8da5b" }, "downloads": -1, "filename": "plib-0.4.4.tar.gz", "has_sig": false, "md5_digest": "46ebe28bc977a2c539834a921f6e7b56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204554, "upload_time": "2008-06-29T17:57:01", "url": "https://files.pythonhosted.org/packages/39/44/3d97b0bea8b4bd5c7cd1a25de5804891f7c4c878d853045155f107f03682/plib-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "5f2f7b102e9402e6966f961b5783a471", "sha256": "6889da9883f768a685aca6581d9d8c15a69bd07dbe45922ce683c08b215a8228" }, "downloads": -1, "filename": "plib-0.4.5.tar.gz", "has_sig": false, "md5_digest": "5f2f7b102e9402e6966f961b5783a471", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204654, "upload_time": "2008-06-30T02:36:00", "url": "https://files.pythonhosted.org/packages/17/41/3069f81e5b0cc90d4bda08b3bb37fe85d1dda42b4aed00e22cbee70d337c/plib-0.4.5.tar.gz" } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "0e1a35e5d65c5130c825e76d436da0cb", "sha256": "e5e4242f2ac33e288d5f1eda77acaa9273f3ab1e9e7184335f701077649fe54a" }, "downloads": -1, "filename": "plib-0.4.6.tar.gz", "has_sig": false, "md5_digest": "0e1a35e5d65c5130c825e76d436da0cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206793, "upload_time": "2008-07-02T04:23:22", "url": "https://files.pythonhosted.org/packages/41/63/04d71447a0840693fbab73de3d42dc85705a9ec5fe86feea06f4bb258009/plib-0.4.6.tar.gz" } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "12b1dbaefec8f46f9a22a863822d4fc9", "sha256": "e480a93a2ce14626c258a039a181ad764cd0953d265770e36ade10f6ca2ae712" }, "downloads": -1, "filename": "plib-0.4.7.tar.gz", "has_sig": false, "md5_digest": "12b1dbaefec8f46f9a22a863822d4fc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 210247, "upload_time": "2008-07-06T19:20:13", "url": "https://files.pythonhosted.org/packages/fc/34/4e82c7c15dc2ab07c825254effc8ef23e4d334cbea4559250fe748926ad2/plib-0.4.7.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "118eb37d73ec118188d0aae8a0485234", "sha256": "7270bea558eed21862f2abb279b1b2619d7f1fb5c55526be1198b0bd6cc27dd3" }, "downloads": -1, "filename": "plib-0.5.tar.gz", "has_sig": false, "md5_digest": "118eb37d73ec118188d0aae8a0485234", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 235332, "upload_time": "2008-08-11T16:21:32", "url": "https://files.pythonhosted.org/packages/0d/37/1a84d9c76c45c1574b29d9ea6c26fa26d07eedb4c5a2e2817e44a8c78dcd/plib-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "bcecd83e004625c2a3c1c1c169a3ba6e", "sha256": "8c9c72da634d0fc79079121a4bea2c625c9ec8ddef13e4b515370f03563cef86" }, "downloads": -1, "filename": "plib-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bcecd83e004625c2a3c1c1c169a3ba6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 239276, "upload_time": "2008-08-17T04:47:58", "url": "https://files.pythonhosted.org/packages/25/e1/57ddaa6e73fe5b875ee11c58f95a98c35dc9607a322fda7531ef3e4f0d97/plib-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "cfcf743a401bd76cf785b834fe892724", "sha256": "a482872c8c5af980fa4a05d8f780018283cea14afbd6d8b01e33954d1e9b451a" }, "downloads": -1, "filename": "plib-0.5.2.tar.gz", "has_sig": false, "md5_digest": "cfcf743a401bd76cf785b834fe892724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 248520, "upload_time": "2008-08-25T04:54:36", "url": "https://files.pythonhosted.org/packages/51/0a/5b9b78232a8f64624ad6ce35af882fbbe168c65a677c1a8b1dca28ffc0c7/plib-0.5.2.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "9d467202830bb9e1f3e78486caf81f69", "sha256": "a27bec306c1732eaf774e15f2f75d99aab4637b92dc2ded011a59ae2451ab75f" }, "downloads": -1, "filename": "plib-0.6.tar.gz", "has_sig": false, "md5_digest": "9d467202830bb9e1f3e78486caf81f69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 260273, "upload_time": "2008-10-25T02:24:52", "url": "https://files.pythonhosted.org/packages/d6/f8/80027824167c05639d45f338e5d67a4941c5a6893d113de35d228728eef4/plib-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "76737bf4e2abcd5f2d4cf3182196e386", "sha256": "d9be83415dc82c6f1a5b6c47121e7f8699d721476a8cff1bc2f142c3f2c33a96" }, "downloads": -1, "filename": "plib-0.6.1.tar.gz", "has_sig": false, "md5_digest": "76737bf4e2abcd5f2d4cf3182196e386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 268426, "upload_time": "2009-12-14T20:08:15", "url": "https://files.pythonhosted.org/packages/46/01/d5e8c35202b7129a08e315c31d91548cc2e4d0251d758db79fbe6b5b8e6e/plib-0.6.1.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "be71ddb031edddb103d59c8a11754d60", "sha256": "75f8d06c8d13128582baf2b6e625ea6477e18ca16c552583cf45527c700f422e" }, "downloads": -1, "filename": "plib-0.6.3.tar.gz", "has_sig": false, "md5_digest": "be71ddb031edddb103d59c8a11754d60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 349055, "upload_time": "2010-01-04T03:54:17", "url": "https://files.pythonhosted.org/packages/e5/f9/0250cd69ed362b27eef182d5891b7ff7878b5bcef484c2f8645b2ca07249/plib-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "baf2883ede38bc1bf23f6091074b4df4", "sha256": "f5adbe4195ccf824f709f2f4065295a5f33ec33ffeec8fc374dee003a652ed76" }, "downloads": -1, "filename": "plib-0.6.4.tar.gz", "has_sig": false, "md5_digest": "baf2883ede38bc1bf23f6091074b4df4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 420095, "upload_time": "2010-01-12T00:47:46", "url": "https://files.pythonhosted.org/packages/79/d7/e85d9d918c805e87acbe25e4ef30b61f8d0f785db261628efcd10d9d9860/plib-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "899a64c27fc153c3bed7c72fff79c44e", "sha256": "6e36bba9d59f53fff22d8ebacc0bbec6ae3bd9289d977e951f9cdccef4cfd639" }, "downloads": -1, "filename": "plib-0.6.5.tar.gz", "has_sig": false, "md5_digest": "899a64c27fc153c3bed7c72fff79c44e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 424806, "upload_time": "2010-06-26T22:44:11", "url": "https://files.pythonhosted.org/packages/04/c1/b6b26e10af4fafc226e846fb260db6e85f90b955b15b87dcd21f38ffcfd9/plib-0.6.5.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "b456afcd3e74a9dcc5fa638b409a48c9", "sha256": "85fd44038e29b94b91d136344e2db358430c5af7564521093ff1ff1633078982" }, "downloads": -1, "filename": "plib-0.7.tar.gz", "has_sig": false, "md5_digest": "b456afcd3e74a9dcc5fa638b409a48c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 475588, "upload_time": "2011-03-05T04:29:12", "url": "https://files.pythonhosted.org/packages/c0/50/4854fa3fd84793170144d557522bce423b5e32f8bd9c36fa5277e34ab8fb/plib-0.7.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "e5562d4f03a3a42ec7769033db232190", "sha256": "628abf216502d47a688c39eb19204b02a7eca3745b3a5d600069c290ae728a78" }, "downloads": -1, "filename": "plib-0.7.1.tar.gz", "has_sig": false, "md5_digest": "e5562d4f03a3a42ec7769033db232190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 493898, "upload_time": "2011-04-14T02:49:55", "url": "https://files.pythonhosted.org/packages/fd/73/7bb6e3800664573aaf5ddaa5061bd7562421beecc8093e7120b70254d602/plib-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "4d5342c7e551bd35135bbe9730764f28", "sha256": "8d0a855894d7d7f5216e057ccb171fa2afafc1e31d09e6d9ef6c4b9a5348d981" }, "downloads": -1, "filename": "plib-0.7.2.tar.gz", "has_sig": false, "md5_digest": "4d5342c7e551bd35135bbe9730764f28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 512892, "upload_time": "2012-01-02T06:45:16", "url": "https://files.pythonhosted.org/packages/37/de/0ccbca2fd1ee450c63538365fe7265444f07afa3fc8f8b50d632586c8b15/plib-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "d704b66ef19aeb297eb884cece95dc2a", "sha256": "6981bc510639dfe9390fa1fc17dad487b697dc3c598d7de04481171a5387a05f" }, "downloads": -1, "filename": "plib-0.7.3.tar.gz", "has_sig": false, "md5_digest": "d704b66ef19aeb297eb884cece95dc2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 522187, "upload_time": "2012-08-09T20:55:22", "url": "https://files.pythonhosted.org/packages/9f/c9/aeddfcfc4d14ebc7042c27d5a33b70cba197480882494c402c2a3ef167cb/plib-0.7.3.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "05861190d9da74d122f3e4b879bd097b", "sha256": "ff5b4ca0a2da2ded2a81b1b28b04e90ecd1c80cddb775e8adb8c128c545847fa" }, "downloads": -1, "filename": "plib-0.8.tar.gz", "has_sig": false, "md5_digest": "05861190d9da74d122f3e4b879bd097b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 516091, "upload_time": "2012-09-10T03:43:35", "url": "https://files.pythonhosted.org/packages/c1/c8/9938f1ee17daa328d945b3ce72b19dee1dce0cf4d2eb3c861a421d450971/plib-0.8.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "e5e725334f1f5134e5fe15fef5322596", "sha256": "da670c9d6e0c37ce18674b41b856f07e1587c6bb47e01508fa26477a74549d20" }, "downloads": -1, "filename": "plib-0.8.1.tar.gz", "has_sig": false, "md5_digest": "e5e725334f1f5134e5fe15fef5322596", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 517070, "upload_time": "2012-09-12T05:53:59", "url": "https://files.pythonhosted.org/packages/80/cd/b795c1650b312ea19b6aeeea52f392463ec1d306f86c339f9b40609afa1b/plib-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "df6874482812a2dc072529d7e2c790b3", "sha256": "3424c9a4c14bd1b7088074af5220322f6f5a2d6c81645a5070a15e04d66275a4" }, "downloads": -1, "filename": "plib-0.8.2.tar.gz", "has_sig": false, "md5_digest": "df6874482812a2dc072529d7e2c790b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 507680, "upload_time": "2012-09-27T21:11:41", "url": "https://files.pythonhosted.org/packages/54/54/082feb13bb89d7b6cb6504d2ffc25d44772dd1118213e585d84c38216dcd/plib-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "2f98246b04d3dc8bfef43d9a6264793a", "sha256": "8e84e573b3d8840e30d7c22a39638bc2621e10b8de643d52dda071f8c1623654" }, "downloads": -1, "filename": "plib-0.8.3.tar.gz", "has_sig": false, "md5_digest": "2f98246b04d3dc8bfef43d9a6264793a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 508792, "upload_time": "2012-09-30T15:42:37", "url": "https://files.pythonhosted.org/packages/c0/77/585e4a41dc654c2c9ae28bb752ee25bbd77fea22e2836ec8351b253dca90/plib-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "4acfd0c9402205bb60248ad56019c410", "sha256": "1f149f54c39810851a4fa6705c9d87a7c8e60b6c33a55c43e0f6ed7f760d3d72" }, "downloads": -1, "filename": "plib-0.8.4.tar.gz", "has_sig": false, "md5_digest": "4acfd0c9402205bb60248ad56019c410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 508874, "upload_time": "2012-10-13T19:02:40", "url": "https://files.pythonhosted.org/packages/82/c5/99a19b8558a218208b5f3c0545769852c2418df8c6bd4ee3bcffab670ce1/plib-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "f4c0ab754e72c76a8a12895a639f81c6", "sha256": "5d66a15784e361714158cc2c5c864ebc2303157ad055431059dff72db9c69550" }, "downloads": -1, "filename": "plib-0.8.5.tar.gz", "has_sig": false, "md5_digest": "f4c0ab754e72c76a8a12895a639f81c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 508941, "upload_time": "2012-11-12T03:30:19", "url": "https://files.pythonhosted.org/packages/03/43/ccaf400097c4c984410524ec510afc70403d4b2003895d32d6eae883f961/plib-0.8.5.tar.gz" } ], "0.8.6": [ { "comment_text": "", "digests": { "md5": "fc91fd44e247637beead8a5cc893129e", "sha256": "75f31ec4d5b9a1c902349d1f77f1a9dc7014bd2b15eb24149823a0f3ac287c71" }, "downloads": -1, "filename": "plib-0.8.6.tar.gz", "has_sig": false, "md5_digest": "fc91fd44e247637beead8a5cc893129e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 510311, "upload_time": "2013-05-07T21:08:04", "url": "https://files.pythonhosted.org/packages/5a/13/334c6f17bc6ecb3130e23655ea9a98b798974a6d7141b6393cff6c1ceca8/plib-0.8.6.tar.gz" } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "24d160d9072089ad280eb957cd55057e", "sha256": "1ed9501539e040396e229c782b8a742ec0622e88a7bae2eaa9bf891a46ba81c0" }, "downloads": -1, "filename": "plib-0.8.7.tar.gz", "has_sig": false, "md5_digest": "24d160d9072089ad280eb957cd55057e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 510717, "upload_time": "2013-05-08T20:10:43", "url": "https://files.pythonhosted.org/packages/a1/66/993c213e5d93e9481df6d665a2b1a2eea36456b86e343753523aa1b33042/plib-0.8.7.tar.gz" } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "152992f86b8d59e7554ebda16c5f2b78", "sha256": "eb5398270171f226ac341219371e54b86b5c9d835ac1134238b8d21df77ef073" }, "downloads": -1, "filename": "plib-0.8.8.tar.gz", "has_sig": false, "md5_digest": "152992f86b8d59e7554ebda16c5f2b78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 547790, "upload_time": "2013-05-25T18:38:36", "url": "https://files.pythonhosted.org/packages/a0/e7/84c498acf0a21edcfe06ce459ddd1d93d8b94b0924d20f72451ec916ad54/plib-0.8.8.tar.gz" } ], "0.8.9": [ { "comment_text": "", "digests": { "md5": "c18390e3b19ab87d995e41ffa799ea2d", "sha256": "e018710858075bc09f72f22b68229c2548b059a14b7afeea701531327eb335c1" }, "downloads": -1, "filename": "plib-0.8.9.tar.gz", "has_sig": false, "md5_digest": "c18390e3b19ab87d995e41ffa799ea2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 547793, "upload_time": "2013-06-04T21:05:20", "url": "https://files.pythonhosted.org/packages/13/09/7df7f530d76f3e6af6a7c85f9cd65e1f99ba04137b5295ec695230c03c10/plib-0.8.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c18390e3b19ab87d995e41ffa799ea2d", "sha256": "e018710858075bc09f72f22b68229c2548b059a14b7afeea701531327eb335c1" }, "downloads": -1, "filename": "plib-0.8.9.tar.gz", "has_sig": false, "md5_digest": "c18390e3b19ab87d995e41ffa799ea2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 547793, "upload_time": "2013-06-04T21:05:20", "url": "https://files.pythonhosted.org/packages/13/09/7df7f530d76f3e6af6a7c85f9cd65e1f99ba04137b5295ec695230c03c10/plib-0.8.9.tar.gz" } ] }