def test_value_error_raised_if_output_not_json_or_filename(self): valid = ['json', 'filename'] invalid = ['foobar', 'invalid', 123, True] for i in valid: self.assertIsNotNone(dt_formatter(self.dt, i)) for i in invalid: with self.assertRaises(ValueError): _ = dt_formatter(self.dt, i)
def test_input_not_datetime_raises_attribute_error(self): invalid = [123, 'foobar', True] for i in invalid: with self.assertRaises(AttributeError): _ = dt_formatter(i, 'filename')
def get_stats(sg, mode, now, articles=None): extras = get_extra_attrs(sg, mode) now_json = dt_formatter(now, 'json') if mode in ['events', 'articles']: period_start, period_stop = map(partial(dt_formatter, output='json'), [sg.start, sg.stop]) # TODO - add if-statement to make sure that modes that need articles have articles passed in as arg # if mode in ['articles', 'referrals'] and not articles: raise someError print(f'\nGetting {extras["title"]}...', end='\n\n') if mode == 'summary': agg_stats = sg.get_summary_stats() articles = sg.get_article_ids(agg_stats) data = {'data': {'post': agg_stats}} elif mode == 'events': if isinstance(sg, StatGrabberUser): non_attrib_events = sg.get_summary_stats(events=True) data = {'data': {'events': non_attrib_events}} elif isinstance(sg, StatGrabberPublication): views = sg.get_events(type_='views') visitors = sg.get_events(type_='visitors') data = {'data': {'views': views, 'visitors': visitors}} elif mode == 'story_overview': stories = sg.get_all_story_overview() data = {'data': {'story': stories}} elif mode == 'articles': data = sg.get_all_story_stats(articles) elif mode == 'referrers': data = sg.get_all_story_stats(articles, type_='referrer') else: # TODO remove hardcoding from this message - make choice list dynamic from keys raise ValueError( '"mode" param must be of choice {summary, events, story_overview, articles, referrers}' ) if extras['is_aggregated']: extras = {'timestamp': now_json, 'type': extras['type']} else: extras = { 'periodBegin': period_start, 'periodEnd': period_stop, 'type': extras['type'] } return {**data, **extras}
def write_stats(sg, data, mode, now, sub_dir): extras = get_extra_attrs(sg, mode) now_prefix = dt_formatter(now, 'filename') period_start_f, period_stop_f = map( partial(dt_formatter, output='filename'), [sg.start, sg.stop]) filename = '{}/{}/{}_{}_{}'.format(sub_dir, extras['folder'], now_prefix, sg.slug, extras['filename_suffix']) if mode in ['events', 'articles']: filename = '{}/{}/{}_{}_{}_{}'.format(sub_dir, extras['folder'], period_stop_f, period_start_f, sg.slug, extras['filename_suffix']) path = sg.write_json(data, filename) print(f'{extras["title"]} written to:') print(path, section_break, sep='\n') return path
def test_returns_string(self): self.assertIsInstance(dt_formatter(self.dt, "json"), str)
def test_filename_output_of_form_YYYYMMDDTHHMMSS(self): actual = dt_formatter(self.dt, "filename") self.assertRegex(actual, r'\d{8}T\d{6}')