@Darryn - I've created the issue. In my case the combination of not downloading the file and not having a cached file means the self.root and self.root_node variables are never defined.
@Greg - I upgraded WeeWx but I have also edited the various files as required for the new version of ausearch. I suspect that there is something going on on the BoM side with their new restrictions, especially of downloading http(s) files. I tried to download the local warnings XML file (which has an http:// prefix) in my browser and it works. However using curl give me a message about trying to screen-scrape and wget gives me a 403 (forbidden) error. Thanks for the on-going interest. On Friday, 13 February 2026 at 8:54:05 am UTC+11 Greg from Oz wrote: > Are you running a fresh install or upgrading a working weewx site? > I was upgrading my working weewx site and I had errors after using the new > aussearch.py and there are changes to the template pages that the new > ausseach needs. > Check the forecast and index tmpl etc that you are using to the ones in > the zip file latest files using meld or vimdiff as there were changes to > the logic in those pages. There was a if/end statement that was in the > wrong place. > I don't know if the errors you are seeing were the same as I was getting. > Darryn helped a lot and fixed up all the errors I had. My programming > skills are not up that level to debug. > On Thursday, 12 February 2026 at 21:02:08 UTC+11 Carlingford Weather wrote: > >> Susan, >> >> Can you copy this to an issue on GitHub ( >> https://github.com/Lint-Free-Technology/weewx-responsive-skin/issues). >> Easier to track and discuss than in email. Thanks. >> >> Setting self.root = None where you suggest stops using the cache file if >> a download fails - that is why self.root is only set to None once a file >> has been downloaded (and if failed goes via the exception path). So what is >> puzzling here is why is self.root incorrect, which suggests a bad cache >> file like I suggested earlier. >> >> Anyhow, we can discuss further on GitHub issue. >> >> Thanks >> >> Darryn >> >> Get Outlook for Mac <https://aka.ms/GetOutlookForMac> >> *From: *[email protected] <[email protected]> on behalf >> of Susan Mackay <[email protected]> >> *Date: *Thursday, 12 February 2026 at 8:36 pm >> *To: *weewx-user <[email protected]> >> *Subject: *Re: [weewx-user] Re: Weewx Responsive Skin - Aus Forecast >> Extension >> >> @Greg - yes I did uncomment that line, a long time ago as the original >> installation (2020???) was working well. >> I've also tried updating WeeWx to V5.2.0 to see if that made a difference >> - nope. >> For fun, I've comment out all of the __getattr__ function and the error >> message is now: >> >> Caught unrecoverable exception in generator >> 'weewx.cheetahgenerator.CheetahGenerator' >> **** 'XmlFileHelper' object has no attribute 'root' >> **** Traceback (most recent call last): >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 248, in run >> **** obj.start() >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 465, in start >> **** self.run() >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 163, in run >> **** self.init_extensions(gen_dict[section_name]) >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 196, in init_extensions >> **** self.search_list_objs.append(klass(self)) >> **** File "/home/weewx/bin/user/aussearch.py", line 253, in __init__ >> **** generator.converter) >> **** File "/home/weewx/bin/user/aussearch.py", line 422, in __init__ >> **** if file_stale and self.root is not None: >> **** AttributeError: 'XmlFileHelper' object has no attribute 'root' >> **** Generator terminated >> >> That error had me intrigued so I went back to the 'XmlFileHelper' class >> and put a 'log.error' at the start of the __init__ function to print out >> the file name it was trying to process. the result is: >> >> ERROR user.aussearch: >>> xml_file is >> ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10753.xml >> ERROR user.aussearch: >>> xml_file is >> ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10751.xml >> ERROR user.aussearch: >>> xml_file is >> http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml >> ERROR weewx.reportengine: Caught unrecoverable exception in generator >> 'weewx.cheetahgenerator.CheetahGenerator' >> ERROR weewx.reportengine: **** 'XmlFileHelper' object has no >> attribute 'root' >> ERROR weewx.reportengine: **** Traceback (most recent call last): >> ERROR weewx.reportengine: **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 248, in run >> ERROR weewx.reportengine: **** obj.start() >> ERROR weewx.reportengine: **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 465, in start >> ERROR weewx.reportengine: **** self.run() >> ERROR weewx.reportengine: **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 163, in run >> ERROR weewx.reportengine: **** >> self.init_extensions(gen_dict[section_name]) >> ERROR weewx.reportengine: **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 196, in init_extensions >> ERROR weewx.reportengine: **** >> self.search_list_objs.append(klass(self)) >> ERROR weewx.reportengine: **** File >> "/home/weewx/bin/user/aussearch.py", line 253, in __init__ >> ERROR weewx.reportengine: **** generator.converter) >> ERROR weewx.reportengine: **** File >> "/home/weewx/bin/user/aussearch.py", line 424, in __init__ >> ERROR weewx.reportengine: **** if file_stale and self.root >> is not None: >> ERROR weewx.reportengine: **** AttributeError: 'XmlFileHelper' >> object has no attribute 'root' >> ERROR weewx.reportengine: **** Generator terminated >> >> I assume the error occurred in the last file listed but that file does >> exist on the web site: >> >> <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> >> <channel> >> <title>Weather Warnings for Victoria. Issued by the Australian Bureau of >> Meteorology</title> >> <link>http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml</link> >> <atom:link href="http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml >> " rel="self" type="application/rss+xml"/> >> <description>Current weather warnings for Victoria, Australia including >> strong wind, gale, storm force and hurricane force wind warnings; tsunami; >> damaging waves; abnormally high tides; tropical cyclones; severe >> thunderstorms; severe weather; fire weather; flood; frost; driving; >> bushwalking; sheep graziers and other agricultural warnings.</description> >> <language>en-au</language> >> <copyright>Copyright: (C) Copyright Commonwealth of Australia 2010, >> Bureau of Meteorology (ABN 92637 533532), see >> http://www.bom.gov.au/other/copyright.shtml for terms and conditions of >> reuse.</copyright> >> <webMaster>[email protected] (Help desk)</webMaster> >> <pubDate>Thu, 12 Feb 2026 08:27:29 GMT</pubDate> >> <lastBuildDate>Thu, 12 Feb 2026 08:27:29 GMT</lastBuildDate> >> <generator>Australian Bureau of Meteorology</generator> >> <ttl>10</ttl> >> <image> >> <url>http://www.bom.gov.au/images/bom_logo_inline.gif</url> >> <title>Weather Warnings for Victoria. Issued by the Australian Bureau of >> Meteorology</title> >> <link>http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml</link> >> </image> >> <item> >> <title>12/16:15 EDT Marine Wind Warning Summary for Victoria</title> >> <link>http://www.bom.gov.au/vic/warnings/marinewind.shtml</link> >> <pubDate>Thu, 12 Feb 2026 05:15:17 GMT</pubDate> >> <guid isPermaLink="false"> >> http://www.bom.gov.au/vic/warnings/marinewind.shtml</guid> >> </item> >> </channel> >> </rss> >> >> The first 2 files mentioned above are in the weewx-cache/aussearch folder >> but the 3rd one (the 'VIC_WARNINGS' in the skins.conf file) isn't. >> Therefore the file will be marked as 'stale' (line 409) and an attempt is >> made to download the file. However (changing a few of the 'log.debug' to >> 'log.error' calls) the 'FileFetch.fetch()' fails with: >> >> ERROR user.aussearch: >>>> aussearch: bad file download xml file >> http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml: Bad response 301 >> for url http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml >> >> which is caught in the 'except' clause. The problem is that this >> completely bypasses any place where 'self.root' is defined. The solution is >> to add a 'self.root = None' just below the 'if file_stale: where it tries >> to read the file. >> The same is true for the 'JsonFileHelper' class. >> I don't know why the files are not being downloaded (the '301' error >> response) but at least this stops the reporter crashing. >> >> (Apologies for the length of this post but I was working through the >> issue as I wrote it.) >> On Thursday, 12 February 2026 at 11:35:00 am UTC+11 Greg from Oz wrote: >> >> Did you uncomment this bit in the skin.conf? >> >> # To use the aussearch extensions in this skin >> # you need to have downloaded Auusearch user extension as per >> # >> https://github.com/dcapslock/weewx-responsive-skin/wiki/Australian-%27Search%27-Extensions >> # end then uncomment the line below >> # search_list_extensions = user.aussearch.ausutils >> >> >> On Thursday, 12 February 2026 at 11:29:07 UTC+11 Greg from Oz wrote: >> >> The aussearch.py dated 4th Feb is the same as I am using. >> I have my weewx installed via pip and is using python 3.13. (don't know >> if that makes a difference or not) >> >> Under skins/Responsive I have: >> ├── aussearch >> ├── DATA >> ├── font >> ├── icons >> ├── lang >> ├── NOAA >> └── TEST >> >> in aussearch I have: >> .rw-r--r-- 649k root 2026-02-12 09:51 IDN11060.xml >> .rw-r--r-- 7.8k root 2026-02-12 09:55 IDN11113.xml >> .rw-r--r-- 129k root 2026-02-12 11:11 IDN60801.95762.json >> .rw-r--r-- 2.2k root 2026-02-12 11:11 IDZ00054.warnings_nsw.xml >> >> And they are being updated as you can tell by the time stamp. >> >> My site is here: >> https://weather.ubeaut.work/ >> >> >> On Thursday, 12 February 2026 at 11:18:22 UTC+11 Carlingford Weather >> wrote: >> >> Check if you have old cache files the specified or default aussearch >> cache location. >> >> ------------------------------ >> *From:* [email protected] <[email protected]> on behalf >> of Susan Mackay <[email protected]> >> *Sent:* Thursday, February 12, 2026 11:13:27 AM >> >> *To:* weewx-user <[email protected]> >> *Subject:* Re: [weewx-user] Re: Weewx Responsive Skin - Aus Forecast >> Extension >> OK - now I'm properly confused. >> I deleted all 'aussearch.py' files and copied the downloaded file into >> bin/user. (I know that the Python system found it as it created a >> corresponding .pyc file in __pycache__). However the error was the same. >> So I deleted that and downloaded the file again from >> https://github.com/Lint-Free-Technology/weewx-responsive-skin/blob/master/Aus/aussearch.py. >> >> Github shows that the file was edited 2 weeks ago so I take it that this is >> the latest version. >> Again the same error. >> So I edited the file to include a couple of print statements just before >> the reference to 'self.root_node', one of which tried to print out the >> value. The recursion occurred on that print statement. >> Am I copying the correct 'aussearch.py' version and, if not, where is it? >> Susan (VK3ANZ) >> >> On Wednesday, 11 February 2026 at 8:47:21 pm UTC+11 Greg from Oz wrote: >> >> The new aussearch.py has to go into where your other user scripts are. >> Like bin/user folder in the weewx structure. >> >> On Wednesday, 11 February 2026 at 20:34:13 UTC+11 Susan Mackay wrote: >> >> Thanks for the pointers. >> I downloaded the .zip file (as above) and expanded it. I then copied the >> 'Aus' and 'Responsive' directories into the 'skins' folder. >> I edited the skins.conf file to refer to my location (basically I copied >> the information from the old version of the file, adjusting as required). >> However I now get the error: >> >> Caught unrecoverable exception in generator >> 'weewx.cheetahgenerator.CheetahGenerator' >> **** maximum recursion depth exceeded >> **** Traceback (most recent call last): >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 220, in run >> **** obj.start() >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/reportengine.py", >> line 409, in start >> **** self.run() >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 163, in run >> **** self.init_extensions(gen_dict[section_name]) >> **** File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weewx/cheetahgenerator.py", >> line 196, in init_extensions >> **** self.search_list_objs.append(klass(self)) >> **** File "/home/weewx/bin/user/aussearch.py", line 253, in __init__ >> **** generator.converter) >> **** File "/home/weewx/bin/user/aussearch.py", line 422, in __init__ >> **** if file_stale and self.root is not None: >> **** File "/home/weewx/bin/user/aussearch.py", line 439, in __getattr__ >> **** if self.root_node is not None: >> **** File "/home/weewx/bin/user/aussearch.py", line 439, in __getattr__ >> **** if self.root_node is not None: >> **** File "/home/weewx/bin/user/aussearch.py", line 439, in __getattr__ >> **** if self.root_node is not None: >> **** [Previous line repeated 491 more times] >> **** RecursionError: maximum recursion depth exceeded >> **** Generator terminated >> >> The relevant code (from Line 433) of aussearch.py is >> >> def __getattr__(self, child_or_attrib): >> # This is to get around bugs in the Python version of Cheetah's >> namemapper: >> if child_or_attrib in ['__call__', 'has_key']: >> print("aussearch: XmlFileHelper file: %s, __getattr__ called >> for %s" % (self.xml_file, child_or_attrib)) >> raise AttributeError >> >> if self.root_node is not None: >> return getattr(self.root_node, child_or_attrib) >> else: >> raise AttributeError >> >> with line 439 being: >> >> if self.root_node is not None: >> >> My 'guess' is that the attempt to get "self.root_node" is recursively >> calling the "__getattr__" function >> >> Any idea what is hapening here? >> On Wednesday, 11 February 2026 at 10:31:01 am UTC+11 Greg from Oz wrote: >> >> That's probably why I installed it manually......:) >> It was a long time ago I installed it. >> On Wednesday, 11 February 2026 at 10:16:49 UTC+11 Glenn McKechnie wrote: >> >> Susan, >> >> Just had a quick look at the origin files (both sites) and the error >> message is because there is no install.py file within the tree. >> ie:- It doesn't install using the weectl stanza, it's not structured that >> way. >> >> It needs to be installed manually. >> The skin directory is "Responsive". Place that with in the weewx skin >> directory and manually edit weewx.conf to point to it etc. >> >> >> Cheers >> Glenn (VK3GLN) >> >> Various WeeWx addons at >> https://github.com/glennmckechnie >> >> >> On Wed, 11 Feb 2026 at 10:09, Greg Reive <[email protected]> wrote: >> >> I think if you download the zip file and install the extension it might >> work? It won't like the .git extension filename. >> I manually installed mine. >> >> On Wed, 11 Feb 2026 at 10:04, Susan Mackay <[email protected]> wrote: >> >> (I think my question follows on from Greg's answer - apologies if not) >> I have just tried to reinstall the Responsive skin using Greg's link from >> above. >> I'm using Weewx 5.0.1 (and yes, i know there are more recent versions) on >> a Raspberry Pi running Buster. >> I've tried 2 ways and get 2 separate errors. >> >> First: >> >> (weewx-venv) xxxx:~/weewx-venv $ ./bin/weectl extension install >> https://github.com/Lint-Free-Technology/weewx-responsive-skin.git >> Using configuration file /home/weewx/weewx.conf >> Install extension ' >> https://github.com/Lint-Free-Technology/weewx-responsive-skin.git' >> (y/n)? y >> Traceback (most recent call last): >> File "./bin/weectl", line 10, in <module> >> sys.exit(main()) >> File "/home/pi/weewx-venv/lib/python3.7/site-packages/weectl.py", line >> 66, in main >> namespace.func(namespace) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weectllib/__init__.py", >> line 121, in dispatch >> namespace.action_func(config_dict, namespace) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weectllib/extension_cmd.py", >> >> line 116, in install_extension >> ext.install_extension(namespace.source, no_confirm=namespace.yes) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/extension.py", line >> 124, in install_extension >> raise IOError(f"Unknown extension type found at '{extension_path}'") >> OSError: Unknown extension type found at ' >> https://github.com/Lint-Free-Technology/weewx-responsive-skin.git' >> I think this may be more related to the WeeWx not recognising the .git >> extension but I'm not sure. >> I copied the zip file to the Pi and got the Second error which is: >> >> (weewx-venv) xxxx:~/weewx-venv $ ./bin/weectl extension install >> /mnt/pishare/weewx-responsive-skin-master.zip >> Using configuration file /home/weewx/weewx.conf >> Install extension '/mnt/pishare/weewx-responsive-skin-master.zip' (y/n)? y >> Extracting from zip archive /mnt/pishare/weewx-responsive-skin-master.zip >> Traceback (most recent call last): >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/__init__.py", line >> 714, in get_extension_installer >> __import__('install') >> ModuleNotFoundError: No module named 'install' >> >> During handling of the above exception, another exception occurred: >> >> Traceback (most recent call last): >> File "./bin/weectl", line 10, in <module> >> sys.exit(main()) >> File "/home/pi/weewx-venv/lib/python3.7/site-packages/weectl.py", line >> 66, in main >> namespace.func(namespace) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weectllib/__init__.py", >> line 121, in dispatch >> namespace.action_func(config_dict, namespace) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weectllib/extension_cmd.py", >> >> line 116, in install_extension >> ext.install_extension(namespace.source, no_confirm=namespace.yes) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/extension.py", line >> 138, in install_extension >> extension_name = self._install_from_file(extension_path, filetype) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/extension.py", line >> 168, in _install_from_file >> extension_name = self.install_from_dir(extension_dir) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/extension.py", line >> 179, in install_from_dir >> installer_path, installer = >> weecfg.get_extension_installer(extension_dir) >> File >> "/home/pi/weewx-venv/lib/python3.7/site-packages/weecfg/__init__.py", line >> 716, in get_extension_installer >> raise ExtensionError("Cannot find 'install' module in %s" % >> extension_installer_dir) >> weecfg.ExtensionError: Cannot find 'install' module in >> /tmp/tmpkrjxk9dm/weewx-responsive-skin-master/ >> >> What am I doing wrong? >> Susan >> On Wednesday, 4 February 2026 at 4:54:48 pm UTC+11 Greg from Oz wrote: >> >> The forecast and the weather warning were causing the Responsive skin to >> crash. >> Darryn has fixed the crashes and now everything is working again. >> >> https://github.com/dcapslock/weewx-responsive-skin >> >> This new BOM website is taking a while to iron all the bugs out. >> >> My site is here: https://weather.ubeaut.work/ >> >> Thanks again Daryn. I still really like this skin for weewx. >> >> >> On Saturday, 6 February 2021 at 22:52:28 UTC+11 Greg from Oz wrote: >> >> Yes my icons disappeared as my site is https but I changed a setting on >> the browser just for my site. >> >> On chrome it is called insecure content. >> >> Then the icons came back again. >> >> >> >> On Saturday, 6 February 2021 at 20:41:16 UTC+11 Darryn Capes-Davis wrote: >> >> Hi All, >> >> Long time since my last post. A few months ago I noticed that my iPhone >> stopped showing the BOM Forecast icons. With the change to everything >> needing to be HTTPS, the BOM HTTP only icons will only continue to >> disappear if you host the Responsive skin on HTTPS, like I do at >> https://carlingfordweather.sydney, and you use a modern strict browser. >> >> So I took time to source some weather icons and adjust and size to suit >> the Aus Forecast part of the Responsive skin. The changes have been push to >> GitHub - https://github.com/dcapslock/weewx-responsive-skin >> >> Also included is some exception handling to mark corrupt downloaded >> forecast files as stale. >> >> Regards >> >> Darryn Capes-Davis >> https://carlingfordweather.sydney >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "weewx-user" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/weewx-user/tsujx_iCtFc/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To view this discussion visit >> https://groups.google.com/d/msgid/weewx-user/f7b04572-fc95-437f-81df-85325a2419a0n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/weewx-user/f7b04572-fc95-437f-81df-85325a2419a0n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> >> >> -- >> ¯\_(ツ)_/¯ >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> "weewx-user" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion visit >> https://groups.google.com/d/msgid/weewx-user/CAD_tbc9LHv%3DQ_8iuKYdo70Qpg%2B2BCfvwFYZa-bONAhwCEbB%2BPA%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/weewx-user/CAD_tbc9LHv%3DQ_8iuKYdo70Qpg%2B2BCfvwFYZa-bONAhwCEbB%2BPA%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "weewx-user" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/weewx-user/tsujx_iCtFc/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To view this discussion visit >> https://groups.google.com/d/msgid/weewx-user/f1936929-5b06-4aa7-bd39-9a3c264fc009n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/weewx-user/f1936929-5b06-4aa7-bd39-9a3c264fc009n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "weewx-user" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/weewx-user/tsujx_iCtFc/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To view this discussion visit >> https://groups.google.com/d/msgid/weewx-user/0a782061-b994-48fa-ad25-320d4c718c4dn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/weewx-user/0a782061-b994-48fa-ad25-320d4c718c4dn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/weewx-user/891c5909-50e5-4164-9ca7-25173c50a9f9n%40googlegroups.com.
