Metadata-Version: 2.1
Name: python_minifier
Version: 2.2.1
Summary: Transform Python source code into it's most compact representation
Home-page: https://github.com/dflook/python-minifier
Author: Daniel Flook
Author-email: daniel@flook.org
License: MIT
Project-URL: Issues, https://github.com/dflook/python-minifier/issues
Project-URL: Documentation, https://dflook.github.io/python-minifier/
Description: # Python Minifier
        
        Transforms Python source code into it's most compact representation.
        
        [Try it out!](https://python-minifier.com)
        
        python-minifier supports Python 2.6 to 2.7 and Python 3.3 to 3.8.
        
        * [PyPi](https://pypi.org/project/python-minifier/)
        * [Documentation](https://dflook.github.io/python-minifier/)
        * [Issues](https://github.com/dflook/python-minifier/issues)
        
        As an example, the following python source:
        
        ```python
        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:
        
        ```python
        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:
        
        ```bash
        $ 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.8.
        
        ## Usage
        
        To minify a source file, and write the minified module to stdout:
        
        ```bash
        $ pyminify hello.py
        ```
        
        There is also an API. The same example would look like:
        
        ```python
        import python_minifier
        
        with open('hello.py') as f:
            print(python_minifier.minify(f.read()))
        ```
        
        Documentation is available at [dflook.github.io/python-minifier/](https://dflook.github.io/python-minifier/)
        
        ## License
        
        Available under the MIT License. Full text is in the [LICENSE](LICENSE) file.
        
        Copyright (c) 2018 Daniel Flook
        
Keywords: minify minifier
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development
Requires-Python: >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <3.9
Description-Content-Type: text/markdown
