def availability( self, emails, duration, interval, start_at, end_at, free_busy=None ): if isinstance(emails, six.string_types): emails = [emails] if isinstance(duration, timedelta): duration_minutes = int(duration.total_seconds() // 60) else: duration_minutes = int(duration) if isinstance(interval, timedelta): interval_minutes = int(interval.total_seconds() // 60) else: interval_minutes = int(interval) if isinstance(start_at, datetime): start_time = timestamp_from_dt(start_at) else: start_time = start_at if isinstance(end_at, datetime): end_time = timestamp_from_dt(end_at) else: end_time = end_at url = "{api_server}/calendars/availability".format(api_server=self.api_server) data = { "emails": emails, "duration_minutes": duration_minutes, "interval_minutes": interval_minutes, "start_time": start_time, "end_time": end_time, "free_busy": free_busy or [], } resp = self.session.post(url, json=data) _validate(resp) return resp.json()
def test_update_thread_attrs(api_client): thread = api_client.threads.create() first = datetime(2017, 2, 3, 10, 0, 0) second = datetime(2016, 10, 5, 14, 30, 0) # timestamps and datetimes are handled totally separately thread.last_message_at = first thread.last_message_timestamp = timestamp_from_dt(second) assert thread.last_message_at == first assert thread.last_message_timestamp == timestamp_from_dt(second) # but datetimes overwrite timestamps when serializing to JSON assert thread.as_json()["last_message_timestamp"] == timestamp_from_dt(first)
def test_update_thread_attrs(api_client): thread = api_client.threads.create() first = datetime(2017, 2, 3, 10, 0, 0) second = datetime(2016, 10, 5, 14, 30, 0) # timestamps and datetimes are handled totally separately thread.last_message_at = first thread.last_message_timestamp = timestamp_from_dt(second) assert thread.last_message_at == first assert thread.last_message_timestamp == timestamp_from_dt(second) # but datetimes overwrite timestamps when serializing to JSON assert thread.as_json()['last_message_timestamp'] == timestamp_from_dt(first)
def test_thread_attrs(api_client): thread = api_client.threads.first() expected_first = datetime(2016, 1, 2, 3, 4, 5) expected_last = datetime(2017, 1, 2, 3, 4, 5) expected_last_received = datetime(2017, 1, 2, 3, 4, 5) expected_last_sent = datetime(2017, 1, 1, 1, 1, 1) assert thread.first_message_timestamp == timestamp_from_dt(expected_first) assert thread.first_message_at == expected_first assert thread.last_message_timestamp == timestamp_from_dt(expected_last) assert thread.last_message_at == expected_last assert thread.last_message_received_timestamp == timestamp_from_dt(expected_last_received) assert thread.last_message_received_at == expected_last_received assert thread.last_message_sent_timestamp == timestamp_from_dt(expected_last_sent) assert thread.last_message_sent_at == expected_last_sent
def test_thread_attrs(api_client): thread = api_client.threads.first() expected_first = datetime(2016, 1, 2, 3, 4, 5) expected_last = datetime(2017, 1, 2, 3, 4, 5) expected_last_received = datetime(2017, 1, 2, 3, 4, 5) expected_last_sent = datetime(2017, 1, 1, 1, 1, 1) assert thread.first_message_timestamp == timestamp_from_dt(expected_first) assert thread.first_message_at == expected_first assert thread.last_message_timestamp == timestamp_from_dt(expected_last) assert thread.last_message_at == expected_last assert thread.last_message_received_timestamp == timestamp_from_dt( expected_last_received ) assert thread.last_message_received_at == expected_last_received assert thread.last_message_sent_timestamp == timestamp_from_dt(expected_last_sent) assert thread.last_message_sent_at == expected_last_sent
def as_json(self): dct = {} for attr in self.cls.attrs: if hasattr(self, attr): dct[attr] = getattr(self, attr) for dt_attr, ts_attr in self.cls.datetime_attrs.items(): if self.get(dt_attr): dct[ts_attr] = timestamp_from_dt(self[dt_attr]) return dct
def free_busy(self, emails, start_at, end_at): if isinstance(emails, six.string_types): emails = [emails] if isinstance(start_at, datetime): start_time = timestamp_from_dt(start_at) else: start_time = start_at if isinstance(end_at, datetime): end_time = timestamp_from_dt(end_at) else: end_time = end_at url = "{api_server}/calendars/free-busy".format(api_server=self.api_server) data = { "emails": emails, "start_time": start_time, "end_time": end_time, } resp = self.session.post(url, json=data) _validate(resp) return resp.json()
def as_json(self): dct = {} for attr in self.cls.attrs: if hasattr(self, attr): dct[attr] = getattr(self, attr) for date_attr, iso_attr in self.cls.date_attrs.items(): if self.get(date_attr): dct[iso_attr] = self[date_attr].strftime("%Y-%m-%d") for dt_attr, ts_attr in self.cls.datetime_attrs.items(): if self.get(dt_attr): dct[ts_attr] = timestamp_from_dt(self[dt_attr]) for attr, value_attr in self.cls.typed_dict_attrs.items(): typed_dict = getattr(self, attr) if value_attr: dct[attr] = [] for key, values in typed_dict.items(): for value in values: dct[attr].append({"type": key, value_attr: value}) else: dct[attr] = [] for values in typed_dict.values(): for value in values: dct[attr].append(value) return dct
def test_message_attrs(api_client): message = api_client.messages.first() expected_received = datetime(2010, 2, 2, 2, 22, 22) assert message.received_at == expected_received assert message.date == timestamp_from_dt(expected_received)
def test_draft_attrs(api_client): draft = api_client.drafts.first() expected_modified = datetime(2015, 8, 4, 10, 34, 46) assert draft.last_modified_at == expected_modified assert draft.date == timestamp_from_dt(expected_modified)