def _set_byline_string(self, byline_string): from demoscene.utils.nick_search import BylineSearch byline_search = BylineSearch(byline_string) if all(byline_search.author_nick_selections) and all( byline_search.affiliation_nick_selections): self.author_nicks = [ selection.id for selection in byline_search.author_nick_selections ] self.author_affiliation_nicks = [ selection.id for selection in byline_search.affiliation_nick_selections ] self.unparsed_byline = None self.save() else: self.unparsed_byline = byline_string self.author_nicks = [] self.author_affiliation_nicks = [] self.save()
def from_value(value): # value can be: # a Byline # a BylineSearch # None # an existing BylineLookup if not value: return BylineLookup(byline_search=BylineSearch('')) elif isinstance(value, BylineLookup): return value # BylineLookups are treated as immutable, so it's safe to return the initial instance elif isinstance(value, BylineSearch): return BylineLookup( byline_search=value, author_nick_selections=value.author_nick_selections, affiliation_nick_selections=value.affiliation_nick_selections) elif isinstance(value, Byline): # TODO: can we eliminate Byline here in favour of BylineSearch? byline_search = BylineSearch.from_byline(value) return BylineLookup( byline_search=byline_search, author_nick_selections=byline_search.author_nick_selections, affiliation_nick_selections=byline_search.affiliation_nick_selections) else: raise ValidationError("Don't know how to handle %s as a byline lookup" % repr(value))
def test_eq(self): bl = BylineLookup.from_value(BylineSearch('Gasman/Hooy-Program')) self.assertFalse(bl == 'fish')
def test_repr(self): bl = BylineLookup.from_value(BylineSearch('Gasman/Hooy-Program')) self.assertEqual( repr(bl), '<BylineLookup: [NickSelection: 1, Gasman], [NickSelection: 5, Hooy-Program]>' )
def byline_search(self): from demoscene.utils.nick_search import BylineSearch if self.unparsed_byline: return BylineSearch(self.unparsed_byline) else: return BylineSearch.from_byline(self.byline())