def sync_cycle_tasks_events(self): """Generates Calendar Events descriptions.""" with benchmark("Sync of calendar events."): events = all_models.CalendarEvent.query.options( orm.joinedload("attendee").load_only("email", ), orm.joinedload("attendee").joinedload("profile").load_only( "send_calendar_events", ), load_only( all_models.CalendarEvent.id, all_models.CalendarEvent.external_event_id, all_models.CalendarEvent.title, all_models.CalendarEvent.description, all_models.CalendarEvent.attendee_id, all_models.CalendarEvent.due_date, all_models.CalendarEvent.last_synced_at, )).all() event_mappings = utils.get_related_mapping( left=all_models.CalendarEvent, right=all_models.CycleTaskGroupObjectTask) for event in events: if not event.needs_sync: continue if event.id not in event_mappings or not event_mappings[ event.id]: if not event.is_synced: db.session.delete(event) else: self._delete_event(event) continue if not event.is_synced: self._create_event(event) continue self._update_event(event) db.session.commit()
def _generate_events(self): """Generates Calendar Events.""" task_mappings = utils.get_related_mapping( left=all_models.CycleTaskGroupObjectTask, right=all_models.CalendarEvent) for task in self.tasks: events = task_mappings[ task.id] if task.id in task_mappings else set() self._generate_events_for_task(task, events_ids=events) db.session.flush()
def _generate_events(self): """Generates Calendar Events.""" task_mappings = utils.get_related_mapping( left=all_models.CycleTaskGroupObjectTask, right=all_models.CalendarEvent ) columns = all_models.CycleTaskGroupObjectTask.query.options( orm.joinedload("cycle").load_only( "workflow_id", "is_current", "is_verification_needed" ), orm.joinedload("cycle").joinedload("workflow").load_only( "unit", "recurrences", "next_cycle_start_date", ), orm.subqueryload( "_access_control_list" ).joinedload( "ac_role" ).undefer_group( "AccessControlRole_complete" ), orm.subqueryload( "_access_control_list" ).joinedload( "access_control_people" ).joinedload( "person" ).undefer_group( "Person_complete" ), load_only( all_models.CycleTaskGroupObjectTask.id, all_models.CycleTaskGroupObjectTask.end_date, all_models.CycleTaskGroupObjectTask.status, all_models.CycleTaskGroupObjectTask.title, all_models.CycleTaskGroupObjectTask.verified_date, ), ).order_by(all_models.CycleTaskGroupObjectTask.end_date) all_count = columns.count() handled = 0 for query_chunk in generate_query_chunks( columns, chunk_size=self.chunk_size, needs_ordering=False ): handled += query_chunk.count() logger.info("Cycle task processed: %s/%s", handled, all_count) for task in query_chunk: events = task_mappings[task.id] if task.id in task_mappings else set() self._generate_events_for_task(task, events_ids=events) db.session.flush()
def sync_cycle_tasks_events(self): """Generates Calendar Events descriptions.""" with benchmark("Sync of calendar events."): events = all_models.CalendarEvent.query.options( orm.joinedload("attendee").load_only( "email", ), orm.joinedload("attendee").joinedload("profile").load_only( "send_calendar_events", ), load_only( all_models.CalendarEvent.id, all_models.CalendarEvent.external_event_id, all_models.CalendarEvent.title, all_models.CalendarEvent.description, all_models.CalendarEvent.attendee_id, all_models.CalendarEvent.due_date, all_models.CalendarEvent.last_synced_at, ) ).order_by(all_models.CalendarEvent.due_date) event_mappings = utils.get_related_mapping( left=all_models.CalendarEvent, right=all_models.CycleTaskGroupObjectTask ) all_count = events.count() handled = 0 for query_chunk in generate_query_chunks( events, chunk_size=self.chunk_size, needs_ordering=False ): chunk_objects = query_chunk.all() handled += len(chunk_objects) logger.info("Sync of calendar events: %s/%s", handled, all_count) for event in chunk_objects: if not event.needs_sync: continue if event.id not in event_mappings or not event_mappings[event.id]: if not event.is_synced: db.session.delete(event) else: self._delete_event(event) continue if not event.is_synced: self._create_event(event) continue self._update_event(event) db.session.commit()
def _generate_event_descriptions(self): """Generates CalendarEvents descriptions.""" event_mappings = utils.get_related_mapping( left=all_models.CalendarEvent, right=all_models.CycleTaskGroupObjectTask) events = db.session.query(all_models.CalendarEvent).options( load_only( all_models.CalendarEvent.id, all_models.CalendarEvent.description, )).all() for event in events: if event.id not in event_mappings: continue self._generate_description_for_event( event, task_ids=event_mappings[event.id], )
def sync_cycle_tasks_events(self): """Generates Calendar Events descriptions.""" with benchmark("Sync of calendar events."): events = all_models.CalendarEvent.query.options( orm.joinedload("attendee").load_only("email", ), orm.joinedload("attendee").joinedload("profile").load_only( "send_calendar_events", ), load_only( all_models.CalendarEvent.id, all_models.CalendarEvent.external_event_id, all_models.CalendarEvent.title, all_models.CalendarEvent.description, all_models.CalendarEvent.attendee_id, all_models.CalendarEvent.due_date, all_models.CalendarEvent.last_synced_at, )).all() event_mappings = utils.get_related_mapping( left=all_models.CalendarEvent, right=all_models.CycleTaskGroupObjectTask) for event in events: if not event.needs_sync: continue try: if event.id not in event_mappings or not event_mappings[ event.id]: if event.is_synced: self._delete_event(event) db.session.delete(event) continue if not event.is_synced: self._create_event(event) continue self._update_event(event) except Exception as exp: # pylint: disable=broad-except logger.warn( "Sync of the event %d has failed " "with the following error %s.", event.id, exp.message) db.session.commit()
def _generate_events(self): """Generates Calendar Events.""" task_mappings = utils.get_related_mapping( left=all_models.CycleTaskGroupObjectTask, right=all_models.CalendarEvent) columns = all_models.CycleTaskGroupObjectTask.query.options( orm.joinedload("cycle").load_only("workflow_id", "is_current", "is_verification_needed"), orm.joinedload("cycle").joinedload("workflow").load_only( "unit", "recurrences", "next_cycle_start_date", ), orm.subqueryload("_access_control_list").joinedload( "ac_role").undefer_group("AccessControlRole_complete"), orm.subqueryload("_access_control_list").joinedload( "access_control_people").joinedload("person").undefer_group( "Person_complete"), load_only( all_models.CycleTaskGroupObjectTask.id, all_models.CycleTaskGroupObjectTask.end_date, all_models.CycleTaskGroupObjectTask.status, all_models.CycleTaskGroupObjectTask.title, all_models.CycleTaskGroupObjectTask.verified_date, ), ).order_by(all_models.CycleTaskGroupObjectTask.end_date) all_count = columns.count() handled = 0 for query_chunk in generate_query_chunks(columns, chunk_size=self.chunk_size, needs_ordering=False): handled += query_chunk.count() logger.info("Cycle task processed: %s/%s", handled, all_count) for task in query_chunk: events = task_mappings[ task.id] if task.id in task_mappings else set() self._generate_events_for_task(task, events_ids=events) db.session.flush()
def _generate_event_descriptions(self): """Generates CalendarEvents descriptions.""" event_mappings = utils.get_related_mapping( left=all_models.CalendarEvent, right=all_models.CycleTaskGroupObjectTask ) events = db.session.query(all_models.CalendarEvent).options( load_only( all_models.CalendarEvent.id, all_models.CalendarEvent.description, ) ) for query_chunk in generate_query_chunks( events, chunk_size=self.chunk_size ): for event in query_chunk: if event.id not in event_mappings: continue self._generate_description_for_event( event, task_ids=event_mappings[event.id], )