-
Notifications
You must be signed in to change notification settings - Fork 1
/
program.py
92 lines (83 loc) · 3.58 KB
/
program.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# -*- coding: iso-8859-1 -*-
# -----------------------------------------------------------------------------
# program.py - program class
# -----------------------------------------------------------------------------
# $Id$
# -----------------------------------------------------------------------------
# kaa.epg - EPG Database
# Copyright (C) 2004-2008 Jason Tackaberry, Dirk Meyer, Rob Shortt
#
# First Edition: Jason Tackaberry <tack@sault.org>
#
# Please see the file AUTHORS for a complete list of authors.
#
# This library is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version
# 2.1 as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
#
# -----------------------------------------------------------------------------
__all__ = [ 'Program' ]
from datetime import datetime
from kaa import unicode_to_str
import kaa.dateutils
class Program(object):
"""
kaa.epg.Program class.
"""
# Constants for the flags bitmask
#: If the program is broadcast in HD
FLAG_HDTV = 1
#: If the program is a premiere (e.g. new episode of a show).
FLAG_NEW = 2
#: If closed captioning is available for the program.
FLAG_CC = 4
# If the program is premiere
FLAG_PREMIERE = 8
# If this is the last chance to see the program
FLAG_LAST_CHANCE = 16
# If this program has been previously shown
FLAG_PREVIOUSLY_SHOWN = 32
def __init__(self, channel, dbdata, extrainfo):
self.channel = channel
self._dbdata = dbdata
if extrainfo:
self.__dict__.update(extrainfo)
def __getattr__(self, attr):
"""
Defer accessing the ObjectRow (dbdata) until referenced, as this will
defer any ObjectRow unpickling.
"""
if hasattr(self, '_dbdata') and attr != '_dbdata':
self.db_id = self._dbdata.get('type'), self._dbdata.get('id')
# Unix timestamps are always seconds since epoch UTC.
self.start_timestamp = self._dbdata.get('start', 0)
self.stop_timestamp = self._dbdata.get('stop', 0)
# Timezone-aware datetime objects in the local timezone.
self.start = datetime.fromtimestamp(self.start_timestamp, kaa.dateutils.local)
self.stop = datetime.fromtimestamp(self.stop_timestamp, kaa.dateutils.local)
self.title = self._dbdata.get('title', u'')
self.description = self._dbdata.get('desc', u'')
self.subtitle = self._dbdata.get('subtitle', u'')
self.episode = self._dbdata.get('episode')
self.genres = self._dbdata.get('genres', [])
self.advisories = self._dbdata.get('advisories', [])
self.rating = self._dbdata.get('rating')
self.score = self._dbdata.get('score')
self.flags = self._dbdata.get('flags')
self.credits = self._dbdata.get('credits')
self.date = self._dbdata.get('date')
self.year = self._dbdata.get('year')
del self._dbdata
return self.__getattribute__(attr)
def __repr__(self):
return '<kaa.epg.Program %s>' % unicode_to_str(self.title)