MythTV  master
space.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 # ----------------------
4 # Name: space.py
5 # Python Script
6 # Author: R.D. Vaughan
7 # Purpose:
8 # This python script is intended to perform a mashup of various Space Internet media sources
9 # for the MythTV Netvision plugin. It follows the MythTV Netvision grabber standards.
10 #
11 # Command example:
12 # See help (-u and -h) options
13 #
14 # Design:
15 # 1) Read "~/.mythtv/MythNetvision/userGrabberPrefs/spaceMashup.xml" configuration file
16 # 2) Input the sources that are marked as enabled
17 # 3) Process the results and display to stdout
18 #
19 #
20 # License:Creative Commons GNU GPL v2
21 # (http://creativecommons.org/licenses/GPL/2.0/)
22 #-------------------------------------
23 __title__ ="Space";
24 __mashup_title__ = "spaceMashup"
25 __author__="R.D. Vaughan"
26 __version__="v0.10"
27 # 0.10 Initial development
28 
29 __usage_examples__ ='''
30 (Option Help)
31 > ./space.py -h
32 Usage: ./space.py -hduvlST [parameters] <search text>
33 Version: v0.1.0 Author: R.D.Vaughan
34 
35 For details on the MythTV Netvision plugin see the wiki page at:
36 http://www.mythtv.org/wiki/MythNetvision
37 
38 Options:
39  -h, --help show this help message and exit
40  -d, --debug Show debugging info (URLs, raw XML ... etc, info
41  varies per grabber)
42  -u, --usage Display examples for executing the script
43  -v, --version Display grabber name and supported options
44  -l LANGUAGE, --language=LANGUAGE
45  Select data that matches the specified language fall
46  back to English if nothing found (e.g. 'es' EspaƱol,
47  'de' Deutsch ... etc). Not all sites or grabbers
48  support this option.
49  -p PAGE NUMBER, --pagenumber=PAGE NUMBER
50  Display specific page of the search results. Default
51  is page 1. Page number is ignored with the Tree View
52  option (-T).
53  -T, --treeview Display a Tree View of a sites videos
54 
55 > ./space.py -v
56 Space Mashup|T
57 
58 
59 > ./space.py -T
60 '''
61 __search_max_page_items__ = 20
62 __tree_max_page_items__ = 20
63 
64 import sys, os
65 
66 
67 class OutStreamEncoder(object):
68  """Wraps a stream with an encoder"""
69  def __init__(self, outstream, encoding=None):
70  self.out = outstream
71  if not encoding:
72  self.encoding = sys.getfilesystemencoding()
73  else:
74  self.encoding = encoding
75 
76  def write(self, obj):
77  """Wraps the output stream, encoding Unicode strings with the specified encoding"""
78  if isinstance(obj, unicode):
79  try:
80  self.out.write(obj.encode(self.encoding))
81  except IOError:
82  pass
83  else:
84  try:
85  self.out.write(obj)
86  except IOError:
87  pass
88 
89  def __getattr__(self, attr):
90  """Delegate everything but write to the stream"""
91  return getattr(self.out, attr)
92 sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
93 sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
94 
95 
96 # Used for debugging
97 #import nv_python_libs.common.common_api
98 
99 try:
100  '''Import the common python class
101  '''
102  import nv_python_libs.common.common_api as common_api
103 except Exception, e:
104  sys.stderr.write('''
105 The subdirectory "nv_python_libs/common" containing the modules mashups_api.py and
106 mashups_exceptions.py (v0.1.3 or greater),
107 They should have been included with the distribution of MythNetvision
108 Error(%s)
109 ''' % e)
110  sys.exit(1)
111 
112 if common_api.__version__ < '0.1.3':
113  sys.stderr.write("\n! Error: Your current installed common_api.py version is (%s)\nYou must at least have version (0.1.3) or higher.\n" % target.__version__)
114  sys.exit(1)
115 
116 # Used for debugging
117 #import nv_python_libs.mashups.mashups_api as target
118 try:
119  '''Import the python mashups support classes
120  '''
121  import nv_python_libs.mashups.mashups_api as target
122 except Exception, e:
123  sys.stderr.write('''
124 The subdirectory "nv_python_libs/mashups" containing the modules mashups_api and
125 mashups_exceptions.py (v0.1.0 or greater),
126 They should have been included with the distribution of space.py.
127 Error(%s)
128 ''' % e)
129  sys.exit(1)
130 if target.__version__ < '0.1.0':
131  sys.stderr.write("\n! Error: Your current installed mashups_api.py version is (%s)\nYou must at least have version (0.1.0) or higher.\n" % target.__version__)
132  sys.exit(1)
133 
134 # Verify that the main process modules are installed and accessible
135 try:
136  import nv_python_libs.mainProcess as process
137 except Exception, e:
138  sys.stderr.write('''
139 The python script "nv_python_libs/mainProcess.py" must be present.
140 Error(%s)
141 ''' % e)
142  sys.exit(1)
143 
144 if process.__version__ < '0.2.0':
145  sys.stderr.write("\n! Error: Your current installed mainProcess.py version is (%s)\nYou must at least have version (0.2.0) or higher.\n" % process.__version__)
146  sys.exit(1)
147 
148 if __name__ == '__main__':
149  # No api key is required
150  apikey = ""
151  # Set the base processing directory that the grabber is installed
152  target.baseProcessingDir = os.path.dirname( os.path.realpath( __file__ ))
153  # Make sure the target functions have an instance of the common routines
154  target.common = common_api.Common()
155  main = process.mainProcess(target, apikey, )
156  main.grabberInfo = {}
157  main.grabberInfo['title'] = __title__
158  main.grabberInfo['command'] = u'space.py'
159  main.grabberInfo['mashup_title'] = __mashup_title__
160  main.grabberInfo['author'] = __author__
161  main.grabberInfo['thumbnail'] = 'space.png'
162  main.grabberInfo['type'] = ['video', ]
163  main.grabberInfo['desc'] = u"Mashups combines media from multiple sources to create a new work"
164  main.grabberInfo['version'] = __version__
165  main.grabberInfo['search'] = target.common.checkIfDBItem('dummy', {'feedtitle': __title__, })
166  main.grabberInfo['tree'] = True
167  main.grabberInfo['html'] = False
168  main.grabberInfo['usage'] = __usage_examples__
169  main.grabberInfo['SmaxPage'] = __search_max_page_items__
170  main.grabberInfo['TmaxPage'] = __tree_max_page_items__
171  main.main()
def __getattr__(self, attr)
Definition: space.py:89
def write(self, obj)
Definition: space.py:76
def __init__(self, outstream, encoding=None)
Definition: space.py:69