def delete(self, obj, fieldNames=[], force=False): '''Pass an xmlrpc call to the daemon when a video is deleted''' UID = IUUID(obj) log = logging.getLogger('collective.transcode.star') tt = getUtility(ITranscodeTool) fields = self._getFields(obj, fieldNames) if not self._hasFiles(obj, fields): return address = self._getDaemonAddress() if address is None: return (transcodeServer, daemonProfiles) = self._getDaemon(address) if transcodeServer is None or daemonProfiles is None: return secret = self.secret() for field in fields: info = self._getFieldInfo(obj, field) if info is None: continue fieldName = info['fieldName'] md5sum = info['md5sum'] fileType = info['fileType'] fileName = info['fileName'] filePath = obj.absolute_url() portal_url = getToolByName(obj, 'portal_url')() fileUrl = portal_url + '/@@serve_daemon' norm = queryUtility(IIDNormalizer) fileName = norm.normalize(fileName.decode('utf-8')) options = dict() payload = { 'path': filePath, 'url': fileUrl, 'type': fileType, # don't send fieldName if it's the primary field 'fieldName': fieldNames and fieldName or '', 'fileName': fileName, 'uid': UID, } # Encrypt and send the transcode request payload = {'key': b64encode(encrypt(str(payload), secret))} transcodeServer.delete(payload, options, portal_url) tt.__delitem__(UID) return
def delete(self, obj, fieldNames = [], force = False): '''Pass an xmlrpc call to the daemon when a video is deleted''' UID = IUUID(obj) log = logging.getLogger('collective.transcode.star') tt = getUtility(ITranscodeTool) fields = self._getFields(obj, fieldNames) if not self._hasFiles(obj, fields): return address = self._getDaemonAddress() if address is None: return (transcodeServer, daemonProfiles) = self._getDaemon(address) if transcodeServer is None or daemonProfiles is None: return secret = self.secret() for field in fields: info = self._getFieldInfo(obj, field) if info is None: continue fieldName = info['fieldName'] md5sum = info['md5sum'] fileType = info['fileType'] fileName = info['fileName'] filePath = obj.absolute_url() portal_url = getToolByName(obj,'portal_url')() fileUrl = portal_url + '/@@serve_daemon' norm = queryUtility(IIDNormalizer) fileName = norm.normalize(fileName.decode('utf-8')) options = dict() payload = { 'path' : filePath, 'url' : fileUrl, 'type' : fileType, # don't send fieldName if it's the primary field 'fieldName' : fieldNames and fieldName or '', 'fileName' : fileName, 'uid' : UID, } # Encrypt and send the transcode request payload = {'key':b64encode(encrypt(str(payload), secret))} transcodeServer.delete(payload, options, portal_url) tt.__delitem__(UID) return
from zope.component import queryUtility, getUtility from plone.i18n.normalizer.interfaces import IIDNormalizer from zope.app.container.btree import BTreeContainer from plone.app.async.interfaces import IAsyncService from collective.transcode.star.interfaces import ITranscodeTool, ITranscoded, ITranscodedEvent log = logging.getLogger('collective.transcode') def transcode_request(obj, fieldName, UID, payload, secret, address, profile, options, portal_url): "Encrypt and send the transcode request" try: transcodeServer = xmlrpclib.ServerProxy(address, allow_none=True) except Exception, e: log.error(u"Could not connect to transcode daemon %s: %s" % (address, e)) return payload = {'key':b64encode(encrypt(str(payload), secret))} jobId = transcodeServer.transcode(payload, profile, options, portal_url) tt = getUtility(ITranscodeTool) if not jobId or jobId.startswith('ERROR'): log.warn(u'Could not get jobId from daemon %s for profile %s and input %s. Result %s' % (address, profile, payload, jobId)) tt[UID][fieldName][profile]['status'] = jobId or 'failed' tt[UID][fieldName][profile]['jobId'] = jobId log.info(u"added profile %s for field %s and content type %s in transcode queue" % ( profile, fieldName, obj.absolute_url())) class TranscodeTool(BTreeContainer): implements(ITranscodeTool) def add(self, obj, fieldNames = [], force = False, profiles = []): """
SETTING_DAEMON_ADDRESS = 'collective.transcode.star.interfaces.ITranscodeSettings.daemon_address' SETTING_PROFILES = 'collective.transcode.star.interfaces.ITranscodeSettings.transcode_profiles' SETTING_SECRET = 'collective.transcode.star.interfaces.ITranscodeSettings.secret' SETTING_MIME_TYPES = 'collective.transcode.star.interfaces.ITranscodeSettings.mime_types' def transcode_request(obj, fieldName, UID, payload, secret, address, profile, options, portal_url): "Encrypt and send the transcode request" try: transcodeServer = xmlrpclib.ServerProxy(address, allow_none=True) except Exception, e: log.error(u"Could not connect to transcode daemon %s: %s" % (address, e)) return payload = {'key': b64encode(encrypt(str(payload), secret))} jobId = transcodeServer.transcode(payload, profile, options, portal_url) tt = getUtility(ITranscodeTool) if not jobId or jobId.startswith('ERROR'): log.warn(u'Could not get jobId from daemon %s for profile %s' u'and input %s. Result %s' % (address, profile, payload, jobId)) tt[UID][fieldName][profile]['status'] = jobId or 'failed' tt[UID][fieldName][profile]['jobId'] = jobId log.info(u"added profile %s for field %s and" u"content type %s in transcode queue" % (profile, fieldName, obj.absolute_url())) class TranscodeTool(BTreeContainer): def add(self, obj, fieldNames=[], force=False, profiles=[]):