Compare commits
5 Commits
nilmdb-1.8
...
nilmdb-1.8
Author | SHA1 | Date | |
---|---|---|---|
e275384d03 | |||
a6a67ec15c | |||
fc43107307 | |||
90633413bb | |||
c7c3aff0fb |
@@ -19,12 +19,12 @@ Then, set up Apache with a configuration like:
|
|||||||
|
|
||||||
<VirtualHost>
|
<VirtualHost>
|
||||||
WSGIScriptAlias /nilmdb /home/nilm/nilmdb.wsgi
|
WSGIScriptAlias /nilmdb /home/nilm/nilmdb.wsgi
|
||||||
WSGIApplicationGroup nilmdb-appgroup
|
|
||||||
WSGIProcessGroup nilmdb-procgroup
|
|
||||||
WSGIDaemonProcess nilmdb-procgroup threads=32 user=nilm group=nilm
|
WSGIDaemonProcess nilmdb-procgroup threads=32 user=nilm group=nilm
|
||||||
|
|
||||||
# Access control example:
|
|
||||||
<Location /nilmdb>
|
<Location /nilmdb>
|
||||||
|
WSGIProcessGroup nilmdb-procgroup
|
||||||
|
WSGIApplicationGroup nilmdb-appgroup
|
||||||
|
|
||||||
|
# Access control example:
|
||||||
Order deny,allow
|
Order deny,allow
|
||||||
Deny from all
|
Deny from all
|
||||||
Allow from 1.2.3.4
|
Allow from 1.2.3.4
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
"""Interval. Like nilmdb.server.interval, but re-implemented here
|
"""Interval. Like nilmdb.server.interval, but re-implemented here
|
||||||
in plain Python so clients have easier access to it.
|
in plain Python so clients have easier access to it, and with a few
|
||||||
|
helper functions.
|
||||||
|
|
||||||
Intervals are half-open, ie. they include data points with timestamps
|
Intervals are half-open, ie. they include data points with timestamps
|
||||||
[start, end)
|
[start, end)
|
||||||
@@ -34,6 +35,10 @@ class Interval:
|
|||||||
return ("[" + nilmdb.utils.time.timestamp_to_string(self.start) +
|
return ("[" + nilmdb.utils.time.timestamp_to_string(self.start) +
|
||||||
" -> " + nilmdb.utils.time.timestamp_to_string(self.end) + ")")
|
" -> " + nilmdb.utils.time.timestamp_to_string(self.end) + ")")
|
||||||
|
|
||||||
|
def human_string(self):
|
||||||
|
return ("[ " + nilmdb.utils.time.timestamp_to_human(self.start) +
|
||||||
|
" -> " + nilmdb.utils.time.timestamp_to_human(self.end) + " ]")
|
||||||
|
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
"""Compare two intervals. If non-equal, order by start then end"""
|
"""Compare two intervals. If non-equal, order by start then end"""
|
||||||
return cmp(self.start, other.start) or cmp(self.end, other.end)
|
return cmp(self.start, other.start) or cmp(self.end, other.end)
|
||||||
@@ -104,3 +109,20 @@ def set_difference(a, b):
|
|||||||
b_interval = None
|
b_interval = None
|
||||||
if a_interval:
|
if a_interval:
|
||||||
out_start = ts
|
out_start = ts
|
||||||
|
|
||||||
|
def optimize(it):
|
||||||
|
"""
|
||||||
|
Given an iterable 'it' with intervals, optimize them by joining
|
||||||
|
together intervals that are adjacent in time, and return a generator
|
||||||
|
that yields the new intervals.
|
||||||
|
"""
|
||||||
|
saved_int = None
|
||||||
|
for interval in it:
|
||||||
|
if saved_int is not None:
|
||||||
|
if saved_int.end == interval.start:
|
||||||
|
interval.start = saved_int.start
|
||||||
|
else:
|
||||||
|
yield saved_int
|
||||||
|
saved_int = interval
|
||||||
|
if saved_int is not None:
|
||||||
|
yield saved_int
|
||||||
|
@@ -59,6 +59,14 @@ class TestInterval:
|
|||||||
self.test_interval_intersect()
|
self.test_interval_intersect()
|
||||||
Interval = NilmdbInterval
|
Interval = NilmdbInterval
|
||||||
|
|
||||||
|
# Other helpers in nilmdb.utils.interval
|
||||||
|
i = [ UtilsInterval(1,2), UtilsInterval(2,3), UtilsInterval(4,5) ]
|
||||||
|
eq_(list(nilmdb.utils.interval.optimize(i)),
|
||||||
|
[ UtilsInterval(1,3), UtilsInterval(4,5) ])
|
||||||
|
eq_(UtilsInterval(1234567890123456, 1234567890654321).human_string(),
|
||||||
|
"[ Fri, 13 Feb 2009 18:31:30.123456 -0500 -> " +
|
||||||
|
"Fri, 13 Feb 2009 18:31:30.654321 -0500 ]")
|
||||||
|
|
||||||
def test_interval(self):
|
def test_interval(self):
|
||||||
# Test Interval class
|
# Test Interval class
|
||||||
os.environ['TZ'] = "America/New_York"
|
os.environ['TZ'] = "America/New_York"
|
||||||
|
Reference in New Issue
Block a user