Browse Source

Add --force-metadata option; fix bugs

tags/nilmtools-1.0^0
Jim Paris 11 years ago
parent
commit
9e321d9e41
3 changed files with 39 additions and 22 deletions
  1. +8
    -6
      src/copy_wildcard.py
  2. +10
    -4
      src/decimate_auto.py
  3. +21
    -12
      src/filter.py

+ 8
- 6
src/copy_wildcard.py View File

@@ -48,17 +48,19 @@ def main(argv = None):
# Copy them all by running the "copy" tool as if it were # Copy them all by running the "copy" tool as if it were
# invoked from the command line. # invoked from the command line.
for stream in matched: for stream in matched:
copy_argv = ["--url", client_src.geturl(),
new_argv = ["--url", client_src.geturl(),
"--dest-url", client_dest.geturl() ] "--dest-url", client_dest.geturl() ]
if args.start: if args.start:
copy_argv.extend(["--start", "@" + repr(args.start)])
new_argv.extend(["--start", "@" + repr(args.start)])
if args.end: if args.end:
copy_argv.extend(["--end", "@" + repr(args.end)])
new_argv.extend(["--end", "@" + repr(args.end)])
if args.dry_run: if args.dry_run:
copy_argv.extend(["--dry-run"])
copy_argv.extend([stream[0], stream[0]])
new_argv.extend(["--dry-run"])
if args.force_metadata:
new_argv.extend(["--force-metadata"])
new_argv.extend([stream[0], stream[0]])
try: try:
nilmtools.copy_one.main(copy_argv)
nilmtools.copy_one.main(new_argv)
except SystemExit as e: except SystemExit as e:
# Ignore SystemExit which could be raised on --dry-run # Ignore SystemExit which could be raised on --dry-run
if e.code != 0: if e.code != 0:


+ 10
- 4
src/decimate_auto.py View File

@@ -19,6 +19,10 @@ def main(argv = None):
help="NilmDB server URL (default: %(default)s)") help="NilmDB server URL (default: %(default)s)")
parser.add_argument('-f', '--factor', action='store', default=4, type=int, parser.add_argument('-f', '--factor', action='store', default=4, type=int,
help='Decimation factor (default: %(default)s)') help='Decimation factor (default: %(default)s)')
parser.add_argument("--force-metadata", action="store_true",
default = False,
help="Force metadata changes if the dest "
"doesn't match")
parser.add_argument("path", action="store", parser.add_argument("path", action="store",
help='Path of base stream') help='Path of base stream')
args = parser.parse_args(argv) args = parser.parse_args(argv)
@@ -58,10 +62,12 @@ def main(argv = None):
client.stream_create(new_path, decimated_type) client.stream_create(new_path, decimated_type)


# Run the decimation as if it were run from the commandline # Run the decimation as if it were run from the commandline
nilmtools.decimate.main(["-u", args.url,
"-f", str(args.factor),
info.path,
new_path])
new_argv = [ "-u", args.url,
"-f", str(args.factor) ]
if args.force_metadata:
new_argv.extend([ "--force-metadata" ])
new_argv.extend([info.path, new_path])
nilmtools.decimate.main(new_argv)


# Update info using the newly decimated stream # Update info using the newly decimated stream
info = nilmtools.filter.get_stream_info(client, new_path) info = nilmtools.filter.get_stream_info(client, new_path)


+ 21
- 12
src/filter.py View File

@@ -76,6 +76,7 @@ class Filter(object):
self.start = None self.start = None
self.end = None self.end = None
self.interhost = False self.interhost = False
self.force_metadata = False


@property @property
def client_src(self): def client_src(self):
@@ -105,6 +106,10 @@ class Filter(object):
default = False, default = False,
help="Just print intervals that would be " help="Just print intervals that would be "
"processed") "processed")
group.add_argument("--force-metadata", action="store_true",
default = False,
help="Force metadata changes if the dest "
"doesn't match")
group.add_argument("-s", "--start", group.add_argument("-s", "--start",
metavar="TIME", type=self.arg_time, metavar="TIME", type=self.arg_time,
help="Starting timestamp for intervals " help="Starting timestamp for intervals "
@@ -162,6 +167,8 @@ class Filter(object):
print self.interval_string(interval) print self.interval_string(interval)
raise SystemExit(0) raise SystemExit(0)


self.force_metadata = args.force_metadata

self.start = args.start self.start = args.start
self.end = args.end self.end = args.end


@@ -223,18 +230,20 @@ class Filter(object):
"""See if the metadata jives, and complain if it doesn't. If """See if the metadata jives, and complain if it doesn't. If
there's no conflict, update the metadata to match 'data'.""" there's no conflict, update the metadata to match 'data'."""
metadata = self._client_dest.stream_get_metadata(self.dest.path) metadata = self._client_dest.stream_get_metadata(self.dest.path)
for key in data:
wanted = str(data[key])
val = metadata.get(key, wanted)
if val != wanted and self.dest.rows > 0:
m = "Metadata in destination stream:\n"
m += " %s = %s\n" % (key, val)
m += "doesn't match desired data:\n"
m += " %s = %s\n" % (key, wanted)
m += "Refusing to change it. To prevent this error, "
m += "change or delete the metadata with nilmtool,\n"
m += "or remove existing data from the stream."
raise Exception(m)
if not self.force_metadata:
for key in data:
wanted = str(data[key])
val = metadata.get(key, wanted)
if val != wanted and self.dest.rows > 0:
m = "Metadata in destination stream:\n"
m += " %s = %s\n" % (key, val)
m += "doesn't match desired data:\n"
m += " %s = %s\n" % (key, wanted)
m += "Refusing to change it. To prevent this error, "
m += "change or delete the metadata with nilmtool,\n"
m += "remove existing data from the stream, or "
m += "retry with --force-metadata."
raise Exception(m)
# All good -- write the metadata in case it's not already there # All good -- write the metadata in case it's not already there
self._client_dest.stream_update_metadata(self.dest.path, data) self._client_dest.stream_update_metadata(self.dest.path, data)




Loading…
Cancel
Save