def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.user.is_staff = True self.user.save() self.url = reverse("sponsor_zip_logos") self.assertTrue( self.client.login(username='******', password='******')) # we need a sponsor Conference.objects.get_or_create(pk=settings.CONFERENCE_ID) conference = current_conference() self.sponsor_level = SponsorLevel.objects.create(conference=conference, name="Lead", cost=1, order=199) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, active=True, ) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") self.printlogo_benefit = Benefit.objects.get(name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.get(name="Advertisement", type="file")
def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.user.is_staff = True self.user.save() self.url = reverse("sponsor_zip_logos") self.assertTrue( self.client.login(username='******', password='******')) # we need a sponsor conference = current_conference() self.sponsor_level = SponsorLevel.objects.create(conference=conference, name="Lead", cost=1) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, active=True, ) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") # These names must be spelled exactly this way: self.weblogo_benefit = Benefit.objects.create(name="Web logo", type="weblogo") self.printlogo_benefit = Benefit.objects.create(name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.create( name="Advertisement", type="file")
def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.user.is_staff = True self.user.save() self.url = reverse("sponsor_zip_logos") self.assertTrue(self.client.login(username='******', password='******')) # we need a sponsor conference = current_conference() self.sponsor_level = SponsorLevel.objects.create( conference=conference, name="Lead", cost=1) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, active=True, ) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") # These names must be spelled exactly this way: self.weblogo_benefit = Benefit.objects.create(name="Web logo", type="weblogo") self.printlogo_benefit = Benefit.objects.create(name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.create(name="Advertisement", type="file")
def handle(self, *args, **options): if len(args) != 2: raise CommandError("The first argument must be a Schedule Type (ex. Talk)" \ " and the second argument a path/to/csv") else: section_name, path = args conf = current_conference() proposals = ProposalBase.objects.select_related("result").select_subclasses() # TODO: Pin start and end dates for the section? section, _ = Section.objects.get_or_create(name=section_name, conference=conf) schedule, _ = Schedule.objects.get_or_create(section=section) slot_kind, _ = SlotKind.objects.get_or_create(label=section_name.rstrip('s').lower(), schedule=schedule) with open(path, 'rb') as f: data = [x for x in csv.DictReader(f)] # build rooms self._build_rooms(schedule, data) # build_days self._build_days(schedule, data) self._build_lunches(schedule) self._build_breaks(schedule) # build Slot -> SlotRoom -> Presentation associations for row in data: name = '{0} {1}'.format(ROOM_KEY, row[ROOM_KEY]) room = Room.objects.get(schedule=schedule, name=name) date = datetime.strptime(row[DAY_KEY], "%m/%d/%y") day = Day.objects.get(schedule=schedule, date=date) start, end = self._get_start_end_times(row) slot = Slot.objects.create(kind=slot_kind, day=day, start=start, end=end) proposal = proposals.get(pk=row[PRESENTATION_ID_KEY]) slot.assign(proposal.presentation) SlotRoom.objects.create(slot=slot, room=room)
def check_one_kind(self, kind_slug, factory): section_slug = kind_slug + "s" speaker = SpeakerFactory(user=self.create_user()) section = Section.objects.get(conference=current_conference(), slug=section_slug) kind, __ = ProposalKind.objects.get_or_create(slug=kind_slug, section=section) proposal = factory( kind=kind, speaker=speaker, ) # Create a new user to be the reviewer, because nobody # can review their own proposals. reviewer = self.create_user(username="******", email="*****@*****.**") ct = ContentType.objects.get_for_model(Review) perm = Permission.objects.get(content_type=ct, codename="can_review_%s" % section_slug) reviewer.user_permissions.add(perm) perm = Permission.objects.get(content_type=ct, codename="can_manage_%s" % section_slug) reviewer.user_permissions.add(perm) self.login(username="******") url = reverse('review_section', args=(section_slug, )) data = {'status': PyConProposal.STATUS_REJECTED, 'pk': proposal.pk} rsp = self.client.post(url, data, follow=False) self.assertRedirects(rsp, url) model = get_proposal_model(kind_slug) assert model prop = model.objects.get(pk=proposal.pk) self.assertEqual(PyConProposal.STATUS_REJECTED, prop.overall_status)
def check_one_kind(self, kind_slug, factory): section_slug = kind_slug + "s" speaker = SpeakerFactory(user=self.create_user()) section = Section.objects.get(conference=current_conference(), slug=section_slug) kind, __ = ProposalKind.objects.get_or_create(slug=kind_slug, section=section) proposal = factory( kind=kind, speaker=speaker, ) # Create a new user to be the reviewer, because nobody # can review their own proposals. reviewer = self.create_user(username="******", email="*****@*****.**") ct = ContentType.objects.get_for_model(Review) perm = Permission.objects.get(content_type=ct, codename="can_review_%s" % section_slug) reviewer.user_permissions.add(perm) perm = Permission.objects.get(content_type=ct, codename="can_manage_%s" % section_slug) reviewer.user_permissions.add(perm) self.login(username="******") url = reverse('review_section', args=(section_slug,)) data = { 'status': PyConProposal.STATUS_REJECTED, 'pk': proposal.pk } rsp = self.client.post(url, data, follow=False) self.assertRedirects(rsp, url) model = get_proposal_model(kind_slug) assert model prop = model.objects.get(pk=proposal.pk) self.assertEqual(PyConProposal.STATUS_REJECTED, prop.overall_status)
def test_create_edusummit_proposal(self): SpeakerFactory(user=self.create_user()) self.login() section = Section.objects.get(conference=current_conference(), slug='edusummits') psection = ProposalSection.objects.get(section=section) if not psection.is_available(): psection.closed = False psection.start = now() - timedelta(days=3) psection.end = now() + timedelta(days=3) psection.save() url = reverse('proposal_submit_kind', args=['edusummit']) data = { 'category': PyConProposalCategoryFactory().pk, 'audience_level': PyConTalkProposal.AUDIENCE_LEVEL_NOVICE, 'description': 'Rad', 'title': 'Massively rad', } self.assertFalse(EduSummitTalkProposal.objects.exists()) rsp = self.client.post(url, data) self.assertRedirects(rsp, reverse('dashboard')) # There should now be one prop = EduSummitTalkProposal.objects.get() self.assertEqual(data['description'], prop.description) self.assertEqual(data['title'], prop.title)
def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.user.is_staff = True self.user.save() self.url = reverse("sponsor_zip_logos") self.assertTrue(self.client.login(username='******', password='******')) # we need a sponsor Conference.objects.get_or_create(pk=settings.CONFERENCE_ID) conference = current_conference() self.sponsor_level = SponsorLevel.objects.create( conference=conference, name="Lead", cost=1, order=199) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, active=True, ) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") self.printlogo_benefit = Benefit.objects.get( name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.get( name="Advertisement", type="file")
def setUp(self): self.url = reverse('program_export') Conference.objects.get_or_create(id=settings.CONFERENCE_ID) conference = current_conference() self.sponsor = SponsorFactory(active=True) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") # These names must be spelled exactly this way: self.weblogo_benefit = Benefit.objects.create(name="Web logo", type="weblogo") self.printlogo_benefit = Benefit.objects.create(name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.create( name="Advertisement", type="file") yesterday = now() - timedelta(hours=24) tomorrow = now() + timedelta(hours=24) for kind_name in ['Talk', 'Tutorial']: slug = kind_name.lower() section, __ = Section.objects.get_or_create( conference=conference, name__iexact=kind_name + "s", # Section names are plural defaults=dict(name=kind_name + "s", start_date=yesterday, end_date=tomorrow, slug=slug)) ProposalKind.objects.get_or_create(name__iexact=kind_name, defaults=dict(slug=slug, section=section)) Schedule.objects.get_or_create(section=section)
def test_file_org(self): # The zip file is organized into directories: # {print_logos,web_logos,advertisement}/<sponsor_level>/<sponsor_name>/<filename> # Add another sponsor at a different sponsor level conference = current_conference() self.sponsor_level2 = SponsorLevel.objects.create( conference=conference, name="Silly putty", cost=1) self.sponsor2 = Sponsor.objects.create( name="Big Mama", level=self.sponsor_level2, active=True, ) # try: # Create a temp dir for media files self.temp_dir = tempfile.mkdtemp() with override_settings(MEDIA_ROOT=self.temp_dir): # Give our sponsors some benefits self.make_temp_file("file1", 10) SponsorBenefit.objects.create(sponsor=self.sponsor, benefit=self.weblogo_benefit, upload="file1") # print logo benefit self.make_temp_file("file2", 20) SponsorBenefit.objects.create(sponsor=self.sponsor, benefit=self.printlogo_benefit, upload="file2") # Sponsor 2 self.make_temp_file("file3", 30) SponsorBenefit.objects.create(sponsor=self.sponsor2, benefit=self.weblogo_benefit, upload="file3") # print logo benefit self.make_temp_file("file4", 42) SponsorBenefit.objects.create(sponsor=self.sponsor2, benefit=self.printlogo_benefit, upload="file4") # ad benefit self.make_temp_file("file5", 55) SponsorBenefit.objects.create( sponsor=self.sponsor2, benefit=self.advertisement_benefit, upload="file5") rsp = self.client.get(self.url) expected = [ ('web_logos/lead/big_daddy/file1', 10), ('web_logos/silly_putty/big_mama/file3', 30), ('print_logos/lead/big_daddy/file2', 20), ('print_logos/silly_putty/big_mama/file4', 42), ('advertisement/silly_putty/big_mama/file5', 55), ] self.validate_response(rsp, expected) finally: if hasattr(self, 'temp_dir'): # Clean up any temp media files shutil.rmtree(self.temp_dir)
def render(self, context): conference = current_conference() if self.level: level = self.level.resolve(context) queryset = Sponsor.objects.filter(level__conference = conference, level__name__iexact = level, active = True).order_by("added") else: queryset = Sponsor.objects.filter(level__conference = conference, active = True).order_by("level__order", "added") context[self.context_var] = queryset return u""
def _sponsors(level=None): """Return all active sponsors for this conference. Optionally limited to a specific level. """ conference = current_conference() sponsors = Sponsor.objects.filter(level__conference=conference, active=True) if level: sponsors = sponsors.filter(level__name__iexact=level) sponsors = sponsors.order_by('level__order', 'added') return sponsors
def job_fair_participants(): """ Returns active sponsors and table number, grouped by level name, who will be participating in the Job Fair. """ conference = current_conference() sponsors = Sponsor.objects.filter(level__conference=conference, active=True) sponsors = sponsors.order_by('level__order', 'added') sponsors = [s for s in sponsors if s.job_fair_participant] grouped_sponsors = groupby(sponsors, attrgetter('level.name')) grouped_sponsors = [(name, list(sponsors)) for name, sponsors in grouped_sponsors] return grouped_sponsors
def job_sponsors(): """ Returns active sponsors, grouped by level name, who have the job listing benefit. """ conference = current_conference() sponsors = Sponsor.objects.filter(level__conference=conference, active=True) sponsors = sponsors.order_by('level__order', 'added') sponsors = [s for s in sponsors if s.joblisting_text] grouped_sponsors = groupby(sponsors, attrgetter('level.name')) grouped_sponsors = [(name, list(sponsors)) for name, sponsors in grouped_sponsors] return grouped_sponsors
def review_section(request, section_slug, assigned=False): """ :param request: :param section_slug: slug of the Section :param assigned: :return: """ if not request.user.has_perm("reviews.can_review_%s" % section_slug): return access_not_permitted(request) can_manage = False if request.user.has_perm("reviews.can_manage_%s" % section_slug): can_manage = True section = get_object_or_404(Section, slug=section_slug, conference=current_conference()) model = get_proposal_model_from_section_slug(section_slug) queryset = model.objects.all() if request.method == "POST" and can_manage: pk_string = request.POST.get('pk', request.POST.get('pks', '')) if pk_string != '': pk_list = [int(i) for i in pk_string.split(',')] for pk in pk_list: status = request.POST['status'] proposal = queryset.get(pk=pk) proposal.overall_status = status proposal.save() else: messages.error(request, _("Please select at least one application")) url_name = "review_section_assignments" if assigned else "review_section" return redirect( reverse(url_name, kwargs={'section_slug': section_slug})) if assigned: assignments = ReviewAssignment.objects.filter( user=request.user).values_list("proposal__id") queryset = queryset.filter(id__in=assignments) proposals = proposals_list(request, queryset) ctx = { "proposals": proposals, "section": section, "section_slug": section_slug, "can_manage": can_manage, "status_options": PyConProposal.STATUS_OPTIONS } return render(request, "reviews/review_list.html", ctx)
def test_session_detail(self): # really minimal test Conference.objects.get_or_create(id=settings.CONFERENCE_ID) section = Section.objects.create(conference=current_conference(), ) schedule = Schedule.objects.create(section=section, ) day = Day.objects.create( schedule=schedule, date=date.today(), ) session = Session.objects.create(day=day, ) url = reverse("schedule_session_detail", args=(session.pk, )) rsp = self.client.get(url) self.assertEqual(200, rsp.status_code)
def ensure_proposal_records(): """ This can be called (after Django is done initializing) to make sure all the expected records exist for the defined kinds, including Permissions, ProposalKinds, ProposalSections, and Sections. It's invoked from symposion.proposals.signals on a post_migrate signal, so it gets run on each deploy automatically. It can also be invoked manually with the management command "ensure_proposal_records". """ Conference.objects.get_or_create(pk=settings.CONFERENCE_ID) conference = current_conference() review_ct = ContentType.objects.get_for_model(Review) for kind_slug in get_kind_slugs(): section_slug = kind_slug + "s" section_name = get_section_name(kind_slug) section, created = Section.objects.get_or_create( conference=conference, slug=section_slug, defaults=dict( name=section_name ) ) kind, created = ProposalKind.objects.get_or_create( slug=kind_slug, section=section, defaults=dict( name=section_name ) ) ProposalSection.objects.get_or_create( section=section, defaults=dict( closed=True, published=False, ) ) for verb in ['review', 'manage']: Permission.objects.get_or_create( codename='can_%s_%s' % (verb, section_slug), content_type=review_ct, defaults=dict( name='Can %s %ss' % (verb, section.name), ) )
def setUp(self): # we need a sponsor conference = current_conference() self.sponsor_level = SponsorLevel.objects.create( conference=conference, name="Lead", cost=1) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, ) # Create our benefit types self.text_type = Benefit.objects.create(name="text", type="text") self.file_type = Benefit.objects.create(name="file", type="file") self.weblogo_type = Benefit.objects.create(name="log", type="weblogo") self.simple_type = Benefit.objects.create(name="simple", type="simple")
def setUp(self): # we need a sponsor conference = current_conference() self.sponsor_level = SponsorLevel.objects.create(conference=conference, name="Lead", cost=1) self.sponsor = Sponsor.objects.create( name="Big Daddy", level=self.sponsor_level, ) # Create our benefit types self.text_type = Benefit.objects.create(name="text", type="text") self.file_type = Benefit.objects.create(name="file", type="file") self.weblogo_type = Benefit.objects.create(name="log", type="weblogo") self.simple_type = Benefit.objects.create(name="simple", type="simple")
def review_section(request, section_slug, assigned=False): """ :param request: :param section_slug: slug of the Section :param assigned: :return: """ if not request.user.has_perm("reviews.can_review_%s" % section_slug): return access_not_permitted(request) can_manage = False if request.user.has_perm("reviews.can_manage_%s" % section_slug): can_manage = True section = get_object_or_404(Section, slug=section_slug, conference=current_conference()) model = get_proposal_model_from_section_slug(section_slug) queryset = model.objects.all() if request.method == "POST" and can_manage: pk_string = request.POST.get('pk', request.POST.get('pks', '')) if pk_string != '': pk_list = [int(i) for i in pk_string.split(',')] for pk in pk_list: status = request.POST['status'] proposal = queryset.get(pk=pk) proposal.overall_status = status proposal.save() else: messages.error(request, _("Please select at least one application")) url_name = "review_section_assignments" if assigned else "review_section" return redirect(reverse(url_name, kwargs={'section_slug': section_slug})) if assigned: assignments = ReviewAssignment.objects.filter(user=request.user).values_list("proposal__id") queryset = queryset.filter(id__in=assignments) proposals = proposals_list(request, queryset) ctx = { "proposals": proposals, "section": section, "section_slug": section_slug, "can_manage": can_manage, "status_options": PyConProposal.STATUS_OPTIONS } return render(request, "reviews/review_list.html", ctx)
def test_session_detail(self): # really minimal test Conference.objects.get_or_create(id=settings.CONFERENCE_ID) section = Section.objects.create( conference=current_conference(), ) schedule = Schedule.objects.create( section=section, ) day = Day.objects.create( schedule=schedule, date=date.today(), ) session = Session.objects.create( day=day, ) url = reverse("schedule_session_detail", args=(session.pk,)) rsp = self.client.get(url) self.assertEqual(200, rsp.status_code)
def setUp(self): self.url = reverse('program_export') Conference.objects.get_or_create(id=settings.CONFERENCE_ID) conference = current_conference() self.sponsor = SponsorFactory(active=True) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") # These names must be spelled exactly this way: self.weblogo_benefit = Benefit.objects.create( name="Web logo", type="weblogo") self.printlogo_benefit = Benefit.objects.create( name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.create( name="Advertisement", type="file") for slug in ['talks', 'tutorials']: section = Section.objects.get(conference=conference, slug=slug) Schedule.objects.get_or_create(section=section)
def setUp(self): self.url = reverse('program_export') Conference.objects.get_or_create(id=settings.CONFERENCE_ID) conference = current_conference() self.sponsor = SponsorFactory(active=True) # Create our benefits, of various types self.text_benefit = Benefit.objects.create(name="text", type="text") self.file_benefit = Benefit.objects.create(name="file", type="file") # These names must be spelled exactly this way: self.weblogo_benefit = Benefit.objects.create(name="Web logo", type="weblogo") self.printlogo_benefit = Benefit.objects.create(name="Print logo", type="file") self.advertisement_benefit = Benefit.objects.create( name="Advertisement", type="file") for slug in ['talks', 'tutorials']: section = Section.objects.get(conference=conference, slug=slug) Schedule.objects.get_or_create(section=section)
def init_kinds(): """ Make sure there are valid ProposalKinds and Sections for the current conference. """ conference = current_conference() for kind_slug in get_kind_slugs(): section_slug = kind_slug + "s" section, __ = Section.objects.get_or_create( slug=section_slug, conference=conference, defaults=dict( name=section_slug.capitalize(), ) ) ProposalKind.objects.get_or_create( slug=kind_slug, defaults=dict( section=section, name=kind_slug.capitalize(), ) )
def handle(self, *args, **options): if len(args) != 2: raise CommandError( "The first argument must be a Schedule Type (ex. Talk)" " and the second argument a path/to/csv") else: section_name, path = args conf = current_conference() proposals = ProposalBase.objects.select_related( "result").select_subclasses() # TODO: Pin start and end dates for the section? section, _ = Section.objects.get_or_create(name=section_name, conference=conf) schedule, _ = Schedule.objects.get_or_create(section=section) slot_kind, _ = SlotKind.objects.get_or_create( label=section_name.rstrip('s').lower(), schedule=schedule) with open(path, 'rb') as f: data = [x for x in csv.DictReader(f)] # build rooms self._build_rooms(schedule, data) # build_days self._build_days(schedule, data) self._build_lunches(schedule) self._build_breaks(schedule) # build Slot -> SlotRoom -> Presentation associations for row in data: name = '{0} {1}'.format(ROOM_KEY, row[ROOM_KEY]) room = Room.objects.get(schedule=schedule, name=name) date = datetime.strptime(row[DAY_KEY], "%m/%d/%y") day = Day.objects.get(schedule=schedule, date=date) start, end = self._get_start_end_times(row) slot = Slot.objects.create(kind=slot_kind, day=day, start=start, end=end) proposal = proposals.get(pk=row[PRESENTATION_ID_KEY]) slot.assign(proposal.presentation) SlotRoom.objects.create(slot=slot, room=room)
def ensure_proposal_records(): """ This can be called (after Django is done initializing) to make sure all the expected records exist for the defined kinds, including Permissions, ProposalKinds, ProposalSections, and Sections. It's invoked from symposion.proposals.signals on a post_migrate signal, so it gets run on each deploy automatically. It can also be invoked manually with the management command "ensure_proposal_records". """ Conference.objects.get_or_create(pk=settings.CONFERENCE_ID) conference = current_conference() review_ct = ContentType.objects.get_for_model(Review) for kind_slug in get_kind_slugs(): section_slug = kind_slug + "s" section_name = get_section_name(kind_slug) section, created = Section.objects.get_or_create( conference=conference, slug=section_slug, defaults=dict(name=section_name)) kind, created = ProposalKind.objects.get_or_create( slug=kind_slug, section=section, defaults=dict(name=section_name)) ProposalSection.objects.get_or_create(section=section, defaults=dict( closed=True, published=False, )) for verb in ['review', 'manage']: Permission.objects.get_or_create( codename='can_%s_%s' % (verb, section_slug), content_type=review_ct, defaults=dict(name='Can %s %ss' % (verb, section.name), ))
def get(self, request, format=None): conf = current_conference() conf_serializer = ConferenceSerializer(instance=conf) return Response(data=conf_serializer.data)
def sponsor_packages(): """Return all sponsorship packages for this conference.""" conference = current_conference() return SponsorPackage.objects.filter(conference=conference)
def test_file_org(self): # The zip file is organized into directories: # {print_logos,web_logos,advertisement}/<sponsor_level>/<sponsor_name>/<filename> # Add another sponsor at a different sponsor level conference = current_conference() self.sponsor_level2 = SponsorLevel.objects.create( conference=conference, name="Silly putty", cost=1) self.sponsor2 = Sponsor.objects.create( name="Big Mama", level=self.sponsor_level2, active=True, ) # try: # Create a temp dir for media files self.temp_dir = tempfile.mkdtemp() with override_settings(MEDIA_ROOT=self.temp_dir): # Give our sponsors some benefits self.make_temp_file("file1", 10) SponsorBenefit.objects.create( sponsor=self.sponsor, benefit=self.weblogo_benefit, upload="file1" ) # print logo benefit self.make_temp_file("file2", 20) SponsorBenefit.objects.create( sponsor=self.sponsor, benefit=self.printlogo_benefit, upload="file2" ) # Sponsor 2 self.make_temp_file("file3", 30) SponsorBenefit.objects.create( sponsor=self.sponsor2, benefit=self.weblogo_benefit, upload="file3" ) # print logo benefit self.make_temp_file("file4", 42) SponsorBenefit.objects.create( sponsor=self.sponsor2, benefit=self.printlogo_benefit, upload="file4" ) # ad benefit self.make_temp_file("file5", 55) SponsorBenefit.objects.create( sponsor=self.sponsor2, benefit=self.advertisement_benefit, upload="file5" ) rsp = self.client.get(self.url) expected = [ ('web_logos/lead/big_daddy/file1', 10), ('web_logos/silly_putty/big_mama/file3', 30), ('print_logos/lead/big_daddy/file2', 20), ('print_logos/silly_putty/big_mama/file4', 42), ('advertisement/silly_putty/big_mama/file5', 55), ] self.validate_response(rsp, expected) finally: if hasattr(self, 'temp_dir'): # Clean up any temp media files shutil.rmtree(self.temp_dir)
def conference_context(request): return { "CONFERENCE": current_conference(), "ORGANIZERS": _organizers, }
def render(self, context): conference = current_conference() context[self.context_var] = SponsorLevel.objects.filter(conference=conference) return u""
def sponsor_levels(): """Return all sponsorship levels for this conference.""" conference = current_conference() return SponsorLevel.objects.filter(conference=conference)