Exemplo n.º 1
0
def fetch(settings: typing.Dict[str, typing.Any], since: datetime.date,
          until: datetime.date) -> Report:
    """Fetch Toggle report."""
    LOGGER.info(
        'Fetching Toggl summary report: since=%s, until=%s, workspace_id=%s',
        since, until, settings.get('workspace_id'))

    client = TogglClientApi(settings)

    params = settings
    params.pop('token')
    params['since'] = str(since)
    params['until'] = str(until)
    params['grouping'] = 'projects'
    params['subgrouping'] = 'time_entries'

    response = client.query_report('/summary', params=params)
    response_data = response.json()

    if response.status_code != 200:
        raise RuntimeError(
            'Cannot fetch Toggl report: {}'.format(response_data))

    LOGGER.debug('Response: %s', pprint.pformat(response_data))

    total_grand = response_data['total_grand']
    if not total_grand:
        raise RuntimeError('Toggl returned no data: {}'.format(response_data))

    hours = Decimal(total_grand) / Decimal(1_000 * 60 * 60)
    report = Report(hours=hours)
    LOGGER.info('Fetched report: %s', report)

    return report
 def test_overriding_default_base_url_and_version_on_instance_creation(self):
     my_base_url = 'http://myownapi.com'
     my_ver_no = 12
     credentials = {
         'base_url': my_base_url,
         'ver_api': my_ver_no
     }
     self.api = TogglClientApi(credentials)
     self.assertEqual(self.api.api_base_url, my_base_url + '/v' + str(my_ver_no))
    def setUp(self):
        self.settings = {
            'workspace_name': 'A Company',
            'token': 'xxx',
            'base_url': 'https://my.service/api',
            'ver_api': 8,
            'base_url_report': 'https://my.service/reports/api',
            'ver_report': 2
        }
        self.api = TogglClientApi(self.settings)
        httpretty.enable()  # enable HTTPretty so that it will monkey patch the socket module

        self.base_api_url = self.api.build_api_url(self.settings['base_url'], self.settings['ver_api'])
        self.base_api_report_url = self.api.build_api_url(self.settings['base_url_report'], self.settings['ver_report'])
    def __init__(self, look_back_hours: int = 8, event=None) -> None:
        self.look_back_hours = look_back_hours
        self.time_from: str = None  # Format 2021-02-13T08:27:13.772498Z
        self.time_to: str = None
        self.timezone: timezone = timezone("Europe/Budapest")

        # Load credentials
        try:
            with open('token.pickle', 'rb') as token:
                self.creds, self.toogle_settings = pickle.load(token)
                self.toggl_client = TogglClientApi(self.toogle_settings)
        except FileNotFoundError:
            print(
                "Credentials does not exist. Please genrate token.pickle first."
            )

        # Setting lookback timeframe
        self._set_hours_param(event)
        self._calculate_from_to_timestamps()
Exemplo n.º 5
0
 def get_client(self):
     settings = self.get_credentials()
     return TogglClientApi(settings)