def test_compare_tw_gcal_items(self): self.load_sample_items() diffs = TWGCalAggregator.compare_tw_gcal_items( tw_item=self.tw_item, gcal_item=self.gcal_item_expected) self.assertTupleEqual(diffs, ({"entry", "urgency", "due", "id", "tags"}, {})) diffs = TWGCalAggregator.compare_tw_gcal_items( tw_item=self.tw_item_expected, gcal_item=self.gcal_item) self.assertTupleEqual(diffs, (set(), {}))
def test_tw_gcal_n_back(self): """TW -> GCal -> TW conversion""" self.load_sample_items() tw_item_out = TWGCalAggregator.convert_gcal_to_tw( TWGCalAggregator.convert_tw_to_gcal(self.tw_item)) self.assertSetEqual( set(self.tw_item) ^ set(tw_item_out), set({"entry", "due", "id", "tags", "urgency"}), ) intersection = set(self.tw_item) & set(tw_item_out) self.assertDictEqual( {i: self.tw_item[i] for i in intersection}, {i: tw_item_out[i] for i in intersection}, )
def test_gcal_tw_n_back(self): """GCal -> TW -> GCal conversion.""" self.load_sample_items() gcal_item_out = TWGCalAggregator.convert_tw_to_gcal( TWGCalAggregator.convert_gcal_to_tw(self.gcal_item)) self.assertSetEqual( set(self.gcal_item) ^ set(gcal_item_out), set({ "htmlLink", "kind", "etag", "extendedProperties", "creator", "created", "organizer", "sequence", "status", "reminders", "iCalUID", "id", }), )
def main(gcal_calendar, gcal_secret, tw_tags, order_by, ascending_order, verbose, oauth_port): """Main.""" setup_logger(verbosity=verbose) if len(tw_tags) != 1: raise RuntimeError( "Trying with multiple tags hasn't been tested yet. Exiting...") logger.info("Initialising...") tw_config = {"tags": list(tw_tags)} gcal_config = {"calendar_summary": gcal_calendar, "oauth_port": oauth_port} if gcal_secret: gcal_config["client_secret"] = gcal_secret try: with TWGCalAggregator(tw_config=tw_config, gcal_config=gcal_config) as aggregator: aggregator.start() # Check and potentially register items # tw tw_items = aggregator.tw_side.get_all_items( order_by=order_by, use_ascending_order=ascending_order) aggregator.register_items(tw_items, ItemType.TW) # gcal gcal_items = aggregator.gcal_side.get_all_items( order_by=order_by, use_ascending_order=ascending_order) aggregator.register_items(gcal_items, ItemType.GCAL) # Synchronise deleted items aggregator.synchronise_deleted_items(ItemType.TW) aggregator.synchronise_deleted_items(ItemType.GCAL) except KeyboardInterrupt: logger.info("Exiting...") except: logger.info(traceback.format_exc()) logger.error( "Application failed, above you can find the error message, which you can use to" " create an issue at https://github.com/bergercookie/taskw_gcal_sync/issues." )
def test_gcal_tw_date_convert(self): """GCal (with 'date' subfield) -> TW conversion.""" self.load_sample_items() tw_item_out = TWGCalAggregator.convert_gcal_to_tw( self.gcal_item_w_date) self.assertDictEqual(tw_item_out, self.tw_item_w_date_expected)
def test_gcal_tw_basic_convert(self): """Basic GCal -> TW conversion.""" self.load_sample_items() tw_item_out = TWGCalAggregator.convert_gcal_to_tw(self.gcal_item) self.assertDictEqual(tw_item_out, self.tw_item_expected)
def test_tw_gcal_basic_convert(self): """Basic TW -> GCal conversion.""" self.load_sample_items() gcal_item_out = TWGCalAggregator.convert_tw_to_gcal(self.tw_item) self.assertDictEqual(gcal_item_out, self.gcal_item_expected)