def kaltura_session_loader_base(kaltura_id, app, session, return_status=False): # Refresh Kaltura Session If not print "Current in session" + repr(session) if "ksessionkey" in session and session['kaltura_id'] == kaltura_id: print session.keys() print "I already have session" return create_session(kaltura_id, session["ksessionkey"]) else: # if True: try: session['kaltura_id'] = kaltura_id kaltura_count = int(os.environ.get("KALTURA_INSTANCES", "1")) if kaltura_count >= 1: settings = properties.load_kaltura_settings().get(kaltura_id) session["ksessionkey"] = get_new_session_key(settings) else: settings = properties.load_kaltura_settings() session["ksessionkey"] = get_new_session_key(settings) return create_session(kaltura_id, session["ksessionkey"]) except Exception as inst: inst = Exception # Error in Initiating session against Kaltura Server Session app.logger.warn(repr(inst)) type, value, traceback = sys.exc_info() app.logger.warn(type) app.logger.warn(value) app.logger.warn(traceback) return "Unexpected error:" + "<p>" + repr(sys.exc_info()) + \ "</p>" if return_status else False
def add_mobile_flavor_to_kts(): g.msgs = [] kaltura_id, entry_id = parse_ids() settings = properties.load_kaltura_settings().get(kaltura_id) if settings['MOBILE_PLAYER_FLAVOR']: g.msgs.append('Flavor already configured.') return simplejson.dumps({'success': True, 'messages': g.msgs}) client = kaltura_session_loader(kaltura_id) flavor_id = myKalturaObject.add_kts_mobile_flavor(client, kaltura_id) # flavor_id = "123" g.msgs.append("Added flavor to kaltura") myKalturaObject.add_flavor_to_default_conversion_profile(client, flavor_id, kaltura_id) g.msgs.append("Added flavor to default conversion profile") proplist = properties.kaltura_properties_list values = [settings[item] for item in proplist if not item == 'KALTURA_CONFIG_ID'] values[8] = flavor_id resp = simplejson.loads(properties.update_kaltura(kaltura_id, values)) if resp['success']: g.msgs.append('Set flavor id as mobile player flavor in local ' 'configurations for kaltura id %s' % kaltura_id) else: g.msgs.append('Failed to assign flavor id in local configuration.') return simplejson.dumps({ "flavor_id": flavor_id, "success": True, "messages": g.msgs })
def get_thumb(): kaltura_id, entry_id = parse_ids() settings = properties.load_kaltura_settings().get(kaltura_id) return render_template("thumbframe.html", partner_id=settings['PARTNER_ID'], entry_id=entry_id, kaltura_local=settings['KALTURA_PATH'])
def get_kaltura_thumbnail_player(): try: kaltura_id, entry_id = parseIds(request.args, request.form) settings = properties.load_kaltura_settings().get(kaltura_id) cache_timestamp = int(time.time()) success_callback = request.args.get('successCallback', None) success_callback_params = request.args.get('successCallbackParams', None) msgs = [] callback = request.args.get('callback', None) callback = callback \ and callback or \ "/service/update_thumbnail_from_player?kaltura_id=" + kaltura_id if entry_id is None: msgs.append("Entry Id error") return simplejson.dumps({'success': False, 'messages': msgs}) # kaltura_session_loader(session) #kclient = session.get("kclient", None) return render_template('thumbnail_player.html', kaltura_local=settings['KALTURA_PATH'], partner_id=settings['PARTNER_ID'], player_id=settings['THUMBNAIL_PLAYER_ID'], entry_id=entry_id, cache_timestamp=cache_timestamp, callback=callback, success_callback=success_callback, success_callback_params=success_callback_params, parent_host=request.args.get('parent_host', None)) except: return simplejson.dumps({'success': False, 'messages': repr(sys.exc_info())})
def get_kaltura_thumbnail_player(): kaltura_id, entry_id = parse_ids() settings = properties.load_kaltura_settings().get(kaltura_id) cache_timestamp = int(time.time()) success_callback = request.args.get('successCallback', None) success_callback_params = request.args.get('successCallbackParams', None) g.msgs = [] callback = request.args.get('callback', None) callback = callback \ and callback or \ "/service/update_thumbnail_from_player?kaltura_id=" \ + kaltura_id if entry_id is None: g.msgs.append("Entry Id error") return simplejson.dumps({'success': False, 'messages': g.msgs}) # kaltura_session_loader(session) # kclient = session.get("kclient", None) return render_template('thumbnail_player.html', kaltura_local=settings['KALTURA_PATH'], partner_id=settings['PARTNER_ID'], player_id=settings['THUMBNAIL_PLAYER_ID'], entry_id=entry_id, cache_timestamp=cache_timestamp, callback=callback, success_callback=success_callback, success_callback_params=success_callback_params, parent_host=request.args.get('parent_host', None))
def view_configs(): props = properties.load_kaltura_settings() columns = ['id'] + props[props.keys()[0]].keys() data = [ [key] + props[key].values() for key in sorted(props.keys()) ] return render_template('kaltura_configs.html', columns = columns, data = data)
def view_configs(): props = properties.load_kaltura_settings() columns = ['id'] + list(props[list(props.keys())[0]].keys()) data = [[key] + list(props[key].values()) for key in sorted(list(props.keys()))] return render_template('kaltura_configs.html', columns=columns, data=data)
def add_kts_mobile_flavor(client, kaltura_id): payload = kts_mobile_flavor_payload.copy() payload['ks'] = client.getKs() settings = properties.load_kaltura_settings().get(kaltura_id) url = "%s/api_v3/" % settings['SERVICE_URL'] data = urlencode(payload) req = urllib2.Request(url, data) response = urllib2.urlopen(req).read() contentxml = ET.fromstring(response) flavor_id = contentxml.find('./result/id').text return flavor_id
def get_thumb(): try: kaltura_id, entry_id = parseIds(request.args, request.form) settings = properties.load_kaltura_settings().get(kaltura_id) return render_template("thumbframe.html", partner_id=settings['PARTNER_ID'], entry_id=entry_id, kaltura_local=settings['KALTURA_PATH']) except: return simplejson.dumps({'success': False, 'messages': repr(sys.exc_info())})
def get_kaltura_mobileplayer_url(): kaltura_id, entry_id = parseIds(request.args, request.form) cache_timestamp = int(time.time()) # kaltura_session_loader(session) #kclient = session.get("kclient", None) settings = properties.load_kaltura_settings().get(kaltura_id) return render_template('kaltura_mobileplayer.html', kaltura_local=settings['KALTURA_PATH'], partner_id=settings['PARTNER_ID'], player_id=settings['PLAYER_ID'], entry_id=entry_id, cache_timestamp=cache_timestamp)
def get_kaltura_player(): kaltura_id, entry_id = parse_ids() settings = properties.load_kaltura_settings().get(kaltura_id) cache_timestamp = int(time.time()) # kaltura_session_loader(session) # kclient = session.get("kclient", None) return render_template('kaltura_player.html', kaltura_local=settings['KALTURA_PATH'], partner_id=settings['PARTNER_ID'], player_id=settings['PLAYER_ID'], entry_id=entry_id, cache_timestamp=cache_timestamp)
def create_session(kaltura_id, ks=None): settings = properties.load_kaltura_settings().get(kaltura_id) if not settings: raise Exception("Kaltura ID %s Settings %s" % (kaltura_id, settings)) client = KalturaClient(GetConfig(settings)) if not settings: raise Exception("Kaltura ID %s not in session %s" % (kaltura_id, repr(settings))) if not ks: ks = get_new_session_key(settings) client.setKs(ks) return client
def create_session(kaltura_id, ks=None): settings = properties.load_kaltura_settings().get(kaltura_id) if not settings: raise Exception("Kaltura ID %s Settings %s" % (kaltura_id, settings)) client = KalturaClient(GetConfig(settings)) if not settings: raise Exception("Kaltura ID %s not in session %s" % ( kaltura_id, repr(settings))) if not ks: ks = get_new_session_key(settings) client.setKs(ks) return client
def get_thumb_url(): ''' you might want to remove the error checking from here later. (sends a GET for the image to check for error :D could also just attempt a get_media request. UPDATE: REMOVED THE ERROR CHECKING.) services should just use get_media and parse the json returned That json contains thumbnail url as well. ''' # if True: try: # width = request.args.get('width', None) # height = request.args.get('height', None) kaltura_id, entry_id = parseIds(request.args, request.form) # settings = properties.load_kaltura_settings().get(kaltura_id) # if width and height: # #response = urllib2.urlopen("http://" + settings['KALTURA_PATH']\ # # + "/p/" + settings['PARTNER_ID'] + "/thumbnail/entry_id/" +\ # # entry_id + "/width/" + width + "/height/" + height + "/") # return simplejson.dumps({ # 'success': True, # 'imageUrl': "http://" + # settings['KALTURA_PATH'] + # "/p/" + settings['PARTNER_ID'] + # "/thumbnail/entry_id/" + # entry_id + "/width/" + # width + "/height/" + height + "/"}) client = kaltura_session_loader(kaltura_id) default_thumb = thumbnail_get_default(client, entry_id) if not default_thumb is None: default_thumb['imageUrl'] = default_thumb['url'] default_thumb['success'] = True return simplejson.dumps(default_thumb) else: settings = properties.load_kaltura_settings().get(kaltura_id) return simplejson.dumps({ 'success': True, 'imageUrl': "http://" + settings['KALTURA_PATH'] + "/p/" + settings['PARTNER_ID'] + "/thumbnail/entry_id/" + entry_id + "/%s" % int(time.time())}) # else: # #response = urllib2.urlopen("http://" + settings['KALTURA_PATH']\ # # + "/p/" + settings['PARTNER_ID'] + "/thumbnail/entry_id/" +\ # # entry_id + "/") # return simplejson.dumps({ # 'success': True, 'imageUrl': "http://" + # settings['KALTURA_PATH'] + # "/p/" + settings['PARTNER_ID'] # + "/thumbnail/entry_id/" + entry_id + "/"}) except: return simplejson.dumps({'success': False, 'messages': repr(sys.exc_info())})
def get_kaltura_mobileplayer_url(): kaltura_id, entry_id = parse_ids() cache_timestamp = int(time.time()) # kaltura_session_loader(session) # kclient = session.get("kclient", None) settings = properties.load_kaltura_settings().get(kaltura_id) if not settings['MOBILE_PLAYER_FLAVOR']: return simplejson.dumps({"success": False, "messages": ['Flavor ID not configured!']}) return render_template('kaltura_mobileplayer.html', kaltura_local=settings['KALTURA_PATH'], partner_id=settings['PARTNER_ID'], player_id=settings['PLAYER_ID'], entry_id=entry_id, flavor_id=settings['MOBILE_PLAYER_FLAVOR'], cache_timestamp=cache_timestamp)
def add_flavor_to_default_conversion_profile(client, flavor_id, kaltura_id): def_cp = client.conversionProfile.getDefault() settings = properties.load_kaltura_settings().get(kaltura_id) cp_id = def_cp.id cp_flavorParamsIds = def_cp.flavorParamsIds + u',{}'.format(flavor_id) url = "{}/api_v3/?service=conversionProfile&action=update".format( settings['SERVICE_URL']) payload = {} payload['ks'] = client.getKs() payload['id'] = cp_id payload['conversionProfile:flavorParamsIds'] = cp_flavorParamsIds data = urlencode(payload) req = urllib2.Request(url, data) response = urllib2.urlopen(req).read() if "<error>" in response: raise Exception(response)
def get_excel(): # if True: try: kaltura_id, entry_id = parseIds(request.args, request.form) fields = request.args.get('fields', None) if fields: fields = [item.lower() for item in fields.split(',') if item.lower() in DEFAULT_SEARCH_FIELD_LIST] else: fields = DEFAULT_SEARCH_FIELD_LIST filename = request.args.get('filename', None) # if i don't set pagesize, kaltura uses 30 as default. # max is 500 btw. pagesize = int(request.args.get('pagesize', 500)) types = request.args.get('types','video,audio').split(',') skip_types = [each for each in ['video','audio','image'] if each not in types] skip_vals = {'media_type':[each.upper() for each in skip_types]} if not filename: #raise Exception('filename is required') settings = properties.load_kaltura_settings().get(kaltura_id) filename = str(kaltura_id) + settings['KALTURA_NAME'] filename = secure_filename(filename) client = kaltura_session_loader(kaltura_id) totaling_success, total = count(client) workbook, filepath = create_workbook(filename) worksheet = get_new_worksheet(workbook) i = total / pagesize + (1 if total % pagesize else 0) skipped = 0 for num in xrange(i): data = searchVideos( client, kaltura_id, True, int(pagesize), num + 1) write_result = write_to_worksheet(worksheet, data, fields, int(pagesize) * num - skipped, skip_vals) skipped += write_result['skipped'] close_workbook(workbook) return send_file(filepath, as_attachment=True, attachment_filename=os.path.basename(filepath)) except Exception as e: return simplejson.dumps({ "success": False, "errorValue": repr(sys.exc_info()), "exception": str(e)})
def get_excel(): kaltura_id, entry_id = parse_ids() fields = request.args.get('fields', None) if fields: fields = [item.lower() for item in fields.split(',') if item.lower() in myKalturaObject.DEFAULT_SEARCH_FIELD_LIST] else: fields = myKalturaObject.DEFAULT_SEARCH_FIELD_LIST filename = request.args.get('filename', None) # if i don't set pagesize, kaltura uses 30 as default. # max is 500 btw. pagesize = int(request.args.get('pagesize', 500)) types = request.args.get('types', 'video,audio').split(',') skip_types = [each for each in ['video', 'audio', 'image'] if each not in types] skip_vals = {'media_type': [each.upper() for each in skip_types]} if not filename: # raise Exception('filename is required') settings = properties.load_kaltura_settings().get(kaltura_id) filename = str(kaltura_id) + settings['KALTURA_NAME'] filename = secure_filename(filename) client = kaltura_session_loader(kaltura_id) totaling_success, total = myKalturaObject.count(client) workbook, filepath = create_workbook(filename) worksheet = get_new_worksheet(workbook) i = total / pagesize + (1 if total % pagesize else 0) skipped = 0 for num in utils.rangegen(i): data = myKalturaObject.searchVideos( client, kaltura_id, True, int(pagesize), num + 1) write_result = write_to_worksheet(worksheet, data, fields, int(pagesize) * num - skipped, skip_vals) skipped += write_result['skipped'] close_workbook(workbook) return send_file(filepath, as_attachment=True, attachment_filename=os.path.basename(filepath))
def get_thumb_url(): """ you might want to remove the error checking from here later. (sends a GET for the image to check for error :D could also just attempt a get_media request. UPDATE: REMOVED THE ERROR CHECKING.) services should just use get_media and parse the json returned That json contains thumbnail url as well. """ # width = request.args.get('width', None) # height = request.args.get('height', None) kaltura_id, entry_id = parse_ids() # settings = properties.load_kaltura_settings().get(kaltura_id) # if width and height: # #response = urllib2.urlopen("http://" + settings['KALTURA_PATH']\ # # + "/p/" + settings['PARTNER_ID'] + "/thumbnail/entry_id/" +\ # # entry_id + "/width/" + width + "/height/" + height + "/") # return simplejson.dumps({ # 'success': True, # 'imageUrl': "http://" + # settings['KALTURA_PATH'] + # "/p/" + settings['PARTNER_ID'] + # "/thumbnail/entry_id/" + # entry_id + "/width/" + # width + "/height/" + height + "/"}) client = kaltura_session_loader(kaltura_id) default_thumb = myKalturaObject.thumbnail_get_default(client, entry_id) if not default_thumb is None: default_thumb['imageUrl'] = default_thumb['url'] default_thumb['success'] = True return simplejson.dumps(default_thumb) else: settings = properties.load_kaltura_settings().get(kaltura_id) return simplejson.dumps({ 'success': True, 'imageUrl': "http://" + settings['KALTURA_PATH'] + "/p/" + settings['PARTNER_ID'] + "/thumbnail/entry_id/" + entry_id + "/%s" % int(time.time())})
def kaltura_session_loader_base(kaltura_id, session): # Refresh Kaltura Session If not print ("Current in session" + repr(session)) kkey = 'kaltura-{}'.format(kaltura_id) if kkey in session and 'ksusages' in session[kkey] \ and 'ksessionkey' in session[kkey] \ and 'kstime' in session[kkey] and session[kkey]['ksusages'] < 5 and \ (time.time() - session[kkey]['kstime']) < myKalturaObject.KS_EXPIRY: print ("I already have session. kid: {} ks: {} usages: {}" . format( kaltura_id, session[kkey]['ksessionkey'], session[kkey]['ksusages'])) session[kkey]['ksusages'] += 1 return myKalturaObject.create_session(kaltura_id, session[kkey]["ksessionkey"]) else: session[kkey] = {} settings = properties.load_kaltura_settings().get(kaltura_id) session[kkey]["ksessionkey"] = myKalturaObject.get_new_session_key( settings) session[kkey]["ksusages"] = 0 session[kkey]["kstime"] = time.time() return myKalturaObject.create_session(kaltura_id, session[kkey]["ksessionkey"])
def view_configs_prettyjson(): prettified = simplejson.dumps(properties.load_kaltura_settings(), sort_keys=True, indent=4 * ' ') prettified = '<html><body><pre>' + prettified + '</pre></body></html>' return prettified
KalturaEntryStatus, KalturaThumbParams, KalturaNullableBoolean # to handle some particular kaltura exceptions: from KalturaClientBase import KalturaException import properties from utils import convert_file_to_unicode, addFileLogger if current_app: logger = current_app.logger else: logger = logging.getLogger('myKalturaObject') addFileLogger(logger, "myKalturaObject.log", 2) SETTINGS = {} properties.load_kaltura_settings(SETTINGS) KALTURA_REQUEST_TIMEOUT = 60 KS_EXPIRY = 600 DEFAULT_SEARCH_FIELD_LIST = [ 'id', 'name', 'status', 'description', 'tags', 'url', 'thumbnail_url', 'media_type', 'plays', 'views',
def update_config(): kaltura_id = request.args.get('KALTURA_CONFIG_ID') settings = properties.load_kaltura_settings().get(kaltura_id) return render_template('kaltura_update_config.html', settings=settings, kaltura_id=kaltura_id)
def view_configs_getjson(): return simplejson.dumps(properties.load_kaltura_settings())
def get_entry(media_id, kaltura_id, client=None, width=120, height=120): settings = properties.load_kaltura_settings().get(kaltura_id) error = False error_message = None entry = None try: entry = client.media.get(media_id) except Exception as inst: error_message = str(inst) error = True entryData = {} if error: entryData['success'] = False entryData['message'] = error_message else: entryData['success'] = True typelist = { KalturaMediaType.VIDEO: 'VIDEO', KalturaMediaType.IMAGE: 'IMAGE', KalturaMediaType.AUDIO: 'AUDIO', KalturaMediaType.LIVE_STREAM_FLASH: 'LIVE_STREAM_FLASH', KalturaMediaType.LIVE_STREAM_WINDOWS_MEDIA: 'LIVE_STREAM_WINDOWS_MEDIA', KalturaMediaType.LIVE_STREAM_REAL_MEDIA: 'LIVE_STREAM_REAL_MEDIA', KalturaMediaType.LIVE_STREAM_QUICKTIME: 'LIVE_STREAM_QUICKTIME' } entryData['media_type'] = typelist[entry.getMediaType().getValue()] # Urls/Accessors entryData['url'] = entry.getDataUrl() entryData['thumbnail_url_old'] = entry.getThumbnailUrl() url = "%s/api_v3/?service=thumbasset&action=list" % settings[ 'SERVICE_URL'] data = urlencode({"filter:entryIdEqual": media_id, "action": "list"}) req = urllib2.Request(url, data) content = urllib2.urlopen(req).read() entryData['ks'] = client.getKs() contentxml = ET.fromstring(content) thumb_id = '' for item in contentxml.findall('./result/objects/item'): tags = item.find('tags').text if tags and 'default_thumb' in tags: thumb_id = item.find('id').text thumbnail_url = "%s/p/%s/thumbnail/entry_id/%s" % ( settings['SERVICE_URL'], settings['PARTNER_ID'], media_id) entryData['thumbnail_url'] = thumbnail_url + \ "/width/%s/height/%s?%s" % ( width, height, int(time.time())) entryData['download_url'] = entry.getDownloadUrl() entryData['thumb_id'] = thumb_id # ViewData entryData['plays'] = entry.getPlays() entryData['views'] = entry.getViews() entryData['rank'] = (entry.getRank(), entry.getTotalRank()) # Video Properties entryData['width'] = entry.getWidth() entryData['height'] = entry.getHeight() entryData['duration'] = entry.getDuration() entryData['created'] = entry.getCreatedAt() entryData['updated'] = entry.getUpdatedAt() # Video Data entryData['name'] = entry.getName() entryData['description'] = entry.getDescription() entryData['tags'] = entry.getTags() # Search Text entryData['searchtext'] = entry.getSearchText() # Control entryData['startDate'] = entry.getStartDate() entryData['endDate'] = entry.getEndDate() # entryData['status'] = entry.getStatus() return entryData
from KalturaCoreClient import KalturaThumbAsset, KalturaUrlResource, \ KalturaEntryStatus, KalturaThumbParams, KalturaNullableBoolean # to handle some particular kaltura exceptions: from KalturaClientBase import KalturaException import properties from utils import convert_file_to_unicode, addFileLogger if current_app: logger = current_app.logger else: logger = logging.getLogger('myKalturaObject') addFileLogger(logger, "myKalturaObject.log", 2) SETTINGS = {} properties.load_kaltura_settings(SETTINGS) KALTURA_REQUEST_TIMEOUT = 60 KS_EXPIRY = 600 DEFAULT_SEARCH_FIELD_LIST = [ 'id', 'name', 'status', 'description', 'tags', 'url', 'thumbnail_url', 'media_type', 'plays', 'views', 'rank', 'width', 'height', 'duration', 'views', 'updated', 'created', 'searchtext', 'startDate', 'endDate', 'partner_id', 'user_id', 'download_url', 'source_type', 'mediaDate', 'flavorParamsId', 'conversionQuality', 'creditUserName', 'creditUrl' ] LANGUAGE_LIST = [ "Abkhazian", "Afar", "Afrikaans", "Albanian", "Amharic", "Arabic", "Armenian", "Assamese", "Aymara", "Azerbaijani", "Bashkir", "Basque",
kaltura_id, entry_id = parseIds(request.args, request.form) if not entry_id: raise Exception('entry_id is required') client = kaltura_session_loader(kaltura_id) caption_id = request.args.get('caption_id', None) or \ request.form.get('caption_id', None) name = request.args.get('name', None) or request.form.get('name', None) default = request.args.get('default', None) or \ request.form.get('default', None) language = request.args.get('language', None) or \ request.form.get('language', None) capformat = request.args.get('format', None) or \ request.form.get('format', None) return simplejson.dumps(update_caption(caption_id=caption_id, capformat=capformat, language=language, default=default, name=name, client=client)) # except: # return simplejson.dumps({'success':False , # 'messages':repr(sys.exc_info())}) if __name__ == '__main__': app.debug = True print "Starting with kaltura settings" print repr(properties.load_kaltura_settings()) print "Starting with server settings" print repr(SETTINGS) app.run(host='0.0.0.0', port=int(SETTINGS['PORT']))
return simplejson.dumps(error_dict), 500 @app.errorhandler(myKalturaObject.KalturaClientException) def handle_kaltura_client_error(error): app.logger.exception(str(error)) error_dict = { "success": False, "messages": [str(error)] + g.get('msgs', []) } return simplejson.dumps(error_dict), 500 @app.errorhandler(Exception) def handle_other_errors(error): app.logger.exception(str(error)) error_dict = { "success": False, "messages": [str(error)] + g.get('msgs', []) } return simplejson.dumps(error_dict), 500 if __name__ == '__main__': app.debug = True if SETTINGS['DEBUG_MODE'] else False from pprint import pprint print ("Starting with server settings") pprint(SETTINGS) print ("Starting with kaltura settings") pprint(properties.load_kaltura_settings()) app.run(host='0.0.0.0', port=int(SETTINGS['PORT']))