当前位置: 首页>>代码示例>>Python>>正文


Python ElementTree._setroot方法代码示例

本文整理汇总了Python中xml.etree.cElementTree.ElementTree._setroot方法的典型用法代码示例。如果您正苦于以下问题:Python ElementTree._setroot方法的具体用法?Python ElementTree._setroot怎么用?Python ElementTree._setroot使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在xml.etree.cElementTree.ElementTree的用法示例。


在下文中一共展示了ElementTree._setroot方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: __init__

# 需要导入模块: from xml.etree.cElementTree import ElementTree [as 别名]
# 或者: from xml.etree.cElementTree.ElementTree import _setroot [as 别名]
class XMLTV:
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        self._tree = ElementTree()
        self._tree._setroot(Element('tv'))
        self._loaded_channels = []

    def get_loaded_channels(self):
        return self._loaded_channels

    def parse_xmltv_file(self, filename, channel_list):
        """
        Process given xmltv file and create xml tree for our channel_list
        """
        self.logger.debug("Start <%s> parsing>", filename)
        if filename.endswith('gz'):
            import gzip
            open_func = gzip.open
        else:
            open_func = open
        with open_func(filename) as fp:
            for event, elem in iterparse(fp):
                if elem.tag == 'channel':
                    if elem.attrib['id'] in channel_list:
                        self.logger.debug("Add <%s> channel element", elem.attrib['id'])
                        self._tree.getroot().append(elem)
                        if elem.attrib['id'] not in self._loaded_channels:
                            self._loaded_channels.append(elem.attrib['id'])
                    else:
                        elem.clear()
                elif elem.tag == 'programme':
                    if elem.attrib['channel'] in channel_list:
                        self._tree.getroot().append(elem)
                    else:
                        elem.clear()
        self.logger.debug('File parsing complete!')

    @classmethod
    def parse_date_tz(cls, date_str):
        """
        Parse date like this: '20130429073000 +0300'
        (python libs unable to process timezone info in +0300 format)
        Most code was taken from email.util package
        :return: parsed datetime object
        """
        tz = date_str[-5:]
        date_str_notz = date_str[:-6]
        tz_offset = int(tz)
        # Convert a timezone offset into seconds ; -0500 -> -18000
        if tz_offset:
            if tz_offset < 0:
                tz_sign = -1
                tz_offset = -tz_offset
            else:
                tz_sign = 1
            tz_offset = tz_sign * ((tz_offset // 100) * 3600 + (tz_offset % 100) * 60)
        time = datetime.strptime(date_str_notz, xmltv.date_format_notz)
        delta = timedelta(seconds=tz_offset)
        time -= delta
        return time

    def parse_programme(self, elem):
        """
        Convert programme element to dictionary
        """
        programme = xmltv.elem_to_programme(elem)
        programme['start_timestamp'] = calendar.timegm(XMLTV.parse_date_tz(programme['start']).utctimetuple())
        programme['stop_timestamp'] = calendar.timegm(XMLTV.parse_date_tz(programme['stop']).utctimetuple())
        self.logger.debug("Programme: %s", programme)
        return programme

    def get_tv_schedule(self, channel_name=None):
        """
        Get generator object for tv schedule of given channel_name or for all loaded channels
        """
        if channel_name is not None:
            filter_str = 'programme[@channel="%s"]' % channel_name
        else:
            filter_str = 'programme'
        for elem in self._tree.findall(filter_str):
            yield self.parse_programme(elem)

    def send_clear_channel_epg(self, channels_id, svdrp):
        """
        Send to VDR clear channel EPG command for provided channels entries
        """
        for channel_entry in channels_id:
            self.logger.info('Clear EPG for channel %s (%s)', channel_entry['name'], channel_entry['id'])
            svdrp_response = svdrp.send_command('CLRE %s' % channel_entry['id'])
            self.logger.debug('SVDRP Response: %s', svdrp_response)

    def check_upload_result(self, upload_responses_list):
        """
        Process received VDR response on EPG upload command
        """
        if len(upload_responses_list) != 1:
            self.logger.error('Invalid SVDRP Response: %s', upload_responses_list)
            return
        upload_response = upload_responses_list[0]
        if upload_response.code == 250:
#.........这里部分代码省略.........
开发者ID:SlavikZ,项目名称:zvdrtools,代码行数:103,代码来源:xmltvhelper.py


注:本文中的xml.etree.cElementTree.ElementTree._setroot方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。