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)
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)