mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2024-12-22 14:22:30 +00:00
Release 1.3 (#30)
* Test debian stretch+python3 (#18) * changes starting with python3 explicit * removes python modules which are not available for python3 * exchanges fyzz query parsing with rdflib functionality * fixes interop tests * replaces reduce with for loop in nodb driver * simple python2 -> python3 conversions * adds changes for handling different string handling in python3 * test stretch building with travis * installing python-setuptools in docker * installing python-setuptools in docker * changing python2 to python3 in docker makefiles * changing python2 to python3 and some other test changes * push docker only in master branche * running version of openmtc * fix some port problems * porting path library completly now * restoring travis.yml * testing new travis.yml * add sudo * updating travis OS from trusty to xenial * upgrade pip before * show running docker logs * show more logs * for debugging * showlogs of docker after failure * testing new travis.yml * finish travis.yml * Adding roadmap (#26) * adding roadmap * adding a nicer view for some documents * creating contributions.md (#27) * travis only building on master branch (#25) * deleting some typo * another typo * adding a contributer * bump version to 1.3.0 * better link for contributions * Port and fix simple apps * add version tag
This commit is contained in:
parent
c3ac4f9dfb
commit
1052fd4a08
79
.travis.yml
79
.travis.yml
@ -1,36 +1,55 @@
|
|||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
dist: xenial
|
||||||
before_script:
|
before_script:
|
||||||
- sudo apt update
|
- sudo apt update
|
||||||
- sudo apt install qemu-user-static
|
- sudo apt install qemu-user-static python3 python3-pip python3-setuptools
|
||||||
- "./create-binary-docker backend"
|
- sudo pip3 install --upgrade pip
|
||||||
- "./create-binary-docker backend -a arm"
|
- sudo python3 -m pip install --upgrade setuptools
|
||||||
- "./create-binary-docker gateway"
|
- sudo python3 -m pip install --upgrade pyresttest
|
||||||
- "./create-binary-docker gateway -a arm"
|
- "./create-binary-docker backend"
|
||||||
- "./create-binary-docker orioncontextbroker"
|
- "./create-binary-docker backend -a arm"
|
||||||
- "./create-binary-docker orioncontextbroker -a arm"
|
- "./create-binary-docker gateway"
|
||||||
- "./create-binary-docker influxdbapp"
|
- "./create-binary-docker gateway -a arm"
|
||||||
- "./create-binary-docker influxdbapp -a arm"
|
- "./create-binary-docker orioncontextbroker"
|
||||||
- "./create-binary-docker cul868ipe"
|
- "./create-binary-docker orioncontextbroker -a arm"
|
||||||
- "./create-binary-docker cul868ipe -a arm"
|
- "./create-binary-docker influxdbapp"
|
||||||
|
- "./create-binary-docker influxdbapp -a arm"
|
||||||
|
- "./create-binary-docker cul868ipe"
|
||||||
|
- "./create-binary-docker cul868ipe -a arm"
|
||||||
|
- docker run -d --name backend -p 0.0.0.0:18000:18000 -e "ONEM2M_CSE_ID=backend" -e "ONEM2M_NOTIFICATION_DISABLED=false" openmtc/backend-amd64 -v
|
||||||
|
- docker logs backend
|
||||||
|
- docker run -d --name gateway -p 0.0.0.0:8000:8000 -e "ONEM2M_HTTP_TRANSPORT_PORT=8000" -e "ONEM2M_CSE_ID=gateway" -e "ONEM2M_REMOTE_CSE_POA=<POA>" -e "ONEM2M_REMOTE_CSE_ID=backend" -e "ONEM2M_NOTIFICATION_DISABLED=false" -e "ONEM2M_REGISTRATION_DISABLED=false" openmtc/gateway-amd64 -v
|
||||||
|
- docker logs gateway
|
||||||
script:
|
script:
|
||||||
- docker tag openmtc/orioncontextbroker-amd64 openmtc/orion-context-broker-app-amd64
|
- docker tag openmtc/orioncontextbroker-amd64 openmtc/orion-context-broker-app-amd64
|
||||||
- docker tag openmtc/orioncontextbroker-arm openmtc/orion-context-broker-app-arm
|
- docker tag openmtc/orioncontextbroker-arm openmtc/orion-context-broker-app-arm
|
||||||
- docker tag openmtc/cul868ipe-amd64 openmtc/cul868-ipe-amd64
|
- docker tag openmtc/cul868ipe-amd64 openmtc/cul868-ipe-amd64
|
||||||
- docker tag openmtc/cul868ipe-arm openmtc/cul868-ipe-arm
|
- docker tag openmtc/cul868ipe-arm openmtc/cul868-ipe-arm
|
||||||
- docker tag openmtc/influxdbapp-amd64 openmtc/influxdb-app-amd64
|
- docker tag openmtc/influxdbapp-amd64 openmtc/influxdb-app-amd64
|
||||||
- docker tag openmtc/influxdbapp-arm openmtc/influxdb-app-arm
|
- docker tag openmtc/influxdbapp-arm openmtc/influxdb-app-arm
|
||||||
- docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD";
|
- docker logs gateway
|
||||||
- docker push openmtc/backend-amd64
|
- docker logs backend
|
||||||
- docker push openmtc/backend-arm
|
after_script:
|
||||||
- docker push openmtc/gateway-amd64
|
- pyresttest http://localhost:8000 tests/interoperability/basic.yaml
|
||||||
- docker push openmtc/gateway-arm
|
|
||||||
- docker push openmtc/orion-context-broker-app-amd64
|
|
||||||
- docker push openmtc/orion-context-broker-app-arm
|
|
||||||
- docker push openmtc/cul868-ipe-amd64
|
|
||||||
- docker push openmtc/cul868-ipe-arm
|
|
||||||
- docker push openmtc/influxdb-app-amd64
|
|
||||||
- docker push openmtc/influxdb-app-arm
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
secure: oQe/MxxFrPPArxb6OFzOUwG2ZlA5GYekMR6qn0Y3101v82MdrIVgDILHR41iwykTtk1XpJPV9uabsRsvY4hBmbjYzihYZFOAzFf+/KU7wROtKum0fFfLjCPb8uGV41k1JTquB94FibXboVAP7rNL0Vrpl+FGUvMGatQBtwZnGvha6Ha07qTao+X9+0dJ4YvFlvcba/jfzBZBwHw7KHpRoiyKU0dPmXpHcqnZBFcNqRXhzdVrgx0auP/tghoshW5LQWkpTV11uSx/kYuby4oo8r8nB6L0rW1jYSXs9DHiTQCfCy24xlb9YJjCD9aFcjH0lIkVIqQwJYA67MzKYMK4XV684J/Jr3+jfVOoUt0bpZaTnk+r/uiFCtEsN7q0KUlvHLUAi1YNJhKs6CRrAH3GK25QByh+suzPzZoHP42F2LYP9URlzbDH+/v7CwNuw+9pHSmxEhs18LVmggwkMos3o3ArvzMLRNJ3QG1fdoxL/Ubqxhmvhy4rZi6vGQsiF64oX8PN0sRgXekTU/ma+6CTM6qhgkocMUYzT2r/6qd/9R3jmtxSZnikjkR6Iu9NLzAUY+cqnvvjohAvqYyj+tGlQfOPxAU9H4wXnbQWLBM8yn6yt2Ki+3+Jx4Owdv0oXVJpN0GWjMzIJ1nEus5odkWW+c4wcZb6m3Ak0PrzYPp2BgE=
|
secure: oQe/MxxFrPPArxb6OFzOUwG2ZlA5GYekMR6qn0Y3101v82MdrIVgDILHR41iwykTtk1XpJPV9uabsRsvY4hBmbjYzihYZFOAzFf+/KU7wROtKum0fFfLjCPb8uGV41k1JTquB94FibXboVAP7rNL0Vrpl+FGUvMGatQBtwZnGvha6Ha07qTao+X9+0dJ4YvFlvcba/jfzBZBwHw7KHpRoiyKU0dPmXpHcqnZBFcNqRXhzdVrgx0auP/tghoshW5LQWkpTV11uSx/kYuby4oo8r8nB6L0rW1jYSXs9DHiTQCfCy24xlb9YJjCD9aFcjH0lIkVIqQwJYA67MzKYMK4XV684J/Jr3+jfVOoUt0bpZaTnk+r/uiFCtEsN7q0KUlvHLUAi1YNJhKs6CRrAH3GK25QByh+suzPzZoHP42F2LYP9URlzbDH+/v7CwNuw+9pHSmxEhs18LVmggwkMos3o3ArvzMLRNJ3QG1fdoxL/Ubqxhmvhy4rZi6vGQsiF64oX8PN0sRgXekTU/ma+6CTM6qhgkocMUYzT2r/6qd/9R3jmtxSZnikjkR6Iu9NLzAUY+cqnvvjohAvqYyj+tGlQfOPxAU9H4wXnbQWLBM8yn6yt2Ki+3+Jx4Owdv0oXVJpN0GWjMzIJ1nEus5odkWW+c4wcZb6m3Ak0PrzYPp2BgE=
|
||||||
|
after_success:
|
||||||
|
- if [ "$TRAVIS_BRANCH" == "master" ]; then
|
||||||
|
docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD";
|
||||||
|
docker push openmtc/backend-amd64;
|
||||||
|
docker push openmtc/backend-arm;
|
||||||
|
docker push openmtc/gateway-amd64;
|
||||||
|
docker push openmtc/gateway-arm;
|
||||||
|
docker push openmtc/orion-context-broker-app-amd64;
|
||||||
|
docker push openmtc/orion-context-broker-app-arm;
|
||||||
|
docker push openmtc/cul868-ipe-amd64;
|
||||||
|
docker push openmtc/cul868-ipe-arm;
|
||||||
|
docker push openmtc/influxdb-app-amd64;
|
||||||
|
docker push openmtc/influxdb-app-arm;
|
||||||
|
fi
|
||||||
|
after_failure:
|
||||||
|
- docker logs backend
|
||||||
|
- docker logs gateway
|
||||||
|
- coveralls
|
6
CONTRIBUTIONS.md
Normal file
6
CONTRIBUTIONS.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Contributors ordered by number of commits
|
||||||
|
|
||||||
|
Ronald Steinke <rst-fokus>
|
||||||
|
Christian Klopp <ckl-fokus>
|
||||||
|
Alexander Ortlieb <aor-fokus>
|
||||||
|
Jason Fox <jason-fox>
|
@ -24,6 +24,8 @@ This project is part of [FIWARE](https://www.fiware.org/). For more information
|
|||||||
check the FIWARE Catalogue entry for the
|
check the FIWARE Catalogue entry for the
|
||||||
[IoT Agents](https://github.com/Fiware/catalogue/tree/master/iot-agents).
|
[IoT Agents](https://github.com/Fiware/catalogue/tree/master/iot-agents).
|
||||||
|
|
||||||
|
| :books: [Documentation](https://fiware-openmtc.readthedocs.io) | :page_facing_up: [Site](http://www.openmtc.org) | :whale: [Docker Hub](https://hub.docker.com/u/openmtc) | :dart: [Roadmap](roadmap.md) |
|
||||||
|
|
||||||
# Content
|
# Content
|
||||||
|
|
||||||
- [Install](#install)
|
- [Install](#install)
|
||||||
@ -34,7 +36,7 @@ check the FIWARE Catalogue entry for the
|
|||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
Information about how to install the JSON IoTAgent can be found at the
|
Information about how to install the JSON IoTAgent can be found at the
|
||||||
corresponding section of the
|
corresponding section of the
|
||||||
@ -94,12 +96,12 @@ follows:
|
|||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contribution guidelines are detailed in the [CONTRIBUTIONS](https://github.com/OpenMTC/OpenMTC/blob/master/CONTRIBUTIONS.md) file.
|
Contribution guidelines are detailed in the [CONTRIBUTIONS](CONTRIBUTIONS.md) file.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The OpenMTC SDK is licensed under the Eclipse Public License (EPL)
|
The OpenMTC SDK is licensed under the Eclipse Public License (EPL)
|
||||||
version 1.
|
version 1.
|
||||||
|
|
||||||
© 2018 OpenMTC
|
© 2018-2019 OpenMTC
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m influxdbapp $@
|
exec python3 -m influxdbapp $@
|
||||||
|
@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m influxdbapp $@
|
exec python3 -m influxdbapp $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Transfer OpenMTC Data to an InfluxDB
|
Transfer OpenMTC Data to an InfluxDB
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.2.0"
|
__version__ = "1.3.0"
|
||||||
__description__ = "InfluxdbApp"
|
__description__ = "InfluxdbApp"
|
||||||
__author_name__ = "Christian Klopp"
|
__author_name__ = "Christian Klopp"
|
||||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||||
|
@ -30,21 +30,21 @@ parser.add_argument("--db-pw", help="InfluxDB User password")
|
|||||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
nm = get_value("name", (unicode, str), default_name, args, config)
|
nm = get_value("name", str, default_name, args, config)
|
||||||
cb = config.get("cse_base", "onem2m")
|
cb = config.get("cse_base", "onem2m")
|
||||||
ep = get_value("ep", (unicode, str), default_ep, args, config)
|
ep = get_value("ep", str, default_ep, args, config)
|
||||||
poas = config.get("poas", ["http://auto:23706"])
|
poas = config.get("poas", ["http://auto:23706"])
|
||||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||||
ssl_certs = config.get("ssl_certs", {})
|
ssl_certs = config.get("ssl_certs", {})
|
||||||
lbl = get_value("labels", list, default_labels, args, config)
|
lbl = get_value("labels", list, default_labels, args, config)
|
||||||
|
|
||||||
influx_host = get_value("influx_host", (unicode, str), "localhost", args, config)
|
influx_host = get_value("influx_host", str, "localhost", args, config)
|
||||||
influx_port = get_value("influx_port", (unicode, str), "8086", args, config)
|
influx_port = get_value("influx_port", str, "8086", args, config)
|
||||||
influx_user = get_value("influx_user", (unicode, str), "root", args, config)
|
influx_user = get_value("influx_user", str, "root", args, config)
|
||||||
influx_password = get_value("influx_password", (unicode, str), "root", args, config)
|
influx_password = get_value("influx_password", str, "root", args, config)
|
||||||
db_name = get_value("db_name", (unicode, str), "example", args, config)
|
db_name = get_value("db_name", str, "example", args, config)
|
||||||
db_user = get_value("db_user", (unicode, str), "test", args, config)
|
db_user = get_value("db_user", str, "test", args, config)
|
||||||
db_pw = get_value("db_pw", (unicode, str), "test", args, config)
|
db_pw = get_value("db_pw", str, "test", args, config)
|
||||||
|
|
||||||
# start
|
# start
|
||||||
app = InfluxdbApp(
|
app = InfluxdbApp(
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from openmtc_app.onem2m import ResourceManagementXAE
|
from openmtc_app.onem2m import ResourceManagementXAE
|
||||||
from connector import InfluxDBConnector
|
from .connector import InfluxDBConnector
|
||||||
|
|
||||||
|
|
||||||
class InfluxdbApp(ResourceManagementXAE):
|
class InfluxdbApp(ResourceManagementXAE):
|
||||||
@ -18,7 +18,7 @@ class InfluxdbApp(ResourceManagementXAE):
|
|||||||
**kw
|
**kw
|
||||||
):
|
):
|
||||||
super(InfluxdbApp, self).__init__(*args, **kw)
|
super(InfluxdbApp, self).__init__(*args, **kw)
|
||||||
if isinstance(labels, basestring):
|
if isinstance(labels, str):
|
||||||
self.labels = {labels}
|
self.labels = {labels}
|
||||||
elif hasattr(labels, '__iter__') and len(labels):
|
elif hasattr(labels, '__iter__') and len(labels):
|
||||||
self.labels = set(labels)
|
self.labels = set(labels)
|
||||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
|||||||
r_prefix = len(root) + 1
|
r_prefix = len(root) + 1
|
||||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||||
is_module = "__init__.py" in files and path != root
|
is_module = "__init__.py" in files and path != root
|
||||||
excluded = any(map(lambda x: x in path, excluded_list))
|
excluded = any([x in path for x in excluded_list])
|
||||||
included = any(map(lambda x: x in path, included_list))
|
included = any([x in path for x in included_list])
|
||||||
if is_module and (not excluded or included):
|
if is_module and (not excluded or included):
|
||||||
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ def get_pkg_files(base_dir, name):
|
|||||||
|
|
||||||
def enable_init_files(init_dir, init_dist_files):
|
def enable_init_files(init_dir, init_dist_files):
|
||||||
for f in init_dist_files:
|
for f in init_dist_files:
|
||||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
|
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||||
|
|
||||||
|
|
||||||
def move_config_files(config_dir, config_files):
|
def move_config_files(config_dir, config_files):
|
||||||
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
|
|||||||
try:
|
try:
|
||||||
from pwd import getpwnam
|
from pwd import getpwnam
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "Could not import the 'pwd' module. Skipping user management"
|
print("Could not import the 'pwd' module. Skipping user management")
|
||||||
else:
|
else:
|
||||||
# assuming DB_DIR was created by setup already
|
# assuming DB_DIR was created by setup already
|
||||||
try:
|
try:
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m orioncontextbroker $@
|
exec python3 -m orioncontextbroker $@
|
||||||
|
@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m orioncontextbroker $@
|
exec python3 -m orioncontextbroker $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
@ -3,7 +3,7 @@ This App will forward all incoming sensor traffic to the Fiware Orion Context
|
|||||||
Broker
|
Broker
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.2.0"
|
__version__ = "1.3.0"
|
||||||
__description__ = "OrionContextBroker"
|
__description__ = "OrionContextBroker"
|
||||||
__author_name__ = "Christian Klopp"
|
__author_name__ = "Christian Klopp"
|
||||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||||
|
@ -38,20 +38,17 @@ parser.add_argument(
|
|||||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
nm = get_value("name", (unicode, str), default_name, args, config)
|
nm = get_value("name", str, default_name, args, config)
|
||||||
cb = config.get("cse_base", "onem2m")
|
cb = config.get("cse_base", "onem2m")
|
||||||
ep = get_value("ep", (unicode, str), default_ep, args, config)
|
ep = get_value("ep", str, default_ep, args, config)
|
||||||
poas = config.get("poas", ["http://auto:25396"])
|
poas = config.get("poas", ["http://auto:25396"])
|
||||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||||
ssl_certs = config.get("ssl_certs", {})
|
ssl_certs = config.get("ssl_certs", {})
|
||||||
interval = get_value("interval", int, default_ep, args, config)
|
interval = get_value("interval", int, default_ep, args, config)
|
||||||
lbl = get_value("labels", list, default_labels, args, config)
|
lbl = get_value("labels", list, default_labels, args, config)
|
||||||
orion_host = get_value("orion_host", (unicode, str), default_orion_host, args,
|
orion_host = get_value("orion_host", str, default_orion_host, args, config)
|
||||||
config)
|
orion_api = get_value("orion_api", str, default_orion_api, args, config)
|
||||||
orion_api = get_value("orion_api", (unicode, str), default_orion_api, args,
|
accumulate_address = get_value("accumulate_address", str, default_accumulate_address, args, config)
|
||||||
config)
|
|
||||||
accumulate_address = get_value("accumulate_address", (unicode, str),
|
|
||||||
default_accumulate_address, args, config)
|
|
||||||
|
|
||||||
# start
|
# start
|
||||||
app = OrionContextBroker(
|
app = OrionContextBroker(
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
try:
|
from urllib.parse import urljoin
|
||||||
from urllib.parse import urljoin
|
|
||||||
except ImportError:
|
|
||||||
from urlparse import urljoin
|
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
@ -33,16 +30,16 @@ class OrionAPI(LoggerMixin):
|
|||||||
|
|
||||||
def _get_type(self, element):
|
def _get_type(self, element):
|
||||||
if isinstance(element, int):
|
if isinstance(element, int):
|
||||||
return u"Int"
|
return "Int"
|
||||||
elif isinstance(element, float):
|
elif isinstance(element, float):
|
||||||
return u"Float"
|
return "Float"
|
||||||
elif isinstance(element, bool):
|
elif isinstance(element, bool):
|
||||||
return u"Boolean"
|
return "Boolean"
|
||||||
elif isinstance(element, (str, unicode)):
|
elif isinstance(element, str):
|
||||||
return u"String"
|
return "String"
|
||||||
else:
|
else:
|
||||||
self.logger.error('Type of "{}" unknown'.format(element))
|
self.logger.error('Type of "{}" unknown'.format(element))
|
||||||
return u"Unknown"
|
return "Unknown"
|
||||||
|
|
||||||
def is_host_alive(self):
|
def is_host_alive(self):
|
||||||
req = self._request(
|
req = self._request(
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
import re
|
import re
|
||||||
try:
|
from urllib.parse import urlparse
|
||||||
from urllib.parse import urlparse
|
|
||||||
except ImportError:
|
|
||||||
from urlparse import urlparse
|
|
||||||
|
|
||||||
from flask import Flask, Response, request
|
from flask import Flask, Response, request
|
||||||
from gevent.pywsgi import WSGIServer
|
from gevent.pywsgi import WSGIServer
|
||||||
|
|
||||||
from openmtc_app.onem2m import ResourceManagementXAE
|
from openmtc_app.onem2m import ResourceManagementXAE
|
||||||
from orion_api import OrionAPI
|
from .orion_api import OrionAPI
|
||||||
|
|
||||||
|
|
||||||
class OrionContextBroker(ResourceManagementXAE):
|
class OrionContextBroker(ResourceManagementXAE):
|
||||||
@ -20,7 +17,7 @@ class OrionContextBroker(ResourceManagementXAE):
|
|||||||
*args,
|
*args,
|
||||||
**kw):
|
**kw):
|
||||||
super(OrionContextBroker, self).__init__(*args, **kw)
|
super(OrionContextBroker, self).__init__(*args, **kw)
|
||||||
if isinstance(labels, basestring):
|
if isinstance(labels, str):
|
||||||
self.labels = {labels}
|
self.labels = {labels}
|
||||||
elif hasattr(labels, '__iter__'):
|
elif hasattr(labels, '__iter__'):
|
||||||
self.labels = set(labels)
|
self.labels = set(labels)
|
||||||
@ -103,9 +100,8 @@ class OrionContextBroker(ResourceManagementXAE):
|
|||||||
device_type = "sensor" if sensor_info.get("sensor_labels",
|
device_type = "sensor" if sensor_info.get("sensor_labels",
|
||||||
None) else "actuator"
|
None) else "actuator"
|
||||||
try:
|
try:
|
||||||
id_label = filter(
|
id_label = [x for x in sensor_info['{}_labels'.format(device_type)]
|
||||||
lambda x: (x.startswith('openmtc:id:')),
|
if x.startswith('openmtc:id:')].pop()
|
||||||
sensor_info['{}_labels'.format(device_type)]).pop()
|
|
||||||
cse_id, dev_id = re.sub('^openmtc:id:', '',
|
cse_id, dev_id = re.sub('^openmtc:id:', '',
|
||||||
id_label).split('/')[:2]
|
id_label).split('/')[:2]
|
||||||
except (IndexError, ValueError):
|
except (IndexError, ValueError):
|
||||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
|||||||
r_prefix = len(root) + 1
|
r_prefix = len(root) + 1
|
||||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||||
is_module = "__init__.py" in files and path != root
|
is_module = "__init__.py" in files and path != root
|
||||||
excluded = any(map(lambda x: x in path, excluded_list))
|
excluded = any([x in path for x in excluded_list])
|
||||||
included = any(map(lambda x: x in path, included_list))
|
included = any([x in path for x in included_list])
|
||||||
if is_module and (not excluded or included):
|
if is_module and (not excluded or included):
|
||||||
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ def get_pkg_files(base_dir, name):
|
|||||||
|
|
||||||
def enable_init_files(init_dir, init_dist_files):
|
def enable_init_files(init_dir, init_dist_files):
|
||||||
for f in init_dist_files:
|
for f in init_dist_files:
|
||||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
|
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||||
|
|
||||||
|
|
||||||
def move_config_files(config_dir, config_files):
|
def move_config_files(config_dir, config_files):
|
||||||
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
|
|||||||
try:
|
try:
|
||||||
from pwd import getpwnam
|
from pwd import getpwnam
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "Could not import the 'pwd' module. Skipping user management"
|
print("Could not import the 'pwd' module. Skipping user management")
|
||||||
else:
|
else:
|
||||||
# assuming DB_DIR was created by setup already
|
# assuming DB_DIR was created by setup already
|
||||||
try:
|
try:
|
||||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
|||||||
|
|
||||||
cd csvInjector
|
cd csvInjector
|
||||||
|
|
||||||
PYTHONPATH=${PYTHONPATH}:src exec python -m csvinjector $@
|
PYTHONPATH=${PYTHONPATH}:src exec python3 -m csvinjector $@
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m csvinjector $@
|
exec python3 -m csvinjector $@
|
||||||
|
@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m csvinjector $@
|
exec python3 -m csvinjector $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
App to inject data from a csv file to OpenMTC
|
App to inject data from a csv file to OpenMTC
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.2.0"
|
__version__ = "1.3.0"
|
||||||
__description__ = "csvInjector"
|
__description__ = "csvInjector"
|
||||||
__author_name__ = "Christian Klopp"
|
__author_name__ = "Christian Klopp"
|
||||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||||
|
@ -42,28 +42,20 @@ parser.add_argument(
|
|||||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
nm = get_value("name", (unicode, str), default_name, args, config)
|
nm = get_value("name", str, default_name, args, config)
|
||||||
cb = config.get("cse_base", "onem2m")
|
cb = config.get("cse_base", "onem2m")
|
||||||
ep = get_value("ep", (unicode, str), default_ep, args, config)
|
ep = get_value("ep", str, default_ep, args, config)
|
||||||
poas = config.get("poas", ["http://auto:28300"])
|
poas = config.get("poas", ["http://auto:28300"])
|
||||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||||
ssl_certs = config.get("ssl_certs", {})
|
ssl_certs = config.get("ssl_certs", {})
|
||||||
csv_path = get_value("csv_path", (unicode, str), default_csv_path, args,
|
csv_path = get_value("csv_path", str, default_csv_path, args, config)
|
||||||
config)
|
csv_delim = get_value("csv_delim", str, default_csv_delim, args, config)
|
||||||
csv_delim = get_value("csv_delim", (unicode, str), default_csv_delim, args,
|
csv_quotechar = get_value("csv_quotechar", str, default_csv_quotechar, args, config)
|
||||||
config)
|
device_classifier = get_value("device_classifier", str, default_device_classifier, args, config)
|
||||||
csv_quotechar = get_value("csv_quotechar", (unicode, str),
|
date_classifier = get_value("date_classifier", (str, list), default_date_classifier, args, config)
|
||||||
default_csv_quotechar, args, config)
|
time_format = get_value("time_format", (str, list), default_time_format, args, config)
|
||||||
device_classifier = get_value("device_classifier", (unicode, str),
|
duration = get_value("duration", (int, float), default_duration, args, config)
|
||||||
default_device_classifier, args, config)
|
repeat = get_value("repeat", str, default_repeat, args, config)
|
||||||
date_classifier = get_value("date_classifier", (unicode, str, list),
|
|
||||||
default_date_classifier, args, config)
|
|
||||||
time_format = get_value("time_format", (unicode, str, list),
|
|
||||||
default_time_format, args, config)
|
|
||||||
duration = get_value("duration", (int, float),
|
|
||||||
default_duration, args, config)
|
|
||||||
repeat = get_value("repeat", (unicode, str),
|
|
||||||
default_repeat, args, config)
|
|
||||||
|
|
||||||
# start
|
# start
|
||||||
app = csvInjector(
|
app = csvInjector(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from openmtc_app.onem2m import XAE
|
from openmtc_app.onem2m import XAE
|
||||||
from openmtc_onem2m.model import Container
|
from openmtc_onem2m.model import Container
|
||||||
from csv_process import csvProcessor
|
from .csv_process import csvProcessor
|
||||||
import sched
|
import sched
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
@ -95,7 +95,7 @@ class csvInjector(XAE):
|
|||||||
if k == "Date" or k == self.device_classifier or event[k] in (
|
if k == "Date" or k == self.device_classifier or event[k] in (
|
||||||
"", None):
|
"", None):
|
||||||
continue
|
continue
|
||||||
if not k in self._recognized_measurement_containers[sensor].keys():
|
if k not in self._recognized_measurement_containers[sensor].keys():
|
||||||
self._create_measurement_container(sensor, k)
|
self._create_measurement_container(sensor, k)
|
||||||
timestamp = time.mktime(datetime.datetime.now().timetuple())
|
timestamp = time.mktime(datetime.datetime.now().timetuple())
|
||||||
senml = {
|
senml = {
|
||||||
|
@ -65,4 +65,4 @@ class csvProcessor(LoggerMixin):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
p = csvProcessor("example.csv", duration=300)
|
p = csvProcessor("example.csv", duration=300)
|
||||||
for e in p.csv_data:
|
for e in p.csv_data:
|
||||||
print e
|
print(e)
|
||||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
|||||||
r_prefix = len(root) + 1
|
r_prefix = len(root) + 1
|
||||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||||
is_module = "__init__.py" in files and path != root
|
is_module = "__init__.py" in files and path != root
|
||||||
excluded = any(map(lambda x: x in path, excluded_list))
|
excluded = any([x in path for x in excluded_list])
|
||||||
included = any(map(lambda x: x in path, included_list))
|
included = any([x in path for x in included_list])
|
||||||
if is_module and (not excluded or included):
|
if is_module and (not excluded or included):
|
||||||
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ def get_pkg_files(base_dir, name):
|
|||||||
|
|
||||||
def enable_init_files(init_dir, init_dist_files):
|
def enable_init_files(init_dir, init_dist_files):
|
||||||
for f in init_dist_files:
|
for f in init_dist_files:
|
||||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
|
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||||
|
|
||||||
|
|
||||||
def move_config_files(config_dir, config_files):
|
def move_config_files(config_dir, config_files):
|
||||||
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
|
|||||||
try:
|
try:
|
||||||
from pwd import getpwnam
|
from pwd import getpwnam
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "Could not import the 'pwd' module. Skipping user management"
|
print("Could not import the 'pwd' module. Skipping user management")
|
||||||
else:
|
else:
|
||||||
# assuming DB_DIR was created by setup already
|
# assuming DB_DIR was created by setup already
|
||||||
try:
|
try:
|
||||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
|||||||
|
|
||||||
cd InfluxdbApp
|
cd InfluxdbApp
|
||||||
|
|
||||||
PYTHONPATH=${PYTHONPATH}:src exec python -m influxdbapp $@
|
PYTHONPATH=${PYTHONPATH}:src exec python3 -m influxdbapp $@
|
||||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
|||||||
|
|
||||||
cd mqttConnector
|
cd mqttConnector
|
||||||
|
|
||||||
PYTHONPATH=${PYTHONPATH}:src exec python -m mqttconnector $@
|
PYTHONPATH=${PYTHONPATH}:src exec python3 -m mqttconnector $@
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m mqttconnector $@
|
exec python3 -m mqttconnector $@
|
||||||
|
@ -76,4 +76,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m mqttconnector $@
|
exec python3 -m mqttconnector $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
TODO: Add description here
|
TODO: Add description here
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.2.0"
|
__version__ = "1.3.0"
|
||||||
__description__ = "mqttConnector"
|
__description__ = "mqttConnector"
|
||||||
__author_name__ = "Ronald Steinke"
|
__author_name__ = "Ronald Steinke"
|
||||||
__author_mail__ = "ronald.steinke@fokus.fraunhofer.de"
|
__author_mail__ = "ronald.steinke@fokus.fraunhofer.de"
|
||||||
|
@ -40,36 +40,27 @@ parser.add_argument("--mqtts-keyfile", help="Path to own mqtts key")
|
|||||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
nm = get_value("name", (unicode, str), default_name, args, config)
|
nm = get_value("name", str, default_name, args, config)
|
||||||
cb = config.get("cse_base", "onem2m")
|
cb = config.get("cse_base", "onem2m")
|
||||||
ep = get_value("ep", (unicode, str), default_ep, args, config)
|
ep = get_value("ep", str, default_ep, args, config)
|
||||||
poas = config.get("poas", ["http://auto:21753"])
|
poas = config.get("poas", ["http://auto:21753"])
|
||||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||||
ssl_certs = config.get("ssl_certs", {})
|
ssl_certs = config.get("ssl_certs", {})
|
||||||
|
|
||||||
broker_ep = config.get("broker_ep", "localhost:8883")
|
broker_ep = config.get("broker_ep", "localhost:8883")
|
||||||
|
topic_pre = get_value("topic_pre", str, default_topic_pre, args, config)
|
||||||
topic_pre = get_value("topic_pre", (unicode, str), default_topic_pre, args,
|
topic_index_location = get_value("topic_index_location", int,
|
||||||
config)
|
|
||||||
topic_index_location = get_value("topic_index_location", (int),
|
|
||||||
default_topic_index_location, args, config)
|
default_topic_index_location, args, config)
|
||||||
topic_index_device = get_value("topic_index_device", (int),
|
topic_index_device = get_value("topic_index_device", int,
|
||||||
default_topic_index_device, args, config)
|
default_topic_index_device, args, config)
|
||||||
fiware_service = get_value("fiware_service", (unicode, str),
|
fiware_service = get_value("fiware_service", str, default_fiware_service, args, config)
|
||||||
default_fiware_service, args, config)
|
broker_user = get_value("broker_user", str, default_broker_user, args, config)
|
||||||
broker_user = get_value("broker_user", (unicode, str), default_broker_user,
|
broker_user_pw = get_value("broker_user_pw", str, default_broker_user_pw, args, config)
|
||||||
args, config)
|
user_pw = get_value("broker_user_pw", str, default_broker_user_pw, args, config)
|
||||||
broker_user_pw = get_value("broker_user_pw", (unicode, str),
|
|
||||||
default_broker_user_pw, args, config)
|
|
||||||
user_pw = get_value("broker_user_pw", (unicode, str), default_broker_user_pw,
|
|
||||||
args, config)
|
|
||||||
mqtts_enabled = get_value("mqtts_enabled", (bool), False, args, config)
|
mqtts_enabled = get_value("mqtts_enabled", (bool), False, args, config)
|
||||||
mqtts_ca_certs = get_value("mqtts_ca_certs", (unicode, str),
|
mqtts_ca_certs = get_value("mqtts_ca_certs", str, default_mqtts_ca_certs, args, config)
|
||||||
default_mqtts_ca_certs, args, config)
|
mqtts_certfile = get_value("mqtts_certfile", str, default_mqtts_certfile, args, config)
|
||||||
mqtts_certfile = get_value("mqtts_certfile", (unicode, str),
|
mqtts_keyfile = get_value("mqtts_keyfile", str, default_mqtts_keyfile, args, config)
|
||||||
default_mqtts_certfile, args, config)
|
|
||||||
mqtts_keyfile = get_value("mqtts_keyfile", (unicode, str),
|
|
||||||
default_mqtts_keyfile, args, config)
|
|
||||||
# start
|
# start
|
||||||
app = mqttConnector(
|
app = mqttConnector(
|
||||||
broker_ep=broker_ep,
|
broker_ep=broker_ep,
|
||||||
|
@ -115,7 +115,7 @@ class mqttConnector(XAE):
|
|||||||
# check payload
|
# check payload
|
||||||
try:
|
try:
|
||||||
readings = json_decode(
|
readings = json_decode(
|
||||||
base64decode(json_decode(payload)['m2m:cin']['con']))
|
base64decode(json_decode(payload)['m2m:cin']['con']).decode('utf-8'))
|
||||||
except (ValueError, KeyError, TypeError):
|
except (ValueError, KeyError, TypeError):
|
||||||
self.logger.error('Damaged payload; discarding')
|
self.logger.error('Damaged payload; discarding')
|
||||||
return
|
return
|
||||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
|||||||
r_prefix = len(root) + 1
|
r_prefix = len(root) + 1
|
||||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||||
is_module = "__init__.py" in files and path != root
|
is_module = "__init__.py" in files and path != root
|
||||||
excluded = any(map(lambda x: x in path, excluded_list))
|
excluded = any([x in path for x in excluded_list])
|
||||||
included = any(map(lambda x: x in path, included_list))
|
included = any([x in path for x in included_list])
|
||||||
if is_module and (not excluded or included):
|
if is_module and (not excluded or included):
|
||||||
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ def get_pkg_files(base_dir, name):
|
|||||||
|
|
||||||
def enable_init_files(init_dir, init_dist_files):
|
def enable_init_files(init_dir, init_dist_files):
|
||||||
for f in init_dist_files:
|
for f in init_dist_files:
|
||||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
|
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||||
|
|
||||||
|
|
||||||
def move_config_files(config_dir, config_files):
|
def move_config_files(config_dir, config_files):
|
||||||
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
|
|||||||
try:
|
try:
|
||||||
from pwd import getpwnam
|
from pwd import getpwnam
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "Could not import the 'pwd' module. Skipping user management"
|
print("Could not import the 'pwd' module. Skipping user management")
|
||||||
else:
|
else:
|
||||||
# assuming DB_DIR was created by setup already
|
# assuming DB_DIR was created by setup already
|
||||||
try:
|
try:
|
||||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
|||||||
|
|
||||||
cd OrionContextBroker
|
cd OrionContextBroker
|
||||||
|
|
||||||
PYTHONPATH=${PYTHONPATH}:src exec python -m orioncontextbroker $@
|
PYTHONPATH=${PYTHONPATH}:src exec python3 -m orioncontextbroker $@
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import urllib
|
import urllib.request
|
||||||
|
import urllib.parse
|
||||||
|
import urllib.error
|
||||||
import ssl
|
import ssl
|
||||||
from socket import (
|
from socket import (
|
||||||
gaierror,
|
gaierror,
|
||||||
error as socket_error,
|
error as socket_error,
|
||||||
)
|
)
|
||||||
from time import time
|
from time import time
|
||||||
from urlparse import urlparse
|
from urllib.parse import urlparse
|
||||||
from aplus import Promise
|
from aplus import Promise
|
||||||
from futile.caching import LRUCache
|
from futile.caching import LRUCache
|
||||||
from geventhttpclient.client import HTTPClient
|
from geventhttpclient.client import HTTPClient
|
||||||
@ -145,7 +147,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
|||||||
filter_criteria = onem2m_request.fc
|
filter_criteria = onem2m_request.fc
|
||||||
params.update({
|
params.update({
|
||||||
(get_short_attribute_name(name) or get_short_member_name(name)): val
|
(get_short_attribute_name(name) or get_short_member_name(name)): val
|
||||||
for name, val in filter_criteria.get_values(True).iteritems()
|
for name, val in filter_criteria.get_values(True).items()
|
||||||
})
|
})
|
||||||
|
|
||||||
if onem2m_request.ae_notifying:
|
if onem2m_request.ae_notifying:
|
||||||
@ -154,7 +156,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
|||||||
path = normalize_path(onem2m_request.to)
|
path = normalize_path(onem2m_request.to)
|
||||||
|
|
||||||
if params:
|
if params:
|
||||||
path += '?' + urllib.urlencode(params, True)
|
path += '?' + urllib.parse.urlencode(params, True)
|
||||||
|
|
||||||
content_type, data = encode_onem2m_content(onem2m_request.content, self.content_type, path=path)
|
content_type, data = encode_onem2m_content(onem2m_request.content, self.content_type, path=path)
|
||||||
|
|
||||||
@ -165,7 +167,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
|||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
header: getattr(onem2m_request, field)
|
header: getattr(onem2m_request, field)
|
||||||
for header, field in _header_to_field_map.iteritems()
|
for header, field in _header_to_field_map.items()
|
||||||
if getattr(onem2m_request, field) is not None
|
if getattr(onem2m_request, field) is not None
|
||||||
}
|
}
|
||||||
headers['content-type'] = content_type
|
headers['content-type'] = content_type
|
||||||
@ -201,7 +203,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
|||||||
get_response_status(rsc),
|
get_response_status(rsc),
|
||||||
request=onem2m_request,
|
request=onem2m_request,
|
||||||
rsc=rsc,
|
rsc=rsc,
|
||||||
pc=decode_onem2m_content(response.read(), response.get("content-type"))
|
pc=decode_onem2m_content(response.read().decode("utf-8"), response.get("content-type"))
|
||||||
)
|
)
|
||||||
|
|
||||||
def send_onem2m_request(self, onem2m_request):
|
def send_onem2m_request(self, onem2m_request):
|
||||||
|
@ -32,7 +32,7 @@ from simplejson import (
|
|||||||
JSONDecodeError,
|
JSONDecodeError,
|
||||||
)
|
)
|
||||||
from socket import error as SocketError
|
from socket import error as SocketError
|
||||||
from urlparse import urlparse
|
from urllib.parse import urlparse
|
||||||
from openmtc_onem2m.util import split_onem2m_address
|
from openmtc_onem2m.util import split_onem2m_address
|
||||||
|
|
||||||
#: Dictionary mapping supported schemes to port numbers
|
#: Dictionary mapping supported schemes to port numbers
|
||||||
@ -353,7 +353,7 @@ class OneM2MMQTTClient(OneM2MClient):
|
|||||||
|
|
||||||
self.logger.debug('Decoded JSON request: %s' % (request, ))
|
self.logger.debug('Decoded JSON request: %s' % (request, ))
|
||||||
|
|
||||||
op = OneM2MOperation._member_map_.values()[request['op'] - 1]
|
op = list(OneM2MOperation._member_map_.values())[request['op'] - 1]
|
||||||
to = request['to']
|
to = request['to']
|
||||||
del request['op'], request['to']
|
del request['op'], request['to']
|
||||||
|
|
||||||
@ -485,7 +485,8 @@ class OneM2MMQTTClient(OneM2MClient):
|
|||||||
else:
|
else:
|
||||||
request.ty = None
|
request.ty = None
|
||||||
|
|
||||||
request.op = 1 + OneM2MOperation._member_map_.keys().index(OneM2MOperation[request.op].name)
|
request.op = 1 + list(OneM2MOperation._member_map_.keys()).index(
|
||||||
|
OneM2MOperation[request.op].name)
|
||||||
if request.pc:
|
if request.pc:
|
||||||
request.pc = self._decode(
|
request.pc = self._decode(
|
||||||
encode_onem2m_content(request.pc, 'application/json', path=request.to)[1]
|
encode_onem2m_content(request.pc, 'application/json', path=request.to)[1]
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
try:
|
from urllib.parse import urlparse
|
||||||
from urllib.parse import urlparse
|
|
||||||
except ImportError:
|
|
||||||
from urlparse import urlparse
|
|
||||||
|
|
||||||
from openmtc.mapper import BasicMapper, MapperError
|
from openmtc.mapper import BasicMapper, MapperError
|
||||||
from openmtc_onem2m import OneM2MRequest
|
from openmtc_onem2m import OneM2MRequest
|
||||||
|
@ -2,7 +2,8 @@ from enum import IntEnum, unique
|
|||||||
|
|
||||||
from openmtc.model import (Resource as Res, UnicodeAttribute, DatetimeAttribute,
|
from openmtc.model import (Resource as Res, UnicodeAttribute, DatetimeAttribute,
|
||||||
Attribute, ListAttribute, Entity, EntityAttribute,
|
Attribute, ListAttribute, Entity, EntityAttribute,
|
||||||
AnyURI, StringListAttribute, ContentResource)
|
AnyURI, StringListAttribute, ContentResource,
|
||||||
|
BytesAttribute)
|
||||||
from openmtc.model.exc import ModelTypeError
|
from openmtc.model.exc import ModelTypeError
|
||||||
from futile import issubclass
|
from futile import issubclass
|
||||||
|
|
||||||
@ -407,7 +408,7 @@ class FilterUsageE(OneM2MIntEnum):
|
|||||||
@unique
|
@unique
|
||||||
class CountryCodeE(OneM2MIntEnum):
|
class CountryCodeE(OneM2MIntEnum):
|
||||||
india = 91
|
india = 91
|
||||||
usa = 01
|
usa = 1
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
@ -600,7 +601,7 @@ class ResourceC(LabeledResource):
|
|||||||
|
|
||||||
typename = None
|
typename = None
|
||||||
|
|
||||||
resourceName = UnicodeAttribute(accesstype=Attribute.WO)
|
resourceName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||||
|
|
||||||
resourceType = EntityAttribute(ResourceTypeE, accesstype=Attribute.RO)
|
resourceType = EntityAttribute(ResourceTypeE, accesstype=Attribute.RO)
|
||||||
resourceID = IDS(accesstype=Attribute.RO)
|
resourceID = IDS(accesstype=Attribute.RO)
|
||||||
@ -789,8 +790,7 @@ class Subscription(RegularResourceC):
|
|||||||
notificationForwardingURI = Attribute(AnyURI)
|
notificationForwardingURI = Attribute(AnyURI)
|
||||||
batchNotify = EntityAttribute(BatchNotify)
|
batchNotify = EntityAttribute(BatchNotify)
|
||||||
rateLimit = EntityAttribute(RateLimit)
|
rateLimit = EntityAttribute(RateLimit)
|
||||||
preSubscriptionNotify = Attribute(int, accesstype=Attribute.WO,
|
preSubscriptionNotify = Attribute(int, accesstype=Attribute.WO, mandatory=False)
|
||||||
mandatory=False)
|
|
||||||
pendingNotification = Attribute(PendingNotificationE)
|
pendingNotification = Attribute(PendingNotificationE)
|
||||||
notificationStoragePriority = Attribute(int)
|
notificationStoragePriority = Attribute(int)
|
||||||
latestNotify = Attribute(bool)
|
latestNotify = Attribute(bool)
|
||||||
@ -991,8 +991,8 @@ class ContentInstance(AnnounceableSubordinateResourceC,
|
|||||||
# ex: application/json:1
|
# ex: application/json:1
|
||||||
contentInfo = UnicodeAttribute() # m2m:contentInfo
|
contentInfo = UnicodeAttribute() # m2m:contentInfo
|
||||||
contentSize = Attribute(int, accesstype=Attribute.RO)
|
contentSize = Attribute(int, accesstype=Attribute.RO)
|
||||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
|
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||||
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
|
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
|
||||||
|
|
||||||
__child_types__ = (
|
__child_types__ = (
|
||||||
Subscription,
|
Subscription,
|
||||||
@ -1004,8 +1004,8 @@ class ContentInstanceAnnc(AnnouncedSubordinateResourceC):
|
|||||||
stateTag = Attribute(int, accesstype=Attribute.RO)
|
stateTag = Attribute(int, accesstype=Attribute.RO)
|
||||||
contentInfo = UnicodeAttribute(EncodingTypeE) # m2m:contentInfo
|
contentInfo = UnicodeAttribute(EncodingTypeE) # m2m:contentInfo
|
||||||
contentSize = Attribute(int, accesstype=Attribute.WO)
|
contentSize = Attribute(int, accesstype=Attribute.WO)
|
||||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
|
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||||
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
|
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -1107,7 +1107,7 @@ class AEAnnc(AnnouncedResourceC, SubscribableResource):
|
|||||||
|
|
||||||
typename = "AEAnnc"
|
typename = "AEAnnc"
|
||||||
|
|
||||||
appName = UnicodeAttribute(accesstype=Attribute.WO)
|
appName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||||
App_ID = UnicodeAttribute()
|
App_ID = UnicodeAttribute()
|
||||||
AE_ID = UnicodeAttribute()
|
AE_ID = UnicodeAttribute()
|
||||||
pointOfAccess = StringListAttribute()
|
pointOfAccess = StringListAttribute()
|
||||||
@ -1376,8 +1376,7 @@ long_to_short_attribute_mapping = {
|
|||||||
"relatedSemantics": "rels",
|
"relatedSemantics": "rels",
|
||||||
}
|
}
|
||||||
|
|
||||||
short_to_long_attribute_mapping = {v: k for k, v in
|
short_to_long_attribute_mapping = {v: k for k, v in long_to_short_attribute_mapping.items()}
|
||||||
long_to_short_attribute_mapping.items()}
|
|
||||||
|
|
||||||
|
|
||||||
def get_long_attribute_name(n):
|
def get_long_attribute_name(n):
|
||||||
@ -1459,8 +1458,7 @@ long_to_short_resource_mapping = {
|
|||||||
"dynamicAuthorizationConsultation": "dac"
|
"dynamicAuthorizationConsultation": "dac"
|
||||||
}
|
}
|
||||||
|
|
||||||
short_to_long_resource_mapping = {v: k for k, v in
|
short_to_long_resource_mapping = {v: k for k, v in long_to_short_resource_mapping.items()}
|
||||||
long_to_short_resource_mapping.items()}
|
|
||||||
|
|
||||||
|
|
||||||
def get_long_resource_name(n):
|
def get_long_resource_name(n):
|
||||||
@ -1584,8 +1582,7 @@ long_to_short_member_mapping = {
|
|||||||
"escertkeMessage": "eckm"
|
"escertkeMessage": "eckm"
|
||||||
}
|
}
|
||||||
|
|
||||||
short_to_long_member_mapping = {v: k for k, v in
|
short_to_long_member_mapping = {v: k for k, v in long_to_short_member_mapping.items()}
|
||||||
long_to_short_member_mapping.items()}
|
|
||||||
|
|
||||||
|
|
||||||
def get_long_member_name(n):
|
def get_long_member_name(n):
|
||||||
@ -1601,8 +1598,7 @@ long_to_short_root_mapping = {
|
|||||||
"responsePrimitive": "rsp"
|
"responsePrimitive": "rsp"
|
||||||
}
|
}
|
||||||
|
|
||||||
short_to_long_root_mapping = {v: k for k, v in
|
short_to_long_root_mapping = {v: k for k, v in long_to_short_root_mapping.items()}
|
||||||
long_to_short_root_mapping.items()}
|
|
||||||
|
|
||||||
|
|
||||||
def get_long_root_name(n):
|
def get_long_root_name(n):
|
||||||
@ -1636,8 +1632,7 @@ long_to_short_parameter_mapping = {
|
|||||||
"responseStatusCode": "rsc"
|
"responseStatusCode": "rsc"
|
||||||
}
|
}
|
||||||
|
|
||||||
short_to_long_parameter_mapping = {v: k for k, v in
|
short_to_long_parameter_mapping = {v: k for k, v in long_to_short_parameter_mapping.items()}
|
||||||
long_to_short_parameter_mapping.items()}
|
|
||||||
|
|
||||||
|
|
||||||
def get_long_parameter_name(n):
|
def get_long_parameter_name(n):
|
||||||
@ -1648,13 +1643,13 @@ def get_short_parameter_name(n):
|
|||||||
return long_to_short_parameter_mapping.get(n)
|
return long_to_short_parameter_mapping.get(n)
|
||||||
|
|
||||||
|
|
||||||
_all_types = {k: v for k, v in globals().iteritems()
|
_all_types = {k: v for k, v in globals().items()
|
||||||
if issubclass(v, OneM2MEntity) and not v.__subclasses__()}
|
if issubclass(v, OneM2MEntity) and not v.__subclasses__()}
|
||||||
|
|
||||||
_all_types_short = {}
|
_all_types_short = {}
|
||||||
_all_types_long = {}
|
_all_types_long = {}
|
||||||
|
|
||||||
for k, v in _all_types.iteritems():
|
for k, v in _all_types.items():
|
||||||
if get_short_resource_name(k):
|
if get_short_resource_name(k):
|
||||||
long_name = k
|
long_name = k
|
||||||
short_name = get_short_resource_name(k)
|
short_name = get_short_resource_name(k)
|
||||||
@ -1685,13 +1680,13 @@ for k, v in _all_types.iteritems():
|
|||||||
_all_types_long[long_name] = v
|
_all_types_long[long_name] = v
|
||||||
|
|
||||||
|
|
||||||
_resource_types = {k: v for k, v in _all_types.iteritems()
|
_resource_types = {k: v for k, v in _all_types.items()
|
||||||
if issubclass(v, ResourceC)}
|
if issubclass(v, ResourceC)}
|
||||||
|
|
||||||
_resource_types_short = {}
|
_resource_types_short = {}
|
||||||
_resource_types_long = {}
|
_resource_types_long = {}
|
||||||
|
|
||||||
for k, v in _resource_types.iteritems():
|
for k, v in _resource_types.items():
|
||||||
if get_short_resource_name(k):
|
if get_short_resource_name(k):
|
||||||
long_name = k
|
long_name = k
|
||||||
short_name = get_short_resource_name(k)
|
short_name = get_short_resource_name(k)
|
||||||
@ -1725,8 +1720,8 @@ def get_onem2m_resource_type(typename):
|
|||||||
|
|
||||||
|
|
||||||
def get_onem2m_types():
|
def get_onem2m_types():
|
||||||
return _all_types.values()
|
return list(_all_types.values())
|
||||||
|
|
||||||
|
|
||||||
def get_onem2m_resource_types():
|
def get_onem2m_resource_types():
|
||||||
return _resource_types.values()
|
return list(_resource_types.values())
|
||||||
|
@ -22,7 +22,7 @@ def create_onem2m_serializer(content_type):
|
|||||||
|
|
||||||
|
|
||||||
def get_onem2m_supported_content_types():
|
def get_onem2m_supported_content_types():
|
||||||
return _factories.keys()
|
return list(_factories.keys())
|
||||||
|
|
||||||
|
|
||||||
def get_onem2m_decoder(content_type):
|
def get_onem2m_decoder(content_type):
|
||||||
@ -37,6 +37,8 @@ def get_onem2m_decoder(content_type):
|
|||||||
serializer = create_onem2m_serializer(content_type)
|
serializer = create_onem2m_serializer(content_type)
|
||||||
_serializers[content_type] = serializer
|
_serializers[content_type] = serializer
|
||||||
return serializer
|
return serializer
|
||||||
|
|
||||||
|
|
||||||
get_serializer = get_onem2m_decoder
|
get_serializer = get_onem2m_decoder
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,9 +22,7 @@ def get_typename(tn):
|
|||||||
return _typename_matcher.findall(tn).pop()
|
return _typename_matcher.findall(tn).pop()
|
||||||
|
|
||||||
|
|
||||||
class OneM2MSerializer(LoggerMixin):
|
class OneM2MSerializer(LoggerMixin, metaclass=ABCMeta):
|
||||||
__metaclass__ = ABCMeta
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def encode_resource(self, resource, response, pretty=False,
|
def encode_resource(self, resource, response, pretty=False,
|
||||||
encoding="utf-8", fields=None):
|
encoding="utf-8", fields=None):
|
||||||
@ -45,7 +43,7 @@ class OneM2MSerializer(LoggerMixin):
|
|||||||
res_type = ResourceTypeE(v["type"])
|
res_type = ResourceTypeE(v["type"])
|
||||||
res_cls = get_onem2m_resource_type(res_type.name)
|
res_cls = get_onem2m_resource_type(res_type.name)
|
||||||
return res_cls(v["name"], resourceID=v["value"], resourceType=res_type)
|
return res_cls(v["name"], resourceID=v["value"], resourceType=res_type)
|
||||||
child_resource = map(map_child_resource, child_resource)
|
child_resource = list(map(map_child_resource, child_resource))
|
||||||
except (TypeError, AttributeError, KeyError, ValueError):
|
except (TypeError, AttributeError, KeyError, ValueError):
|
||||||
raise CSEValueError("Invalid entry in child resources: %s",
|
raise CSEValueError("Invalid entry in child resources: %s",
|
||||||
child_resource)
|
child_resource)
|
||||||
@ -80,7 +78,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
|||||||
)
|
)
|
||||||
representation["notificationEvent"] = {
|
representation["notificationEvent"] = {
|
||||||
get_short_attribute_name(k) or get_short_member_name(k): v
|
get_short_attribute_name(k) or get_short_member_name(k): v
|
||||||
for k, v in e.iteritems()
|
for k, v in e.items()
|
||||||
}
|
}
|
||||||
except (AttributeError, KeyError):
|
except (AttributeError, KeyError):
|
||||||
self.logger.exception("failed to encode notify")
|
self.logger.exception("failed to encode notify")
|
||||||
@ -104,7 +102,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
|||||||
"nm": c.basename,
|
"nm": c.basename,
|
||||||
"typ": c.resourceType
|
"typ": c.resourceType
|
||||||
}
|
}
|
||||||
representation["childResource"] = map(get_child_rep, representation["childResource"])
|
representation["childResource"] = list(map(get_child_rep, representation["childResource"]))
|
||||||
|
|
||||||
if isinstance(resource, URIList):
|
if isinstance(resource, URIList):
|
||||||
representation = [make_val(path, x) for x in representation]
|
representation = [make_val(path, x) for x in representation]
|
||||||
@ -137,7 +135,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
|||||||
return self.dumps({typename: representation})
|
return self.dumps({typename: representation})
|
||||||
|
|
||||||
def _handle_partial_addressing(self, resource, pretty):
|
def _handle_partial_addressing(self, resource, pretty):
|
||||||
for k, v in resource.iteritems():
|
for k, v in resource.items():
|
||||||
if k in ('latest', 'oldest') and isinstance(v, ContentInstance):
|
if k in ('latest', 'oldest') and isinstance(v, ContentInstance):
|
||||||
resource[k] = v.resourceID
|
resource[k] = v.resourceID
|
||||||
if pretty:
|
if pretty:
|
||||||
@ -148,7 +146,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
|||||||
|
|
||||||
def convert_to_long_keys(d):
|
def convert_to_long_keys(d):
|
||||||
return {get_long_resource_name(k) or get_long_attribute_name(k) or
|
return {get_long_resource_name(k) or get_long_attribute_name(k) or
|
||||||
get_long_member_name(k) or k: v for k, v in d.iteritems()}
|
get_long_member_name(k) or k: v for k, v in d.items()}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if hasattr(s, "read"):
|
if hasattr(s, "read"):
|
||||||
@ -161,7 +159,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
|||||||
self.logger.debug("Read data: %s", data)
|
self.logger.debug("Read data: %s", data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
typename, data = data.items()[0]
|
typename, data = list(data.items())[0]
|
||||||
return get_onem2m_type(get_typename(typename)), data
|
return get_onem2m_type(get_typename(typename)), data
|
||||||
except (AttributeError, IndexError, TypeError):
|
except (AttributeError, IndexError, TypeError):
|
||||||
raise CSESyntaxError("Not a valid resource representation")
|
raise CSESyntaxError("Not a valid resource representation")
|
||||||
|
@ -33,6 +33,8 @@ def _default(x):
|
|||||||
return x.strftime("%Y%m%dT%H%M%S")
|
return x.strftime("%Y%m%dT%H%M%S")
|
||||||
elif isinstance(x, ContentInstance):
|
elif isinstance(x, ContentInstance):
|
||||||
return x.resourceID
|
return x.resourceID
|
||||||
|
elif isinstance(x, bytes):
|
||||||
|
return x.decode('utf-8')
|
||||||
else:
|
else:
|
||||||
try: # handle model classes
|
try: # handle model classes
|
||||||
return x.values
|
return x.values
|
||||||
|
@ -6,7 +6,7 @@ logger = get_logger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def decode_onem2m_content(content, content_type):
|
def decode_onem2m_content(content, content_type):
|
||||||
if content == "":
|
if not content:
|
||||||
content = None
|
content = None
|
||||||
if content_type and content is not None:
|
if content_type and content is not None:
|
||||||
serializer = get_onem2m_decoder(content_type)
|
serializer = get_onem2m_decoder(content_type)
|
||||||
|
@ -212,7 +212,9 @@ class OneM2MRequest(object):
|
|||||||
self.to = to
|
self.to = to
|
||||||
# Originator ID
|
# Originator ID
|
||||||
self.originator = fr # original long name is from
|
self.originator = fr # original long name is from
|
||||||
self.request_identifier = rqi or ''.join(random.sample(string.letters + string.digits, 16))
|
self.request_identifier = rqi or ''.join(
|
||||||
|
random.sample(string.ascii_letters + string.digits, 16)
|
||||||
|
)
|
||||||
# Type of a created resource
|
# Type of a created resource
|
||||||
self.resource_type = ty
|
self.resource_type = ty
|
||||||
# Resource content to be transferred.
|
# Resource content to be transferred.
|
||||||
@ -423,7 +425,7 @@ class OneM2MRequest(object):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '%s: %s' % (self.__class__.__name__, ' | '.join([
|
return '%s: %s' % (self.__class__.__name__, ' | '.join([
|
||||||
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.iteritems()
|
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.items()
|
||||||
]))
|
]))
|
||||||
|
|
||||||
|
|
||||||
@ -556,7 +558,7 @@ class OneM2MResponse(object):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '%s: %s' % (self.__class__.__name__, ' | '.join([
|
return '%s: %s' % (self.__class__.__name__, ' | '.join([
|
||||||
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.iteritems()
|
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.items()
|
||||||
]))
|
]))
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import platform
|
||||||
import sys
|
import sys
|
||||||
from logging import DEBUG
|
from logging import DEBUG
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
@ -6,8 +7,8 @@ from traceback import print_stack
|
|||||||
from futile.logging import LoggerMixin
|
from futile.logging import LoggerMixin
|
||||||
from openmtc.exc import OpenMTCError
|
from openmtc.exc import OpenMTCError
|
||||||
|
|
||||||
if sys.subversion[0] != "CPython":
|
if platform.python_implementation != "CPython":
|
||||||
from inspect import ismethod, getargspec
|
from inspect import ismethod, getfullargspec
|
||||||
|
|
||||||
# TODO: kca: can't pass in values for then/error currently
|
# TODO: kca: can't pass in values for then/error currently
|
||||||
|
|
||||||
@ -160,11 +161,11 @@ class Promise(LoggerMixin):
|
|||||||
"""
|
"""
|
||||||
self._errbacks.append(f)
|
self._errbacks.append(f)
|
||||||
|
|
||||||
if sys.subversion[0] != "CPython":
|
if platform.python_implementation != "CPython":
|
||||||
def _invoke(self, func, value):
|
def _invoke(self, func, value):
|
||||||
try:
|
try:
|
||||||
if value is None:
|
if value is None:
|
||||||
args, _, _, _ = getargspec(func)
|
args = getfullargspec(func).args
|
||||||
arglen = len(args)
|
arglen = len(args)
|
||||||
if not arglen or (arglen == 1 and ismethod(func)):
|
if not arglen or (arglen == 1 and ismethod(func)):
|
||||||
return func()
|
return func()
|
||||||
@ -181,11 +182,11 @@ class Promise(LoggerMixin):
|
|||||||
try:
|
try:
|
||||||
if value is None:
|
if value is None:
|
||||||
try:
|
try:
|
||||||
target = func.im_func
|
target = func.__func__
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
argcount = func.func_code.co_argcount
|
argcount = func.__code__.co_argcount
|
||||||
else:
|
else:
|
||||||
argcount = target.func_code.co_argcount - 1
|
argcount = target.__code__.co_argcount - 1
|
||||||
|
|
||||||
if argcount == 0:
|
if argcount == 0:
|
||||||
return func()
|
return func()
|
||||||
@ -365,7 +366,7 @@ def listPromise(*args):
|
|||||||
if not arg.isFulfilled():
|
if not arg.isFulfilled():
|
||||||
return
|
return
|
||||||
|
|
||||||
value = map(lambda p: p.value, args)
|
value = [p.value for p in args]
|
||||||
ret._fulfill(value)
|
ret._fulfill(value)
|
||||||
|
|
||||||
for arg in args:
|
for arg in args:
|
||||||
|
@ -31,9 +31,7 @@ class ExtraOptionsStrategy(Enum):
|
|||||||
fatal = "fatal"
|
fatal = "fatal"
|
||||||
|
|
||||||
|
|
||||||
class ConfigurationOption(LoggerMixin):
|
class ConfigurationOption(LoggerMixin, metaclass=ABCMeta):
|
||||||
__metaclass__ = ABCMeta
|
|
||||||
|
|
||||||
def __init__(self, type, default=NOT_SET, converter=identity,
|
def __init__(self, type, default=NOT_SET, converter=identity,
|
||||||
*args, **kw):
|
*args, **kw):
|
||||||
super(ConfigurationOption, self).__init__(*args, **kw)
|
super(ConfigurationOption, self).__init__(*args, **kw)
|
||||||
@ -76,7 +74,7 @@ class ListOption(SimpleOption):
|
|||||||
|
|
||||||
def _convert(self, v):
|
def _convert(self, v):
|
||||||
v = super(ListOption, self)._convert(v)
|
v = super(ListOption, self)._convert(v)
|
||||||
return map(self._convert_content, v)
|
return list(map(self._convert_content, v))
|
||||||
|
|
||||||
def _convert_content(self, v):
|
def _convert_content(self, v):
|
||||||
if not isinstance(v, self.content_type):
|
if not isinstance(v, self.content_type):
|
||||||
@ -92,7 +90,7 @@ class BooleanOption(ConfigurationOption):
|
|||||||
def _convert(self, v):
|
def _convert(self, v):
|
||||||
if isinstance(v, (bool, int)):
|
if isinstance(v, (bool, int)):
|
||||||
return bool(v)
|
return bool(v)
|
||||||
if isinstance(v, basestring):
|
if isinstance(v, str):
|
||||||
return v and v.lower() not in ("0", "no", "n", "f", "false")
|
return v and v.lower() not in ("0", "no", "n", "f", "false")
|
||||||
raise ConfigurationValueError("Illegal value for boolean: %s" % (v, ))
|
raise ConfigurationValueError("Illegal value for boolean: %s" % (v, ))
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ from enum import Enum
|
|||||||
from iso8601 import parse_date, ParseError
|
from iso8601 import parse_date, ParseError
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
from futile import basestring, issubclass, NOT_SET
|
from futile import issubclass, NOT_SET
|
||||||
from futile.logging import LoggerMixin
|
from futile.logging import LoggerMixin
|
||||||
from openmtc.model.exc import ModelError, ModelTypeError
|
from openmtc.model.exc import ModelError, ModelTypeError
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ class Collection(Sequence, Mapping):
|
|||||||
|
|
||||||
def __getitem__(self, index):
|
def __getitem__(self, index):
|
||||||
if isinstance(index, (int, slice)):
|
if isinstance(index, (int, slice)):
|
||||||
return self._map.values()[index]
|
return list(self._map.values())[index]
|
||||||
return self._map[index]
|
return self._map[index]
|
||||||
|
|
||||||
def __contains__(self, v):
|
def __contains__(self, v):
|
||||||
@ -47,7 +47,7 @@ class Collection(Sequence, Mapping):
|
|||||||
return self._map.get(k, default)
|
return self._map.get(k, default)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self._map.itervalues()
|
return iter(self._map.values())
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self._map)
|
return len(self._map)
|
||||||
@ -76,7 +76,7 @@ class Collection(Sequence, Mapping):
|
|||||||
|
|
||||||
|
|
||||||
class Member(LoggerMixin):
|
class Member(LoggerMixin):
|
||||||
def __init__(self, type=unicode, version="1.0", *args, **kw):
|
def __init__(self, type=str, version="1.0", *args, **kw):
|
||||||
super(Member, self).__init__(*args, **kw)
|
super(Member, self).__init__(*args, **kw)
|
||||||
self.type = type
|
self.type = type
|
||||||
self.version = version
|
self.version = version
|
||||||
@ -109,7 +109,7 @@ class Attribute(Member):
|
|||||||
RO = "RO"
|
RO = "RO"
|
||||||
WO = "WO"
|
WO = "WO"
|
||||||
|
|
||||||
def __init__(self, type=unicode, default=None,
|
def __init__(self, type=str, default=None,
|
||||||
accesstype=None, mandatory=None,
|
accesstype=None, mandatory=None,
|
||||||
update_mandatory=None,
|
update_mandatory=None,
|
||||||
id_attribute=None, path_attribute=None,
|
id_attribute=None, path_attribute=None,
|
||||||
@ -157,24 +157,22 @@ class Attribute(Member):
|
|||||||
return self.default
|
return self.default
|
||||||
|
|
||||||
|
|
||||||
try:
|
class BytesAttribute(Attribute):
|
||||||
unicode
|
def __init__(self, default=None, accesstype=None,
|
||||||
|
mandatory=None, *args, **kw):
|
||||||
|
super(BytesAttribute, self).__init__(type=bytes,
|
||||||
|
default=default,
|
||||||
|
accesstype=accesstype,
|
||||||
|
mandatory=mandatory, *args,
|
||||||
|
**kw)
|
||||||
|
|
||||||
class UnicodeAttribute(Attribute):
|
def convert(self, value, instance):
|
||||||
def __init__(self, default=None, accesstype=None,
|
if isinstance(value, str):
|
||||||
mandatory=False, *args, **kw):
|
return bytes(value, "utf-8")
|
||||||
super(UnicodeAttribute, self).__init__(type=unicode,
|
return super(BytesAttribute, self).convert(value, instance)
|
||||||
default=default,
|
|
||||||
accesstype=accesstype,
|
|
||||||
mandatory=mandatory, *args,
|
|
||||||
**kw)
|
|
||||||
|
|
||||||
def convert(self, value, instance):
|
|
||||||
if isinstance(value, str):
|
UnicodeAttribute = Attribute
|
||||||
return value.decode("utf-8")
|
|
||||||
return super(UnicodeAttribute, self).convert(value, instance)
|
|
||||||
except NameError:
|
|
||||||
UnicodeAttribute = Attribute
|
|
||||||
|
|
||||||
|
|
||||||
class DatetimeAttribute(Attribute):
|
class DatetimeAttribute(Attribute):
|
||||||
@ -187,7 +185,7 @@ class DatetimeAttribute(Attribute):
|
|||||||
**kw)
|
**kw)
|
||||||
|
|
||||||
def convert(self, value, instance):
|
def convert(self, value, instance):
|
||||||
if isinstance(value, basestring):
|
if isinstance(value, str):
|
||||||
try:
|
try:
|
||||||
return parse_date(value)
|
return parse_date(value)
|
||||||
except ParseError as e:
|
except ParseError as e:
|
||||||
@ -196,7 +194,7 @@ class DatetimeAttribute(Attribute):
|
|||||||
|
|
||||||
|
|
||||||
class ListAttribute(Attribute):
|
class ListAttribute(Attribute):
|
||||||
def __init__(self, content_type=unicode, type=list,
|
def __init__(self, content_type=str, type=list,
|
||||||
default=NOT_SET, *args, **kw):
|
default=NOT_SET, *args, **kw):
|
||||||
super(ListAttribute, self).__init__(type=type,
|
super(ListAttribute, self).__init__(type=type,
|
||||||
default=default, *args, **kw)
|
default=default, *args, **kw)
|
||||||
@ -239,7 +237,7 @@ class ListAttribute(Attribute):
|
|||||||
|
|
||||||
|
|
||||||
class StringListAttribute(Attribute):
|
class StringListAttribute(Attribute):
|
||||||
def __init__(self, content_type=unicode, type=list,
|
def __init__(self, content_type=str, type=list,
|
||||||
default=NOT_SET, *args, **kw):
|
default=NOT_SET, *args, **kw):
|
||||||
super(StringListAttribute, self).__init__(type=type, default=default,
|
super(StringListAttribute, self).__init__(type=type, default=default,
|
||||||
*args, **kw)
|
*args, **kw)
|
||||||
@ -427,24 +425,22 @@ class ResourceType(ABCMeta):
|
|||||||
# TODO: caching
|
# TODO: caching
|
||||||
@property
|
@property
|
||||||
def attribute_names(self):
|
def attribute_names(self):
|
||||||
return map(attrgetter("name"), self.attributes)
|
return list(map(attrgetter("name"), self.attributes))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def collection_names(self):
|
def collection_names(self):
|
||||||
return map(attrgetter("name"), self.collections)
|
return list(map(attrgetter("name"), self.collections))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def subresource_names(self):
|
def subresource_names(self):
|
||||||
return map(attrgetter("name"), self.subresources)
|
return list(map(attrgetter("name"), self.subresources))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def member_names(self):
|
def member_names(self):
|
||||||
return map(attrgetter("name"), self.__members__)
|
return list(map(attrgetter("name"), self.__members__))
|
||||||
|
|
||||||
|
|
||||||
class Entity(LoggerMixin):
|
class Entity(LoggerMixin, metaclass=ResourceType):
|
||||||
__metaclass__ = ResourceType
|
|
||||||
|
|
||||||
def __init__(self, *args, **kw):
|
def __init__(self, *args, **kw):
|
||||||
self.set_values(kw)
|
self.set_values(kw)
|
||||||
|
|
||||||
@ -467,7 +463,7 @@ class Entity(LoggerMixin):
|
|||||||
# TODO: proper solution?
|
# TODO: proper solution?
|
||||||
if (v is not None and isinstance(member, ListAttribute) and
|
if (v is not None and isinstance(member, ListAttribute) and
|
||||||
not isinstance(v, (list, tuple, set))):
|
not isinstance(v, (list, tuple, set))):
|
||||||
v = v.values()[0]
|
v = list(v.values())[0]
|
||||||
setattr(self, member.name, v)
|
setattr(self, member.name, v)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
@ -487,7 +483,7 @@ class Entity(LoggerMixin):
|
|||||||
"""
|
"""
|
||||||
if values:
|
if values:
|
||||||
raise ModelTypeError("%s resource has no attribute %s" %
|
raise ModelTypeError("%s resource has no attribute %s" %
|
||||||
(self.typename, values.keys()[0]))
|
(self.typename, list(values.keys())[0]))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_typename(cls):
|
def get_typename(cls):
|
||||||
@ -569,7 +565,7 @@ class Resource(Entity):
|
|||||||
__model_version__ = None
|
__model_version__ = None
|
||||||
|
|
||||||
def __init__(self, path=None, parent=None, *args, **kw):
|
def __init__(self, path=None, parent=None, *args, **kw):
|
||||||
if path is not None and not isinstance(path, basestring):
|
if path is not None and not isinstance(path, str):
|
||||||
raise TypeError(path)
|
raise TypeError(path)
|
||||||
self.__path = path
|
self.__path = path
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
@ -629,7 +625,7 @@ class Resource(Entity):
|
|||||||
# FIXME: move into de-serializer and handle dicts
|
# FIXME: move into de-serializer and handle dicts
|
||||||
if (v is not None and isinstance(member, ListAttribute) and
|
if (v is not None and isinstance(member, ListAttribute) and
|
||||||
not isinstance(v, (list, tuple, set))):
|
not isinstance(v, (list, tuple, set))):
|
||||||
v = v.values()[0]
|
v = list(v.values())[0]
|
||||||
setattr(self, member.name, v)
|
setattr(self, member.name, v)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
try:
|
try:
|
||||||
@ -637,7 +633,7 @@ class Resource(Entity):
|
|||||||
# TODO: proper solution?
|
# TODO: proper solution?
|
||||||
if (v is not None and isinstance(member, ListAttribute) and
|
if (v is not None and isinstance(member, ListAttribute) and
|
||||||
not isinstance(v, (list, tuple, set))):
|
not isinstance(v, (list, tuple, set))):
|
||||||
v = v.values()[0]
|
v = list(v.values())[0]
|
||||||
setattr(self, member.name, v)
|
setattr(self, member.name, v)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
@ -289,7 +289,7 @@ cd \$(dirname \${0})
|
|||||||
|
|
||||||
cd ${APP_NAME}
|
cd ${APP_NAME}
|
||||||
|
|
||||||
PYTHONPATH=\${PYTHONPATH}:src exec python -m ${PKG_NAME} \$@
|
PYTHONPATH=\${PYTHONPATH}:src exec python3 -m ${PKG_NAME} \$@
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x "${START_SCRIPT}"
|
chmod +x "${START_SCRIPT}"
|
||||||
@ -301,7 +301,7 @@ BIN_SCRIPT="${APP_FOLDER}/bin/openmtc-${APP_SCRIPT}"
|
|||||||
cat > "${BIN_SCRIPT}" << EOF
|
cat > "${BIN_SCRIPT}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m ${PKG_NAME} \$@
|
exec python3 -m ${PKG_NAME} \$@
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x "${BIN_SCRIPT}"
|
chmod +x "${BIN_SCRIPT}"
|
||||||
@ -333,7 +333,7 @@ fi
|
|||||||
# create setup file
|
# create setup file
|
||||||
SETUP_FILE="${APP_FOLDER}/setup-${PKG_NAME}.py"
|
SETUP_FILE="${APP_FOLDER}/setup-${PKG_NAME}.py"
|
||||||
cat > "${SETUP_FILE}" << EOF
|
cat > "${SETUP_FILE}" << EOF
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
@ -489,7 +489,7 @@ mv \${CONFIG_TEMP} \${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m ${PKG_NAME} \$@
|
exec python3 -m ${PKG_NAME} \$@
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [ ${WEB_APP} == "false" ]; then
|
if [ ${WEB_APP} == "false" ]; then
|
||||||
|
@ -47,7 +47,7 @@ if [ ${#find_result[*]} -eq 0 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ${#find_result[*]} -gt 1 ]; then
|
if [ ${#find_result[*]} -gt 1 ]; then
|
||||||
echo "Too many setup files matching the name. Exiting Now!."
|
echo "Too many setup files matching the name. Exiting Now!. "
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ get_target_from_setup_file ()
|
|||||||
local module_name=${setup_file%.py}
|
local module_name=${setup_file%.py}
|
||||||
|
|
||||||
cd ${working_dir}
|
cd ${working_dir}
|
||||||
python - << END_OF_PYTHON
|
python3 - << END_OF_PYTHON
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
setup = import_module('${module_name}', '${module_name}')
|
setup = import_module('${module_name}', '${module_name}')
|
||||||
print("%s-%s" % (setup.SETUP_NAME, setup.SETUP_VERSION))
|
print("%s-%s" % (setup.SETUP_NAME, setup.SETUP_VERSION))
|
||||||
@ -92,7 +92,7 @@ rm -rf ${working_dir}/build
|
|||||||
|
|
||||||
# build
|
# build
|
||||||
cd ${working_dir}
|
cd ${working_dir}
|
||||||
python ${setup_file} bdist --plat-name docker >/dev/null 2>${log_file}
|
python3 ${setup_file} bdist --plat-name docker >/dev/null 2>${log_file}
|
||||||
|
|
||||||
# clean up after
|
# clean up after
|
||||||
rm -rf ${working_dir}/build
|
rm -rf ${working_dir}/build
|
||||||
@ -113,14 +113,14 @@ rm ${log_file}
|
|||||||
################################################################################
|
################################################################################
|
||||||
# clean binary_package
|
# clean binary_package
|
||||||
binary_archive="${working_dir}/dist/${binary_prefix}.docker.tar.gz"
|
binary_archive="${working_dir}/dist/${binary_prefix}.docker.tar.gz"
|
||||||
printf "### Stripping .py files..."
|
#printf "### Stripping .py files..."
|
||||||
cp ${target_file} ${binary_archive}
|
cp ${target_file} ${binary_archive}
|
||||||
gzip -d ${binary_archive}
|
#gzip -d ${binary_archive}
|
||||||
tar --wildcards --delete -f ${binary_archive%".gz"} "*.py"
|
#tar --wildcards --delete -f ${binary_archive%".gz"} "*.py"
|
||||||
gzip ${binary_archive%".gz"}
|
#gzip ${binary_archive%".gz"}
|
||||||
printf "done\n"
|
#printf "done\n"
|
||||||
rm ${target_file}
|
rm ${target_file}
|
||||||
printf "### Created binary archive at %s.\n" ${binary_archive}
|
#printf "### Created binary archive at %s.\n" ${binary_archive}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# set correct permissions
|
# set correct permissions
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
import urllib
|
import urllib.request
|
||||||
|
import urllib.parse
|
||||||
|
import urllib.error
|
||||||
from openmtc_app.onem2m import XAE
|
from openmtc_app.onem2m import XAE
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -15,9 +17,9 @@ class DataVisualization(XAE):
|
|||||||
self.sensor_register = []
|
self.sensor_register = []
|
||||||
self.sensor_values = []
|
self.sensor_values = []
|
||||||
self.name = uuid.uuid1()
|
self.name = uuid.uuid1()
|
||||||
self.things_name = urllib.urlopen("https://dweet.io/follow/%s" % self.name)
|
self.things_name = urllib.request.urlopen("https://dweet.io/follow/%s" % self.name)
|
||||||
print "Thing name :", self.name
|
print("Thing name :", self.name)
|
||||||
print "link for the current data type and values :", self.things_name.geturl()
|
print("link for the current data type and values :", self.things_name.geturl())
|
||||||
# start endless loop
|
# start endless loop
|
||||||
self.periodic_discover(self.remote_cse,
|
self.periodic_discover(self.remote_cse,
|
||||||
{'labels': ["openmtc:sensor_data"]},
|
{'labels': ["openmtc:sensor_data"]},
|
||||||
@ -28,19 +30,19 @@ class DataVisualization(XAE):
|
|||||||
self.add_container_subscription(uri, self.handle_sensor_data)
|
self.add_container_subscription(uri, self.handle_sensor_data)
|
||||||
|
|
||||||
def handle_sensor_data(self, container, content):
|
def handle_sensor_data(self, container, content):
|
||||||
data ={}
|
data = {}
|
||||||
self.sensor_register.append(content[0]['n'])
|
self.sensor_register.append(content[0]['n'])
|
||||||
self.sensor_values.append(content[0]['v'])
|
self.sensor_values.append(content[0]['v'])
|
||||||
for i, k in zip(self.sensor_register , self.sensor_values):
|
for i, k in zip(self.sensor_register, self.sensor_values):
|
||||||
data.update({i: k})
|
data.update({i: k})
|
||||||
params = urllib.urlencode(data)
|
params = urllib.parse.urlencode(data)
|
||||||
urllib.urlopen("https://dweet.io/dweet/for/%s?%s" % (self.name, params))
|
urllib.request.urlopen("https://dweet.io/dweet/for/%s?%s" % (self.name, params))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||||
|
|
||||||
ep = "http://localhost:8000"
|
ep = "http://localhost:8000"
|
||||||
Runner(DataVisualization(), port=6050, host='auto').run(ep)
|
Runner(DataVisualization(poas=['http://localhost:21345'])).run(ep)
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,4 +91,4 @@ if __name__ == "__main__":
|
|||||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||||
|
|
||||||
ep = "http://localhost:8000"
|
ep = "http://localhost:8000"
|
||||||
Runner(DataAggregation(), port=6050, host='auto').run(ep)
|
Runner(DataAggregation(poas=['http://localhost:21346'])).run(ep)
|
||||||
|
@ -19,4 +19,4 @@ if __name__ == "__main__":
|
|||||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||||
|
|
||||||
ep = "http://localhost:8000"
|
ep = "http://localhost:8000"
|
||||||
Runner(SimpleDecision2(), port=6050, host='auto').run(ep)
|
Runner(SimpleDecision2(poas=['http://localhost:21387'])).run(ep)
|
||||||
|
@ -47,4 +47,4 @@ if __name__ == "__main__":
|
|||||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||||
|
|
||||||
ep = "http://localhost:8000"
|
ep = "http://localhost:8000"
|
||||||
Runner(SimpleDecision(), port=6050, host='auto').run(ep)
|
Runner(SimpleDecision(poas=['http://localhost:22245'])).run(ep)
|
||||||
|
@ -31,5 +31,6 @@ app_file=${app_array[$[${choice}-1]]}
|
|||||||
################################################################################
|
################################################################################
|
||||||
# run app_file
|
# run app_file
|
||||||
cd ${base_path}
|
cd ${base_path}
|
||||||
. ../../common/prep-env.sh
|
cd ..
|
||||||
python ${app_file}
|
. ../common/prep-env.sh
|
||||||
|
python3 ${app_file}
|
||||||
|
@ -4,13 +4,13 @@ from openmtc_onem2m.model import AE
|
|||||||
|
|
||||||
my_app = AE()
|
my_app = AE()
|
||||||
|
|
||||||
print my_app.path
|
print(my_app.path)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.App_ID
|
print(my_app.App_ID)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.parent_path
|
print(my_app.parent_path)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.labels
|
print(my_app.labels)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.attributes
|
print(my_app.attributes)
|
||||||
#>>> [UnicodeAttribute(name="AE-ID", type=unicode), UnicodeAttribute(name="App-ID", type=unicode), ListAttribute(name="accessControlPolicyIDs", type=list), ListAttribute(name="announceTo", type=list), UnicodeAttribute(name="announcedAttribute", type=unicode), ListAttribute(name="childResources", type=list), DatetimeAttribute(name="creationTime", type=datetime), DatetimeAttribute(name="expirationTime", type=datetime), UnicodeAttribute(name="labels", type=unicode), DatetimeAttribute(name="lastModifiedTime", type=datetime), UnicodeAttribute(name="name", type=unicode), UnicodeAttribute(name="nodeLink", type=unicode), UnicodeAttribute(name="ontologyRef", type=unicode), ListAttribute(name="pointOfAccess", type=list)]
|
#>>> [UnicodeAttribute(name="AE-ID", type=unicode), UnicodeAttribute(name="App-ID", type=unicode), ListAttribute(name="accessControlPolicyIDs", type=list), ListAttribute(name="announceTo", type=list), UnicodeAttribute(name="announcedAttribute", type=unicode), ListAttribute(name="childResources", type=list), DatetimeAttribute(name="creationTime", type=datetime), DatetimeAttribute(name="expirationTime", type=datetime), UnicodeAttribute(name="labels", type=unicode), DatetimeAttribute(name="lastModifiedTime", type=datetime), UnicodeAttribute(name="name", type=unicode), UnicodeAttribute(name="nodeLink", type=unicode), UnicodeAttribute(name="ontologyRef", type=unicode), ListAttribute(name="pointOfAccess", type=list)]
|
||||||
|
@ -26,13 +26,13 @@ promise = client.send_onem2m_request(onem2m_request)
|
|||||||
# reteive the OneM2MResponse from the returned promise
|
# reteive the OneM2MResponse from the returned promise
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
|
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2001, description='CREATED', http_status_code=201)
|
#>>> STATUS(numeric_code=2001, description='CREATED', http_status_code=201)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> AE(path='None', id='ae0')
|
#>>> AE(path='None', id='ae0')
|
||||||
print onem2m_response.content.App_ID
|
print(onem2m_response.content.App_ID)
|
||||||
#>>> myApp
|
#>>> myApp
|
||||||
print onem2m_response.content.labels
|
print(onem2m_response.content.labels)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
|
@ -17,12 +17,12 @@ promise = client.send_onem2m_request(onem2m_request)
|
|||||||
|
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
|
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2001, description='CREATED', http_status_code=201)
|
#>>> STATUS(numeric_code=2001, description='CREATED', http_status_code=201)
|
||||||
|
|
||||||
# Build path to retieve from
|
# Build path to retieve from
|
||||||
path = "onem2m/" + onem2m_response.content.resourceName
|
path = "onem2m/" + onem2m_response.content.resourceName
|
||||||
print path
|
print(path)
|
||||||
#>>> onem2m/MYAPP
|
#>>> onem2m/MYAPP
|
||||||
|
|
||||||
# Retrieve the AE from the CSE
|
# Retrieve the AE from the CSE
|
||||||
@ -30,18 +30,18 @@ onem2m_request = OneM2MRequest("retrieve", to=path)
|
|||||||
promise = client.send_onem2m_request(onem2m_request)
|
promise = client.send_onem2m_request(onem2m_request)
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
|
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> AE(path='None', id='ae0')
|
#>>> AE(path='None', id='ae0')
|
||||||
|
|
||||||
# Set the local AE to the retrieved content
|
# Set the local AE to the retrieved content
|
||||||
my_app = None
|
my_app = None
|
||||||
my_app = onem2m_response.content
|
my_app = onem2m_response.content
|
||||||
|
|
||||||
print my_app.App_ID
|
print(my_app.App_ID)
|
||||||
#>>> myApp
|
#>>> myApp
|
||||||
print my_app.resourceName
|
print(my_app.resourceName)
|
||||||
#>>> MYAPP
|
#>>> MYAPP
|
||||||
print my_app.labels
|
print(my_app.labels)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
|
@ -15,7 +15,7 @@ my_app = AE(App_ID="myApp",
|
|||||||
onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app)
|
onem2m_request = OneM2MRequest("create", to="onem2m", ty=AE, pc=my_app)
|
||||||
promise = client.send_onem2m_request(onem2m_request)
|
promise = client.send_onem2m_request(onem2m_request)
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
print onem2m_response.content.labels
|
print(onem2m_response.content.labels)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
|
|
||||||
# Retrieve the AE from the CSE and check the labels
|
# Retrieve the AE from the CSE and check the labels
|
||||||
@ -23,7 +23,7 @@ path = "onem2m/" + onem2m_response.content.resourceName
|
|||||||
onem2m_request = OneM2MRequest("retrieve", to=path)
|
onem2m_request = OneM2MRequest("retrieve", to=path)
|
||||||
promise = client.send_onem2m_request(onem2m_request)
|
promise = client.send_onem2m_request(onem2m_request)
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
print onem2m_response.content.labels
|
print(onem2m_response.content.labels)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
|
|
||||||
# Update the changes labels in the remote resource
|
# Update the changes labels in the remote resource
|
||||||
@ -33,11 +33,11 @@ tmp_app = AE(labels=["foo", "bar", "coffee"])
|
|||||||
onem2m_request = OneM2MRequest("update", to=path, pc=tmp_app)
|
onem2m_request = OneM2MRequest("update", to=path, pc=tmp_app)
|
||||||
promise = client.send_onem2m_request(onem2m_request)
|
promise = client.send_onem2m_request(onem2m_request)
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
print onem2m_response.content.labels
|
print(onem2m_response.content.labels)
|
||||||
#>>> [u'foo', u'bar', u'coffee']
|
#>>> [u'foo', u'bar', u'coffee']
|
||||||
|
|
||||||
# Set the local AE to the retrieved content
|
# Set the local AE to the retrieved content
|
||||||
my_app = None
|
my_app = None
|
||||||
my_app = onem2m_response.content
|
my_app = onem2m_response.content
|
||||||
print my_app.labels
|
print(my_app.labels)
|
||||||
#>>> [u'foo', u'bar', u'coffee']
|
#>>> [u'foo', u'bar', u'coffee']
|
||||||
|
@ -11,18 +11,18 @@ try:
|
|||||||
promise = client.send_onem2m_request(onem2m_request)
|
promise = client.send_onem2m_request(onem2m_request)
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
except OneM2MErrorResponse as e:
|
except OneM2MErrorResponse as e:
|
||||||
print "CSE reported an error:", e
|
print("CSE reported an error:", e)
|
||||||
raise
|
raise
|
||||||
except OpenMTCError as e:
|
except OpenMTCError as e:
|
||||||
print "Failed to reach the CSE:", e
|
print("Failed to reach the CSE:", e)
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# no exception was raised, the method returned normally.
|
# no exception was raised, the method returned normally.
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> CSEBase(path='None', id='cb0')
|
#>>> CSEBase(path='None', id='cb0')
|
||||||
|
@ -7,31 +7,31 @@ client = OneM2MHTTPClient("http://localhost:8000", False)
|
|||||||
|
|
||||||
onem2m_request = OneM2MRequest("retrieve", to="onem2m")
|
onem2m_request = OneM2MRequest("retrieve", to="onem2m")
|
||||||
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
||||||
print "---> Request to: http://localhost:8000" + "/" + onem2m_request.to
|
print("---> Request to: http://localhost:8000" + "/" + onem2m_request.to)
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> CSEBase(path='None', id='cb0')
|
#>>> CSEBase(path='None', id='cb0')
|
||||||
|
|
||||||
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
|
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
|
||||||
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
||||||
print "---> Request to: http://localhost:8000" + "/" + onem2m_request.to
|
print("---> Request to: http://localhost:8000" + "/" + onem2m_request.to)
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> ~/mn-cse-1/onem2m
|
#>>> ~/mn-cse-1/onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> CSEBase(path='None', id='cb0')
|
#>>> CSEBase(path='None', id='cb0')
|
||||||
|
|
||||||
client.port = 18000
|
client.port = 18000
|
||||||
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
|
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
|
||||||
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
onem2m_response = client.send_onem2m_request(onem2m_request).get()
|
||||||
print "---> Request to: http://localhost:18000" + "/" + onem2m_request.to
|
print("---> Request to: http://localhost:18000" + "/" + onem2m_request.to)
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> ~/mn-cse-1/onem2m
|
#>>> ~/mn-cse-1/onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> CSEBase(path='None', id='cb0')
|
#>>> CSEBase(path='None', id='cb0')
|
||||||
|
@ -4,13 +4,13 @@ from openmtc_onem2m.model import AE
|
|||||||
|
|
||||||
my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"])
|
my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"])
|
||||||
|
|
||||||
print my_app.path
|
print(my_app.path)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.App_ID
|
print(my_app.App_ID)
|
||||||
#>>> myApp
|
#>>> myApp
|
||||||
print my_app.parent_path
|
print(my_app.parent_path)
|
||||||
#>>> None
|
#>>> None
|
||||||
print my_app.labels
|
print(my_app.labels)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
print my_app.attributes
|
print(my_app.attributes)
|
||||||
#>>> [UnicodeAttribute(name="AE-ID", type=unicode), UnicodeAttribute(name="App-ID", type=unicode), ListAttribute(name="accessControlPolicyIDs", type=list), ListAttribute(name="announceTo", type=list), UnicodeAttribute(name="announcedAttribute", type=unicode), ListAttribute(name="childResources", type=list), DatetimeAttribute(name="creationTime", type=datetime), DatetimeAttribute(name="expirationTime", type=datetime), UnicodeAttribute(name="labels", type=unicode), DatetimeAttribute(name="lastModifiedTime", type=datetime), UnicodeAttribute(name="name", type=unicode), UnicodeAttribute(name="nodeLink", type=unicode), UnicodeAttribute(name="ontologyRef", type=unicode), ListAttribute(name="pointOfAccess", type=list)]
|
#>>> [UnicodeAttribute(name="AE-ID", type=unicode), UnicodeAttribute(name="App-ID", type=unicode), ListAttribute(name="accessControlPolicyIDs", type=list), ListAttribute(name="announceTo", type=list), UnicodeAttribute(name="announcedAttribute", type=unicode), ListAttribute(name="childResources", type=list), DatetimeAttribute(name="creationTime", type=datetime), DatetimeAttribute(name="expirationTime", type=datetime), UnicodeAttribute(name="labels", type=unicode), DatetimeAttribute(name="lastModifiedTime", type=datetime), UnicodeAttribute(name="name", type=unicode), UnicodeAttribute(name="nodeLink", type=unicode), UnicodeAttribute(name="ontologyRef", type=unicode), ListAttribute(name="pointOfAccess", type=list)]
|
||||||
|
@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
|
|||||||
|
|
||||||
request = OneM2MRequest("retrieve", to="onem2m")
|
request = OneM2MRequest("retrieve", to="onem2m")
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
|
@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
|
|||||||
|
|
||||||
request = OneM2MRequest("delete", to="onem2m")
|
request = OneM2MRequest("delete", to="onem2m")
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
|
@ -7,7 +7,7 @@ my_app = AE(App_ID="myApp")
|
|||||||
|
|
||||||
request = OneM2MRequest("create", to="onem2m", pc="my_app")
|
request = OneM2MRequest("create", to="onem2m", pc="my_app")
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print request.pc
|
print(request.pc)
|
||||||
#>>> myApp
|
#>>> myApp
|
||||||
|
@ -13,7 +13,7 @@ request = OneM2MRequest("create",
|
|||||||
pc=data_string,
|
pc=data_string,
|
||||||
ty="application/json")
|
ty="application/json")
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print request.pc
|
print(request.pc)
|
||||||
#>>> {"type": "temperature", "value": 15}
|
#>>> {"type": "temperature", "value": 15}
|
||||||
|
@ -7,7 +7,7 @@ my_app = AE(App_ID="myApp")
|
|||||||
|
|
||||||
request = OneM2MRequest("notify", to="onem2m", pc=my_app)
|
request = OneM2MRequest("notify", to="onem2m", pc=my_app)
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print request.pc.App_ID
|
print(request.pc.App_ID)
|
||||||
#>>> myApp
|
#>>> myApp
|
||||||
|
@ -13,7 +13,7 @@ request = OneM2MRequest("create",
|
|||||||
pc=data_string,
|
pc=data_string,
|
||||||
ty="application/json")
|
ty="application/json")
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print request.pc
|
print(request.pc)
|
||||||
#>>> {"type": "temperature", "value": 15}
|
#>>> {"type": "temperature", "value": 15}
|
||||||
|
@ -7,7 +7,7 @@ my_app = AE(App_ID="myApp", labels=["keyword1", "keyword2"])
|
|||||||
|
|
||||||
request = OneM2MRequest("update", to="onem2m", pc=my_app.labels)
|
request = OneM2MRequest("update", to="onem2m", pc=my_app.labels)
|
||||||
|
|
||||||
print request.to
|
print(request.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print request.pc
|
print(request.pc)
|
||||||
#>>> [u'keyword1', u'keyword2']
|
#>>> [u'keyword1', u'keyword2']
|
||||||
|
@ -13,9 +13,9 @@ promise = client.send_onem2m_request(onem2m_request)
|
|||||||
# reteive the OneM2MResponse from the returned promise
|
# reteive the OneM2MResponse from the returned promise
|
||||||
onem2m_response = promise.get()
|
onem2m_response = promise.get()
|
||||||
|
|
||||||
print onem2m_response.to
|
print(onem2m_response.to)
|
||||||
#>>> onem2m
|
#>>> onem2m
|
||||||
print onem2m_response.response_status_code
|
print(onem2m_response.response_status_code)
|
||||||
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
|
||||||
print onem2m_response.content
|
print(onem2m_response.content)
|
||||||
#>>> CSEBase(path='None', id='cb0')
|
#>>> CSEBase(path='None', id='cb0')
|
||||||
|
@ -34,4 +34,4 @@ cd ${base_path}
|
|||||||
cd ..
|
cd ..
|
||||||
. ../common/prep-env.sh
|
. ../common/prep-env.sh
|
||||||
cd ${base_path}
|
cd ${base_path}
|
||||||
python ${app_file}
|
python3 ${app_file}
|
||||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
|||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-all
|
# install openmtc-all
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
|||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-all
|
# install openmtc-all
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
# Set the base image to use debian
|
# Set the base image to use debian
|
||||||
FROM debian:jessie
|
FROM debian:stretch
|
||||||
|
|
||||||
# Set the file maintainer
|
# Set the file maintainer
|
||||||
MAINTAINER rst/tgu
|
MAINTAINER rst/tgu
|
||||||
@ -20,8 +20,9 @@ RUN printf "Starting update...\n" && \
|
|||||||
build-essential \
|
build-essential \
|
||||||
netbase \
|
netbase \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
python-pip \
|
python3-setuptools \
|
||||||
python-dev \
|
python3-pip \
|
||||||
|
python3-dev \
|
||||||
jq > /dev/null && \
|
jq > /dev/null && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
printf "Installation and cleanup finished.\n"
|
printf "Installation and cleanup finished.\n"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
# Set the base image to use debian
|
# Set the base image to use debian
|
||||||
FROM resin/rpi-raspbian:jessie
|
FROM resin/rpi-raspbian:stretch
|
||||||
|
|
||||||
# Set the file maintainer
|
# Set the file maintainer
|
||||||
MAINTAINER rst/tgu
|
MAINTAINER rst/tgu
|
||||||
@ -20,8 +20,9 @@ RUN printf "Starting update...\n" && \
|
|||||||
build-essential \
|
build-essential \
|
||||||
netbase \
|
netbase \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
python-pip \
|
python3-setuptools \
|
||||||
python-dev \
|
python3-pip \
|
||||||
|
python3-dev \
|
||||||
jq > /dev/null && \
|
jq > /dev/null && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
printf "Installation and cleanup finished.\n"
|
printf "Installation and cleanup finished.\n"
|
||||||
|
@ -89,4 +89,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m openmtc_gevent.backend_main $@
|
exec python3 -m openmtc_gevent.backend_main $@
|
||||||
|
@ -101,4 +101,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m openmtc_gevent.gateway_main $@
|
exec python3 -m openmtc_gevent.gateway_main $@
|
||||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
|||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-all
|
# install openmtc-all
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
|||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-all
|
# install openmtc-all
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -11,11 +11,11 @@ ENV MOD_NAME=sdk
|
|||||||
MAINTAINER rst/tgu
|
MAINTAINER rst/tgu
|
||||||
|
|
||||||
# update pip to latest version
|
# update pip to latest version
|
||||||
RUN pip install --upgrade pip
|
RUN pip3 install --upgrade pip
|
||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-sdk
|
# install openmtc-sdk
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -11,11 +11,11 @@ ENV MOD_NAME=sdk
|
|||||||
MAINTAINER rst/tgu
|
MAINTAINER rst/tgu
|
||||||
|
|
||||||
# update pip to latest version
|
# update pip to latest version
|
||||||
RUN pip install --upgrade pip setuptools
|
RUN pip3 install --upgrade pip setuptools
|
||||||
|
|
||||||
# install openmtc dependencies
|
# install openmtc dependencies
|
||||||
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
|
||||||
RUN pip install --upgrade --requirement /tmp/requirements.txt
|
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
|
||||||
|
|
||||||
# install openmtc-sdk
|
# install openmtc-sdk
|
||||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||||
|
@ -103,7 +103,7 @@ if __name__ == '__main__':
|
|||||||
## end of http://code.activestate.com/recipes/576694/ }}}
|
## end of http://code.activestate.com/recipes/576694/ }}}
|
||||||
|
|
||||||
## kca:
|
## kca:
|
||||||
print OrderedSet('simsalabim')[1]
|
print(OrderedSet('simsalabim')[1])
|
||||||
|
|
||||||
# Test case for exception at shutdown (yes, really...)
|
# Test case for exception at shutdown (yes, really...)
|
||||||
x = OrderedSet('simsalabim')
|
x = OrderedSet('simsalabim')
|
||||||
|
@ -6,7 +6,7 @@ Created on 15.07.2011
|
|||||||
|
|
||||||
from asyncore import dispatcher, loop
|
from asyncore import dispatcher, loop
|
||||||
from socket import AF_INET, SOCK_STREAM, error
|
from socket import AF_INET, SOCK_STREAM, error
|
||||||
from sockethelper import socket
|
from .sockethelper import socket
|
||||||
from futile.exc import errorstr
|
from futile.exc import errorstr
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import sys
|
import sys
|
||||||
@ -38,9 +38,9 @@ def test_port(host, port, family = AF_INET, type = SOCK_STREAM):
|
|||||||
try:
|
try:
|
||||||
with socket(family, type) as s:
|
with socket(family, type) as s:
|
||||||
s.connect((host, port))
|
s.connect((host, port))
|
||||||
except error, e:
|
except error as e:
|
||||||
return TestResult(False, "%s (%d)" % (e.strerror, e.errno))
|
return TestResult(False, "%s (%d)" % (e.strerror, e.errno))
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
return TestResult(False, errorstr(e))
|
return TestResult(False, errorstr(e))
|
||||||
return TestResult(True)
|
return TestResult(True)
|
||||||
|
|
||||||
|
@ -285,7 +285,7 @@ class RestClient(LoggerMixin):
|
|||||||
req.end()
|
req.end()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print "Exception triggered: %s"%e
|
print("Exception triggered: %s"%e)
|
||||||
promise.reject(e)
|
promise.reject(e)
|
||||||
|
|
||||||
return promise
|
return promise
|
||||||
|
@ -39,7 +39,7 @@ class HTTPSMixin(LoggerMixin):
|
|||||||
def get_request(self):
|
def get_request(self):
|
||||||
try:
|
try:
|
||||||
return self.socket.accept()
|
return self.socket.accept()
|
||||||
except error, e:
|
except error as e:
|
||||||
self.logger.exception("Error during accept(): %s", e)
|
self.logger.exception("Error during accept(): %s", e)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ Date: 7 Mar 2004
|
|||||||
# it doesn't play nice with other types that implement
|
# it doesn't play nice with other types that implement
|
||||||
# __radd__(). Test this.
|
# __radd__(). Test this.
|
||||||
|
|
||||||
from __future__ import generators
|
|
||||||
|
|
||||||
def quote(p):
|
def quote(p):
|
||||||
from urllib2 import quote
|
from urllib.parse import quote
|
||||||
return quote(p, "")
|
return quote(p, "")
|
||||||
|
|
||||||
|
|
||||||
@ -46,15 +46,15 @@ __all__ = ['path']
|
|||||||
_base = str
|
_base = str
|
||||||
try:
|
try:
|
||||||
if os.path.supports_unicode_filenames:
|
if os.path.supports_unicode_filenames:
|
||||||
_base = unicode
|
_base = str
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Pre-2.3 workaround for basestring.
|
# Pre-2.3 workaround for basestring.
|
||||||
try:
|
try:
|
||||||
basestring
|
str
|
||||||
except NameError:
|
except NameError:
|
||||||
basestring = (str, unicode)
|
str = (str, str)
|
||||||
|
|
||||||
# Universal newline support
|
# Universal newline support
|
||||||
_textmode = 'r'
|
_textmode = 'r'
|
||||||
@ -403,7 +403,7 @@ class path(_base):
|
|||||||
For example, path('/users').glob('*/bin/*') returns a list
|
For example, path('/users').glob('*/bin/*') returns a list
|
||||||
of all the files users have in their bin directories.
|
of all the files users have in their bin directories.
|
||||||
"""
|
"""
|
||||||
return map(path, glob.glob(_base(self / pattern)))
|
return list(map(path, glob.glob(_base(self / pattern))))
|
||||||
|
|
||||||
|
|
||||||
# --- Reading or writing an entire file at once.
|
# --- Reading or writing an entire file at once.
|
||||||
@ -467,11 +467,11 @@ class path(_base):
|
|||||||
t = f.read()
|
t = f.read()
|
||||||
finally:
|
finally:
|
||||||
f.close()
|
f.close()
|
||||||
return (t.replace(u'\r\n', u'\n')
|
return (t.replace('\r\n', '\n')
|
||||||
.replace(u'\r\x85', u'\n')
|
.replace('\r\x85', '\n')
|
||||||
.replace(u'\r', u'\n')
|
.replace('\r', '\n')
|
||||||
.replace(u'\x85', u'\n')
|
.replace('\x85', '\n')
|
||||||
.replace(u'\u2028', u'\n'))
|
.replace('\u2028', '\n'))
|
||||||
|
|
||||||
def write_text(self, text, encoding=None, errors='strict', linesep=os.linesep, append=False):
|
def write_text(self, text, encoding=None, errors='strict', linesep=os.linesep, append=False):
|
||||||
""" Write the given text to this file.
|
""" Write the given text to this file.
|
||||||
@ -518,7 +518,7 @@ class path(_base):
|
|||||||
|
|
||||||
This applies to Unicode text the same as to 8-bit text, except
|
This applies to Unicode text the same as to 8-bit text, except
|
||||||
there are three additional standard Unicode end-of-line sequences:
|
there are three additional standard Unicode end-of-line sequences:
|
||||||
u'\x85', u'\r\x85', and u'\u2028'.
|
u'\x85', u'\r\x85', and u'\\u2028'.
|
||||||
|
|
||||||
(This is slightly different from when you open a file for
|
(This is slightly different from when you open a file for
|
||||||
writing with fopen(filename, "w") in C or file(filename, 'w')
|
writing with fopen(filename, "w") in C or file(filename, 'w')
|
||||||
@ -537,16 +537,16 @@ class path(_base):
|
|||||||
conversion.
|
conversion.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if isinstance(text, unicode):
|
if isinstance(text, str):
|
||||||
if linesep is not None:
|
if linesep is not None:
|
||||||
# Convert all standard end-of-line sequences to
|
# Convert all standard end-of-line sequences to
|
||||||
# ordinary newline characters.
|
# ordinary newline characters.
|
||||||
text = (text.replace(u'\r\n', u'\n')
|
text = (text.replace('\r\n', '\n')
|
||||||
.replace(u'\r\x85', u'\n')
|
.replace('\r\x85', '\n')
|
||||||
.replace(u'\r', u'\n')
|
.replace('\r', '\n')
|
||||||
.replace(u'\x85', u'\n')
|
.replace('\x85', '\n')
|
||||||
.replace(u'\u2028', u'\n'))
|
.replace('\u2028', '\n'))
|
||||||
text = text.replace(u'\n', linesep)
|
text = text.replace('\n', linesep)
|
||||||
if encoding is None:
|
if encoding is None:
|
||||||
encoding = sys.getdefaultencoding()
|
encoding = sys.getdefaultencoding()
|
||||||
bytes = text.encode(encoding, errors)
|
bytes = text.encode(encoding, errors)
|
||||||
@ -608,7 +608,7 @@ class path(_base):
|
|||||||
linesep - The desired line-ending. This line-ending is
|
linesep - The desired line-ending. This line-ending is
|
||||||
applied to every line. If a line already has any
|
applied to every line. If a line already has any
|
||||||
standard line ending ('\r', '\n', '\r\n', u'\x85',
|
standard line ending ('\r', '\n', '\r\n', u'\x85',
|
||||||
u'\r\x85', u'\u2028'), that will be stripped off and
|
u'\r\x85', u'\\u2028'), that will be stripped off and
|
||||||
this will be used instead. The default is os.linesep,
|
this will be used instead. The default is os.linesep,
|
||||||
which is platform-dependent ('\r\n' on Windows, '\n' on
|
which is platform-dependent ('\r\n' on Windows, '\n' on
|
||||||
Unix, etc.) Specify None to write the lines as-is,
|
Unix, etc.) Specify None to write the lines as-is,
|
||||||
@ -629,15 +629,15 @@ class path(_base):
|
|||||||
f = self.open(mode)
|
f = self.open(mode)
|
||||||
try:
|
try:
|
||||||
for line in lines:
|
for line in lines:
|
||||||
isUnicode = isinstance(line, unicode)
|
isUnicode = isinstance(line, str)
|
||||||
if linesep is not None:
|
if linesep is not None:
|
||||||
# Strip off any existing line-end and add the
|
# Strip off any existing line-end and add the
|
||||||
# specified linesep string.
|
# specified linesep string.
|
||||||
if isUnicode:
|
if isUnicode:
|
||||||
if line[-2:] in (u'\r\n', u'\x0d\x85'):
|
if line[-2:] in ('\r\n', '\x0d\x85'):
|
||||||
line = line[:-2]
|
line = line[:-2]
|
||||||
elif line[-1:] in (u'\r', u'\n',
|
elif line[-1:] in ('\r', '\n',
|
||||||
u'\x85', u'\u2028'):
|
'\x85', '\u2028'):
|
||||||
line = line[:-1]
|
line = line[:-1]
|
||||||
else:
|
else:
|
||||||
if line[-2:] == '\r\n':
|
if line[-2:] == '\r\n':
|
||||||
@ -754,10 +754,10 @@ class path(_base):
|
|||||||
os.renames(self, new)
|
os.renames(self, new)
|
||||||
# --- Create/delete operations on directories
|
# --- Create/delete operations on directories
|
||||||
|
|
||||||
def mkdir(self, mode=0750):
|
def mkdir(self, mode=0o750):
|
||||||
os.mkdir(self, mode)
|
os.mkdir(self, mode)
|
||||||
|
|
||||||
def makedirs(self, mode=0750):
|
def makedirs(self, mode=0o750):
|
||||||
os.makedirs(self, mode)
|
os.makedirs(self, mode)
|
||||||
|
|
||||||
def rmdir(self):
|
def rmdir(self):
|
||||||
@ -769,7 +769,7 @@ class path(_base):
|
|||||||
|
|
||||||
# --- Modifying operations on files
|
# --- Modifying operations on files
|
||||||
|
|
||||||
def touch(self, mode = 0640):
|
def touch(self, mode = 0o640):
|
||||||
""" Set the access/modified times of this file to the current time.
|
""" Set the access/modified times of this file to the current time.
|
||||||
Create the file if it does not exist.
|
Create the file if it does not exist.
|
||||||
"""
|
"""
|
||||||
@ -823,15 +823,15 @@ class path(_base):
|
|||||||
if not self.isfile():
|
if not self.isfile():
|
||||||
raise Exception("Not a file: '%s'" % (self, ))
|
raise Exception("Not a file: '%s'" % (self, ))
|
||||||
|
|
||||||
def forcedir(self, mode = 0750):
|
def forcedir(self, mode = 0o750):
|
||||||
if not self.isdir():
|
if not self.isdir():
|
||||||
if self.exists():
|
if self.exists():
|
||||||
raise Exception("Not a directory: '%s'" % (self, ))
|
raise Exception("Not a directory: '%s'" % (self, ))
|
||||||
self.makedirs(mode)
|
self.makedirs(mode)
|
||||||
|
|
||||||
def forcefile(self, mode = 0640):
|
def forcefile(self, mode = 0o640):
|
||||||
if not self.exists():
|
if not self.exists():
|
||||||
return self.touch(mode = 0640)
|
return self.touch(mode = 0o640)
|
||||||
if not self.isfile():
|
if not self.isfile():
|
||||||
raise Exception("Not a file: %s" % (self ,))
|
raise Exception("Not a file: %s" % (self ,))
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ class AbstractXMLSerializer(LoggerMixin):
|
|||||||
return XML(input)
|
return XML(input)
|
||||||
else:
|
else:
|
||||||
return ElementTree().parse(input)
|
return ElementTree().parse(input)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
self._handle_parse_error(e)
|
self._handle_parse_error(e)
|
||||||
raise ParseError(e)
|
raise ParseError(e)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class CheckPIDFileController(DaemonController):
|
|||||||
try:
|
try:
|
||||||
os.kill(pid, 0)
|
os.kill(pid, 0)
|
||||||
return True
|
return True
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
if e.errno == errno.ESRCH:
|
if e.errno == errno.ESRCH:
|
||||||
return False
|
return False
|
||||||
raise
|
raise
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#! /usr/bin/env python
|
#! /usr/bin/env python3
|
||||||
'''
|
'''
|
||||||
Created on 01.04.2011
|
Created on 01.04.2011
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
exec python -m cul868ipe $@
|
exec python3 -m cul868ipe $@
|
||||||
|
@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
|||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
exec python -m cul868ipe $@
|
exec python3 -m cul868ipe $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Interworking Proxy for Cul868 devices.
|
Interworking Proxy for Cul868 devices.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1.2.0"
|
__version__ = "1.3.0"
|
||||||
__description__ = "The OpenMTC Cul868IPE"
|
__description__ = "The OpenMTC Cul868IPE"
|
||||||
__author_name__ = "Ronny Kreuch"
|
__author_name__ = "Ronny Kreuch"
|
||||||
__author_mail__ = "ronny.kreuch@fokus.fraunhofer.de"
|
__author_mail__ = "ronny.kreuch@fokus.fraunhofer.de"
|
||||||
|
@ -31,16 +31,16 @@ parser.add_argument("devices", nargs="*")
|
|||||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
nm = get_value("name", (unicode, str), default_name, args, config)
|
nm = get_value("name", str, default_name, args, config)
|
||||||
cb = config.get("cse_base", "onem2m")
|
cb = config.get("cse_base", "onem2m")
|
||||||
ep = get_value("ep", (unicode, str), default_ep, args, config)
|
ep = get_value("ep", str, default_ep, args, config)
|
||||||
poas = config.get("poas", ["http://auto:28728"])
|
poas = config.get("poas", ["http://auto:28728"])
|
||||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||||
ssl_certs = config.get("ssl_certs", {})
|
ssl_certs = config.get("ssl_certs", {})
|
||||||
|
|
||||||
s = config.get("sim", False)
|
s = config.get("sim", False)
|
||||||
p = int(config.get("sim_period"))
|
p = int(config.get("sim_period"))
|
||||||
cul_device = get_value('cul_device', (unicode, str), default_device, args, config)
|
cul_device = get_value('cul_device', str, default_device, args, config)
|
||||||
device_mappings = get_value('device_mappings', dict, {}, args, config)
|
device_mappings = get_value('device_mappings', dict, {}, args, config)
|
||||||
devices = get_value('devices', list, [], args, config)
|
devices = get_value('devices', list, [], args, config)
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class CUL868Coordinator(LoggerMixin):
|
|||||||
run_forever(period, self._generate_simulated_data)
|
run_forever(period, self._generate_simulated_data)
|
||||||
|
|
||||||
def _generate_simulated_data(self):
|
def _generate_simulated_data(self):
|
||||||
p = choice(self.sim_parsers.keys())
|
p = choice(list(self.sim_parsers.keys()))
|
||||||
fake_parser = self.sim_parsers[p]
|
fake_parser = self.sim_parsers[p]
|
||||||
dev_id, data = fake_parser(p)
|
dev_id, data = fake_parser(p)
|
||||||
handler = self.handlers[p]
|
handler = self.handlers[p]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import time
|
import time
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from cul_868_coordinator import CUL868Coordinator
|
from .cul_868_coordinator import CUL868Coordinator
|
||||||
from openmtc_app.onem2m import XAE
|
from openmtc_app.onem2m import XAE
|
||||||
from openmtc_onem2m.model import Container
|
from openmtc_onem2m.model import Container
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class CUL868IPE(XAE):
|
|||||||
|
|
||||||
self.cul = CUL868Coordinator(device=device, sim=sim)
|
self.cul = CUL868Coordinator(device=device, sim=sim)
|
||||||
|
|
||||||
for d in map(lambda s: CULDevice(*s.split(":")[:2]), cul_devices):
|
for d in [CULDevice(*s.split(":")[:2]) for s in cul_devices]:
|
||||||
if d.type == "fs20":
|
if d.type == "fs20":
|
||||||
house_code, device_code = d.device_id.split("-")
|
house_code, device_code = d.device_id.split("-")
|
||||||
self.fs20.append((house_code, device_code))
|
self.fs20.append((house_code, device_code))
|
||||||
@ -85,11 +85,11 @@ class CUL868IPE(XAE):
|
|||||||
|
|
||||||
if func:
|
if func:
|
||||||
sub_labels.append('openmtc:actuator_data')
|
sub_labels.append('openmtc:actuator_data')
|
||||||
sub_labels += map(lambda x: "openmtc:actuator_data:%s" % x, l) if l else []
|
sub_labels += ["openmtc:actuator_data:%s" % x for x in l] if l else []
|
||||||
sub_cnt = Container(resourceName=c_id, maxNrOfInstances=0, labels=sub_labels)
|
sub_cnt = Container(resourceName=c_id, maxNrOfInstances=0, labels=sub_labels)
|
||||||
else:
|
else:
|
||||||
sub_labels.append('openmtc:sensor_data')
|
sub_labels.append('openmtc:sensor_data')
|
||||||
sub_labels += map(lambda x: "openmtc:sensor_data:%s" % x, l) if l else []
|
sub_labels += ["openmtc:sensor_data:%s" % x for x in l] if l else []
|
||||||
sub_cnt = Container(resourceName=c_id, labels=sub_labels)
|
sub_cnt = Container(resourceName=c_id, labels=sub_labels)
|
||||||
|
|
||||||
self.containers[s_id] = s_cnt = self.create_container(dev_cnt, sub_cnt)
|
self.containers[s_id] = s_cnt = self.create_container(dev_cnt, sub_cnt)
|
||||||
@ -123,7 +123,7 @@ class CUL868IPE(XAE):
|
|||||||
def _get_handle_switch(self, house_code, device_code):
|
def _get_handle_switch(self, house_code, device_code):
|
||||||
|
|
||||||
def handle_switch(container, content):
|
def handle_switch(container, content):
|
||||||
if isinstance(content, (str, unicode)): # fallback to old behavior
|
if isinstance(content, str): # fallback to old behavior
|
||||||
if content == 'TOGGLE':
|
if content == 'TOGGLE':
|
||||||
self.cul.toggle(house_code, device_code)
|
self.cul.toggle(house_code, device_code)
|
||||||
elif content == 'ON':
|
elif content == 'ON':
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from parsers import S300THParser, EM1000EMParser, FS20Parser
|
from .parsers import S300THParser, EM1000EMParser, FS20Parser
|
||||||
|
|
||||||
|
|
||||||
def test_parsers():
|
def test_parsers():
|
||||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
|||||||
r_prefix = len(root) + 1
|
r_prefix = len(root) + 1
|
||||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||||
is_module = "__init__.py" in files and path != root
|
is_module = "__init__.py" in files and path != root
|
||||||
excluded = any(map(lambda x: x in path, excluded_list))
|
excluded = any([x in path for x in excluded_list])
|
||||||
included = any(map(lambda x: x in path, included_list))
|
included = any([x in path for x in included_list])
|
||||||
if is_module and (not excluded or included):
|
if is_module and (not excluded or included):
|
||||||
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
packages.append(package + "." + path[r_prefix:].replace("/", "."))
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ def get_pkg_files(base_dir, name):
|
|||||||
|
|
||||||
def enable_init_files(init_dir, init_dist_files):
|
def enable_init_files(init_dir, init_dist_files):
|
||||||
for f in init_dist_files:
|
for f in init_dist_files:
|
||||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
|
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||||
|
|
||||||
|
|
||||||
def move_config_files(config_dir, config_files):
|
def move_config_files(config_dir, config_files):
|
||||||
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
|
|||||||
try:
|
try:
|
||||||
from pwd import getpwnam
|
from pwd import getpwnam
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "Could not import the 'pwd' module. Skipping user management"
|
print("Could not import the 'pwd' module. Skipping user management")
|
||||||
else:
|
else:
|
||||||
# assuming DB_DIR was created by setup already
|
# assuming DB_DIR was created by setup already
|
||||||
try:
|
try:
|
||||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
|||||||
|
|
||||||
cd CUL868IPE
|
cd CUL868IPE
|
||||||
|
|
||||||
PYTHONPATH=${PYTHONPATH}:src exec python -m cul868ipe $@
|
PYTHONPATH=${PYTHONPATH}:src exec python3 -m cul868ipe $@
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user