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:
aor-fokus 2019-02-14 15:41:53 +01:00 committed by GitHub
parent c3ac4f9dfb
commit 1052fd4a08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
132 changed files with 641 additions and 603 deletions

View File

@ -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
View 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>

View File

@ -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

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec python -m influxdbapp $@ exec python3 -m influxdbapp $@

View File

@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done" echo "done"
exec python -m influxdbapp $@ exec python3 -m influxdbapp $@

View File

@ -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

View File

@ -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"

View File

@ -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(

View File

@ -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)

View File

@ -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:

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec python -m orioncontextbroker $@ exec python3 -m orioncontextbroker $@

View File

@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done" echo "done"
exec python -m orioncontextbroker $@ exec python3 -m orioncontextbroker $@

View File

@ -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

View File

@ -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"

View File

@ -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(

View File

@ -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(

View File

@ -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):

View File

@ -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:

View File

@ -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 $@

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec python -m csvinjector $@ exec python3 -m csvinjector $@

View File

@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done" echo "done"
exec python -m csvinjector $@ exec python3 -m csvinjector $@

View File

@ -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

View File

@ -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"

View File

@ -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(

View File

@ -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 = {

View File

@ -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)

View File

@ -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:

View File

@ -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 $@

View File

@ -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 $@

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec python -m mqttconnector $@ exec python3 -m mqttconnector $@

View File

@ -76,4 +76,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done" echo "done"
exec python -m mqttconnector $@ exec python3 -m mqttconnector $@

View File

@ -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

View File

@ -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"

View File

@ -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,

View File

@ -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

View File

@ -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:

View File

@ -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 $@

View File

@ -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):

View File

@ -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]

View File

@ -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

View File

@ -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())

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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)

View File

@ -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()
])) ]))

View File

@ -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:

View File

@ -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, ))

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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}

View 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)]

View File

@ -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']

View File

@ -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']

View File

@ -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']

View File

@ -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')

View File

@ -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')

View File

@ -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)]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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}

View File

@ -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']

View File

@ -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')

View File

@ -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}

View 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

View 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

View File

@ -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"

View File

@ -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"

View File

@ -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 $@

View File

@ -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 $@

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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')

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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 ,))

View File

@ -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)

View File

@ -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

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python #! /usr/bin/env python3
''' '''
Created on 01.04.2011 Created on 01.04.2011

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
exec python -m cul868ipe $@ exec python3 -m cul868ipe $@

View File

@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done" echo "done"
exec python -m cul868ipe $@ exec python3 -m cul868ipe $@

View File

@ -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

View File

@ -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"

View File

@ -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)

View File

@ -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]

View File

@ -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':

View File

@ -1,4 +1,4 @@
from parsers import S300THParser, EM1000EMParser, FS20Parser from .parsers import S300THParser, EM1000EMParser, FS20Parser
def test_parsers(): def test_parsers():

View File

@ -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:

View File

@ -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