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()
def get_client(self): settings = self.get_credentials() return TogglClientApi(settings)