Example #1
0
    def handle(self, *args, **options):
        if options['clear']:
            for e in Event.objects.all():
                e.delete()
        self._check_video_templates()
        attachments = {}
        try:
            wordpress_xml_dump = args[0]
            item_parser = etree.iterparse(wordpress_xml_dump, tag='item')
        except IndexError:
            raise CommandError('Please provide an XML dump.')
        except IOError:
            raise CommandError('The provided file does not exist or is not'
                               ' a valid Wordpress XML dump')
        try:
            self.default_thumb_path = args[1]
            self.default_thumb = open(self.default_thumb_path, 'rb')
        except IOError:
            raise CommandError('Please provide a valid default thumbnail.')

        for _, element in item_parser:
            fields = {
                'title': 'title',
                'status': 'wp:status',
                'start_time': 'pubDate',
                'description': 'content:encoded',
                'short_description': 'excerpt:encoded',
                'created': 'wp:post_date',
                'slug': 'wp:post_name',
                'type': 'wp:post_type',
                'attachment': 'wp:attachment_url',
                'post_id': 'wp:post_id'
            }
            item = self.extract_item(element, fields)
            if Event.objects.filter(slug=item['slug']).exists():
                self.stdout.write(
                    'Event %s already exists, skipping.\n' % item['slug']
                )
                continue

            if item['type'] == 'attachment':
                # The item is a thumbnail attachment; save for later
                attachments[item['post_id']] = item['attachment']
            elif item['type'] == 'post':
                # Create and initiate a new event
                event = Event()
                event.title = item['title']
                event.slug = item['slug']
                try:
                    event.start_time = datetime.datetime.strptime(
                        item['start_time'],
                        '%a, %d %b %Y %H:%M:%S +0000'
                    ).replace(tzinfo=utc)
                except ValueError:
                    event.start_time = datetime.datetime.strptime(
                        item['created'],
                        '%Y-%m-%d %H:%M:%S'
                    ).replace(tzinfo=utc)
                event.archive_time = (
                    event.start_time + datetime.timedelta(hours=1)
                )
                # Set status & public status from WP metadata
                event.status = Event.STATUS_INITIATED
                event.public = False
                if item['status'] == 'publish':
                    event.status = Event.STATUS_SCHEDULED
                    event.public = True
                elif item['status'] == 'private':
                    event.status = Event.STATUS_SCHEDULED
                elif item['status'] == 'trash':
                    event.status = Event.STATUS_REMOVED
                # Parse out the video from the event description
                event.description = 'n/a'
                if item['description']:
                    self.parse_description(event, item['description'])
                event.short_description = item['short_description'] or ''
                # Add categories and tags
                event.save()
                for category in element.findall('category'):
                    domain = category.attrib['domain']
                    text = category.text
                    if domain == 'category' and not event.category:
                        cat, _ = Category.objects.get_or_create(name=text)
                        event.category = cat
                    else:
                        tag = text.lower().strip()
                        tag_add, _ = Tag.objects.get_or_create(name=tag)
                        event.tags.add(tag_add)
                # Add thumbnail and save
                thumbnail_id = 0
                for meta in element.findall('wp:postmeta',
                                            namespaces=self.nsmap):
                    meta_key, meta_val = meta.getchildren()
                    if meta_key.text == '_thumbnail_id':
                        thumbnail_id = meta_val.text
                if thumbnail_id in attachments:
                    self.attach_thumbnail(event, attachments[thumbnail_id])
                else:
                    self.attach_thumbnail(event)
                    self.stdout.write(
                        'No thumb found for %s, used default.\n' % event.slug
                    )
                event.save()
                self.stdout.write('Saved event %s\n' % event.slug)
Example #2
0
    def handle(self, *args, **options):
        if options['clear']:
            for e in Event.objects.all():
                e.delete()
        self._check_video_templates()
        attachments = {}
        try:
            wordpress_xml_dump = args[0]
            item_parser = etree.iterparse(wordpress_xml_dump, tag='item')
        except IndexError:
            raise CommandError('Please provide an XML dump.')
        except IOError:
            raise CommandError('The provided file does not exist or is not'
                               ' a valid Wordpress XML dump')
        try:
            self.default_thumb_path = args[1]
            self.default_thumb = open(self.default_thumb_path, 'rb')
        except IOError:
            raise CommandError('Please provide a valid default thumbnail.')

        for _, element in item_parser:
            fields = {
                'title': 'title',
                'status': 'wp:status',
                'start_time': 'pubDate',
                'description': 'content:encoded',
                'short_description': 'excerpt:encoded',
                'created': 'wp:post_date',
                'slug': 'wp:post_name',
                'type': 'wp:post_type',
                'attachment': 'wp:attachment_url',
                'post_id': 'wp:post_id'
            }
            item = self.extract_item(element, fields)
            if Event.objects.filter(slug=item['slug']).exists():
                self.stdout.write('Event %s already exists, skipping.\n' %
                                  item['slug'])
                continue

            if item['type'] == 'attachment':
                # The item is a thumbnail attachment; save for later
                attachments[item['post_id']] = item['attachment']
            elif item['type'] == 'post':
                # Create and initiate a new event
                event = Event()
                event.title = item['title']
                event.slug = item['slug']
                try:
                    event.start_time = datetime.datetime.strptime(
                        item['start_time'],
                        '%a, %d %b %Y %H:%M:%S +0000').replace(tzinfo=utc)
                except ValueError:
                    event.start_time = datetime.datetime.strptime(
                        item['created'],
                        '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc)
                event.archive_time = (event.start_time +
                                      datetime.timedelta(hours=1))
                # Set status & public status from WP metadata
                event.status = Event.STATUS_INITIATED
                event.public = False
                if item['status'] == 'publish':
                    event.status = Event.STATUS_SCHEDULED
                    event.public = True
                elif item['status'] == 'private':
                    event.status = Event.STATUS_SCHEDULED
                elif item['status'] == 'trash':
                    event.status = Event.STATUS_REMOVED
                # Parse out the video from the event description
                event.description = 'n/a'
                if item['description']:
                    self.parse_description(event, item['description'])
                event.short_description = item['short_description'] or ''
                # Add thumbnail and save
                thumbnail_id = 0
                for meta in element.findall('wp:postmeta',
                                            namespaces=self.nsmap):
                    meta_key, meta_val = meta.getchildren()
                    if meta_key.text == '_thumbnail_id':
                        thumbnail_id = meta_val.text
                if thumbnail_id in attachments:
                    self.attach_thumbnail(event, attachments[thumbnail_id])
                else:
                    self.attach_thumbnail(event)
                    self.stdout.write(
                        'No thumb found for %s, used default.\n' % event.slug)
                event.save()
                self.stdout.write('Saved event %s\n' % event.slug)