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]<mailto:[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/SY4P282MB09240EF00D91704E6CDD6E20AB60A%40SY4P282MB0924.AUSP282.PROD.OUTLOOK.COM.
