Transform Python source code into it's most compact representation
Project description
Python Minifier
Transforms Python source code into it's most compact representation.
python-minifier supports Python 2.6 to 2.7 and Python 3.3 to 3.9.
As an example, the following python source:
def handler(event, context): l.info(event) try: i_token = hashlib.new('md5', (event['RequestId'] + event['StackId']).encode()).hexdigest() props = event['ResourceProperties'] if event['RequestType'] == 'Create': event['PhysicalResourceId'] = 'None' event['PhysicalResourceId'] = create_cert(props, i_token) add_tags(event['PhysicalResourceId'], props) validate(event['PhysicalResourceId'], props) if wait_for_issuance(event['PhysicalResourceId'], context): event['Status'] = 'SUCCESS' return send(event) else: return reinvoke(event, context) elif event['RequestType'] == 'Delete': if event['PhysicalResourceId'] != 'None': acm.delete_certificate(CertificateArn=event['PhysicalResourceId']) event['Status'] = 'SUCCESS' return send(event) elif event['RequestType'] == 'Update': if replace_cert(event): event['PhysicalResourceId'] = create_cert(props, i_token) add_tags(event['PhysicalResourceId'], props) validate(event['PhysicalResourceId'], props) if not wait_for_issuance(event['PhysicalResourceId'], context): return reinvoke(event, context) else: if 'Tags' in event['OldResourceProperties']: acm.remove_tags_from_certificate(CertificateArn=event['PhysicalResourceId'], Tags=event['OldResourceProperties']['Tags']) add_tags(event['PhysicalResourceId'], props) event['Status'] = 'SUCCESS' return send(event) else: raise RuntimeError('Unknown RequestType') except Exception as ex: l.exception('') event['Status'] = 'FAILED' event['Reason'] = str(ex) return send(event)
Becomes:
def handler(event,context): L='OldResourceProperties';K='Tags';J='None';H='SUCCESS';G='RequestType';E='Status';D=context;B='PhysicalResourceId';A=event;l.info(A) try: F=hashlib.new('md5',(A['RequestId']+A['StackId']).encode()).hexdigest();C=A['ResourceProperties'] if A[G]=='Create': A[B]=J;A[B]=create_cert(C,F);add_tags(A[B],C);validate(A[B],C) if wait_for_issuance(A[B],D):A[E]=H;return send(A) else:return reinvoke(A,D) elif A[G]=='Delete': if A[B]!=J:acm.delete_certificate(CertificateArn=A[B]) A[E]=H;return send(A) elif A[G]=='Update': if replace_cert(A): A[B]=create_cert(C,F);add_tags(A[B],C);validate(A[B],C) if not wait_for_issuance(A[B],D):return reinvoke(A,D) else: if K in A[L]:acm.remove_tags_from_certificate(CertificateArn=A[B],Tags=A[L][K]) add_tags(A[B],C) A[E]=H;return send(A) else:raise RuntimeError('Unknown RequestType') except Exception as I:l.exception('');A[E]='FAILED';A['Reason']=str(I);return send(A)
Why?
AWS Cloudformation templates may have AWS lambda function source code embedded in them, but only if the function is less than 4KiB. I wrote this package so I could write python normally and still embed the module in a template.
Installation
To install python-minifier use pip:
$ pip install python-minifier
Note that python-minifier depends on the python interpreter for parsing source code, so install using a version of python appropriate for your source.
python-minifier runs with and can minify code written for Python 2.6 to 2.7 and Python 3.3 to 3.9.
Usage
To minify a source file, and write the minified module to stdout:
$ pyminify hello.py
There is also an API. The same example would look like:
import python_minifier with open('hello.py') as f: print(python_minifier.minify(f.read()))
Documentation is available at dflook.github.io/python-minifier/
License
Available under the MIT License. Full text is in the LICENSE file.
Copyright (c) 2020 Daniel Flook
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
| Filename, size | File type | Python version | Upload date | Hashes |
|---|---|---|---|---|
| Filename, size python_minifier-2.4.1-py3-none-any.whl (37.3 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
| Filename, size python_minifier-2.4.1.tar.gz (34.3 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for python_minifier-2.4.1-py3-none-any.whl
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 | 09a5f589645359852996a860eeec1290df4cfebf86ef32941acb4375dd8fb9a0 |
|
| MD5 | 80ddbe24f8e4eed9d3874638d367ae05 |
|
| BLAKE2-256 | e312d14674f936a1bf4df7fd735a25d1ee3f6decfd99461af41b002b683c2fe9 |

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
