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))
Exemple #2
0
 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]
Exemple #3
0
    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)
Exemple #4
0
def as_local(datetime_in):
    return ClockifyDatetime(datetime_in).datetime_local