示例#1
0
    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")
示例#2
0
    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")
示例#3
0
    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")
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
文件: test_views.py 项目: PyCon/pycon
    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)
示例#7
0
    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)
示例#8
0
文件: test_views.py 项目: PyCon/pycon
    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)
示例#9
0
文件: test_views.py 项目: PyCon/pycon
    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")
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
 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""
示例#13
0
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
示例#14
0
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
示例#15
0
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
示例#16
0
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
示例#17
0
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
示例#18
0
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
示例#19
0
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)
示例#20
0
 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)
示例#21
0
文件: kinds.py 项目: PyCon/pycon
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),
                )
            )
示例#22
0
    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")
示例#23
0
    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")
示例#24
0
文件: views.py 项目: PyCon/pycon
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)
示例#25
0
 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)
示例#26
0
    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)
示例#27
0
    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)
示例#28
0
文件: factories.py 项目: PyCon/pycon
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(),
            )
        )
示例#29
0
    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)
示例#30
0
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), ))
示例#31
0
    def get(self, request, format=None):
        conf = current_conference()
        conf_serializer = ConferenceSerializer(instance=conf)

        return Response(data=conf_serializer.data)
示例#32
0
def sponsor_packages():
    """Return all sponsorship packages for this conference."""
    conference = current_conference()
    return SponsorPackage.objects.filter(conference=conference)
示例#33
0
    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)
示例#34
0
def conference_context(request):

    return {
        "CONFERENCE": current_conference(),
        "ORGANIZERS": _organizers,
    }
示例#35
0
 def render(self, context):
     conference = current_conference()
     context[self.context_var] = SponsorLevel.objects.filter(conference=conference)
     return u""
示例#36
0
def sponsor_levels():
    """Return all sponsorship levels for this conference."""
    conference = current_conference()
    return SponsorLevel.objects.filter(conference=conference)
示例#37
0
def sponsor_packages():
    """Return all sponsorship packages for this conference."""
    conference = current_conference()
    return SponsorPackage.objects.filter(conference=conference)
示例#38
0
    def get(self, request, format=None):
        conf = current_conference()
        conf_serializer = ConferenceSerializer(instance=conf)

        return Response(data=conf_serializer.data)
示例#39
0
def sponsor_levels():
    """Return all sponsorship levels for this conference."""
    conference = current_conference()
    return SponsorLevel.objects.filter(conference=conference)