Skip to main content

Python code generation tool.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

literal-1.0.0.tar.gz (11.7 kB view details)

Uploaded Source

File details

Details for the file literal-1.0.0.tar.gz.

File metadata

  • Download URL: literal-1.0.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for literal-1.0.0.tar.gz
Algorithm Hash digest
SHA256 68e5502d66eb8ccb46159235441dd0b65bcd5ab2ac57075101860c35d1b7208d
MD5 30f766764916eb75445c83c63a68b94f
BLAKE2b-256 fd416b7c7cd9a1e51cd1a8751353bfe004d00c9f9a33bd3e4410b6e70b28ea5b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page