Update the pieces to use base64 encoded binary

This commit is contained in:
Jake Moshenko 2015-12-31 12:30:13 -05:00 committed by Jimmy Zelinskie
parent 5c6e033d21
commit ce8fcbeaae
4 changed files with 32 additions and 30 deletions

View file

@ -5,7 +5,10 @@ import json
from peewee import TextField
class ResumableSHA256Field(TextField):
class _ResumableSHAField(TextField):
def _create_sha(self):
raise NotImplementedError
def db_value(self, value):
sha_state = value.state()
@ -16,7 +19,7 @@ class ResumableSHA256Field(TextField):
return json.dumps(sha_state)
def python_value(self, value):
to_resume = resumablehashlib.sha256()
to_resume = self._create_sha()
if value is None:
return to_resume
@ -28,27 +31,14 @@ class ResumableSHA256Field(TextField):
return to_resume
class ResumableSHA1Field(TextField):
def db_value(self, value):
sha_state = value.state()
class ResumableSHA256Field(_ResumableSHAField):
def _create_sha(self):
return resumablehashlib.sha256()
# One of the fields is a byte string, let's base64 encode it to make sure
# we can store and fetch it regardless of default collocation.
sha_state[3] = base64.b64encode(sha_state[3])
return json.dumps(sha_state)
def python_value(self, value):
to_resume = resumablehashlib.sha1()
if value is None:
return to_resume
sha_state = json.loads(value)
# We need to base64 decode the data bytestring.
sha_state[3] = base64.b64decode(sha_state[3])
to_resume.set_state(sha_state)
return to_resume
class ResumableSHA1Field(_ResumableSHAField):
def _create_sha(self):
return resumablehashlib.sha1()
class JSONField(TextField):
@ -59,3 +49,15 @@ class JSONField(TextField):
if value is None or value == "":
return {}
return json.loads(value)
class Base64BinaryField(TextField):
def db_value(self, value):
if value is None:
return None
return base64.b64encode(value)
def python_value(self, value):
if value is None:
return None
return base64.b64decode(value)