跳转到主要内容

Python代码生成工具。

项目描述

版本:
1.0.0

概述

文字是一个有趣的周末项目,旨在通过Python代码生成Python代码。而不是使用Python代码的字符串字面量,你使用文字.py对象,它记得对它们所做的操作,操作的历史记录就是生成的Python程序。

这只是我想尝试的一个实验;它的有用性尚未得到证明,很可能这个实验会失败。所以请谨慎使用。

快速概述

import literal

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

print(unpack_octet())

提供

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

或另一个示例,用于创建AMQP协议的参数解包器

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)

将为AMQP方法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)

更多文档即将到来。

安装

您可以通过Python包索引(PyPI)或从源代码安装文字。

要使用pip安装,

$ pip install literal

要使用easy_install安装,

$ easy_install literal

如果您已下载源代码包,可以通过以下方式安装它,

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

错误跟踪器

如果您有任何建议、错误报告或烦恼,请向我们的问题跟踪器报告,链接为http://github.com/ask/literal.py/issues/

贡献

文字.py的开发发生在Github上:http://github.com/ask/literal.py

您被鼓励参与开发。如果您不喜欢GitHub(出于某种原因),您也可以发送常规补丁。

许可证

此软件根据新BSD许可证许可。请参阅顶层分发目录中的LICENSE文件以获取完整的许可证文本。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

literal-1.0.0.tar.gz (11.7 kB 查看哈希值)

上传时间

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面