def handle_production(prod_data, competition): if prod_data.get('id'): production = Production.objects.get(id=prod_data['id']) else: production = Production( release_date=competition.shown_date, updated_at=datetime.datetime.now(), has_bonafide_edits=False) production.save() # assign an ID so that associations work # can only edit production details if production is non-stable (which is always true for # newly-created ones) if not production.is_stable_for_competitions(): if 'title' in prod_data: production.title = prod_data['title'] if 'platform_id' in prod_data: if prod_data['platform_id']: production.platforms = [Platform.objects.get(id=prod_data['platform_id'])] else: production.platforms = [] if 'production_type_id' in prod_data: if prod_data['production_type_id']: production.types = [ProductionType.objects.get(id=prod_data['production_type_id'])] else: production.types = [] if 'byline' in prod_data: try: production.author_nicks = [ NickSelection(author['id'], author['name']).commit() for author in prod_data['byline']['authors'] ] production.author_affiliation_nicks = [ NickSelection(affillation['id'], affillation['name']).commit() for affillation in prod_data['byline']['affiliations'] ] production.unparsed_byline = None except NickSelection.FailedToResolve: # failed to match up the passed nick IDs to valid nick records. # Keep the passed names, as an unparsed byline author_names = [author['name'] for author in prod_data['byline']['authors']] affiliation_names = [affiliation['name'] for affiliation in prod_data['byline']['affiliations']] byline_string = ' + '.join(author_names) if affiliation_names: byline_string += ' / ' + ' ^ '.join(affiliation_names) production.unparsed_byline = byline_string production.author_nicks = [] production.author_affiliation_nicks = [] production.updated_at = datetime.datetime.now() production.supertype = production.inferred_supertype production.save() return production
def value_from_datadict(self, data, files, name): nick_id = self.select_widget.value_from_datadict(data, files, name + '_id') nick_name = self.name_widget.value_from_datadict(data, files, name + '_name') if nick_id: return NickSelection(nick_id, nick_name) else: return None
def from_value(value, sceners_only=False, groups_only=False, prefer_members_of=None): # value can be: # a Nick # None # an existing NickLookup if not value: return NickLookup(sceners_only=sceners_only, groups_only=groups_only, prefer_members_of=prefer_members_of) elif isinstance(value, NickLookup): return NickLookup(search_term=value.search_term, autoaccept=value.autoaccept, nick_selection=value.nick_selection, sceners_only=sceners_only, groups_only=groups_only, prefer_members_of=prefer_members_of) elif isinstance(value, Nick): return NickLookup(search_term=value.name, nick_selection=NickSelection( value.id, value.name), sceners_only=sceners_only, groups_only=groups_only, prefer_members_of=prefer_members_of) else: # pragma: no cover raise Exception("Don't know how to handle %s as a nick lookup" % repr(value))
def test_eq(self): self.assertTrue( NickSelection('newscener', 'Gasman') == NickSelection( 'newscener', 'Gasman')) self.assertTrue( NickSelection('newgroup', 'Fairlight') == NickSelection( 'newgroup', 'Fairlight')) self.assertFalse( NickSelection(123, 'Gasman') == NickSelection( 'newscener', 'Gasman')) self.assertFalse( NickSelection('newscener', 'Equinox') == NickSelection( 'newgroup', 'Equinox'))
def clean(self, value): if not value: value = self.nick_search.selection elif isinstance(value, NickSelection): # check that it's a valid selection given the available choices if value.id == 'newscener' or value.id == 'newgroup': if value.name.lower() != self.nick_search.search_term.lower(): # invalid... value = self.nick_search.selection # ...so start a fresh match else: if int(value.id) not in [choice['id'] for choice in self.widget.choices]: # invalid... value = self.nick_search.selection # ...so start a fresh match elif isinstance(value, Nick): # convert to a NickSelection value = NickSelection(value.id, value.name) if isinstance(value, NickSelection) or value is None: return super(MatchedNickField, self).clean(value) else: raise Exception("Don't know how to clean %s" % repr(value))
def test_neq(self): self.assertTrue(NickSelection(123, 'Gasman') != NickSelection(124, 'Gasman')) self.assertFalse(NickSelection(123, 'Raww Arse') != NickSelection(123, 'RA'))
def test_repr(self): ns = NickSelection(123, 'Gasman') self.assertEqual(repr(ns), 'NickSelection: 123, Gasman')
def test_str(self): ns = NickSelection(123, 'Gasman') self.assertEqual(str(ns), 'Gasman')