def save(self, force_insert=False, force_update=False, *args, **kwargs): # These are reset after save changed_fields = (set(self.get_dirty_fields.keys()) & set(EDITABLE_VIDDLER_FIELDS)) changed_values = dict([(k, v) for k, v in self.get_dirty_fields().items() if k in changed_fields]) if not self.slug: self.slug = slugify(self.title) upload_key_image = (self.key_image_custom and 'key_image_custom' in self.get_dirty_fields()) if not self.key_image_custom and self.status != "not ready": filename, size, imgfile = download_image(self.thumbnail_url) self.key_image_custom.save(filename, imgfile) self._generate_thumbnail() super(BaseViddlerVideo, self).save(*args, **kwargs) if upload_key_image and self.status != "not ready": viddler = get_viddler() viddler.videos.setThumbnail( self.viddler_id, thumbfile=self.key_image_custom.path) self._generate_thumbnail() if changed_fields and not force_update: set_params = {} for key, val in changed_values.items(): set_params[self.UPDATE_PARAM_MAP.get(key, key)] = val viddler = get_viddler() result = viddler.videos.setDetails(self.viddler_id, **set_params) make_model_from_api(result, self.__class__)
def download(request, videoid): """ Download a specific viddler video into the admin (if it isn't already) """ viddler = get_viddler() video_details = viddler.videos.getDetails(videoid) video = make_model_from_api(video_details) return HttpResponseRedirect(reverse('admin:viewmaster_viddlervideo_change', args=(video.id,)))
def delete_handler(sender, instance, *args, **kwargs): from viddler.settings import get_viddler viddler = get_viddler() try: viddler.videos.delete(instance.viddler_id) except viddler.ViddlerAPIException: pass
def progress(request): """ Returns the progress of a video upload """ if 'token' in request.GET: viddler = get_viddler() try: results = viddler.videos.uploadProgress(request.GET['token']) except viddler.ViddlerAPIException as e: results = {"status": 4, "percent": 0, "error": e.message} else: results = {"status": 4, "percent": 0, "error": "Upload token not found."} return HttpResponse(json.dumps(results), content_type="application/json")
def sync(request): """ Syncronize all viddler videos from viddler ?since=YYYY-MM-DD """ viddler = get_viddler() kwargs = {} if 'since' in request.GET: try: kwargs['min_upload_date'] = datetime.datetime.strptime(request.GET['since'], '%Y-%m-%d') except ValueError: pass results = viddler.videos.search_yourvideos(**kwargs) for item in results: make_model_from_api(item) return HttpResponseRedirect(reverse('admin:viewmaster_viddlervideo_changelist'))
def handle(self, *args, **options): from viddler.models import ViddlerVideo, make_model_from_api from viddler.settings import get_viddler viddler = get_viddler() viddler_kwargs = {'per_page': 100} try: if options['since']: viddler_kwargs['min_upload_date'] = options['since'] else: v = ViddlerVideo.objects.latest('upload_time') viddler_kwargs['min_upload_date'] = v.upload_time.strftime('%Y-%m-%d') except (ViddlerVideo.DoesNotExist, ValueError): pass results = viddler.videos.search_yourvideos(**viddler_kwargs) for item in results: self.stdout.write('Adding: %s' % item['title']) make_model_from_api(item)
def callback(request): """ Handle the Viddler Callback after uploading a video """ video_id = request.GET.get('videoid', '') if not video_id: error_id = request.GET.get('error', '') error = request.GET.get('error_description', '') if error_id or error: raise Exception("Viddler error %s: %s" % (error_id, error)) else: raise Exception("No video id returned from Viddler") viddler = get_viddler() video_details = viddler.videos.getDetails(video_id) video = make_model_from_api(video_details) for relation in DEFAULT_RELATIONS: video.relations.create( content_type=ContentType.objects.get_for_id(relation[0]), object_id=relation[1], relation_type=relation[2]) return HttpResponseRedirect(reverse('admin:viewmaster_viddlervideo_change', args=(video.id,)))
def save(self, force_insert=False, force_update=False, *args, **kwargs): """ If a related key image is set, we need to remove the existing key image and thumbnail. The super class will download the video from viddler if it doesn't exist so we will need to handle that as well. We will upload the related image to viddler, clear the custom key image and thumbnail and let the superclass update them from viddler. """ import os from viddler.settings import get_viddler # These are reset after save changed_fields = (set(self.get_dirty_fields().keys()) & set(EDITABLE_VIDDLER_FIELDS)) changed_values = dict( [(k, v) for k, v in self.get_dirty_fields().items() if k in changed_fields]) if not self.slug: self.slug = slugify(self.title) generate_thumbnail = False upload_key_image = False if KEY_IMAGE_MODEL: if (self.key_image_related and 'key_image_related' in self.get_dirty_fields()): viddler = get_viddler() viddler.videos.setThumbnail( self.viddler_id, thumbfile=getattr(self.key_image_related, KEY_IMAGE_FIELD).path) if hasattr(self.key_image_custom, "file"): os.remove(self.key_image_custom.path) self.key_image_custom = '' if hasattr(self.thumbnail, "file"): os.remove(self.thumbnail.path) self.thumbnail = '' generate_thumbnail = True elif (self.key_image_custom and 'key_image_custom' in self.get_dirty_fields()): upload_key_image = True generate_thumbnail = True elif not self.key_image_custom and self.status != "not ready": filename, size, imgfile = download_image(self.thumbnail_url) self.key_image_custom.save(filename, imgfile) generate_thumbnail = True elif (self.key_image_custom and 'key_image_custom' in self.get_dirty_fields()): upload_key_image = True generate_thumbnail = True models.Model.save(self, force_insert, force_update, *args, **kwargs) if upload_key_image and self.status != "not ready": viddler = get_viddler() viddler.videos.setThumbnail( self.viddler_id, thumbfile=self.key_image_custom.path) if generate_thumbnail: self._generate_thumbnail() if changed_fields and self.is_source and not force_update: set_params = {} for key, val in changed_values.items(): set_params[self.UPDATE_PARAM_MAP.get(key, key)] = val viddler = get_viddler() result = viddler.videos.setDetails(self.viddler_id, **set_params) if self.slug: result['slug'] = self.slug make_model_from_api(result, self.__class__)
def _embed_code(self, **kwargs): viddler = get_viddler() kwargs['video_id'] = self.viddler_id embed_code = viddler.videos.getEmbedCode(**kwargs) return embed_code
def synchronize(self): viddler = get_viddler() result = viddler.videos.getDetails(self.viddler_id) return make_model_from_api(result, self.__class__)