def test_parse(self): with open('test_data/2014casj_alliances.csv', 'r') as f: alliances = CSVAllianceSelectionsParser.parse(f.read()) self.assertEqual(alliances, [{'picks': ['frc971', 'frc254', 'frc1662'], 'declines': []}, {'picks': ['frc1678', 'frc368', 'frc4171'], 'declines': []}, {'picks': ['frc2035', 'frc192', 'frc4990'], 'declines': []}, {'picks': ['frc1323', 'frc846', 'frc2135'], 'declines': []}, {'picks': ['frc2144', 'frc1388', 'frc668'], 'declines': []}, {'picks': ['frc1280', 'frc604', 'frc100'], 'declines': []}, {'picks': ['frc114', 'frc852', 'frc841'], 'declines': []}, {'picks': ['frc2473', 'frc3256', 'frc1868'], 'declines': []}])
def post(self, event_key_id): self._require_admin() event = Event.get_by_id(event_key_id) alliance_selections_csv = self.request.get('alliance_selections_csv') alliance_selections = CSVAllianceSelectionsParser.parse( alliance_selections_csv) event_details = EventDetails(id=event_key_id, alliance_selections=alliance_selections) EventDetailsManipulator.createOrUpdate(event_details) self.redirect("/admin/event/" + event.key_name)
def post(self, event_key_id): self._require_admin() event = Event.get_by_id(event_key_id) alliance_selections_csv = self.request.get('alliance_selections_csv') alliance_selections = CSVAllianceSelectionsParser.parse(alliance_selections_csv) event_details = EventDetails( id=event_key_id, alliance_selections=alliance_selections ) EventDetailsManipulator.createOrUpdate(event_details) self.redirect("/admin/event/" + event.key_name)
def post(self, event_key_id): self._require_admin() event = Event.get_by_id(event_key_id) alliance_selections_csv = self.request.get('alliance_selections_csv') alliance_selections = CSVAllianceSelectionsParser.parse(alliance_selections_csv) if alliance_selections and event.alliance_selections != alliance_selections: event.alliance_selections_json = json.dumps(alliance_selections) event._alliance_selections = None event.dirty = True EventManipulator.createOrUpdate(event) self.redirect("/admin/event/" + event.key_name)
def get(self, event_key): if tba_config.CONFIG["env"] == "prod": # disable in prod for now logging.error("Tried to restore {} from CSV in prod! No can do.".format(event_key)) return event = Event.get_by_id(event_key) # alliances result = urlfetch.fetch(self.ALLIANCES_URL.format(event.year, event_key, event_key)) if result.status_code != 200: logging.warning('Unable to retreive url: ' + (self.ALLIANCES_URL.format(event.year, event_key, event_key))) else: data = result.content.replace('frc', '') alliance_selections = CSVAllianceSelectionsParser.parse(data) event_details = EventDetails( id=event_key, alliance_selections=alliance_selections ) EventDetailsManipulator.createOrUpdate(event_details) # awards result = urlfetch.fetch(self.AWARDS_URL.format(event.year, event_key, event_key)) if result.status_code != 200: logging.warning('Unable to retreive url: ' + (self.AWARDS_URL.format(event.year, event_key, event_key))) else: # convert into expected input format data = StringIO.StringIO() writer = csv.writer(data, delimiter=',') for row in csv.reader(StringIO.StringIO(result.content), delimiter=','): writer.writerow([event.year, event.event_short, row[1], row[2].replace('frc', ''), row[3]]) awards = [] for award in CSVAwardsParser.parse(data.getvalue()): awards.append(Award( id=Award.render_key_name(event.key_name, award['award_type_enum']), name_str=award['name_str'], award_type_enum=award['award_type_enum'], year=event.year, event=event.key, event_type_enum=event.event_type_enum, team_list=[ndb.Key(Team, 'frc{}'.format(team_number)) for team_number in award['team_number_list']], recipient_json_list=award['recipient_json_list'] )) AwardManipulator.createOrUpdate(awards) # matches result = urlfetch.fetch(self.MATCHES_URL.format(event.year, event_key, event_key)) if result.status_code != 200: logging.warning('Unable to retreive url: ' + (self.MATCHES_URL.format(event.year, event_key, event_key))) else: data = result.content.replace('frc', '').replace('{}_'.format(event_key), '') match_dicts, _ = OffseasonMatchesParser.parse(data) matches = [ Match( id=Match.renderKeyName( event.key.id(), match.get("comp_level", None), match.get("set_number", 0), match.get("match_number", 0)), event=event.key, year=event.year, set_number=match.get("set_number", 0), match_number=match.get("match_number", 0), comp_level=match.get("comp_level", None), team_key_names=match.get("team_key_names", None), alliances_json=match.get("alliances_json", None) ) for match in match_dicts] MatchManipulator.createOrUpdate(matches) # rankings result = urlfetch.fetch(self.RANKINGS_URL.format(event.year, event_key, event_key)) if result.status_code != 200: logging.warning('Unable to retreive url: ' + (self.RANKINGS_URL.format(event.year, event_key, event_key))) else: # convert into expected input format rankings = list(csv.reader(StringIO.StringIO(result.content), delimiter=',')) event_details = EventDetails( id=event_key, rankings=rankings ) EventDetailsManipulator.createOrUpdate(event_details) self.response.out.write("Done restoring {}!".format(event_key))