示例#1
0
 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],
         )
示例#6
0
 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()
示例#7
0
 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],
        )