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
# invoked from the command line.
for stream in matched:
copy_argv = ["--url", client_src.geturl(),
new_argv = ["--url", client_src.geturl(),
"--dest-url", client_dest.geturl() ]
if args.start:
copy_argv.extend(["--start", "@" + repr(args.start)])
new_argv.extend(["--start", "@" + repr(args.start)])
if args.end:
copy_argv.extend(["--end", "@" + repr(args.end)])
new_argv.extend(["--end", "@" + repr(args.end)])
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:
nilmtools.copy_one.main(copy_argv)
nilmtools.copy_one.main(new_argv)
except SystemExit as e:
# Ignore SystemExit which could be raised on --dry-run
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)")
parser.add_argument('-f', '--factor', action='store', default=4, type=int,
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",
help='Path of base stream')
args = parser.parse_args(argv)
@@ -58,10 +62,12 @@ def main(argv = None):
client.stream_create(new_path, decimated_type)

# 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
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.end = None
self.interhost = False
self.force_metadata = False

@property
def client_src(self):
@@ -105,6 +106,10 @@ class Filter(object):
default = False,
help="Just print intervals that would be "
"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",
metavar="TIME", type=self.arg_time,
help="Starting timestamp for intervals "
@@ -162,6 +167,8 @@ class Filter(object):
print self.interval_string(interval)
raise SystemExit(0)

self.force_metadata = args.force_metadata

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

@@ -223,18 +230,20 @@ class Filter(object):
"""See if the metadata jives, and complain if it doesn't. If
there's no conflict, update the metadata to match 'data'."""
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
self._client_dest.stream_update_metadata(self.dest.path, data)



Loading…
Cancel
Save