def test_date_conversion(mock_models_timezone): example_string = "2018-06-12T14:01:41+00:00" datetime = ClockifyDatetime.init_from_string(example_string).datetime_utc assert datetime.year == 2018 assert datetime.month == 6 assert datetime.day == 12 assert datetime.hour == 14 assert datetime.minute == 1 # str representation should always be UTC in Clockify format, ending in Z (for UTC) assert str(ClockifyDatetime(datetime)) == "2018-06-12T14:01:41Z" # datetime_local should have been branded with local (mock +8) assert str(ClockifyDatetime(datetime).datetime_local) == "2018-06-12 22:01:41+08:00" # Naive datetime should have been branded with local (mock +8) assert ( str(ClockifyDatetime.init_from_string("2018-06-12T14:01:41")) == "2018-06-12T06:01:41Z" ) # naive datetime, should be branded as local timezone, so the mock +8 timezone should have been subtracted for utc assert ( ClockifyDatetime.init_from_string("2018-06-12T14:01:41").datetime_utc.hour == 6 ) # but the normal datetime should be unaffected: should be as input assert ClockifyDatetime.init_from_string("2018-06-12T14:01:41").datetime.hour == 14 cltime = ClockifyDatetime(datetime) ClockifyDatetime.init_from_string(str(cltime))
def get_time_entries(self, api_key: str, workspace: Workspace, user: User, start_datetime, end_datetime): params = { 'start': ClockifyDatetime(start_datetime).clockify_datetime, 'end': ClockifyDatetime(end_datetime).clockify_datetime } response = self.api_server.get( path= f"/workspaces/{workspace.obj_id}/user/{user.obj_id}/time-entries", api_key=api_key, params=params) return [TimeEntry.init_from_dict(te) for te in response]
def set_active_time_entry_end( self, api_key: str, workspace: Workspace, user: User, end_time: datetime ): """Set the end time for the currently active entry Parameters ---------- api_key: str Clockify Api key workspace: Workspace Get projects in this workspace user: User The use for which to end the active time entry end_time: datetime Set the end time to this Returns ------- TimeEntry The updated time entry, if an active one was found None If there was no active time entry (if a stopwatch was not running) """ try: result = self.api_server.patch( path=f"/workspaces/{workspace.obj_id}/user/{user.obj_id}/time-entries/", api_key=api_key, data={"end": str(ClockifyDatetime(end_time))}, ) except APIServer404: return None return TimeEntry.init_from_dict(result)
def as_local(datetime_in): return ClockifyDatetime(datetime_in).datetime_local