Metadata-Version: 1.1
Name: querystringsafe-base64
Version: 0.2.0
Summary: Encoding and decoding arbitrary strings into strings that are safe to put into a URL query param.
Home-page: https://github.com/ClearcodeHQ/querystringsafe_base64
Author: Clearcode - The A Room
Author-email: thearoom@clearcode.cc
License: LGPL
Description: [![Build Status](https://travis-ci.org/ClearcodeHQ/querystringsafe_base64.svg?branch=master)](https://travis-ci.org/ClearcodeHQ/querystringsafe_base64)
        [![Coverage Status](https://img.shields.io/coveralls/ClearcodeHQ/querystringsafe_base64.svg)](https://coveralls.io/r/ClearcodeHQ/querystringsafe_base64)
        
        # Query string safe Base64
        
        Encoding and decoding arbitrary strings into strings that are safe to put into a URL query param.
        
        ## The problem
        
        `urlsafe_b64encode` and `urlsafe_b64decode` from base64 are not enough because they leave `=` chars unquoted:
        
            >>> import base64
        
            >>> base64.urlsafe_b64encode('a')
            >>> 'YQ=='
        
        And there are 2 problems with that
        
        I. `=` sign gets quoted:
        
            >>> import urllib
        
            >>> urllib.quote('=')
            '%3D'
        
        II. Some libraries tolerate the `=` in query string values:
        
            >>> from urlparse import urlsplit, parse_qs
        
            >>> parse_qs(urlsplit('http://aaa.com/asa?q=AAAA=BBBB=CCCC').query)
            {'q': ['AAAA=BBBB=CCCC']}
        
        but the RFC 3986 underspecifies the query string so we cannot rely on `=` chars being handled by all web applications as it is done by urlparse.
        
        Therefore we consider chars: `['+', '/', '=']` unsafe and we replace them with `['-', '_', '.']`. Characters `+` and `/` are already handled by `urlsafe_*` functions from base64 so only `=` is left for us. The `.` character has been chosen because it often appears in real world query strings and it is not used
        by base64.
        
        ## The solution
        
            >>> import querystringsafe_base64
        
            >>> querystringsafe_base64.encode('foo-bar')
            >>> 'Zm9vLWJhcg..'
        
            >>> querystringsafe_base64.decode('Zm9vLWJhcg..')
            >>> 'foo-bar'
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Natural Language :: English
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Environment :: Web Environment
