def test_disconnect(self): message = messaging.CommandMessage(operation=12) rp = amf3.RequestProcessor(None) request = remoting.Request('null', body=[message]) response = rp(request) ack = response.body self.assertTrue(isinstance(response, remoting.Response)) self.assertEquals(response.status, remoting.STATUS_OK) self.assertTrue(isinstance(ack, messaging.AcknowledgeMessage))
def test_long_service_name(self): gw = gateway.BaseGateway({'a.c.b.d': TestService}) envelope = remoting.Envelope() message = remoting.Request('a.c.b.d', [], envelope=envelope) sr = gw.getServiceRequest(message, 'a.c.b.d.spam') self.assertTrue(isinstance(sr, gateway.ServiceRequest)) self.assertEqual(sr.request, envelope) self.assertEqual(sr.service, TestService) self.assertEqual(sr.method, 'spam')
def test_service(self): gw = gateway.BaseGateway() gw.addService(lambda x: x, 'test', preprocessor=self._preproc) envelope = remoting.Envelope() request = remoting.Request('test') envelope['/1'] = request service_request = gateway.ServiceRequest(envelope, gw.services['test'], None) self.assertEquals(gw.getPreprocessor(service_request), self._preproc)
def test_service(self): gw = gateway.BaseGateway() gw.addService(lambda x: x, 'test', expose_request=True) envelope = remoting.Envelope() request = remoting.Request('test') envelope['/1'] = request service_request = gateway.ServiceRequest(envelope, gw.services['test'], None) self.assertTrue(gw.mustExposeRequest(service_request))
def __build_amf_request(self, videoPlayer): env = remoting.Envelope(amfVersion=3) env.bodies.append(( "/1", remoting.Request( target= "com.brightcove.player.runtime.PlayerMediaFacade.findMediaByReferenceId", body=[ self.Const, self.Player_ID, videoPlayer, self.Publisher_ID ], envelope=env))) return env
def test_process_request(self): gw = gateway.BaseGateway({'test': TestService}) envelope = remoting.Envelope() request = remoting.Request('test.spam', envelope=envelope) processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Response)) self.assertEqual(response.status, remoting.STATUS_OK) self.assertEqual(response.body, 'spam')
def parseData(self, data): videoIds = list(re.finditer("videoIds.push\(\"(.*)\"\);", data)) print videoIds print 'self.part: ' + self.part streamUrl = "" streamName = "" x = 1 for videoId in videoIds: if int(self.part) == x: print 'in for videoId' print videoId.group(1) conn = HTTPConnection("c.brightcove.com") env = remoting.Envelope(amfVersion=3) env.bodies.append(( "/1", remoting.Request( target= "com.brightcove.player.runtime.PlayerMediaFacade.findMediaById", body=[ "ef59d16acbb13614346264dfe58844284718fb7b", 586587148001, videoId.group(1), 1659832546 ], envelope=env))) conn.request( "POST", "/services/messagebroker/amf?playerKey=AAAAAGLvCOI~,a0C3h1Jh3aQKs2UcRZrrxyrjE0VH93xl", str(remoting.encode(env).read()), {'content-type': 'application/x-amf'}) response = conn.getresponse().read() rtmpdata = remoting.decode(response).bodies[0][1].body streamName = "" default = 'skip' streamUrl = rtmpdata.get('FLVFullLengthURL', default) for item in sorted(rtmpdata['renditions'], key=lambda item: item['frameHeight'], reverse=False): streamHeight = item['frameHeight'] if streamHeight <= 1080: streamUrl = item['defaultURL'] streamName = streamName + rtmpdata['displayName'] x = x + 1 print 'streamUrl' print streamUrl print 'streamName' print streamName sref = eServiceReference(0x1001, 0, streamUrl) sref.setName(streamName) self.session.open(MoviePlayer, sref)
def test_unknown_service_request(self): gw = _twisted.TwistedGateway({'echo': lambda x: x}) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('sdf') d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault))
def build_amf_request(const, playerID, videoPlayer, publisherID): env = remoting.Envelope(amfVersion=3) env.bodies.append( ( "/1", remoting.Request( target="com.brightcove.player.runtime.PlayerMediaFacade.findMediaById", body=[const, playerID, videoPlayer, publisherID], envelope=env ) ) ) return env
def test_preprocessor(self): d = defer.Deferred() def preprocessor(service_request): d.callback(None) p = self.getProcessor({'echo': lambda x: x}, preprocessor=preprocessor) request = remoting.Request('echo', envelope=remoting.Envelope()) p(request).addErrback(lambda failure: d.errback()) return d
def test_unknown_service_request(self): gw = twisted.TwistedGateway({'echo': lambda x: x}, expose_request=False) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='ss')]) d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, messaging.ErrorMessage))
def construct_request(startDate,endDate,market_code,market_name,item_code,item_name): breedInfoPo = BreedInfoPo(None,None,None,None) select_breed = BreedInfoPo(item_code,item_name,None,None) select = ArrayCollection([select_breed]) market = PMarketInfo(market_code,market_name) msg = messaging.RemotingMessage(messageId=str(uuid.uuid1()).upper(),clientId=str(uuid.uuid1()).upper(),operation='getDyscDpzData',destination='reportStatService',timeToLive=0,timestamp=0) msg.body = [DyscdpzPara(startDate,endDate,select,market,breedInfoPo)] msg.headers['DSEndpoint'] = None msg.headers['DSId'] = str(uuid.uuid1()).upper() req = remoting.Request('null',body = (msg,)) env = remoting.Envelope(amfVersion=pyamf.AMF3) env.bodies = [('/1',req)] data = bytes(remoting.encode(env).read()) return data
def test_fail(self): def preproc(sr, *args): raise IndexError gw = gateway.BaseGateway({'test': TestService}, preprocessor=preproc) envelope = remoting.Envelope() request = remoting.Request('test.spam', envelope=envelope) processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Response)) self.assertEqual(response.status, remoting.STATUS_ERROR)
def playBrightCoveStream(bc_videoID, title, thumb, isSingle): bc_playerID = 586587148001 bc_publisherID = 1659832546 bc_const = "ef59d16acbb13614346264dfe58844284718fb7b" conn = httplib.HTTPConnection("c.brightcove.com") envelope = remoting.Envelope(amfVersion=3) envelope.bodies.append( ("/1", remoting.Request( target= "com.brightcove.player.runtime.PlayerMediaFacade.findMediaById", body=[bc_const, bc_playerID, bc_videoID, bc_publisherID], envelope=envelope))) conn.request("POST", "/services/messagebroker/amf?playerId=" + str(bc_playerID), str(remoting.encode(envelope).read()), {'content-type': 'application/x-amf'}) response = conn.getresponse().read() response = remoting.decode(response).bodies[0][1].body streamUrl = "" for item in sorted(response['renditions'], key=lambda item: item['encodingRate'], reverse=False): encRate = item['encodingRate'] if encRate < maxBitRate: streamUrl = item['defaultURL'] if not streamUrl: streamUrl = response['FLVFullLengthURL'] if streamUrl: if isSingle: listitem = xbmcgui.ListItem(title, thumbnailImage=thumb) xbmc.Player().play(streamUrl, listitem) else: listitem = xbmcgui.ListItem(title, path=streamUrl, thumbnailImage=thumb) xbmcplugin.setResolvedUrl(pluginhandle, True, listitem) if autoPlay: while True: if xbmc.Player().isPlaying() and xbmc.getCondVisibility( "Player.Paused"): xbmc.Player().pause() break xbmc.sleep(100) xbmc.sleep(500) while xbmc.getCondVisibility("Player.Paused"): if xbmc.Player().isPlaying(): xbmc.Player().pause() break xbmc.sleep(100)
def test_preprocessor(self): d = defer.Deferred() def preprocessor(service_request, *args): d.callback(None) gw = twisted.TwistedGateway({'echo': lambda x: x}, expose_request=False, preprocessor=preprocessor) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='echo')]) proc(request).addErrback(lambda failure: d.errback()) return d
def resolve_url(item_url): ## Credit to AddonScriptorDE for the bc code ## https://github.com/AddonScriptorDE/plugin.video.redbull_tv quality = int(addon.getSetting('quality')) bc_playerID = 2033674580001 bc_publisherID = 1677257476001 bc_const = 'efa14670a843335eedd6c1e1acc8b2c4c4e342db' conn = httplib.HTTPConnection("c.brightcove.com") envelope = remoting.Envelope(amfVersion=3) envelope.bodies.append( ("/1", remoting.Request( target= "com.brightcove.player.runtime.PlayerMediaFacade.findMediaById", body=[ bc_const, bc_playerID, get_video_id(item_url), bc_publisherID ], envelope=envelope))) conn.request("POST", "/services/messagebroker/amf?playerId=" + str(bc_playerID), str(remoting.encode(envelope).read()), {'content-type': 'application/x-amf'}) response = conn.getresponse().read() response = remoting.decode(response).bodies[0][1].body renditions = sorted(response['renditions'], key=lambda k: int(k['encodingRate']), reverse=True) q_type = None for i in range(len(renditions)): if quality > 0: try: ok = renditions[quality]['defaultURL'] if ok: q_type = quality else: raise except: quality = (quality - 1) addon_log('quality not avaliable') if q_type: break else: q_type = quality break path = renditions[q_type]['defaultURL'].split('&')[0] path += ' playpath=%s' % renditions[q_type]['defaultURL'].split('&')[1] item = xbmcgui.ListItem(path=path) xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)
def test_process_request(self): gw = gateway.BaseGateway({'test': TestService}) envelope = remoting.Envelope() request = remoting.Request('test.spam', envelope=envelope) processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Response)) self.assertEquals(response.status, remoting.STATUS_OK) self.assertEquals(response.body, 'spam') # Test a non existant service call request = remoting.Request('nope', envelope=envelope) processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Message)) self.assertEquals(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEquals(response.body.code, 'Service.ResourceNotFound') self.assertEquals(response.body.description, 'Unknown service nope')
def test_preprocessor(self): d = defer.Deferred() def preprocessor(service_request): d.callback(None) gw = _twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=preprocessor) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) proc(request).addErrback(lambda failure: d.errback()) return d
def test_unknown_service_request(self): p = self.getProcessor({'echo': lambda x: x}) request = remoting.Request('sdf') d = p(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEqual(response.body.code, 'Service.ResourceNotFound') self.assertEqual(response.body.description, u'Unknown service sdf')
def get_clip_info_ps3(self, contentID): import pyamf #from pyamf import register_class from pyamf import remoting import httplib conn = httplib.HTTPConnection("c.brightcove.com") env = remoting.Envelope(amfVersion = 3) env.bodies.append(("/1", remoting.Request(target = "com.brightcove.player.runtime.PlayerMediaFacade.findMediaByReferenceId", body = [self.urls['const2_PS3'], self.urls['experienceID_PS3'], str(contentID), self.urls['publisherID']], envelope = env))) conn.request("POST", "/services/messagebroker/amf?playerKey=" + self.urls['playerKey'], str(remoting.encode(env).read()), {'content-type': 'application/x-amf'}) resp = conn.getresponse().read() response = remoting.decode(resp).bodies[0][1].body if self.IOS: return response['IOSRenditions'] else: return response['renditions']
def test_malformed_credentials_header(self): gw = gateway.BaseGateway({'test': TestService}) envelope = remoting.Envelope() request = remoting.Request('test.spam', envelope=envelope) request.headers['Credentials'] = {'spam': 'eggs'} processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Response)) self.assertEqual(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEqual(response.body.code, 'KeyError')
def test_service(self): gw = gateway.BaseGateway() echo = lambda x: x gw.addService(echo, 'echo', authenticator=self._auth) envelope = remoting.Envelope() request = remoting.Request('echo', body=['spam']) envelope.headers['Credentials'] = dict(userid='fred', password='******') envelope['/1'] = request processor = gw.getProcessor(request) response = processor(request) self.assertEqual(response.status, remoting.STATUS_OK) self.assertEqual(response.body, 'spam')
def test_too_many_args(self): def spam(bar): return bar gw = gateway.BaseGateway({'spam': spam}) rp = amf3.RequestProcessor(gw) message = messaging.RemotingMessage(body=['eggs', 'baz'], operation='spam') request = remoting.Request('null', body=[message]) response = rp(request) ack = response.body self.assertTrue(isinstance(response, remoting.Response)) self.assertEqual(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(ack, messaging.ErrorMessage)) self.assertEqual(ack.faultCode, 'TypeError')
def test_request(self): def echo(x): return x gw = gateway.BaseGateway({'echo': echo}) rp = amf3.RequestProcessor(gw) message = messaging.RemotingMessage(body=['spam.eggs'], operation='echo') request = remoting.Request('null', body=[message]) response = rp(request) ack = response.body self.assertTrue(isinstance(response, remoting.Response)) self.assertEqual(response.status, remoting.STATUS_OK) self.assertTrue(isinstance(ack, messaging.AcknowledgeMessage)) self.assertEqual(ack.body, 'spam.eggs')
def test_deferred_preprocessor(self): d = defer.Deferred() def preprocessor(u, p): return reactor.callLater(0, lambda: True) p = self.getProcessor({'echo': lambda x: x}, preprocessor=preprocessor) request = remoting.Request('echo', envelope=remoting.Envelope()) def cb(result): self.assertTrue(result) d.callback(None) p(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d
def test_request(self): gw = gateway.BaseGateway() echo = lambda x: x gw.addService(echo, 'echo', description='This is a test') envelope = remoting.Envelope() request = remoting.Request('echo') envelope['/1'] = request request.headers['DescribeService'] = None processor = gw.getProcessor(request) response = processor(request) self.assertEqual(response.status, remoting.STATUS_OK) self.assertEqual(response.body, 'This is a test')
def test_debug_traceback(self): # Test a non existant service call gw = gateway.BaseGateway({'test': TestService}, debug=True) envelope = remoting.Envelope() # Test a non existant service call request = remoting.Request('nope', envelope=envelope) processor = gw.getProcessor(request) response = processor(request) self.assertTrue(isinstance(response, remoting.Message)) self.assertEqual(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEqual(response.body.code, 'Service.ResourceNotFound') self.assertEqual(response.body.description, 'Unknown service nope') self.assertNotEquals(response.body.details, None)
def test_error_body(self): def echo(x): raise KeyError gw = twisted.TwistedGateway({'echo': echo}, expose_request=False) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='echo')]) d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, messaging.ErrorMessage)) self.assertEqual(response.body.faultCode, 'KeyError')
def get_clip_info(self, contentID, url): import pyamf #from pyamf import register_class from pyamf import remoting import httplib conn = httplib.HTTPConnection("c.brightcove.com") pyamf.register_class(ViewerExperienceRequest, 'com.brightcove.experience.ViewerExperienceRequest') pyamf.register_class(ContentOverride, 'com.brightcove.experience.ContentOverride') viewer_exp_req = ViewerExperienceRequest(url, [ContentOverride(contentID)], self.urls['experienceID'], "") env = remoting.Envelope(amfVersion = 3) env.bodies.append(("/1", remoting.Request(target = "com.brightcove.experience.ExperienceRuntimeFacade.getDataForExperience", body = [self.urls['const'], viewer_exp_req], envelope = env))) #conn.request("POST", "/services/messagebroker/amf?playerKey=" + self.urls['playerKey'], str(remoting.encode(env).read()), {'content-type': 'application/x-amf'}) conn.request("POST", "/services/messagebroker/amf?playerId=" + self.urls['playerID'], str(remoting.encode(env).read()), {'content-type': 'application/x-amf'}) resp = conn.getresponse().read() response = remoting.decode(resp).bodies[0][1].body self._printResponse(env, response) return response['programmedContent']['videoPlayer']['mediaDTO']['renditions']
def test_error_auth(self): def auth(u, p): raise IndexError p = self.getProcessor({'echo': lambda x: x}, authenticator=auth) request = remoting.Request('echo', envelope=remoting.Envelope()) d = p(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEqual(response.body.code, 'IndexError')