/[cvs]/nfo/projects/netfraggle/bin/fraggleEngine.py
ViewVC logotype

Contents of /nfo/projects/netfraggle/bin/fraggleEngine.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations)
Tue Aug 31 09:34:10 2004 UTC (19 years, 10 months ago) by joko
Branch: MAIN
Changes since 1.6: +6 -3 lines
File MIME type: text/x-python
+ def query_remote: don't do "getTopicById" here anymore

1 #-----------------------------------------------------------------------------
2 # Name: fraggleEngine.py
3 # Purpose: Does the main (non-gui) work
4 #
5 # Author: joko
6 #
7 # Created: 2004/30/08
8 # RCS-ID: $Id: fraggleEngine.py,v 1.6 2004/08/31 02:23:07 joko Exp $
9 # Copyright: (c) 2004 netfrag.org
10 # Licence: GPL
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # $Log: fraggleEngine.py,v $
15 # Revision 1.6 2004/08/31 02:23:07 joko
16 # U changes to (dummy) topics metadata (FraggleXml)
17 # + def query_remote: wrapper for making remote xmlrpc call
18 #
19 # Revision 1.5 2004/08/30 13:03:13 joko
20 # - def getDefaultDir now in fraggleCtlPreferences
21 # + def getTopicById
22 #
23 # Revision 1.4 2004/08/27 03:18:30 joko
24 # new methods: fraggleSync, getTopics
25 #
26 # Revision 1.3 2004/08/26 15:25:04 joko
27 # added cvs headers
28 #-----------------------------------------------------------------------------
29
30 import os
31 from fraggleConstants import *
32 import FraggleXMLRPC
33 import fraggleCtlPreferences
34
35 class FraggleEngine:
36 """Back-end doing the work."""
37 def __init__(self):
38 self.settings = {}
39 self.topics = {}
40 self.preferences = fraggleCtlPreferences.create(self)
41 self.rpc = FraggleXMLRPC.create(self, self.preferences.getConfig())
42
43 def setSetting(self, settingname, value):
44 """Sets settingname to value in self.settings."""
45 self.settings[settingname] = value
46
47 def getSetting(self, settingname, default=None):
48 """Returns settingname from self.settings. If not found
49 and default!=None, the default value is return *and*
50 saved to the settings."""
51 if self.settings.has_key(settingname):
52 return self.settings[settingname]
53 else:
54 if default!=None:
55 self.setSetting(settingname, default)
56 return default
57 else:
58 return None
59
60 def fraggleSync(self):
61
62 # v1 - demo
63 self.topics = [
64 {
65 'name': 'iNFO-Page:Test-ViaXMLRPC',
66 'mode': 'pull',
67 'result': 'item',
68 'target': {
69 'url': 'http://netfrag.org/nfo/netfraggle.php',
70 'method': 'nfo.getContent',
71 'arguments': 'Test',
72 'type': 'XMLRPC',
73 }
74 },
75 {
76 'name': 'iNFO-Page:Home-ViaXMLRPC',
77 'mode': 'pull',
78 'result': 'item',
79 'target': {
80 'url': 'http://netfrag.org/nfo/netfraggle.php',
81 'method': 'nfo.getContent',
82 'arguments': 'Home',
83 'type': 'XMLRPC',
84 }
85 },
86 {
87 'name': 'iNFO-PageIndex',
88 'mode': 'pull',
89 'result': 'list',
90 'target': {
91 'url': 'http://netfrag.org/nfo/netfraggle.php',
92 'method': 'nfo.listTopics',
93 'arguments': ['xmlpage'],
94 'type': 'XMLRPC',
95 }
96 },
97 {
98 'name': 'TWiki-Test-ViaTWiki',
99 'mode': 'push',
100 'target': {
101 'url': 'http://netfrag.org/twiki/bin/view/Main/NetFraggleTest',
102 'type': 'TWiki',
103 }
104 },
105 {
106 'name': 'TWiki-Test-ViaXMLRPC',
107 'mode': 'push',
108 'target': {
109 'method': 'appendToPage',
110 'arguments': ['NetFraggleTest'],
111 'type': 'XMLRPC',
112 }
113 },
114 ]
115 return
116
117 # v2 - live
118
119 # 1. load payload from remote side
120 fragglexml = self.rpc.FraggleSync()
121
122 # 2. (todo) unmarshal to self.topics (hash)
123 # self.topics = unmarshal(fragglexml)
124
125 def getTopics(self):
126 return self.topics
127
128 def getTopicById(self, id):
129 return self.topics[id]
130
131 def query_remote(self, topicmeta):
132
133 if topicmeta['target']['type'] == 'XMLRPC':
134 # TODO: make FraggleXMLRPC do all stuff
135 # (call methods dynamically)
136 from xmlrpclib import Server, Error
137 rpc = Server(topicmeta['target']['url'])
138 #try:
139 if topicmeta['result'] == 'item':
140 topicdata = {}
141 try:
142 #topicdata = rpc.getContent('Home')
143 #topicdata = rpc.getContent(tuple(topicmeta['target']['arguments']))
144 topicdata = rpc.getContent(topicmeta['target']['arguments'])
145 #print topicdata
146 except Error, v:
147 print "ERROR", v
148 elif topicmeta['result'] == 'list':
149 topicdata = []
150 try:
151 arg = {'type': 'xmlpage'}
152 topicdata = rpc.listTopics(arg)
153 #print topicdata
154 #self.styledTextContent.SetText(repr(topicdata))
155 except Error, v:
156 print "ERROR", v
157 return topicdata
158
159 class urlOpener(object):
160 """Opens urls."""
161 def __init__(self):
162 pass
163 def open(self, url="", command=None):
164 """Opens the url with the method defined in the settings.
165 If command==None, it is retreived from the settings.
166 """
167 if command==None:
168 command = FraggleEngine().getSetting(BROWSERCOMMAND, BROWSERDEFAULT)
169 if command==BROWSERDEFAULT.strip():
170 # use default opening method
171 import os
172 if os.environ.has_key("BROWSER") and \
173 os.environ["BROWSER"]=='kfmclient openProfile webbrowsing':
174 print "Invalid browser detected : %s\nResetting to konqueror." % os.environ["BROWSER"]
175 os.environ["BROWSER"] = 'konqueror' # set it to konqueror
176 import webbrowser # MUST be imported only AFTER os.environ has been modified
177 webbrowser.open(url, 1)
178 #webbrowser.open_new(url)
179 else: #otherwise use user-defined command line
180 # replase %URL with actual url
181 command = command.replace("%URL", url)
182 import os
183 os.system(command)
184

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed