Changeset 190:75d280708ff5
- Timestamp:
- 11/29/08 00:48:18 (3 years ago)
- Author:
- cfreeze@…
- Branch:
- default
- Parents:
- 189:8190540dae37 (diff), 185:c20e85874308 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
- Message:
-
correct merge problems that are showing up from bad branching
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r184
|
r190
|
|
| 64 | 64 | self.__states = [] |
| 65 | 65 | self.devices = [] |
| 66 | | self.__history_file = '' |
| | 66 | self.__history_file = self.config_dir + '/' + __APPNAME__ + '.history' |
| | 67 | self.log = logging.getLogger('StormConfig') |
| 67 | 68 | self.__max_history = History.DEFAULT_MAX_HISTORICAL_EVENTS |
| 68 | | self.__history_file = self.config_dir + '/' + __APPNAME__ + '.history' |
| 69 | | self.log = logging.getLogger('StormConfig') |
| 70 | | |
| 71 | | self.log.setLevel(logging.INFO) |
| 72 | | |
| 73 | | self._load() |
| | 69 | self.__proxy = '' |
| | 70 | |
| | 71 | self.log.setLevel(logging.DEBUG) |
| | 72 | self._load() |
| 74 | 73 | |
| 75 | 74 | def _load(self): |
| … |
… |
|
| 88 | 87 | |
| 89 | 88 | xstates = self.getRequired('main','states') |
| 90 | | if xstates: |
| | 89 | if(xstates): |
| 91 | 90 | self.__states = string.split(xstates, ',') |
| | 91 | |
| | 92 | self.__proxy = self.get('main','proxy', None) |
| 92 | 93 | |
| 93 | 94 | num_watchers = self.getRequired('main','watchers') |
| … |
… |
|
| 143 | 144 | if(jabber_available): |
| 144 | 145 | to = self.getRequired(str(i),"to") |
| 145 | | self.devices.append(JabberAlertDevice(to,jabberInfo,alerts,areas)) |
| | 146 | wait_time = int(self.getRequired(str(i),"wait_time")) |
| | 147 | self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) |
| 146 | 148 | self.log.debug("Adding jabber device") |
| 147 | 149 | else: |
| 148 | 150 | self.log.error("Jabber Support Not Enabled, but Jabber Device Requested!") |
| | 151 | if(dev == "media"): |
| | 152 | self.devices.append(MediaAlertDevice(mediaInfo,alerts,areas)) |
| | 153 | self.log.debug("Adding media device") |
| | 154 | if(dev == "execution"): |
| | 155 | self.devices.append(ExecutionAlertDevice(exeInfo,alerts,areas)) |
| | 156 | self.log.debug("Adding execution device") |
| 149 | 157 | if(dev == "osd"): |
| 150 | 158 | if(not osdLoadAttempted): |
| … |
… |
|
| 166 | 174 | font), |
| 167 | 175 | alerts,areas)) |
| 168 | | self.log.debug("Adding OSD device") |
| | 176 | self.log.debug("Adding jabber device") |
| 169 | 177 | else: |
| 170 | 178 | self.log.error("OSD Support Not Enabled, but OSD Device Requested!") |
| 171 | 179 | if(dev == "mythtv"): |
| 172 | | to = self.getRequired(str(i),"to") |
| 173 | | wait_time = int(self.getRequired(str(i),"wait_time")) |
| 174 | | self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) |
| 175 | | self.log.debug("Adding MythTv device") |
| 176 | | if(dev == "media"): |
| 177 | | self.devices.append(MediaAlertDevice(mediaInfo,alerts,areas)) |
| 178 | | self.log.debug("Adding media device") |
| 179 | | if(dev == "execution"): |
| 180 | | self.devices.append(ExecutionAlertDevice(exeInfo,alerts,areas)) |
| 181 | | self.log.debug("Adding execution device") |
| | 180 | to = self.getRequired(str(i),"to") |
| | 181 | wait_time = int(self.getRequired(str(i),"wait_time")) |
| | 182 | self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) |
| | 183 | self.log.debug("Adding mythtv device") |
| 182 | 184 | |
| 183 | 185 | def __str__(self): |
| … |
… |
|
| 185 | 187 | str += "\n\t".join(self.__states) |
| 186 | 188 | |
| 187 | | str += "\nHistory: %i\n" % self.max_history |
| | 189 | str += "\nProxy: %s" % self.proxy |
| | 190 | str += "\nHistory: %i" % self.max_history |
| 188 | 191 | str += "\nDevices: %i\n" % len(self.devices) |
| 189 | 192 | |
| … |
… |
|
| 230 | 233 | return self.__max_history |
| 231 | 234 | |
| | 235 | def getProxy(self): |
| | 236 | return self.__proxy |
| | 237 | |
| 232 | 238 | debug = property(getDebug,None,None) |
| 233 | 239 | max_history = property(getMaxHistory,None,None) |
| | 240 | proxy = property(getProxy,None,None) |
-
|
r184
|
r190
|
|
| 48 | 48 | from WeatherAlert import * |
| 49 | 49 | from XmlWeather import * |
| 50 | | from CAP import CAP |
| 51 | 50 | |
| 52 | 51 | class StormWeather(XmlWeather): |
| 53 | | def __init__(self, state, history, simfetch = False, simalert = False): |
| 54 | | super(StormWeather,self).__init__(state,history,simfetch) |
| | 52 | def __init__(self, state, history, simfetch = False, simalert = False, proxy = None): |
| | 53 | super(StormWeather,self).__init__(state,simfetch,proxy) |
| 55 | 54 | self.log = logging.getLogger("StormWeather") |
| 56 | 55 | self.__alert_devs = [] |
| 57 | 56 | self.__simalert = simalert |
| | 57 | self.__history = history |
| 58 | 58 | |
| 59 | 59 | self.log.setLevel(logging.INFO) |
| 60 | 60 | |
| 61 | | def display(self): |
| 62 | | return self.__str__() |
| 63 | | |
| 64 | 61 | def __str__(self): |
| 65 | 62 | str = "StormWeather: " + "\n" |
| … |
… |
|
| 72 | 69 | return str |
| 73 | 70 | |
| 74 | | def display(self): |
| 75 | | print self.__str__() |
| 76 | | |
| 77 | 71 | def registerDevice(self, dev): |
| 78 | 72 | self.log.debug("Registering Device") |
| 79 | 73 | self.__alert_devs.append(dev) |
| 80 | 74 | |
| 81 | | def handleAlert(self, cap_item): |
| 82 | | alerted = False |
| | 75 | def logAtomShort(self, cap_atom): |
| | 76 | self.log.info("---------CAP ATOM---------") |
| | 77 | for l in (cap_atom.__str__().split('\n')): |
| | 78 | self.log.info(l) |
| | 79 | self.log.info("---------CAP ATOM---------") |
| 83 | 80 | |
| 84 | | for dev in self.__alert_devs: |
| 85 | | if(dev.isAlertWanted(cap_item)): |
| 86 | | if(not self.__simalert): |
| 87 | | dev.send(WeatherAlert(cap_item)) |
| 88 | | alerted = True |
| 89 | | else: |
| 90 | | self.log.info("Simulated Alert on: %s" % cap_item.id) |
| | 81 | def logAtomFull(self, cap_atom): |
| | 82 | self.log.info("---------CAP ATOM---------") |
| | 83 | for l in (cap_atom.__str__().split('\n')): |
| | 84 | self.log.info(l) |
| | 85 | self.log.info("========DESCRIPTION=======") |
| | 86 | if(cap_atom.description): |
| | 87 | for l in (cap_atom.description.split('\n')): |
| | 88 | self.log.info(l) |
| | 89 | self.log.info("========DESCRIPTION=======") |
| | 90 | self.log.info("---------CAP ATOM---------") |
| 91 | 91 | |
| 92 | | return alerted |
| | 92 | def handleAtom(self, cap_atom): |
| | 93 | self.logAtomShort(cap_atom) |
| | 94 | if(not self.__history.exists(cap_atom.id)): |
| | 95 | for dev in self.__alert_devs: |
| | 96 | if(dev.isAlertWanted(cap_atom)): |
| | 97 | if(not self.__simalert): |
| | 98 | cap_atom.expand(self.simfetch,self.proxy) |
| | 99 | self.logAtomFull(cap_atom) |
| | 100 | dev.send(cap_atom) |
| | 101 | self.__history.add(cap_atom.id) |
| | 102 | else: |
| | 103 | self.log.info("Simulated Alert on: %s" % cap_atom.id) |
| | 104 | else: |
| | 105 | self.log.debug("Ignoring %s: Already alerted on" % cap_atom.id) |
-
|
r184
|
r190
|
|
| 42 | 42 | """ |
| 43 | 43 | |
| 44 | | import urllib |
| 45 | 44 | import logging |
| 46 | | import sys |
| 47 | | from xml.dom import minidom |
| 48 | 45 | |
| 49 | 46 | from WeatherTypes import * |
| 50 | | from CAP import CAP |
| | 47 | from XmlFetcher import * |
| | 48 | from WeatherAlert import WeatherAlert |
| 51 | 49 | |
| 52 | 50 | class XmlWeather(object): |
| 53 | | def __init__(self, state, history, simfetch = False): |
| | 51 | def __init__(self, state, simfetch = False, proxy = None): |
| 54 | 52 | super(XmlWeather,self).__init__() |
| 55 | 53 | self.__data = '' |
| 56 | 54 | self.__state = state |
| 57 | 55 | self.__dom = [] |
| 58 | | self.__baseurl = 'http://www.weather.gov/alerts/' |
| 59 | | self.__namespace = 'http://purl.org/dc/elements/1.1/' |
| 60 | | self.__url = self.__baseurl + self.__state.lower() + ".cap" |
| 61 | | self.__tag_item = 'cap:info' |
| 62 | | self.__history = history |
| | 56 | self.__baseurl = 'http://www.weather.gov/wwarss-tst/' |
| | 57 | self.__url = self.__baseurl + self.__state.lower() + ".php?x=0" |
| | 58 | self.__tag_item = 'entry' |
| 63 | 59 | self.__simfetch = simfetch |
| 64 | | self.log = logging.getLogger("XmlWeather") |
| | 60 | self.__proxy = proxy |
| | 61 | self.__atoms = XmlFetcher(self.__url, self.__simfetch, self.__proxy) |
| | 62 | self.log = logging.getLogger("XmlWeather") |
| 65 | 63 | |
| 66 | 64 | self.log.setLevel(logging.DEBUG) |
| … |
… |
|
| 74 | 72 | |
| 75 | 73 | def __fetch(self): |
| 76 | | self.log.info("Fetching: " + self.__url) |
| 77 | | try: |
| 78 | | if(self.__simfetch): |
| 79 | | self.log.info("Simulating fetch using examples directory") |
| 80 | | self.__dom = minidom.parse("examples/" + self.__state.lower() + ".cap") |
| 81 | | else: |
| 82 | | self.__dom = minidom.parse(urllib.urlopen(self.__url)) |
| 83 | | except IOError,e: |
| 84 | | # No net connection available, exit. |
| 85 | | self.log.error("Internet connection not available?, exiting: %s" % e) |
| 86 | | sys.exit() |
| | 74 | self.__dom = self.__atoms.fetch() |
| 87 | 75 | |
| 88 | 76 | def __str__(self): |
| 89 | 77 | str = "XmlWeather:\n" + \ |
| | 78 | "SimFetch: " + self.__simfetch + "\n" + \ |
| | 79 | "Proxy: " + self.__proxy + "\n" + \ |
| 90 | 80 | "State: " + self.__state + "\n" + \ |
| 91 | 81 | "URL: " + self.__url + "\n" |
| 92 | | |
| 93 | | if(self.__simfetch): |
| 94 | | str += "Sim Fetch: yes\n" |
| 95 | | else: |
| 96 | | str += "Sim Fetch: no\n" |
| 97 | 82 | return str |
| 98 | 83 | |
| … |
… |
|
| 102 | 87 | def __parse(self): |
| 103 | 88 | for capXmlText in self.__dom.getElementsByTagName(self.__tag_item): |
| 104 | | cap_item = CAP(capXmlText, self.__state) |
| 105 | | #cap_item.display() |
| 106 | | if(not self.__history.exists(cap_item.id)): |
| 107 | | alerted = self.handleAlert(cap_item) |
| 108 | | if(alerted): |
| 109 | | self.__history.add(cap_item.id) |
| 110 | | else: |
| 111 | | self.log.debug("Ignoring %s: Already alerted on" % cap_item.id) |
| | 89 | self.handleAtom(WeatherAlert(capXmlText, self.__state)) |
| 112 | 90 | |
| | 91 | def getSimFetch(self): |
| | 92 | return self.__simfetch |
| 113 | 93 | |
| 114 | | def handleAlert(self,cap_item): |
| 115 | | self.log.debug("handleAlert(%s) - %s/%s" % (cap_item.id, cap_item.county, cap_item.state)) |
| 116 | | return True |
| | 94 | simfetch = property(getSimFetch,None,None) |
| | 95 | |
| | 96 | def getProxy(self): |
| | 97 | return self.__proxy |
| | 98 | |
| | 99 | proxy = property(getProxy,None,None) |
-
|
r184
|
r190
|
|
| 121 | 121 | for state in conf.states: |
| 122 | 122 | log.info("State: " + state) |
| 123 | | xw = StormWeather(state,history,options.simfetch,options.simalert) |
| | 123 | xw = StormWeather(state,history,options.simfetch,options.simalert,conf.proxy) |
| 124 | 124 | #xw.display() |
| 125 | 125 | for dev in conf.devices: |