Letterlijke is een project om een manier om Python-code met Python-code genereren van maken & nbsp;. In plaats van letterlijke tekenreeksen van Python-code, literal.py voorwerpen gebruik je dat de operaties gedaan om hen herinnert, en de geschiedenis van de operaties is het resulterende Python programma.
Dit is slechts een experiment dat ik wilde spelen met; Het is het nut is niet bewezen, en meer dan waarschijnlijk zal dit worden weggegooid als een mislukt experiment. Dus gebruik met zorg en voorzichtigheid.
Snel overzicht
import letterlijke
@ Literal.py
def unpack_octet (x, payload, offset, unpack_from):
& Nbsp; x <<= unpack_from ('B', payload, offset)
& Nbsp; offset + = 1
print (unpack_octet ())
Geeft:
x = unpack_from ('B', payload, offset)
offset + = 1
Of een ander voorbeeld gebruikt om argument ontpakkers voor de AMQP protocol te maken:
def uitpakken (methode):
& Nbsp; @ literal.py
& Nbsp; def lichaam (p, payload, offset, unpack_from, argtuple, ssize):
& Nbsp; velden = method.fields
& Nbsp; namen = p.tuple (* self.field_names)
& Nbsp; voor i, fset in enumerate (velden):
& Nbsp; als len (fset) == 1:
& Nbsp; voor in het veld in fset:
& Nbsp; naam = p.var (field.name)
& Nbsp; als field.format == '*':
& Nbsp; # Dit is een string laadvermogen,
& Nbsp; # niet hoeft uit te pakken
& Nbsp; naam <<= laadvermogen [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; anders:
& Nbsp; # Een enkel veld uit te pakken
& Nbsp; naam <<= unpack_from (struct_format (field.format),
& Nbsp; payload, offset) [0]
& Nbsp; offset + = field.size
& Nbsp; anders:
& Nbsp; # Een lijst van het veld uit te pakken
& Nbsp; deze = p.tuple (* fset.names)
& Nbsp; deze <<= unpack_from (struct_format (fset.format),
& Nbsp; payload, offset)
& Nbsp; offset + = som (f.size for f in fset)
& Nbsp; terug namen
. & Nbsp; return lichaam () as_fun (lambda payload, offset: 1,
& Nbsp; method.name)
Zou de volgende code voor de AMQP methode basic_deliver genereren:
def leveren (payload, offset):
& Nbsp; ssize = unpack_from ('B', payload, offset) [0]
& Nbsp; offset + = 1
& Nbsp; consumer_tag = laadvermogen [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; delivery_tag, teruggeleverd, ssize = unpack_from ('QBB', payload, offset)
& Nbsp; offset + = 10
& Nbsp; uitwisseling = laadvermogen [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; ssize = unpack_from ('B', payload, offset) [0]
& Nbsp; offset + = 1
& Nbsp; routing_key = laadvermogen [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; return (consumer_tag, delivery_tag, redelivered,
& Nbsp; uitwisseling, routing_key)
Meer documentatie te komen.
installatie
U kunt zowel via de Python Package Index (PyPI) of van bron letterlijke installeren.
Te installeren met pip:
pip letterlijke installeren
Te installeren met easy_install:
& Nbsp; easy_install letterlijke
Als u een bron tarball hebt gedownload, kunt u deze installeren door het volgende te doen:
& Nbsp; python setup.py build
# Python setup.py installeren # als root
Bug tracker
Als u suggesties, bug reports of ergernissen hebben meld deze dan naar onze issue tracker op http://github.com/ask/literal.py/issues/
Bijdragen
Ontwikkeling van literal.py gebeurt op Github: http://github.com/ask/literal.py
U wordt sterk aangemoedigd om aan de ontwikkeling. . Als je niet van Github (om wat voor reden) bent u welkom om regelmatig verzenden patches bent
Eisen
- Python
Reacties niet gevonden