Beispiel #1
0
 def validate_thread_id(self, key, value):
     if value is None:
         return
     try:
         base36decode(value)
     except ValueError:
         raise ValueError('Invalid thread id')
     return value
Beispiel #2
0
 def validate_thread_id(self, key, value):
     if value is None:
         return
     try:
         base36decode(value)
     except ValueError:
         raise ValueError('Invalid thread id')
     return value
Beispiel #3
0
    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))
Beispiel #4
0
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)
Beispiel #5
0
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)