def validate_thread_id(self, key, value): if value is None: return try: base36decode(value) except ValueError: raise ValueError('Invalid thread id') return value
def __init__(self, namespace_id, subject, from_addr, to_addr, cc_addr, bcc_addr, any_email, thread_public_id, started_before, started_after, last_message_before, last_message_after, filename, tag, limit, offset, order_by, db_session): self.namespace_id = namespace_id self.subject = subject self.from_addr = from_addr self.to_addr = to_addr self.cc_addr = cc_addr self.bcc_addr = bcc_addr self.any_email = any_email self.thread_public_id = thread_public_id self.started_before = started_before self.started_after = started_after self.last_message_before = last_message_before self.last_message_after = last_message_after self.filename = filename self.tag = tag self.limit = limit self.offset = offset self.order_by = order_by self.db_session = db_session # Validate input for key in ('subject', 'any_email', 'to_addr', 'from_addr', 'cc_addr', 'bcc_addr', 'filename', 'tag'): value = getattr(self, key, None) if value is not None and len(value) > 255: raise ValueError('Value {} for {} is too long'. format(value, key)) if thread_public_id is not None: try: base36decode(thread_public_id) except ValueError: raise ValueError('Invalid thread id {}'. format(thread_public_id)) for key in ('started_before', 'started_after', 'last_message_before', 'last_message_after'): value = getattr(self, key, None) if value is not None: try: # Replace Unix timestamp by datetime object. # We need to set tzinfo so that we can compare to datetimes # that were deserialized using bson.json_util. dt = datetime.utcfromtimestamp(int(value)) setattr(self, key, dt.replace(tzinfo=bson.tz_util.utc)) except ValueError: raise ValueError('Invalid timestamp value {} for {}'. format(value, key))
def b36_to_bin(b36_string): """ b36_string: a base-36 encoded string returns binary 128 bit unsigned integer """ int128 = base36decode(b36_string) MAX_INT64 = 0xFFFFFFFFFFFFFFFF return struct.pack('>QQ', (int128 >> 64) & MAX_INT64, int128 & MAX_INT64)
def b36_to_bin(b36_string): """ b36_string: a base-36 encoded string returns binary 128 bit unsigned integer """ int128 = base36decode(b36_string) MAX_INT64 = 0xFFFFFFFFFFFFFFFF return struct.pack( '>QQ', (int128 >> 64) & MAX_INT64, int128 & MAX_INT64)