Ejemplo n.º 1
0
    def published(self, site):
        # Grab some variables, bailing if anything doesn't make sense
        publisher_run = self.course_run
        discovery_run = publisher_run and publisher_run.discovery_course_run
        discovery_course = discovery_run and discovery_run.course
        if not discovery_course:
            return

        now = datetime.datetime.now(pytz.UTC)

        # Publish new course
        discovery_run.announcement = now
        discovery_run.status = CourseRunStatus.Published
        discovery_run.save()

        # Now, find old course runs that are no longer active but still published.
        # These will be unpublished in favor of the new course.
        for run in discovery_course.course_runs.all():
            if run != discovery_run and run.status == CourseRunStatus.Published and run.end and run.end < now:
                CourseRunMarketingSitePublisher(site.partner).add_url_redirect(
                    discovery_run, run)
                run.status = CourseRunStatus.Unpublished
                run.save()

        # Notify course team
        if waffle.switch_is_active('enable_publisher_email_notifications'):
            emails.send_course_run_published_email(self.course_run, site)
Ejemplo n.º 2
0
    def handle(self, *args, **options):
        config = DrupalPublishUuidConfig.get_solo()

        # Publish course runs
        if config.course_run_ids:
            course_run_ids = config.course_run_ids.split(',')
            course_runs = CourseRun.objects.filter(key__in=course_run_ids)
            for course_run in course_runs:
                publisher = CourseRunMarketingSitePublisher(
                    course_run.course.partner)
                publisher.publish_obj(course_run, include_uuid=True)

        # Publish people
        if config.push_people:
            publisher = MarketingSitePeople()
            for person in Person.objects.all():
                logger.info('Updating person node %s [%s].', person.slug,
                            person.uuid)
                try:
                    publisher.update_person(person)
                except (PersonToMarketingException,
                        MarketingSiteAPIClientException):
                    logger.exception(
                        'An error occurred while updating person %s on the marketing site.',
                        person.full_name,
                    )
Ejemplo n.º 3
0
    def save(self, *args, **kwargs):
        suppress_publication = kwargs.pop('suppress_publication', False)
        is_publishable = (
            self.course.partner.has_marketing_site and
            waffle.switch_is_active('publish_course_runs_to_marketing_site')
            and
            # Pop to clean the kwargs for the base class save call below
            not suppress_publication)

        if is_publishable:
            publisher = CourseRunMarketingSitePublisher(self.course.partner)
            previous_obj = CourseRun.objects.get(
                id=self.id) if self.id else None

            if not self.slug:
                # If we are publishing this object to marketing site,
                # let's make sure slug is defined
                self.slug = slugify(self.title)

            with transaction.atomic():
                super(CourseRun, self).save(*args, **kwargs)
                publisher.publish_obj(self, previous_obj=previous_obj)
        else:
            logger.info('Course run [%s] is not publishable.', self.key)
            super(CourseRun, self).save(*args, **kwargs)
    def setUp(self):
        super().setUp()

        self.partner = PartnerFactory()
        self.publisher = CourseRunMarketingSitePublisher(self.partner)

        self.api_root = self.publisher.client.api_url
        self.username = self.publisher.client.username

        self.obj = CourseRunFactory()
Ejemplo n.º 5
0
    def save(self, *args, **kwargs):
        suppress_publication = kwargs.pop('suppress_publication', False)
        is_publishable = (
            self.course.partner.has_marketing_site and
            waffle.switch_is_active('publish_course_runs_to_marketing_site') and
            # Pop to clean the kwargs for the base class save call below
            not suppress_publication
        )

        if is_publishable:
            publisher = CourseRunMarketingSitePublisher(self.course.partner)
            previous_obj = CourseRun.objects.get(id=self.id) if self.id else None

            with transaction.atomic():
                super(CourseRun, self).save(*args, **kwargs)
                publisher.publish_obj(self, previous_obj=previous_obj)
        else:
            super(CourseRun, self).save(*args, **kwargs)
Ejemplo n.º 6
0
    def setUp(self):
        super(CourseRunStateTests, self).setUp()

        language_tag = LanguageTag(code='te-st', name='Test Language')
        language_tag.save()

        self.site = SiteFactory()
        self.partner = PartnerFactory(site=self.site)
        self.course_run.transcript_languages.add(language_tag)
        self.course_run.language = language_tag
        self.course_run.is_micromasters = True
        self.course_run.micromasters_name = 'test'
        self.course_run.lms_course_id = 'course-v1:edX+DemoX+Demo_Course'
        self.course_run.save()
        self.course.course_state.name = CourseStateChoices.Approved
        self.course.save()
        self.course_run.staff.add(PersonFactory())
        self.course_run_state.preview_accepted = False
        self.course_run_state.save()
        self.assertTrue(self.course_run_state.can_send_for_review())

        self.publisher = CourseRunMarketingSitePublisher(self.partner)
        self.api_root = self.publisher.client.api_url
        self.username = self.publisher.client.username