PK mC70 0 rebus-0.1/rebus.html
Generate base64-encoded strings consisting of alphanumeric symbols only.
Recently I have been working on implementing of a Google Authenticator app for Plone (which I did for my beloved company - Goldmund, Wyldebeast & Wunderliebe).
For generating of a bar code image, I needed a base32 encoded string. While Android devices could perfectly scan all bar-code image that I would generate, Apple devices would raise errors on bar code images which were generated using strings that contain one or more “=” characters.
The solution found was to add a number of \n at the end of the string to be encoded.
If you happen to experience similar problems, you know what to do.
Install latest stable version from PyPI:
$ pip install rebus
...or latest stable version from GitHub:
$ pip install -e git+https://github.com/barseghyanartur/rebus@stable#egg=rebus
...or latest stable version from BitBucket:
$ pip install -e hg+https://bitbucket.org/barseghyanartur/rebus@stable#egg=rebus
Using rebus is damn easy. Whenever you would want to use base64.b32encode or base64.b64encode, replace base64 with rebus.
Required imports.
>>> import rebus
b32encode string
>>> rebus.b32encode('abcdefg')
'MFRGGZDFMZTQUCQK'
b64encode string
>>> rebus.b64encode('abcdefg')
'YWJjZGVmZwoK'
urlsafe_b64encode
>>> rebus.urlsafe_b64encode('abcdefg')
'YWJjZGVmZwoK'
GPL 2.0/LGPL 2.1
For any issues contact me at the e-mail given in the Author section.
Artur Barseghyan <artur.barseghyan@gmail.com>
from __future__ import print_function
__title__ = 'rebus'
__version__ = '0.1'
__build__ = 0x000001
__author__ = 'Artur Barseghyan'
__copyright__ = 'Copyright (c) 2013 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('b32encode', 'b64encode', 'urlsafe_b64encode')
import logging
import base64
from six import binary_type
logger = logging.getLogger(__file__)
class EncodedText(object):
"""
Container.
"""
def __init__(self, text, encoded):
self.text = text
self.encoded = encoded
def __str__(self):
return str(self.encoded)
__unicode__ = __str__
__repr__ = __str__
[docs]def b32encode(text, return_object=False):
"""
:param string text:
:param bool return_object:
:return string:
"""
changed_text = binary_type((text + ((int(len(text) / 5) + 1) * 5 - len(text)) * '\n').encode())
encoded_text = base64.b32encode(changed_text)
if return_object:
return EncodedText(text=changed_text, encoded=encoded_text)
return encoded_text
[docs]def b64encode(text, return_object=False):
"""
:param string text:
:return string:
"""
changed_text = binary_type((text + ((int(len(text) / 3) + 1) * 3 - len(text)) * '\n').encode())
encoded_text = base64.b64encode(changed_text)
if return_object:
return EncodedText(text=changed_text, encoded=encoded_text)
return encoded_text
[docs]def urlsafe_b64encode(text, return_object=False):
"""
:param string text:
:return string:
"""
changed_text = binary_type((text + ((int(len(text) / 3) + 1) * 3 - len(text)) * '\n').encode())
encoded_text = base64.urlsafe_b64encode(changed_text)
if return_object:
return EncodedText(text=changed_text, encoded=encoded_text)
return encoded_text