You have been super helpful so far Gary, so bear with me, I am almost there.
My program is now called S3UploadGenerator and is in the bin/user
directory. I have also successfully installed weewx 4.0 on my raspberry pi
using python3, which is also now the default
Calling it from the command line now works perfectly and I also
successfully call it when running weewxd
But: 1 error remains when s3upload.py is called:
Traceback (most recent call last):
File "/home/weewx/bin/weewx/reportengine.py", line 202, in run
obj.start()
AttributeError: 'S3Upload' object has no attribute 'start'
Exception in thread ReportThread:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/home/weewx/bin/weewx/reportengine.py", line 215, in run
obj.finalize()
AttributeError: 'S3Upload' object has no attribute 'finalize'
I have searched the manuals and looked at all of the existing code and
can't work out what to do to resolve this.
my S3/skin.conf contains the following:
[Generators]
generator_list = user.s3upload.S3Upload
This is the relevant part of s3upload.py
import logging
import os
import sys
import time
import boto3
from weewx.reportengine import ReportGenerator
from six.moves import cPickle
log = logging.getLogger(__name__)
#
=============================================================================
# Class S3UploadGenerator
#
=============================================================================
class S3UploadGenerator(ReportGenerator):
"""Class for managing the "AWS generator".
This will copy everything in the public_html subdirectory to a
webserver."""
def run(self):
import user.s3upload
# determine how much logging is desired
log_success = to_bool(search_up(self.skin_dict, 'log_success',
True))
t1 = time.time()
try:
S3_upload =
user.s3upload.S3Upload(bucket=self.skin_dict['S3_BUCKET'],
profile=self.skin_dict['AWS_Profile'],
html_root=self.config_dict['StdReport']['HTML_ROOT'],
remote_root=self.skin_dict['S3_ROOT'],
name=self.skin_dict['REPORT_NAME'])
except KeyError:
syslog.syslog(syslog.LOG_DEBUG,
"S3UploadGenerator: AWS upload not requested.
Skipped.")
return
try:
n = S3_upload.run()
except (socket.timeout, socket.gaierror, ftplib.all_errors,
IOError) as e:
(cl, unused_ob, unused_tr) = sys.exc_info()
syslog.syslog(syslog.LOG_ERR, "S3UploadGenerator: "
"Caught exception %s: %s" % (cl,
e))
weeutil.weeutil.log_traceback(" **** ")
return
if log_success:
t2 = time.time()
syslog.syslog(syslog.LOG_INFO,
"S3UploadGenerator: AWS-S3 S3'd %d files in %0.2f
seconds" %
(n, (t2 - t1)))
And this is the main, which works from the command line
#
=============================================================================
# Main
#
=============================================================================
if __name__ == '__main__':
import configobj
import weewx
import weeutil.logger
weewx.debug = 1
weeutil.logger.setup('S3upload', {})
if len(sys.argv) < 2:
print("""Usage: s3upload.py path-to-configuration-file
[path-to-be-ftp'd]""")
sys.exit(weewx.CMD_ERROR)
try:
config_dict = configobj.ConfigObj(sys.argv[1], file_error=True,
encoding='utf-8')
except IOError:
print("Unable to open configuration file %s" % sys.argv[1])
raise
S3_upload = S3Upload(config_dict['StdReport']['AWS-S3']['S3_BUCKET'],
config_dict['StdReport']['AWS-S3']['AWS_Profile'],
config_dict['StdReport']['HTML_ROOT'],
config_dict['StdReport']['AWS-S3']['S3_ROOT'],
'S3')
print(config_dict['StdReport']['AWS-S3']['S3_BUCKET'],
config_dict['StdReport']['AWS-S3']['AWS_Profile'],
config_dict['WEEWX_ROOT'],
config_dict['StdReport']['AWS-S3']['S3_ROOT'],
'S3')
S3_upload.run()
And this is the relevant section of weewx.conf
[[AWS-S3]]
# Using AWSCLI to copy the results to a webserver is treated as just
# another report, albeit one with an unusual report generator!
skin = S3
enable = true
# You must configure AWS at the command line and create some logon
credentials
# in the credentials file. This is the name of the profile defined
in that
# file that you wish to use for the copy
AWS_Profile = mike
# This is the name of the S3 bucket where the files will be copied
S3_BUCKET = s3-archive.revittmk.aws.co.uk
# This is the folder into which the files will be copied within the
S3 bucket,
S3_ROOT = /MountWeather
--
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 on the web visit
https://groups.google.com/d/msgid/weewx-user/38e9ed47-4853-4f09-80d4-0b2d73ae26af%40googlegroups.com.