本文整理汇总了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:
#.........这里部分代码省略.........