def get_data(self) -> OutputUrls: urls = OutputUrls() for url in self.data['urls']: urls.urls.append(OutputUrl(url['id'], url['uri'], url['http_root'])) return urls
def make_stream(cls, settings): stream = cls() stream._settings = settings stream.input = InputUrls(urls=[InputUrl(id=InputUrl.generate_id())]) stream.output = OutputUrls( urls=[OutputUrl(id=OutputUrl.generate_id())]) return stream
def make_stream(cls, settings): stream = cls() stream._settings = settings stream.visible = False stream.input = InputUrls(urls=[InputUrl(id=InputUrl.generate_id())]) stream.output = OutputUrls(urls=[OutputUrl(id=OutputUrl.generate_id(), uri=constants.DEFAULT_TEST_URL)]) return stream
class IStream(Document): meta = { 'collection': 'streams', 'allow_inheritance': True, 'auto_create_index': True } created_date = DateTimeField(default=datetime.now) # for inner use name = StringField(default=constants.DEFAULT_STREAM_NAME, max_length=constants.MAX_STREAM_NAME_LENGTH, min_length=constants.MIN_STREAM_NAME_LENGTH, required=True) group = StringField(default=constants.DEFAULT_STREAM_GROUP_TITLE, max_length=constants.MAX_STREAM_GROUP_TITLE_LENGTH, min_length=constants.MIN_STREAM_GROUP_TITLE_LENGTH, required=True) tvg_id = StringField(default=constants.DEFAULT_STREAM_TVG_ID, max_length=constants.MAX_STREAM_TVG_ID_LENGTH, min_length=constants.MIN_STREAM_TVG_ID_LENGTH, required=True) tvg_name = StringField(default=constants.DEFAULT_STREAM_TVG_NAME, max_length=constants.MAX_STREAM_NAME_LENGTH, min_length=constants.MIN_STREAM_NAME_LENGTH, required=True) # tvg_logo = StringField(default=constants.DEFAULT_STREAM_ICON_URL, max_length=constants.MAX_URL_LENGTH, min_length=constants.MIN_URL_LENGTH, required=True) # price = FloatField(default=0.0, min_value=constants.MIN_PRICE, max_value=constants.MAX_PRICE, required=True) output = EmbeddedDocumentField(OutputUrls, default=OutputUrls()) # def get_groups(self) -> list: return self.group.split(';') def to_dict(self) -> dict: return { StreamFields.NAME: self.name, StreamFields.ID: self.get_id(), StreamFields.TYPE: self.get_type(), StreamFields.ICON: self.tvg_logo, StreamFields.PRICE: self.price, StreamFields.GROUP: self.group } def __init__(self, *args, **kwargs): super(IStream, self).__init__(*args, **kwargs) self._settings = None def set_server_settings(self, settings): self._settings = settings def get_type(self): raise NotImplementedError('subclasses must override get_type()!') def get_id(self) -> str: return str(self.id) def config(self) -> dict: return { ConfigFields.ID_FIELD: self.get_id(), # required ConfigFields.TYPE_FIELD: self.get_type(), # required ConfigFields.OUTPUT_FIELD: self.output.to_mongo() # required empty in timeshift_record } def fixup_output_urls(self): return def reset(self): return def generate_playlist(self, header=True) -> str: result = '#EXTM3U\n' if header else '' stream_type = self.get_type() if stream_type == constants.StreamType.RELAY or \ stream_type == constants.StreamType.ENCODE or \ stream_type == constants.StreamType.TIMESHIFT_PLAYER or \ stream_type == constants.StreamType.VOD_ENCODE or \ stream_type == constants.StreamType.VOD_RELAY or \ stream_type == constants.StreamType.COD_ENCODE or \ stream_type == constants.StreamType.COD_RELAY or \ stream_type == constants.StreamType.PROXY: for out in self.output.urls: result += '#EXTINF:-1 tvg-id="{0}" tvg-name="{1}" tvg-logo="{2}" group-title="{3}",{4}\n{5}\n'.format( self.tvg_id, self.tvg_name, self.tvg_logo, self.group, self.name, out.uri) return result def generate_device_playlist(self, uid: str, passwd: str, did: str, lb_server_host_and_port: str, header=True) -> str: result = '#EXTM3U\n' if header else '' stream_type = self.get_type() if stream_type == constants.StreamType.PROXY or \ stream_type == constants.StreamType.VOD_PROXY or \ stream_type == constants.StreamType.RELAY or \ stream_type == constants.StreamType.ENCODE or \ stream_type == constants.StreamType.TIMESHIFT_PLAYER or \ stream_type == constants.StreamType.VOD_ENCODE or \ stream_type == constants.StreamType.VOD_RELAY or \ stream_type == constants.StreamType.COD_ENCODE or \ stream_type == constants.StreamType.COD_RELAY: for out in self.output.urls: parsed_uri = urlparse(out.uri) if parsed_uri.scheme == 'http' or parsed_uri.scheme == 'https': file_name = os.path.basename(parsed_uri.path) url = 'http://{0}/{1}/{2}/{3}/{4}/{5}/{6}'.format( lb_server_host_and_port, uid, passwd, did, self.id, out.id, file_name) result += '#EXTINF:-1 tvg-id="{0}" tvg-name="{1}" tvg-logo="{2}" group-title="{3}",{4}\n{5}\n'.format( self.tvg_id, self.tvg_name, self.tvg_logo, self.group, self.name, url) return result def generate_input_playlist(self, header=True) -> str: raise NotImplementedError( 'subclasses must override generate_input_playlist()!') def save(self, *args, **kwargs): super(IStream, self).save(*args, **kwargs) self.fixup_output_urls() return super(IStream, self).save(*args, **kwargs)