Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
 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'))
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
 def test_neq(self):
     self.assertTrue(NickSelection(123, 'Gasman') != NickSelection(124, 'Gasman'))
     self.assertFalse(NickSelection(123, 'Raww Arse') != NickSelection(123, 'RA'))
Ejemplo n.º 7
0
 def test_repr(self):
     ns = NickSelection(123, 'Gasman')
     self.assertEqual(repr(ns), 'NickSelection: 123, Gasman')
Ejemplo n.º 8
0
 def test_str(self):
     ns = NickSelection(123, 'Gasman')
     self.assertEqual(str(ns), 'Gasman')