def get(self, year):
        df = DatafeedFMSAPI('v2.0')

        fmsapi_events, event_list_districts = df.getEventList(year)

        # All regular-season events can be inserted without any work involved.
        # We need to de-duplicate offseason events from the FRC Events API with a different code than the TBA event code
        fmsapi_events_offseason = [e for e in fmsapi_events if e.is_offseason]
        event_keys_to_put = set([e.key_name for e in fmsapi_events]) - set(
            [e.key_name for e in fmsapi_events_offseason])
        events_to_put = [
            e for e in fmsapi_events if e.key_name in event_keys_to_put
        ]

        matched_offseason_events, new_offseason_events = \
            OffseasonEventHelper.categorize_offseasons(int(year), fmsapi_events_offseason)

        # For all matched offseason events, make sure the FIRST code matches the TBA FIRST code
        for tba_event, first_event in matched_offseason_events:
            tba_event.first_code = first_event.event_short
            events_to_put.append(
                tba_event)  # Update TBA events - discard the FIRST event

        # For all new offseason events we can't automatically match, create suggestions
        SuggestionCreator.createDummyOffseasonSuggestions(new_offseason_events)

        events = EventManipulator.createOrUpdate(events_to_put) or []

        fmsapi_districts = df.getDistrictList(year)
        merged_districts = DistrictManipulator.mergeModels(
            fmsapi_districts, event_list_districts)
        if merged_districts:
            districts = DistrictManipulator.createOrUpdate(merged_districts)
        else:
            districts = []

        # Fetch event details for each event
        for event in events:
            taskqueue.add(queue_name='datafeed',
                          target='backend-tasks',
                          url='/backend-tasks/get/event_details/' +
                          event.key_name,
                          method='GET')

        template_values = {
            "events": events,
            "districts": districts,
        }

        if 'X-Appengine-Taskname' not in self.request.headers:  # Only write out if not in taskqueue
            path = os.path.join(
                os.path.dirname(__file__),
                '../templates/datafeeds/fms_event_list_get.html')
            self.response.out.write(template.render(path, template_values))
    def get(self, year):
        df = DatafeedFMSAPI('v2.0')
        first_events, _ = df.getSyncEnabledOffseasonEvents(year)
        linked_events, maybed_linked_events, new_events = \
            OffseasonEventHelper.categorize_offseasons(int(year), first_events)

        events_to_update = []
        events_to_put = []

        # for all events with a first_code linked, ensure official=True
        logging.info("Found {} already linked events".format(
            len(linked_events)))
        for tba, first in linked_events:
            if tba.first_code != first.event_short or not tba.official:
                tba.first_code = first.event_short
                tba.official = True
                events_to_put.append(tba)
            events_to_update.append(tba)

        # for all events that we can maybe link, also do that
        logging.info("Auto-linking {} probably events".format(
            len(maybed_linked_events)))
        for tba, first in maybed_linked_events:
            tba.first_code = first.event_short
            tba.official = True
            events_to_put.append(tba)
            events_to_update.append(tba)

        logging.info("Found {} events to put".format(len(events_to_put)))
        if events_to_put:
            EventManipulator.createOrUpdate(events_to_put)

        # Enqueue details updates for these events
        logging.info("Found {} events to update".format(len(events_to_update)))
        for event in events_to_update:
            taskqueue.add(queue_name='datafeed',
                          target='backend-tasks',
                          url='/backend-tasks/get/event_details/' +
                          event.key_name,
                          method='GET')

        # Event we don't have anything for... Create suggestions
        logging.info("Found {} new events to link".format(len(new_events)))
        SuggestionCreator.createDummyOffseasonSuggestions(new_events)
    def get(self, year):
        df = DatafeedFMSAPI('v2.0')
        first_events, _ = df.getSyncEnabledOffseasonEvents(year)
        linked_events, maybed_linked_events, new_events = \
            OffseasonEventHelper.categorize_offseasons(int(year), first_events)

        events_to_update = []
        events_to_put = []

        # for all events with a first_code linked, ensure official=True
        logging.info("Found {} already linked events".format(len(linked_events)))
        for tba, first in linked_events:
            if tba.first_code != first.event_short or not tba.official:
                tba.first_code = first.event_short
                tba.official = True
                events_to_put.append(tba)
            events_to_update.append(tba)

        # for all events that we can maybe link, also do that
        logging.info("Auto-linking {} probably events".format(len(maybed_linked_events)))
        for tba, first in maybed_linked_events:
            tba.first_code = first.event_short
            tba.official = True
            events_to_put.append(tba)
            events_to_update.append(tba)

        logging.info("Found {} events to put".format(len(events_to_put)))
        if events_to_put:
            EventManipulator.createOrUpdate(events_to_put)

        # Enqueue details updates for these events
        logging.info("Found {} events to update".format(len(events_to_update)))
        for event in events_to_update:
            taskqueue.add(
                queue_name='datafeed',
                target='backend-tasks',
                url='/backend-tasks/get/event_details/'+event.key_name,
                method='GET'
            )

        # Event we don't have anything for... Create suggestions
        logging.info("Found {} new events to link".format(len(new_events)))
        SuggestionCreator.createDummyOffseasonSuggestions(new_events)