literal


Nameliteral JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttp://github.com/ask/literal.py/
SummaryPython code generation tool.
upload_time2011-12-05 16:27:27
maintainerNone
docs_urlNone
authorAsk Solem
requires_pythonNone
licenseUNKNOWN
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ##############################################
 literal.py - Python code generation tool
##############################################

:Version: 1.0.0

Synopsis
========

Literal is a fun weekend project to create a way to generate python
code with Python code.  Instead of having string literals of Python
code, you use ``literal.py`` objects that remembers the operations
done to them, and the history of operations is the resulting
Python program.

This is just an experiment that I wanted to play with;
It's usefulness is not proven, and more than likely
this will be thrown away as a failed experiment. So use
with care and caution.

Quick overview
--------------

::

    import literal

    @literal.py
    def unpack_octet(x, payload, offset, unpack_from):
        x <<= unpack_from('B', payload, offset)
        offset += 1

    print(unpack_octet())

Gives::

    x = unpack_from('B', payload, offset)
    offset += 1


Or another example used to create argument unpackers
for the AMQP protocol::

    def unpack(method):

        @literal.py
        def body(p, payload, offset, unpack_from, argtuple, ssize):
            fields = method.fields
            names = p.tuple(*self.field_names)

            for i, fset in enumerate(fields):
                if len(fset) == 1:
                    for field in fset:
                        name = p.var(field.name)
                        if field.format == '*':
                            # This is a string payload,
                            # don't have to unpack
                            name <<= payload[offset:offset + ssize]
                            offset += ssize
                        else:
                            # A single field to unpack
                            name <<= unpack_from(struct_format(field.format),
                                                payload, offset)[0]
                            offset += field.size
                else:
                    # A list of field to unpack
                    these = p.tuple(*fset.names)
                    these <<= unpack_from(struct_format(fset.format),
                                        payload, offset)
                    offset += sum(f.size for f in fset)
                return names

            return body().as_fun(lambda payload, offset: 1,
                                method.name)


Would generate the following code for the AMQP method ``basic_deliver``::

    def deliver(payload, offset):
        ssize = unpack_from('B', payload, offset)[0]
        offset += 1
        consumer_tag = payload[offset:offset + ssize]
        offset += ssize
        delivery_tag, redelivered, ssize = unpack_from('QBB', payload, offset)
        offset += 10
        exchange = payload[offset:offset + ssize]
        offset += ssize
        ssize = unpack_from('B', payload, offset)[0]
        offset += 1
        routing_key = payload[offset:offset + ssize]
        offset += ssize
        return (consumer_tag, delivery_tag, redelivered,
                exchange, routing_key)


More documentation to come.

Installation
============

You can install `literal` either via the Python Package Index (PyPI)
or from source.

To install using `pip`,::

    $ pip install literal

To install using `easy_install`,::

    $ easy_install literal

If you have downloaded a source tarball you can install it
by doing the following,::

    $ python setup.py build
    # python setup.py install # as root


Bug tracker
===========

If you have any suggestions, bug reports or annoyances please report them
to our issue tracker at http://github.com/ask/literal.py/issues/

Contributing
============

Development of `literal.py` happens at Github:
http://github.com/ask/literal.py

You are highly encouraged to participate in the development. If you don't
like Github (for some reason) you're welcome to send regular patches.

License
=======

This software is licensed under the `New BSD License`. See the `LICENSE`
file in the top distribution directory for the full license text.
            

Raw data

            {
    "_id": null,
    "home_page": "http://github.com/ask/literal.py/",
    "name": "literal",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "Ask Solem",
    "author_email": "ask@celeryproject.org",
    "download_url": "https://files.pythonhosted.org/packages/fd/41/6b7c7cd9a1e51cd1a8751353bfe004d00c9f9a33bd3e4410b6e70b28ea5b/literal-1.0.0.tar.gz",
    "platform": "any",
    "description": "##############################################\n literal.py - Python code generation tool\n##############################################\n\n:Version: 1.0.0\n\nSynopsis\n========\n\nLiteral is a fun weekend project to create a way to generate python\ncode with Python code.  Instead of having string literals of Python\ncode, you use ``literal.py`` objects that remembers the operations\ndone to them, and the history of operations is the resulting\nPython program.\n\nThis is just an experiment that I wanted to play with;\nIt's usefulness is not proven, and more than likely\nthis will be thrown away as a failed experiment. So use\nwith care and caution.\n\nQuick overview\n--------------\n\n::\n\n    import literal\n\n    @literal.py\n    def unpack_octet(x, payload, offset, unpack_from):\n        x <<= unpack_from('B', payload, offset)\n        offset += 1\n\n    print(unpack_octet())\n\nGives::\n\n    x = unpack_from('B', payload, offset)\n    offset += 1\n\n\nOr another example used to create argument unpackers\nfor the AMQP protocol::\n\n    def unpack(method):\n\n        @literal.py\n        def body(p, payload, offset, unpack_from, argtuple, ssize):\n            fields = method.fields\n            names = p.tuple(*self.field_names)\n\n            for i, fset in enumerate(fields):\n                if len(fset) == 1:\n                    for field in fset:\n                        name = p.var(field.name)\n                        if field.format == '*':\n                            # This is a string payload,\n                            # don't have to unpack\n                            name <<= payload[offset:offset + ssize]\n                            offset += ssize\n                        else:\n                            # A single field to unpack\n                            name <<= unpack_from(struct_format(field.format),\n                                                payload, offset)[0]\n                            offset += field.size\n                else:\n                    # A list of field to unpack\n                    these = p.tuple(*fset.names)\n                    these <<= unpack_from(struct_format(fset.format),\n                                        payload, offset)\n                    offset += sum(f.size for f in fset)\n                return names\n\n            return body().as_fun(lambda payload, offset: 1,\n                                method.name)\n\n\nWould generate the following code for the AMQP method ``basic_deliver``::\n\n    def deliver(payload, offset):\n        ssize = unpack_from('B', payload, offset)[0]\n        offset += 1\n        consumer_tag = payload[offset:offset + ssize]\n        offset += ssize\n        delivery_tag, redelivered, ssize = unpack_from('QBB', payload, offset)\n        offset += 10\n        exchange = payload[offset:offset + ssize]\n        offset += ssize\n        ssize = unpack_from('B', payload, offset)[0]\n        offset += 1\n        routing_key = payload[offset:offset + ssize]\n        offset += ssize\n        return (consumer_tag, delivery_tag, redelivered,\n                exchange, routing_key)\n\n\nMore documentation to come.\n\nInstallation\n============\n\nYou can install `literal` either via the Python Package Index (PyPI)\nor from source.\n\nTo install using `pip`,::\n\n    $ pip install literal\n\nTo install using `easy_install`,::\n\n    $ easy_install literal\n\nIf you have downloaded a source tarball you can install it\nby doing the following,::\n\n    $ python setup.py build\n    # python setup.py install # as root\n\n\nBug tracker\n===========\n\nIf you have any suggestions, bug reports or annoyances please report them\nto our issue tracker at http://github.com/ask/literal.py/issues/\n\nContributing\n============\n\nDevelopment of `literal.py` happens at Github:\nhttp://github.com/ask/literal.py\n\nYou are highly encouraged to participate in the development. If you don't\nlike Github (for some reason) you're welcome to send regular patches.\n\nLicense\n=======\n\nThis software is licensed under the `New BSD License`. See the `LICENSE`\nfile in the top distribution directory for the full license text.",
    "bugtrack_url": null,
    "license": "UNKNOWN",
    "summary": "Python code generation tool.",
    "version": "1.0.0",
    "project_urls": {
        "Download": "UNKNOWN",
        "Homepage": "http://github.com/ask/literal.py/"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fd416b7c7cd9a1e51cd1a8751353bfe004d00c9f9a33bd3e4410b6e70b28ea5b",
                "md5": "30f766764916eb75445c83c63a68b94f",
                "sha256": "68e5502d66eb8ccb46159235441dd0b65bcd5ab2ac57075101860c35d1b7208d"
            },
            "downloads": -1,
            "filename": "literal-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "30f766764916eb75445c83c63a68b94f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 11734,
            "upload_time": "2011-12-05T16:27:27",
            "upload_time_iso_8601": "2011-12-05T16:27:27.176003Z",
            "url": "https://files.pythonhosted.org/packages/fd/41/6b7c7cd9a1e51cd1a8751353bfe004d00c9f9a33bd3e4410b6e70b28ea5b/literal-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2011-12-05 16:27:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ask",
    "github_project": "literal.py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "literal"
}
        
Elapsed time: 0.32626s