Compare commits
2 Commits
nilmrun-2.
...
nilmrun-2.
Author | SHA1 | Date | |
---|---|---|---|
c36b9b97e0 | |||
549a27e66c |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,8 +3,8 @@ build/
|
||||
*.pyc
|
||||
dist/
|
||||
nilmrun.egg-info/
|
||||
.eggs/
|
||||
|
||||
# This gets generated as needed by setup.py
|
||||
MANIFEST.in
|
||||
MANIFEST
|
||||
|
||||
|
8
MANIFEST.in
Normal file
8
MANIFEST.in
Normal file
@@ -0,0 +1,8 @@
|
||||
# Root
|
||||
include README.md
|
||||
include setup.py
|
||||
include versioneer.py
|
||||
include Makefile
|
||||
|
||||
# Version
|
||||
include nilmrun/_version.py
|
15
Makefile
15
Makefile
@@ -1,9 +1,6 @@
|
||||
# By default, run the tests.
|
||||
all: test
|
||||
|
||||
test2:
|
||||
nilmrun/trainola.py data.js
|
||||
|
||||
version:
|
||||
python3 setup.py version
|
||||
|
||||
@@ -23,8 +20,11 @@ develop:
|
||||
docs:
|
||||
make -C docs
|
||||
|
||||
ctrl: flake
|
||||
flake:
|
||||
flake8 nilmrun
|
||||
lint:
|
||||
pylint3 --rcfile=.pylintrc nilmdb
|
||||
pylint3 --rcfile=setup.cfg nilmrun
|
||||
|
||||
test:
|
||||
ifneq ($(INSIDE_EMACS),)
|
||||
@@ -37,12 +37,13 @@ else
|
||||
endif
|
||||
|
||||
clean::
|
||||
find . -name '*.pyc' -o -name '__pycache__' -print0 | xargs -0 rm -rf
|
||||
rm -f .coverage
|
||||
find . -name '*pyc' | xargs rm -f
|
||||
rm -rf nilmtools.egg-info/ build/ MANIFEST.in
|
||||
rm -rf nilmrun.egg-info/ build/
|
||||
make -C docs clean
|
||||
|
||||
gitclean::
|
||||
git clean -dXf
|
||||
|
||||
.PHONY: all version dist sdist install docs lint test clean gitclean
|
||||
.PHONY: all version dist sdist install docs test
|
||||
.PHONY: ctrl lint flake clean gitclean
|
||||
|
@@ -1,5 +1,3 @@
|
||||
import nilmrun.processmanager
|
||||
|
||||
from ._version import get_versions
|
||||
__version__ = get_versions()['version']
|
||||
del get_versions
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from nilmdb.utils.printf import *
|
||||
|
||||
import threading
|
||||
import subprocess
|
||||
import io
|
||||
@@ -15,9 +13,11 @@ import tempfile
|
||||
import atexit
|
||||
import shutil
|
||||
|
||||
|
||||
class ProcessError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class LogReceiver(object):
|
||||
"""Spawn a thread that listens to a pipe for log messages,
|
||||
and stores them locally."""
|
||||
@@ -41,6 +41,7 @@ class LogReceiver(object):
|
||||
def clear(self):
|
||||
self.log = io.BytesIO()
|
||||
|
||||
|
||||
class Process(object):
|
||||
"""Spawn and manage a subprocess, and capture its output."""
|
||||
def __init__(self, argv, tempfile=None):
|
||||
@@ -180,6 +181,7 @@ class Process(object):
|
||||
pass
|
||||
return d
|
||||
|
||||
|
||||
class ProcessManager(object):
|
||||
"""Track and manage a collection of Process objects"""
|
||||
def __init__(self):
|
||||
@@ -260,7 +262,8 @@ class ProcessManager(object):
|
||||
|
||||
def get_info(self):
|
||||
"""Get info about all running PIDs"""
|
||||
info = { "total" : Process.get_empty_info(),
|
||||
info = {
|
||||
"total": Process.get_empty_info(),
|
||||
"pids": {},
|
||||
"system": {}
|
||||
}
|
||||
|
@@ -1,18 +1,12 @@
|
||||
"""CherryPy-based server for running NILM filters via HTTP"""
|
||||
|
||||
import cherrypy
|
||||
import sys
|
||||
import os
|
||||
import socket
|
||||
import json
|
||||
import traceback
|
||||
import time
|
||||
|
||||
import nilmdb
|
||||
from nilmdb.utils.printf import *
|
||||
from nilmdb.utils.printf import sprintf
|
||||
from nilmdb.server.serverutil import (
|
||||
chunked_response,
|
||||
response_type,
|
||||
exception_to_httperror,
|
||||
CORS_allow,
|
||||
json_to_request_params,
|
||||
@@ -23,10 +17,12 @@ from nilmdb.server.serverutil import (
|
||||
)
|
||||
from nilmdb.utils import serializer_proxy
|
||||
import nilmrun
|
||||
import nilmrun.processmanager
|
||||
|
||||
# Add CORS_allow tool
|
||||
cherrypy.tools.CORS_allow = cherrypy.Tool('on_start_resource', CORS_allow)
|
||||
|
||||
|
||||
# CherryPy apps
|
||||
class App(object):
|
||||
"""Root application for NILM runner"""
|
||||
@@ -53,6 +49,7 @@ class App(object):
|
||||
def version(self):
|
||||
return nilmrun.__version__
|
||||
|
||||
|
||||
class AppProcess(object):
|
||||
|
||||
def __init__(self, manager):
|
||||
@@ -116,6 +113,7 @@ class AppProcess(object):
|
||||
self.manager.remove(pid)
|
||||
return status
|
||||
|
||||
|
||||
class AppRun(object):
|
||||
def __init__(self, manager):
|
||||
self.manager = manager
|
||||
@@ -154,6 +152,7 @@ class AppRun(object):
|
||||
"args must be a list of strings")
|
||||
return self.manager.run_code(code, args)
|
||||
|
||||
|
||||
class Server(object):
|
||||
def __init__(self, host='127.0.0.1', port=8080,
|
||||
force_traceback=False, # include traceback in all errors
|
||||
@@ -181,8 +180,10 @@ class Server(object):
|
||||
# Set up Cross-Origin Resource Sharing (CORS) handler so we
|
||||
# can correctly respond to browsers' CORS preflight requests.
|
||||
# This also limits verbs to GET and HEAD by default.
|
||||
app_config.update({ 'tools.CORS_allow.on': True,
|
||||
'tools.CORS_allow.methods': ['GET', 'HEAD'] })
|
||||
app_config.update({
|
||||
'tools.CORS_allow.on': True,
|
||||
'tools.CORS_allow.methods': ['GET', 'HEAD']
|
||||
})
|
||||
|
||||
# Configure the 'json_in' tool to also allow other content-types
|
||||
# (like x-www-form-urlencoded), and to treat JSON as a dict that
|
||||
@@ -226,10 +227,13 @@ class Server(object):
|
||||
def stop(self):
|
||||
cherrypy_stop()
|
||||
|
||||
|
||||
# Multiple processes and threads should be OK here, but we'll still
|
||||
# follow the NilmDB approach of having just one globally initialized
|
||||
# copy of the server object.
|
||||
_wsgi_server = None
|
||||
|
||||
|
||||
def wsgi_application(basepath): # pragma: no cover
|
||||
"""Return a WSGI application object.
|
||||
|
||||
@@ -247,8 +251,7 @@ def wsgi_application(basepath): # pragma: no cover
|
||||
except Exception:
|
||||
# Build an error message on failure
|
||||
import pprint
|
||||
err = sprintf("Initializing nilmrun failed:\n\n",
|
||||
dbpath)
|
||||
err = "Initializing nilmrun failed:\n\n"
|
||||
err += traceback.format_exc()
|
||||
try:
|
||||
import pwd
|
||||
@@ -263,8 +266,10 @@ def wsgi_application(basepath): # pragma: no cover
|
||||
err += sprintf("\nEnvironment:\n%s\n", pprint.pformat(environ))
|
||||
if _wsgi_server is None:
|
||||
# Serve up the error with our own mini WSGI app.
|
||||
headers = [ ('Content-type', 'text/plain'),
|
||||
('Content-length', str(len(err))) ]
|
||||
headers = [
|
||||
('Content-type', 'text/plain'),
|
||||
('Content-length', str(len(err)))
|
||||
]
|
||||
start_response("500 Internal Server Error", headers)
|
||||
return [err]
|
||||
|
||||
|
Reference in New Issue
Block a user