Compare commits

..

3 Commits

Author SHA1 Message Date
50e2bd092b installing python-setuptools in docker 2019-01-14 02:15:06 +01:00
eead3ebc9f installing python-setuptools in docker 2019-01-14 01:53:47 +01:00
dc63f2e3ef test stretch building with travis 2019-01-09 18:55:47 +01:00
137 changed files with 701 additions and 1473 deletions

View File

@ -1,23 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
**Additional context**
Add any other context about the problem here.

View File

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -1,55 +1,36 @@
services:
- docker
dist: xenial
- docker
before_script:
- sudo apt update
- sudo apt install qemu-user-static python3 python3-pip python3-setuptools
- sudo pip3 install --upgrade pip
- sudo python3 -m pip install --upgrade setuptools
- sudo python3 -m pip install --upgrade pyresttest
- "./create-binary-docker backend"
- "./create-binary-docker backend -a arm"
- "./create-binary-docker gateway"
- "./create-binary-docker gateway -a arm"
- "./create-binary-docker orioncontextbroker"
- "./create-binary-docker orioncontextbroker -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
- sudo apt update
- sudo apt install qemu-user-static
- "./create-binary-docker backend"
- "./create-binary-docker backend -a arm"
- "./create-binary-docker gateway"
- "./create-binary-docker gateway -a arm"
- "./create-binary-docker orioncontextbroker"
- "./create-binary-docker orioncontextbroker -a arm"
- "./create-binary-docker influxdbapp"
- "./create-binary-docker influxdbapp -a arm"
- "./create-binary-docker cul868ipe"
- "./create-binary-docker cul868ipe -a arm"
script:
- 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/cul868ipe-amd64 openmtc/cul868-ipe-amd64
- docker tag openmtc/cul868ipe-arm openmtc/cul868-ipe-arm
- docker tag openmtc/influxdbapp-amd64 openmtc/influxdb-app-amd64
- docker tag openmtc/influxdbapp-arm openmtc/influxdb-app-arm
- docker logs gateway
- docker logs backend
after_script:
- pyresttest http://localhost:8000 tests/interoperability/basic.yaml
- 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/cul868ipe-amd64 openmtc/cul868-ipe-amd64
- docker tag openmtc/cul868ipe-arm openmtc/cul868-ipe-arm
- docker tag openmtc/influxdbapp-amd64 openmtc/influxdb-app-amd64
- docker tag openmtc/influxdbapp-arm openmtc/influxdb-app-arm
- 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
env:
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=
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

View File

@ -1,6 +0,0 @@
# Contributors ordered by number of commits
Ronald Steinke <rst-fokus>
Christian Klopp <ckl-fokus>
Alexander Ortlieb <aor-fokus>
Jason Fox <jason-fox>

View File

@ -6,14 +6,11 @@
[![FIWARE IoT Agents](https://nexus.lab.fiware.org/static/badges/chapters/iot-agents.svg)](https://www.fiware.org/developers/catalogue/)
[![License: Eclipse](https://img.shields.io/github/license/OpenMTC/OpenMTC.svg)](https://www.eclipse.org/legal/epl-v10.html)
[![](https://img.shields.io/docker/pulls/openmtc/gateway-amd64.svg)](https://hub.docker.com/u/openmtc)
[![Support badge](https://nexus.lab.fiware.org/repository/raw/public/badges/stackoverflow/iot-agents.svg)](https://stackoverflow.com/questions/tagged/fiware+iot)
<br/>
[![Documentation badge](https://img.shields.io/readthedocs/fiware-openmtc.svg)](http://fiware-openmtc.readthedocs.org/en/latest/?badge=latest)
[![Build Status](https://travis-ci.org/OpenMTC/OpenMTC.svg?branch=master)](https://travis-ci.org/OpenMTC/OpenMTC)
[![Coverage Status](https://coveralls.io/repos/github/OpenMTC/OpenMTC/badge.svg?branch=master)](https://coveralls.io/github/OpenMTC/OpenMTC?branch=master)
[![Known Vulnerabilities](https://snyk.io/test/github/OpenMTC/OpenMTC/badge.svg?targetFile=openmtc-gevent%2Frequirements.txt)](https://snyk.io/test/github/OpenMTC/OpenMTC?targetFile=openmtc-gevent%2Frequirements.txt)
![Status](https://nexus.lab.fiware.org/static/badges/statuses/iot-openmtc.svg)
[![Build Status](https://travis-ci.org/OpenMTC/OpenMTC.svg?branch=master)](https://travis-ci.org/OpenMTC/OpenMTC)
The OpenMTC SDK aims to provide developers with a convenient yet flexible tool
to write oneM2M compliant applications. This includes network applications
@ -24,17 +21,12 @@ This project is part of [FIWARE](https://www.fiware.org/). For more information
check the FIWARE Catalogue entry for the
[IoT Agents](https://github.com/Fiware/catalogue/tree/master/iot-agents).
| :octocat: [Git Repository](https://github.com/OpenMTC/OpenMTC) | :whale: [Docker Hub](https://hub.docker.com/u/openmtc) | :books: [Documentation](https://fiware-openmtc.readthedocs.io/) | :page_facing_up: [Site](https://www.openmtc.org/) | :mortar_board: [Academy](https://fiware-academy.readthedocs.io/en/latest/iot-agents/open-mtc) |
| -------------------------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------- |
# Content
- [Install](#install)
- [Usage](#usage)
- [API](#api)
- [Training](#training)
- [Quality Assurance](#quality-assurance)
- [Contributing](#contributing)
- [License](#license)
@ -49,11 +41,6 @@ corresponding section of the
Information about how to use the IoT Agent can be found in the
[User & Programmers Manual](https://fiware-openmtc.readthedocs.io/en/latest/introduction).
## Training
Information about our Training can be found in the
[Training Section](https://fiware-openmtc.readthedocs.io/en/latest/training/training-ipe-sensors/index.html).
## API
Information about the REST API can be found in the
@ -101,14 +88,10 @@ follows:
---
## Contributing
Contribution guidelines are detailed in the [CREDITS](CREDITS.md) file.
## License
## Licence
The OpenMTC SDK is licensed under the Eclipse Public License (EPL)
version 1.
© 2018-2019 OpenMTC
© 2018 OpenMTC

View File

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

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools import setup
from distutils.core import setup

View File

@ -2,7 +2,7 @@
Transfer OpenMTC Data to an InfluxDB
"""
__version__ = "1.3.0"
__version__ = "1.1.0"
__description__ = "InfluxdbApp"
__author_name__ = "Christian Klopp"
__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")
# variables
nm = get_value("name", str, default_name, args, config)
nm = get_value("name", (unicode, str), default_name, args, config)
cb = config.get("cse_base", "onem2m")
ep = get_value("ep", str, default_ep, args, config)
ep = get_value("ep", (unicode, str), default_ep, args, config)
poas = config.get("poas", ["http://auto:23706"])
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
ssl_certs = config.get("ssl_certs", {})
lbl = get_value("labels", list, default_labels, args, config)
influx_host = get_value("influx_host", str, "localhost", args, config)
influx_port = get_value("influx_port", str, "8086", args, config)
influx_user = get_value("influx_user", str, "root", args, config)
influx_password = get_value("influx_password", str, "root", args, config)
db_name = get_value("db_name", str, "example", args, config)
db_user = get_value("db_user", str, "test", args, config)
db_pw = get_value("db_pw", str, "test", args, config)
influx_host = get_value("influx_host", (unicode, str), "localhost", args, config)
influx_port = get_value("influx_port", (unicode, str), "8086", args, config)
influx_user = get_value("influx_user", (unicode, str), "root", args, config)
influx_password = get_value("influx_password", (unicode, str), "root", args, config)
db_name = get_value("db_name", (unicode, str), "example", args, config)
db_user = get_value("db_user", (unicode, str), "test", args, config)
db_pw = get_value("db_pw", (unicode, str), "test", args, config)
# start
app = InfluxdbApp(

View File

@ -1,5 +1,5 @@
from openmtc_app.onem2m import ResourceManagementXAE
from .connector import InfluxDBConnector
from connector import InfluxDBConnector
class InfluxdbApp(ResourceManagementXAE):
@ -18,7 +18,7 @@ class InfluxdbApp(ResourceManagementXAE):
**kw
):
super(InfluxdbApp, self).__init__(*args, **kw)
if isinstance(labels, str):
if isinstance(labels, basestring):
self.labels = {labels}
elif hasattr(labels, '__iter__') and len(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
for path, dirs, files in os.walk(root, onerror=on_error):
is_module = "__init__.py" in files and path != root
excluded = any([x in path for x in excluded_list])
included = any([x in path for x in included_list])
excluded = any(map(lambda x: x in path, excluded_list))
included = any(map(lambda x: x in path, included_list))
if is_module and (not excluded or included):
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):
for f in init_dist_files:
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
def move_config_files(config_dir, config_files):
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
try:
from pwd import getpwnam
except ImportError:
print("Could not import the 'pwd' module. Skipping user management")
print "Could not import the 'pwd' module. Skipping user management"
else:
# assuming DB_DIR was created by setup already
try:

View File

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

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools 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
"""
__version__ = "1.3.0"
__version__ = "1.1.0"
__description__ = "OrionContextBroker"
__author_name__ = "Christian Klopp"
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"

View File

@ -38,17 +38,20 @@ parser.add_argument(
args, config = prepare_app(parser, __loader__, __name__, "config.json")
# variables
nm = get_value("name", str, default_name, args, config)
nm = get_value("name", (unicode, str), default_name, args, config)
cb = config.get("cse_base", "onem2m")
ep = get_value("ep", str, default_ep, args, config)
ep = get_value("ep", (unicode, str), default_ep, args, config)
poas = config.get("poas", ["http://auto:25396"])
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
ssl_certs = config.get("ssl_certs", {})
interval = get_value("interval", int, default_ep, args, config)
lbl = get_value("labels", list, default_labels, args, config)
orion_host = get_value("orion_host", str, default_orion_host, args, config)
orion_api = get_value("orion_api", str, default_orion_api, args, config)
accumulate_address = get_value("accumulate_address", str, default_accumulate_address, args, config)
orion_host = get_value("orion_host", (unicode, str), default_orion_host, args,
config)
orion_api = get_value("orion_api", (unicode, str), default_orion_api, args,
config)
accumulate_address = get_value("accumulate_address", (unicode, str),
default_accumulate_address, args, config)
# start
app = OrionContextBroker(

View File

@ -1,6 +1,8 @@
from urllib.parse import urljoin
try:
from urllib.parse import urljoin
except ImportError:
from urlparse import urljoin
import logging
from datetime import datetime
import requests
@ -30,23 +32,16 @@ class OrionAPI(LoggerMixin):
def _get_type(self, element):
if isinstance(element, int):
return "Int"
return u"Int"
elif isinstance(element, float):
return "Float"
return u"Float"
elif isinstance(element, bool):
return "Boolean"
elif isinstance(element, str):
return "String"
return u"Boolean"
elif isinstance(element, (str, unicode)):
return u"String"
else:
self.logger.error('Type of "{}" unknown'.format(element))
return "Unknown"
def is_host_alive(self):
req = self._request(
"{}/v2/entities".format(self.host),
method="get"
)
return req['status'] >= 0
return u"Unknown"
def create_entity(self,
entity_name,
@ -90,8 +85,7 @@ class OrionAPI(LoggerMixin):
"type": self._get_type(data_senml["v"]),
"metadata": {
"timestamp": {
"value": datetime.fromtimestamp(float(data_senml["t"])).replace(microsecond=0).isoformat()
if data_senml["t"] != "none" else data_senml["t"],
"value": data_senml["t"],
"type": "String"
},
"bn": {

View File

@ -1,11 +1,14 @@
import re
from urllib.parse import urlparse
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
from flask import Flask, Response, request
from gevent.pywsgi import WSGIServer
from openmtc_app.onem2m import ResourceManagementXAE
from .orion_api import OrionAPI
from orion_api import OrionAPI
class OrionContextBroker(ResourceManagementXAE):
@ -17,7 +20,7 @@ class OrionContextBroker(ResourceManagementXAE):
*args,
**kw):
super(OrionContextBroker, self).__init__(*args, **kw)
if isinstance(labels, str):
if isinstance(labels, basestring):
self.labels = {labels}
elif hasattr(labels, '__iter__'):
self.labels = set(labels)
@ -34,13 +37,10 @@ class OrionContextBroker(ResourceManagementXAE):
accumulate_address = "http://" + self._get_auto_host(orion_host) + ":8080"
# Orion API
self._dry_run = not orion_host
self.orion_api = OrionAPI(
orion_host=orion_host,
api_version=orion_api,
accumulate_endpoint="{}/accumulate".format(accumulate_address))
if not self._dry_run:
self._dry_run = not self.orion_api.is_host_alive()
# Subscription Sink for OCB
self.app = Flask(__name__)
@ -100,8 +100,9 @@ class OrionContextBroker(ResourceManagementXAE):
device_type = "sensor" if sensor_info.get("sensor_labels",
None) else "actuator"
try:
id_label = [x for x in sensor_info['{}_labels'.format(device_type)]
if x.startswith('openmtc:id:')].pop()
id_label = filter(
lambda x: (x.startswith('openmtc:id:')),
sensor_info['{}_labels'.format(device_type)]).pop()
cse_id, dev_id = re.sub('^openmtc:id:', '',
id_label).split('/')[:2]
except (IndexError, ValueError):
@ -115,9 +116,6 @@ class OrionContextBroker(ResourceManagementXAE):
return re.sub('[\W]', '_', f_s), '%s-%s' % (e_pre, dev_id)
def _sensor_data_cb(self, sensor_info, sensor_data):
if self._dry_run:
return
try:
fiware_service, entity_name = self._entity_names[sensor_info['ID']]
except KeyError:
@ -140,10 +138,6 @@ class OrionContextBroker(ResourceManagementXAE):
'ID']]
self.logger.info("Create new Entity {} on Fiware Service {}".format(
entity_name, fiware_service))
if self._dry_run:
return
self.orion_api.create_entity(
entity_name, fiware_service=fiware_service)
data_dummy = {

View File

@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
r_prefix = len(root) + 1
for path, dirs, files in os.walk(root, onerror=on_error):
is_module = "__init__.py" in files and path != root
excluded = any([x in path for x in excluded_list])
included = any([x in path for x in included_list])
excluded = any(map(lambda x: x in path, excluded_list))
included = any(map(lambda x: x in path, included_list))
if is_module and (not excluded or included):
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):
for f in init_dist_files:
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
def move_config_files(config_dir, config_files):
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
try:
from pwd import getpwnam
except ImportError:
print("Could not import the 'pwd' module. Skipping user management")
print "Could not import the 'pwd' module. Skipping user management"
else:
# assuming DB_DIR was created by setup already
try:

View File

@ -6,4 +6,4 @@ cd $(dirname ${0})
cd csvInjector
PYTHONPATH=${PYTHONPATH}:src exec python3 -m csvinjector $@
PYTHONPATH=${PYTHONPATH}:src exec python -m csvinjector $@

View File

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

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools import setup
from distutils.core import setup

View File

@ -2,7 +2,7 @@
App to inject data from a csv file to OpenMTC
"""
__version__ = "1.3.0"
__version__ = "1.1.0"
__description__ = "csvInjector"
__author_name__ = "Christian Klopp"
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"

View File

@ -42,20 +42,28 @@ parser.add_argument(
args, config = prepare_app(parser, __loader__, __name__, "config.json")
# variables
nm = get_value("name", str, default_name, args, config)
nm = get_value("name", (unicode, str), default_name, args, config)
cb = config.get("cse_base", "onem2m")
ep = get_value("ep", str, default_ep, args, config)
ep = get_value("ep", (unicode, str), default_ep, args, config)
poas = config.get("poas", ["http://auto:28300"])
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
ssl_certs = config.get("ssl_certs", {})
csv_path = get_value("csv_path", str, default_csv_path, args, config)
csv_delim = get_value("csv_delim", str, default_csv_delim, args, config)
csv_quotechar = get_value("csv_quotechar", str, default_csv_quotechar, args, config)
device_classifier = get_value("device_classifier", str, default_device_classifier, args, config)
date_classifier = get_value("date_classifier", (str, list), default_date_classifier, args, config)
time_format = get_value("time_format", (str, list), default_time_format, args, config)
duration = get_value("duration", (int, float), default_duration, args, config)
repeat = get_value("repeat", str, default_repeat, args, config)
csv_path = get_value("csv_path", (unicode, str), default_csv_path, args,
config)
csv_delim = get_value("csv_delim", (unicode, str), default_csv_delim, args,
config)
csv_quotechar = get_value("csv_quotechar", (unicode, str),
default_csv_quotechar, args, config)
device_classifier = get_value("device_classifier", (unicode, str),
default_device_classifier, 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
app = csvInjector(

View File

@ -1,6 +1,6 @@
from openmtc_app.onem2m import XAE
from openmtc_onem2m.model import Container
from .csv_process import csvProcessor
from csv_process import csvProcessor
import sched
import time
import datetime
@ -95,7 +95,7 @@ class csvInjector(XAE):
if k == "Date" or k == self.device_classifier or event[k] in (
"", None):
continue
if k not in self._recognized_measurement_containers[sensor].keys():
if not k in self._recognized_measurement_containers[sensor].keys():
self._create_measurement_container(sensor, k)
timestamp = time.mktime(datetime.datetime.now().timetuple())
senml = {

View File

@ -65,4 +65,4 @@ class csvProcessor(LoggerMixin):
if __name__ == "__main__":
p = csvProcessor("example.csv", duration=300)
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
for path, dirs, files in os.walk(root, onerror=on_error):
is_module = "__init__.py" in files and path != root
excluded = any([x in path for x in excluded_list])
included = any([x in path for x in included_list])
excluded = any(map(lambda x: x in path, excluded_list))
included = any(map(lambda x: x in path, included_list))
if is_module and (not excluded or included):
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):
for f in init_dist_files:
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
def move_config_files(config_dir, config_files):
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
try:
from pwd import getpwnam
except ImportError:
print("Could not import the 'pwd' module. Skipping user management")
print "Could not import the 'pwd' module. Skipping user management"
else:
# assuming DB_DIR was created by setup already
try:

View File

@ -6,4 +6,4 @@ cd $(dirname ${0})
cd InfluxdbApp
PYTHONPATH=${PYTHONPATH}:src exec python3 -m influxdbapp $@
PYTHONPATH=${PYTHONPATH}:src exec python -m influxdbapp $@

View File

@ -6,4 +6,4 @@ cd $(dirname ${0})
cd mqttConnector
PYTHONPATH=${PYTHONPATH}:src exec python3 -m mqttconnector $@
PYTHONPATH=${PYTHONPATH}:src exec python -m mqttconnector $@

View File

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

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools import setup
from distutils.core import setup

View File

@ -2,7 +2,7 @@
TODO: Add description here
"""
__version__ = "1.3.0"
__version__ = "1.1.0"
__description__ = "mqttConnector"
__author_name__ = "Ronald Steinke"
__author_mail__ = "ronald.steinke@fokus.fraunhofer.de"

View File

@ -40,27 +40,36 @@ parser.add_argument("--mqtts-keyfile", help="Path to own mqtts key")
args, config = prepare_app(parser, __loader__, __name__, "config.json")
# variables
nm = get_value("name", str, default_name, args, config)
nm = get_value("name", (unicode, str), default_name, args, config)
cb = config.get("cse_base", "onem2m")
ep = get_value("ep", str, default_ep, args, config)
ep = get_value("ep", (unicode, str), default_ep, args, config)
poas = config.get("poas", ["http://auto:21753"])
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
ssl_certs = config.get("ssl_certs", {})
broker_ep = config.get("broker_ep", "localhost:8883")
topic_pre = get_value("topic_pre", str, default_topic_pre, args, config)
topic_index_location = get_value("topic_index_location", int,
default_topic_index_location, args, config)
topic_index_device = get_value("topic_index_device", int,
default_topic_index_device, args, config)
fiware_service = get_value("fiware_service", str, default_fiware_service, args, config)
broker_user = get_value("broker_user", str, default_broker_user, args, config)
broker_user_pw = get_value("broker_user_pw", str, default_broker_user_pw, args, config)
user_pw = get_value("broker_user_pw", str, default_broker_user_pw, args, config)
mqtts_enabled = get_value("mqtts_enabled", (bool), False, args, config)
mqtts_ca_certs = get_value("mqtts_ca_certs", str, default_mqtts_ca_certs, args, config)
mqtts_certfile = get_value("mqtts_certfile", str, default_mqtts_certfile, args, config)
mqtts_keyfile = get_value("mqtts_keyfile", str, default_mqtts_keyfile, args, config)
broker_ep = config.get("broker_ep", "localhost:8883")
topic_pre = get_value("topic_pre", (unicode, str), default_topic_pre, args,
config)
topic_index_location = get_value("topic_index_location", (int),
default_topic_index_location, args, config)
topic_index_device = get_value("topic_index_device", (int),
default_topic_index_device, args, config)
fiware_service = get_value("fiware_service", (unicode, str),
default_fiware_service, args, config)
broker_user = get_value("broker_user", (unicode, str), default_broker_user,
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_ca_certs = get_value("mqtts_ca_certs", (unicode, str),
default_mqtts_ca_certs, args, config)
mqtts_certfile = get_value("mqtts_certfile", (unicode, str),
default_mqtts_certfile, args, config)
mqtts_keyfile = get_value("mqtts_keyfile", (unicode, str),
default_mqtts_keyfile, args, config)
# start
app = mqttConnector(
broker_ep=broker_ep,

View File

@ -115,7 +115,7 @@ class mqttConnector(XAE):
# check payload
try:
readings = json_decode(
base64decode(json_decode(payload)['m2m:cin']['con']).decode('utf-8'))
base64decode(json_decode(payload)['m2m:cin']['con']))
except (ValueError, KeyError, TypeError):
self.logger.error('Damaged payload; discarding')
return

View File

@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
r_prefix = len(root) + 1
for path, dirs, files in os.walk(root, onerror=on_error):
is_module = "__init__.py" in files and path != root
excluded = any([x in path for x in excluded_list])
included = any([x in path for x in included_list])
excluded = any(map(lambda x: x in path, excluded_list))
included = any(map(lambda x: x in path, included_list))
if is_module and (not excluded or included):
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):
for f in init_dist_files:
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0755)
def move_config_files(config_dir, config_files):
@ -74,7 +74,7 @@ def create_openmtc_user(db_dir=None, log_dir=None):
try:
from pwd import getpwnam
except ImportError:
print("Could not import the 'pwd' module. Skipping user management")
print "Could not import the 'pwd' module. Skipping user management"
else:
# assuming DB_DIR was created by setup already
try:

View File

@ -6,4 +6,4 @@ cd $(dirname ${0})
cd OrionContextBroker
PYTHONPATH=${PYTHONPATH}:src exec python3 -m orioncontextbroker $@
PYTHONPATH=${PYTHONPATH}:src exec python -m orioncontextbroker $@

View File

@ -1,13 +1,11 @@
import urllib.request
import urllib.parse
import urllib.error
import urllib
import ssl
from socket import (
gaierror,
error as socket_error,
)
from time import time
from urllib.parse import urlparse
from urlparse import urlparse
from aplus import Promise
from futile.caching import LRUCache
from geventhttpclient.client import HTTPClient
@ -50,7 +48,7 @@ _method_map_to_http = {
_clients = LRUCache(threadsafe=False)
_query_params = frozenset(['rt', 'rp', 'rcn', 'da', 'drt', 'rids', 'tids', 'ltids', 'tqi'])
_query_params = frozenset(['rt', 'rp', 'rcn', 'da', 'drt'])
_header_to_field_map = {
'X-M2M-ORIGIN': 'originator',
@ -61,8 +59,6 @@ _header_to_field_map = {
'X-M2M-RET': 'rqet',
'X-M2M-OET': 'oet',
'X-M2M-EC': 'ec',
'X-M2M-RVI': 'rvi',
'X-M2M-VSI': 'vsi',
}
@ -147,7 +143,7 @@ class OneM2MHTTPClient(OneM2MClient):
filter_criteria = onem2m_request.fc
params.update({
(get_short_attribute_name(name) or get_short_member_name(name)): val
for name, val in filter_criteria.get_values(True).items()
for name, val in filter_criteria.get_values(True).iteritems()
})
if onem2m_request.ae_notifying:
@ -156,7 +152,7 @@ class OneM2MHTTPClient(OneM2MClient):
path = normalize_path(onem2m_request.to)
if params:
path += '?' + urllib.parse.urlencode(params, True)
path += '?' + urllib.urlencode(params, True)
content_type, data = encode_onem2m_content(onem2m_request.content, self.content_type, path=path)
@ -166,14 +162,11 @@ class OneM2MHTTPClient(OneM2MClient):
content_type += '; ty=' + str(ResourceTypeE[onem2m_request.resource_type.typename])
headers = {
header: getattr(onem2m_request, field)
for header, field in _header_to_field_map.items()
header: getattr(onem2m_request, field) for header, field in _header_to_field_map.iteritems()
if getattr(onem2m_request, field) is not None
}
headers['content-type'] = content_type
headers['accept'] = self.content_type
self.logger.debug("Added request params: %s", params)
return {
@ -203,7 +196,7 @@ class OneM2MHTTPClient(OneM2MClient):
get_response_status(rsc),
request=onem2m_request,
rsc=rsc,
pc=decode_onem2m_content(response.read().decode("utf-8"), response.get("content-type"))
pc=decode_onem2m_content(response.read(), response.get("content-type"))
)
def send_onem2m_request(self, onem2m_request):

View File

@ -32,7 +32,7 @@ from simplejson import (
JSONDecodeError,
)
from socket import error as SocketError
from urllib.parse import urlparse
from urlparse import urlparse
from openmtc_onem2m.util import split_onem2m_address
#: Dictionary mapping supported schemes to port numbers
@ -83,12 +83,11 @@ class OneM2MMQTTClient(OneM2MClient):
__request_fields = frozenset([
'op',
'to',
'fr',
'rqi',
'ty',
'pc',
'rids',
'rol',
'ot',
'rqet',
'rset',
@ -99,28 +98,17 @@ class OneM2MMQTTClient(OneM2MClient):
'ec',
'da',
'gid',
'fc',
'drt',
'tids',
'ltids',
'tqi',
'rvi',
'vsi',
'to',
'fc',
])
__response_fields = frozenset([
'rsc',
'rqi',
'pc',
'to',
'fr',
'ot',
'rset',
'ec',
'cts',
'cto',
'rvi',
'vsi',
'to',
])
@staticmethod
@ -353,7 +341,7 @@ class OneM2MMQTTClient(OneM2MClient):
self.logger.debug('Decoded JSON request: %s' % (request, ))
op = list(OneM2MOperation._member_map_.values())[request['op'] - 1]
op = OneM2MOperation._member_map_.values()[request['op'] - 1]
to = request['to']
del request['op'], request['to']
@ -382,8 +370,7 @@ class OneM2MMQTTClient(OneM2MClient):
sp_id, cse_id, _ = split_onem2m_address(response.to)
response.content = self._decode(
encode_onem2m_content(response.content, 'application/json',
path=sp_id + cse_id,
fields=response.fields)[1]
path=sp_id + cse_id)[1]
)
self._publish_message(
@ -485,8 +472,7 @@ class OneM2MMQTTClient(OneM2MClient):
else:
request.ty = None
request.op = 1 + list(OneM2MOperation._member_map_.keys()).index(
OneM2MOperation[request.op].name)
request.op = 1 + OneM2MOperation._member_map_.keys().index(OneM2MOperation[request.op].name)
if request.pc:
request.pc = self._decode(
encode_onem2m_content(request.pc, 'application/json', path=request.to)[1]

View File

@ -13,10 +13,6 @@ STATUS_ACCEPTED = STATUS(
1000, "ACCEPTED", 202)
STATUS_OK = STATUS(
2000, "OK", 200)
STATUS_UPDATED = STATUS(
2004, "UPDATED", 200)
STATUS_DELETED = STATUS(
2002, "DELETED", 200)
STATUS_CREATED = STATUS(
2001, "CREATED", 201)
STATUS_BAD_REQUEST = STATUS(

View File

@ -1,4 +1,7 @@
from urllib.parse import urlparse
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
from openmtc.mapper import BasicMapper, MapperError
from openmtc_onem2m import OneM2MRequest
@ -46,8 +49,7 @@ class OneM2MMapper(BasicMapper):
path,
self.originator,
ty=type(instance),
pc=instance,
rvi='2a'
pc=instance
)).get()
try:
@ -81,8 +83,7 @@ class OneM2MMapper(BasicMapper):
OneM2MOperation.update,
instance.path,
self.originator,
pc=instance,
rvi='2a'
pc=instance
)).get()
try:
@ -104,8 +105,6 @@ class OneM2MMapper(BasicMapper):
path,
self.originator,
filter_criteria=fc,
rvi='2a',
rcn=5,
**request_options
)).get()
@ -113,8 +112,7 @@ class OneM2MMapper(BasicMapper):
self._send_request(OneM2MRequest(
OneM2MOperation.delete,
getattr(instance, "path", instance),
self.originator,
rvi='2a'
self.originator
))
# TODO(rst): check if this can be removed in parent class

View File

@ -2,12 +2,11 @@ from enum import IntEnum, unique
from openmtc.model import (Resource as Res, UnicodeAttribute, DatetimeAttribute,
Attribute, ListAttribute, Entity, EntityAttribute,
AnyURI, StringListAttribute, ContentResource,
BytesAttribute)
AnyURI, StringListAttribute, ContentResource)
from openmtc.model.exc import ModelTypeError
from futile import issubclass
LATEST_VERSION = "2a"
LATEST_VERSION = "1.6"
class OneM2MIntEnum(IntEnum):
@ -25,7 +24,7 @@ class OneM2MContentResource(ContentResource, OneM2MEntity):
class OneM2MResource(Res, OneM2MEntity):
__model_name__ = "onem2m"
__model_version__ = "2a"
__model_version__ = "1.6"
################################################################################
@ -42,8 +41,8 @@ class ResourceTypeE(OneM2MIntEnum):
eventConfig = 7
execInstance = 8
group = 9
locationPolicy = 10
m2mServiceSubscription = 11
localPolicy = 10
m2mServiceSubscriptionProfile = 11
mgmtCmd = 12
mgmtObj = 13
node = 14
@ -57,16 +56,6 @@ class ResourceTypeE(OneM2MIntEnum):
statsConfig = 22
subscription = 23
semanticDescriptor = 24
notificationTargetMgmtPolicyRef = 25
notificationTargetPolicy = 26
policyDeletionRules = 27
flexContainer = 28
timeSeries = 29
timeSeriesInstance = 30
role = 31
token = 32
trafficPattern = 33
dynamicAuthorizationConsultation = 34
accessControlPolicyAnnc = 10001
AEAnnc = 10002
containerAnnc = 10003
@ -77,12 +66,6 @@ class ResourceTypeE(OneM2MIntEnum):
nodeAnnc = 10014
remoteCSEAnnc = 10016
scheduleAnnc = 10018
semanticDescriptorAnnc = 10024
flexContainerAnnc = 10028
timeSeriesAnnc = 10029
timeSeriesInstanceAnnc = 10030
trafficPatternAnnc = 10033
dynamicAuthorizationConsultationAnnc = 10034
@unique
@ -123,17 +106,15 @@ class ResponseType(OneM2MIntEnum):
# @unique
class ResultContentE(OneM2MIntEnum):
nothing = 0
attributes = 1
hierarchical_address = 2
hierarchical_address_and_attributes = 3
attributes_and_child_resources = 4
attributes_and_child_resource_references = 5
child_resource_references = 6
original_resource = 7
child_resources = 8
modified_attributes = 9
# class ResultConentE(OneM2MIntEnum):
# nothing = 0
# attributes = 1
# hierarchical_address = 2
# hierarchical_address_and_attributes = 3
# attributes_and_child_resources = 4
# attributes_and_child_resource_references = 6
# child_resource_references = 6
# original_resource = 7
@unique
@ -155,7 +136,6 @@ class RequestStatusE(OneM2MIntEnum):
@unique
class MemberTypeE(OneM2MIntEnum):
mixed = 0
accessControlPolicy = 1
AE = 2
container = 3
@ -179,16 +159,7 @@ class MemberTypeE(OneM2MIntEnum):
statsCollect = 21
statsConfig = 22
subscription = 23
semanticDescriptor = 24
notificationTargetMgmtPolicyRef = 25
notificationTargetPolicy = 26
policyDeletionRules = 27
flexContainer = 28
timeSeries = 29
timeSeriesInstance = 30
role = 31
token = 32
trafficPattern = 33
dynamicAuthorizationConsultation = 34
accessControlPolicyAnnc = 10001
AEAnnc = 10002
@ -199,15 +170,11 @@ class MemberTypeE(OneM2MIntEnum):
mgmtObjAnnc = 10013
nodeAnnc = 10014
remoteCSEAnnc = 10016
scheduleAnnc = 10018
semanticDescriptorAnnc = 10024
flexContainerAnnc = 10028
timeSeriesAnnc = 10029
timeSeriesInstanceAnnc = 10030
trafficPatternAnnc = 10033
scheduleAnnc = 10019
dynamicAuthorizationConsultationAnnc = 10034
oldest = 20001
latest = 20002
mixed = 24
# Mixed is a mixture of the resource types from 1 to 23, 10001 to 10004, 10009 to 10010,
# 10013 to 10014 and 10016 to 10018 as listed above.
@unique
@ -408,7 +375,7 @@ class FilterUsageE(OneM2MIntEnum):
@unique
class CountryCodeE(OneM2MIntEnum):
india = 91
usa = 1
usa = 01
@unique
@ -601,7 +568,7 @@ class ResourceC(LabeledResource):
typename = None
resourceName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
resourceName = UnicodeAttribute(accesstype=Attribute.WO)
resourceType = EntityAttribute(ResourceTypeE, accesstype=Attribute.RO)
resourceID = IDS(accesstype=Attribute.RO)
@ -790,7 +757,8 @@ class Subscription(RegularResourceC):
notificationForwardingURI = Attribute(AnyURI)
batchNotify = EntityAttribute(BatchNotify)
rateLimit = EntityAttribute(RateLimit)
preSubscriptionNotify = Attribute(int, accesstype=Attribute.WO, mandatory=False)
preSubscriptionNotify = Attribute(int, accesstype=Attribute.WO,
mandatory=False)
pendingNotification = Attribute(PendingNotificationE)
notificationStoragePriority = Attribute(int)
latestNotify = Attribute(bool)
@ -984,15 +952,15 @@ class ContentInstance(AnnounceableSubordinateResourceC,
SubscribableResource):
"""See TS-0001 section 9.6.7"""
stateTag = Attribute(int, accesstype=Attribute.RO)
stateTag = UnicodeAttribute(accesstype=Attribute.RO)
creator = UnicodeAttribute() # m2m:ID
# contentInfo = typeOfContent(:EncodingType)
# typeOfContent => Media Types
# ex: application/json:1
contentInfo = UnicodeAttribute() # m2m:contentInfo
contentSize = Attribute(int, accesstype=Attribute.RO)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
__child_types__ = (
Subscription,
@ -1001,11 +969,11 @@ class ContentInstance(AnnounceableSubordinateResourceC,
class ContentInstanceAnnc(AnnouncedSubordinateResourceC):
stateTag = Attribute(int, accesstype=Attribute.RO)
stateTag = UnicodeAttribute(accesstype=Attribute.RO)
contentInfo = UnicodeAttribute(EncodingTypeE) # m2m:contentInfo
contentSize = Attribute(int, accesstype=Attribute.WO)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
################################################################################
@ -1015,7 +983,7 @@ class ContentInstanceAnnc(AnnouncedSubordinateResourceC):
class Container(AnnounceableResourceC, SubscribableResource):
"""See TS-0001 section 9.6.6"""
stateTag = Attribute(int, accesstype=Attribute.RO)
stateTag = UnicodeAttribute(accesstype=Attribute.RO)
creator = UnicodeAttribute()
maxNrOfInstances = Attribute(int)
maxByteSize = Attribute(int)
@ -1044,7 +1012,7 @@ Container.__child_types__ = (
class ContainerAnnc(AnnouncedResourceC, SubscribableResource):
stateTag = Attribute(int, accesstype=Attribute.RO)
stateTag = UnicodeAttribute(accesstype=Attribute.RO)
maxNrOfInstances = Attribute(int)
maxByteSize = Attribute(int)
maxInstanceAge = UnicodeAttribute(mandatory=False) # todo
@ -1107,7 +1075,7 @@ class AEAnnc(AnnouncedResourceC, SubscribableResource):
typename = "AEAnnc"
appName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
appName = UnicodeAttribute(accesstype=Attribute.WO)
App_ID = UnicodeAttribute()
AE_ID = UnicodeAttribute()
pointOfAccess = StringListAttribute()
@ -1376,7 +1344,8 @@ long_to_short_attribute_mapping = {
"relatedSemantics": "rels",
}
short_to_long_attribute_mapping = {v: k for k, v in long_to_short_attribute_mapping.items()}
short_to_long_attribute_mapping = {v: k for k, v in
long_to_short_attribute_mapping.items()}
def get_long_attribute_name(n):
@ -1458,7 +1427,8 @@ long_to_short_resource_mapping = {
"dynamicAuthorizationConsultation": "dac"
}
short_to_long_resource_mapping = {v: k for k, v in long_to_short_resource_mapping.items()}
short_to_long_resource_mapping = {v: k for k, v in
long_to_short_resource_mapping.items()}
def get_long_resource_name(n):
@ -1582,7 +1552,8 @@ long_to_short_member_mapping = {
"escertkeMessage": "eckm"
}
short_to_long_member_mapping = {v: k for k, v in long_to_short_member_mapping.items()}
short_to_long_member_mapping = {v: k for k, v in
long_to_short_member_mapping.items()}
def get_long_member_name(n):
@ -1598,7 +1569,8 @@ long_to_short_root_mapping = {
"responsePrimitive": "rsp"
}
short_to_long_root_mapping = {v: k for k, v in long_to_short_root_mapping.items()}
short_to_long_root_mapping = {v: k for k, v in
long_to_short_root_mapping.items()}
def get_long_root_name(n):
@ -1632,7 +1604,8 @@ long_to_short_parameter_mapping = {
"responseStatusCode": "rsc"
}
short_to_long_parameter_mapping = {v: k for k, v in long_to_short_parameter_mapping.items()}
short_to_long_parameter_mapping = {v: k for k, v in
long_to_short_parameter_mapping.items()}
def get_long_parameter_name(n):
@ -1643,13 +1616,13 @@ def get_short_parameter_name(n):
return long_to_short_parameter_mapping.get(n)
_all_types = {k: v for k, v in globals().items()
_all_types = {k: v for k, v in globals().iteritems()
if issubclass(v, OneM2MEntity) and not v.__subclasses__()}
_all_types_short = {}
_all_types_long = {}
for k, v in _all_types.items():
for k, v in _all_types.iteritems():
if get_short_resource_name(k):
long_name = k
short_name = get_short_resource_name(k)
@ -1680,13 +1653,13 @@ for k, v in _all_types.items():
_all_types_long[long_name] = v
_resource_types = {k: v for k, v in _all_types.items()
_resource_types = {k: v for k, v in _all_types.iteritems()
if issubclass(v, ResourceC)}
_resource_types_short = {}
_resource_types_long = {}
for k, v in _resource_types.items():
for k, v in _resource_types.iteritems():
if get_short_resource_name(k):
long_name = k
short_name = get_short_resource_name(k)
@ -1720,8 +1693,8 @@ def get_onem2m_resource_type(typename):
def get_onem2m_types():
return list(_all_types.values())
return _all_types.values()
def get_onem2m_resource_types():
return list(_resource_types.values())
return _resource_types.values()

View File

@ -22,7 +22,7 @@ def create_onem2m_serializer(content_type):
def get_onem2m_supported_content_types():
return list(_factories.keys())
return _factories.keys()
def get_onem2m_decoder(content_type):
@ -37,8 +37,6 @@ def get_onem2m_decoder(content_type):
serializer = create_onem2m_serializer(content_type)
_serializers[content_type] = serializer
return serializer
get_serializer = get_onem2m_decoder

View File

@ -22,7 +22,9 @@ def get_typename(tn):
return _typename_matcher.findall(tn).pop()
class OneM2MSerializer(LoggerMixin, metaclass=ABCMeta):
class OneM2MSerializer(LoggerMixin):
__metaclass__ = ABCMeta
@abstractmethod
def encode_resource(self, resource, response, pretty=False,
encoding="utf-8", fields=None):
@ -43,11 +45,11 @@ class OneM2MSerializer(LoggerMixin, metaclass=ABCMeta):
res_type = ResourceTypeE(v["type"])
res_cls = get_onem2m_resource_type(res_type.name)
return res_cls(v["name"], resourceID=v["value"], resourceType=res_type)
child_resource = list(map(map_child_resource, child_resource))
child_resource = map(map_child_resource, child_resource)
except (TypeError, AttributeError, KeyError, ValueError):
raise CSEValueError("Invalid entry in child resources: %s",
child_resource)
if resource_type is Notification and data.get("notificationEvent"):
if resource_type is Notification and "notificationEvent" in data:
representation = data["notificationEvent"]["representation"]
representation = self.decode(self.dumps(representation))
data["notificationEvent"]["representation"] = representation
@ -60,10 +62,7 @@ class OneM2MSerializer(LoggerMixin, metaclass=ABCMeta):
class OneM2MDictSerializer(OneM2MSerializer):
def encode_resource(self, resource, pretty=False, path=None, encoding="utf-8", fields=None,
encapsulated=False):
if fields and isinstance(resource, OneM2MResource):
representation = {k: v for k, v in resource.values.items() if fields and k in fields}
else:
representation = resource.values
representation = resource.values
self.logger.debug("Encoding representation: %s", representation)
@ -78,7 +77,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
)
representation["notificationEvent"] = {
get_short_attribute_name(k) or get_short_member_name(k): v
for k, v in e.items()
for k, v in e.iteritems()
}
except (AttributeError, KeyError):
self.logger.exception("failed to encode notify")
@ -94,7 +93,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
return resource_id
return val_path + resource_id
if isinstance(resource, OneM2MResource) and "childResource" in representation:
if isinstance(resource, OneM2MResource):
def get_child_rep(c):
return {
@ -102,7 +101,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
"nm": c.basename,
"typ": c.resourceType
}
representation["childResource"] = list(map(get_child_rep, representation["childResource"]))
representation["childResource"] = map(get_child_rep, representation["childResource"])
if isinstance(resource, URIList):
representation = [make_val(path, x) for x in representation]
@ -113,12 +112,53 @@ class OneM2MDictSerializer(OneM2MSerializer):
if isinstance(resource.oldest, ContentInstance):
representation['oldest'] = resource.oldest.resourceID
# cleans representation
def clean_representation(o):
try:
# removes empty attributes
empty_keys = []
for k, v in o.items():
if v is None:
empty_keys.append(k)
elif isinstance(v, OneM2MEntity):
o[k] = self.encode_resource(v, pretty, path, encoding, fields)
elif isinstance(v, list):
def encode_list_item(item):
if isinstance(item, OneM2MEntity):
return self.encode_resource(item, pretty, path, encoding, fields)
return item
if len(v):
o[k] = map(encode_list_item, v)
else:
empty_keys.append(k)
else:
try:
if len(v) == 0:
empty_keys.append(k)
except TypeError:
pass
for k in empty_keys:
del o[k]
for k, v in o.items():
if not isinstance(v, (unicode, str, bool, datetime,
OneM2MIntEnum)):
clean_representation(v)
except AttributeError:
if isinstance(o, list):
for p in o:
clean_representation(p)
if not isinstance(resource, OneM2MContentResource):
representation = {
get_short_resource_name(k) or get_short_attribute_name(k) or
get_short_member_name(k): v for
k, v in representation.items()}
clean_representation(representation)
if not isinstance(resource, (OneM2MResource, Notification,
SecurityInfo, OneM2MContentResource)):
return representation
@ -135,7 +175,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
return self.dumps({typename: representation})
def _handle_partial_addressing(self, resource, pretty):
for k, v in resource.items():
for k, v in resource.iteritems():
if k in ('latest', 'oldest') and isinstance(v, ContentInstance):
resource[k] = v.resourceID
if pretty:
@ -146,7 +186,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
def convert_to_long_keys(d):
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.items()}
get_long_member_name(k) or k: v for k, v in d.iteritems()}
try:
if hasattr(s, "read"):
@ -159,7 +199,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
self.logger.debug("Read data: %s", data)
try:
typename, data = list(data.items())[0]
typename, data = data.items()[0]
return get_onem2m_type(get_typename(typename)), data
except (AttributeError, IndexError, TypeError):
raise CSESyntaxError("Not a valid resource representation")

View File

@ -30,11 +30,14 @@ del logger
def _default(x):
if isinstance(x, datetime):
return x.strftime("%Y%m%dT%H%M%S")
try:
isoformat = x.isoformat
except AttributeError:
raise TypeError("%s (%s)" % (x, type(x)))
return isoformat()
elif isinstance(x, ContentInstance):
return x.resourceID
elif isinstance(x, bytes):
return x.decode('utf-8')
else:
try: # handle model classes
return x.values

View File

@ -6,7 +6,7 @@ logger = get_logger(__name__)
def decode_onem2m_content(content, content_type):
if not content:
if content == "":
content = None
if content_type and content is not None:
serializer = get_onem2m_decoder(content_type)
@ -27,6 +27,9 @@ def encode_onem2m_content(content, content_type, pretty=False, path=None,
if content is None:
return None, None
fields = fields # TODO(rst): maybe necessary
# fields = ["resourceID"]
serializer = get_onem2m_encoder(content_type)
data = serializer.encode_resource(content, pretty=pretty, path=path,

View File

@ -201,25 +201,22 @@ class OneM2MRequest(object):
"""Class representing a OneM2M request"""
def __init__(self, op, to, fr=None, rqi=None, ty=None, pc=None, rids=None,
def __init__(self, op, to, fr=None, rqi=None, ty=None, pc=None, rol=None,
ot=None, rqet=None, rset=None, oet=None, rt=None, rp=None,
rcn=None, ec=None, da=None, gid=None, filter_criteria=None,
fc=None, drt=None, tids=None, ltids=None, tqi=None, rvi=None,
vsi=None):
fc=None, drt=None):
# Operation
self.operation = op
# Target uri
self.to = to
# Originator ID
self.originator = fr # original long name is from
self.request_identifier = rqi or ''.join(
random.sample(string.ascii_letters + string.digits, 16)
)
self.request_identifier = rqi or ''.join(random.sample(string.letters + string.digits, 16))
# Type of a created resource
self.resource_type = ty
# Resource content to be transferred.
self.content = pc
self.role_ids = rids
self.role = rol
self.originating_timestamp = ot
self.request_expiration_timestamp = rqet
self.result_expiration_timestamp = rset
@ -233,11 +230,6 @@ class OneM2MRequest(object):
self.filter_criteria = filter_criteria or fc
# Optional Discovery result type
self.discovery_result_type = drt
self.token_ids = tids
self.local_token_ids = ltids
self.token_request_identifier = tqi
self.release_version_indicator = rvi
self.vendor_information = vsi
@property
def op(self):
@ -280,12 +272,12 @@ class OneM2MRequest(object):
self.content = pc
@property
def rids(self):
return self.role_ids
def rol(self):
return self.role
@rids.setter
def rids(self, rids):
self.role_ids = rids
@rol.setter
def rol(self, rol):
self.role = rol
@property
def ot(self):
@ -383,49 +375,9 @@ class OneM2MRequest(object):
def drt(self, drt):
self.discovery_result_type = drt
@property
def tids(self):
return self.token_ids
@tids.setter
def tids(self, tids):
self.token_ids = tids
@property
def ltids(self):
return self.local_token_ids
@ltids.setter
def ltids(self, rvi):
self.local_token_ids = ltids
@property
def tqi(self):
return self.token_request_identifier
@tqi.setter
def tqi(self, tqi):
self.token_request_identifier = tqi
@property
def rvi(self):
return self.release_version_indicator
@rvi.setter
def rvi(self, rvi):
self.release_version_indicator = rvi
@property
def vsi(self):
return self.vendor_information
@vsi.setter
def vsi(self, vsi):
self.vendor_information = vsi
def __str__(self):
return '%s: %s' % (self.__class__.__name__, ' | '.join([
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.items()
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.iteritems()
]))
@ -433,8 +385,7 @@ class OneM2MResponse(object):
"""Class representing a OneM2M response"""
def __init__(self, status_code, request=None, rqi=None, pc=None, to=None,
fr=None, rsc=None, ot=None, rset=None, ec=None, cts=None,
cto=None, rvi=None, vsi=None, fields=None):
fr=None, rsc=None):
# Operation result
if isinstance(status_code, STATUS):
self.response_status_code = status_code
@ -446,27 +397,14 @@ class OneM2MResponse(object):
self.to = request.to
# Originator ID
self.originator = request.fr
self.originating_timestamp = request.ot
self.result_expiration_timestamp = request.rset
self.event_category = request.ec
self.release_version_indicator = request.rvi
self.vendor_information = request.vsi
else:
self.request_identifier = rqi
# Target uri
self.to = to
# Originator ID
self.originator = fr
self.originating_timestamp = ot
self.release_version_indicator = rvi
self.vendor_information = vsi
self.result_expiration_timestamp = rset
self.event_category = ec
# Resource content to be transferred.
self.content = pc
self.content_status = cts
self.content_offset = cto
self.fields = fields
@property
def status_code(self):
@ -500,65 +438,9 @@ class OneM2MResponse(object):
def fr(self, fr):
self.originator = fr
@property
def ot(self):
return self.originating_timestamp
@ot.setter
def ot(self, ot):
self.originating_timestamp = ot
@property
def rset(self):
return self.result_expiration_timestamp
@rset.setter
def rset(self, rset):
self.result_expiration_timestamp = rset
@property
def ec(self):
return self.event_category
@ec.setter
def ec(self, ec):
self.event_category = ec
@property
def cts(self):
return self.content_status
@cts.setter
def cts(self, cts):
self.content_status = cts
@property
def cto(self):
return self.content_offset
@cto.setter
def cto(self, cto):
self.content_offset = cto
@property
def rvi(self):
return self.release_version_indicator
@rvi.setter
def rvi(self, rvi):
self.release_version_indicator = rvi
@property
def vsi(self):
return self.vendor_information
@vsi.setter
def vsi(self, vsi):
self.vendor_information = vsi
def __str__(self):
return '%s: %s' % (self.__class__.__name__, ' | '.join([
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.items()
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.iteritems()
]))

View File

@ -1,4 +1,3 @@
import platform
import sys
from logging import DEBUG
from threading import Thread
@ -7,8 +6,8 @@ from traceback import print_stack
from futile.logging import LoggerMixin
from openmtc.exc import OpenMTCError
if platform.python_implementation != "CPython":
from inspect import ismethod, getfullargspec
if sys.subversion[0] != "CPython":
from inspect import ismethod, getargspec
# TODO: kca: can't pass in values for then/error currently
@ -161,11 +160,11 @@ class Promise(LoggerMixin):
"""
self._errbacks.append(f)
if platform.python_implementation != "CPython":
if sys.subversion[0] != "CPython":
def _invoke(self, func, value):
try:
if value is None:
args = getfullargspec(func).args
args, _, _, _ = getargspec(func)
arglen = len(args)
if not arglen or (arglen == 1 and ismethod(func)):
return func()
@ -182,11 +181,11 @@ class Promise(LoggerMixin):
try:
if value is None:
try:
target = func.__func__
target = func.im_func
except AttributeError:
argcount = func.__code__.co_argcount
argcount = func.func_code.co_argcount
else:
argcount = target.__code__.co_argcount - 1
argcount = target.func_code.co_argcount - 1
if argcount == 0:
return func()
@ -366,7 +365,7 @@ def listPromise(*args):
if not arg.isFulfilled():
return
value = [p.value for p in args]
value = map(lambda p: p.value, args)
ret._fulfill(value)
for arg in args:

View File

@ -31,7 +31,9 @@ class ExtraOptionsStrategy(Enum):
fatal = "fatal"
class ConfigurationOption(LoggerMixin, metaclass=ABCMeta):
class ConfigurationOption(LoggerMixin):
__metaclass__ = ABCMeta
def __init__(self, type, default=NOT_SET, converter=identity,
*args, **kw):
super(ConfigurationOption, self).__init__(*args, **kw)
@ -74,7 +76,7 @@ class ListOption(SimpleOption):
def _convert(self, v):
v = super(ListOption, self)._convert(v)
return list(map(self._convert_content, v))
return map(self._convert_content, v)
def _convert_content(self, v):
if not isinstance(v, self.content_type):
@ -90,7 +92,7 @@ class BooleanOption(ConfigurationOption):
def _convert(self, v):
if isinstance(v, (bool, int)):
return bool(v)
if isinstance(v, str):
if isinstance(v, basestring):
return v and v.lower() not in ("0", "no", "n", "f", "false")
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 operator import attrgetter
from futile import issubclass, NOT_SET
from futile import basestring, issubclass, NOT_SET
from futile.logging import LoggerMixin
from openmtc.model.exc import ModelError, ModelTypeError
@ -26,7 +26,7 @@ class Collection(Sequence, Mapping):
def __getitem__(self, index):
if isinstance(index, (int, slice)):
return list(self._map.values())[index]
return self._map.values()[index]
return self._map[index]
def __contains__(self, v):
@ -47,7 +47,7 @@ class Collection(Sequence, Mapping):
return self._map.get(k, default)
def __iter__(self):
return iter(self._map.values())
return self._map.itervalues()
def __len__(self):
return len(self._map)
@ -76,7 +76,7 @@ class Collection(Sequence, Mapping):
class Member(LoggerMixin):
def __init__(self, type=str, version="1.0", *args, **kw):
def __init__(self, type=unicode, version="1.0", *args, **kw):
super(Member, self).__init__(*args, **kw)
self.type = type
self.version = version
@ -109,7 +109,7 @@ class Attribute(Member):
RO = "RO"
WO = "WO"
def __init__(self, type=str, default=None,
def __init__(self, type=unicode, default=None,
accesstype=None, mandatory=None,
update_mandatory=None,
id_attribute=None, path_attribute=None,
@ -157,22 +157,24 @@ class Attribute(Member):
return self.default
class BytesAttribute(Attribute):
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)
try:
unicode
def convert(self, value, instance):
if isinstance(value, str):
return bytes(value, "utf-8")
return super(BytesAttribute, self).convert(value, instance)
class UnicodeAttribute(Attribute):
def __init__(self, default=None, accesstype=None,
mandatory=False, *args, **kw):
super(UnicodeAttribute, self).__init__(type=unicode,
default=default,
accesstype=accesstype,
mandatory=mandatory, *args,
**kw)
UnicodeAttribute = Attribute
def convert(self, value, instance):
if isinstance(value, str):
return value.decode("utf-8")
return super(UnicodeAttribute, self).convert(value, instance)
except NameError:
UnicodeAttribute = Attribute
class DatetimeAttribute(Attribute):
@ -185,7 +187,7 @@ class DatetimeAttribute(Attribute):
**kw)
def convert(self, value, instance):
if isinstance(value, str):
if isinstance(value, basestring):
try:
return parse_date(value)
except ParseError as e:
@ -194,7 +196,7 @@ class DatetimeAttribute(Attribute):
class ListAttribute(Attribute):
def __init__(self, content_type=str, type=list,
def __init__(self, content_type=unicode, type=list,
default=NOT_SET, *args, **kw):
super(ListAttribute, self).__init__(type=type,
default=default, *args, **kw)
@ -237,7 +239,7 @@ class ListAttribute(Attribute):
class StringListAttribute(Attribute):
def __init__(self, content_type=str, type=list,
def __init__(self, content_type=unicode, type=list,
default=NOT_SET, *args, **kw):
super(StringListAttribute, self).__init__(type=type, default=default,
*args, **kw)
@ -425,22 +427,24 @@ class ResourceType(ABCMeta):
# TODO: caching
@property
def attribute_names(self):
return list(map(attrgetter("name"), self.attributes))
return map(attrgetter("name"), self.attributes)
@property
def collection_names(self):
return list(map(attrgetter("name"), self.collections))
return map(attrgetter("name"), self.collections)
@property
def subresource_names(self):
return list(map(attrgetter("name"), self.subresources))
return map(attrgetter("name"), self.subresources)
@property
def member_names(self):
return list(map(attrgetter("name"), self.__members__))
return map(attrgetter("name"), self.__members__)
class Entity(LoggerMixin, metaclass=ResourceType):
class Entity(LoggerMixin):
__metaclass__ = ResourceType
def __init__(self, *args, **kw):
self.set_values(kw)
@ -463,7 +467,7 @@ class Entity(LoggerMixin, metaclass=ResourceType):
# TODO: proper solution?
if (v is not None and isinstance(member, ListAttribute) and
not isinstance(v, (list, tuple, set))):
v = list(v.values())[0]
v = v.values()[0]
setattr(self, member.name, v)
except KeyError:
pass
@ -483,7 +487,7 @@ class Entity(LoggerMixin, metaclass=ResourceType):
"""
if values:
raise ModelTypeError("%s resource has no attribute %s" %
(self.typename, list(values.keys())[0]))
(self.typename, values.keys()[0]))
@classmethod
def get_typename(cls):
@ -565,7 +569,7 @@ class Resource(Entity):
__model_version__ = None
def __init__(self, path=None, parent=None, *args, **kw):
if path is not None and not isinstance(path, str):
if path is not None and not isinstance(path, basestring):
raise TypeError(path)
self.__path = path
self.parent = parent
@ -625,7 +629,7 @@ class Resource(Entity):
# FIXME: move into de-serializer and handle dicts
if (v is not None and isinstance(member, ListAttribute) and
not isinstance(v, (list, tuple, set))):
v = list(v.values())[0]
v = v.values()[0]
setattr(self, member.name, v)
except KeyError:
try:
@ -633,7 +637,7 @@ class Resource(Entity):
# TODO: proper solution?
if (v is not None and isinstance(member, ListAttribute) and
not isinstance(v, (list, tuple, set))):
v = list(v.values())[0]
v = v.values()[0]
setattr(self, member.name, v)
except KeyError:
pass

View File

@ -289,7 +289,7 @@ cd \$(dirname \${0})
cd ${APP_NAME}
PYTHONPATH=\${PYTHONPATH}:src exec python3 -m ${PKG_NAME} \$@
PYTHONPATH=\${PYTHONPATH}:src exec python -m ${PKG_NAME} \$@
EOF
chmod +x "${START_SCRIPT}"
@ -301,7 +301,7 @@ BIN_SCRIPT="${APP_FOLDER}/bin/openmtc-${APP_SCRIPT}"
cat > "${BIN_SCRIPT}" << EOF
#!/usr/bin/env bash
exec python3 -m ${PKG_NAME} \$@
exec python -m ${PKG_NAME} \$@
EOF
chmod +x "${BIN_SCRIPT}"
@ -333,7 +333,7 @@ fi
# create setup file
SETUP_FILE="${APP_FOLDER}/setup-${PKG_NAME}.py"
cat > "${SETUP_FILE}" << EOF
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools import setup
from distutils.core import setup
@ -489,7 +489,7 @@ mv \${CONFIG_TEMP} \${CONFIG_FILE}
echo "done"
exec python3 -m ${PKG_NAME} \$@
exec python -m ${PKG_NAME} \$@
EOF
if [ ${WEB_APP} == "false" ]; then

View File

@ -47,7 +47,7 @@ if [ ${#find_result[*]} -eq 0 ]; then
fi
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
fi
@ -68,7 +68,7 @@ get_target_from_setup_file ()
local module_name=${setup_file%.py}
cd ${working_dir}
python3 - << END_OF_PYTHON
python - << END_OF_PYTHON
from importlib import import_module
setup = import_module('${module_name}', '${module_name}')
print("%s-%s" % (setup.SETUP_NAME, setup.SETUP_VERSION))
@ -92,7 +92,7 @@ rm -rf ${working_dir}/build
# build
cd ${working_dir}
python3 ${setup_file} bdist --plat-name docker >/dev/null 2>${log_file}
python ${setup_file} bdist --plat-name docker >/dev/null 2>${log_file}
# clean up after
rm -rf ${working_dir}/build
@ -113,14 +113,14 @@ rm ${log_file}
################################################################################
# clean binary_package
binary_archive="${working_dir}/dist/${binary_prefix}.docker.tar.gz"
#printf "### Stripping .py files..."
printf "### Stripping .py files..."
cp ${target_file} ${binary_archive}
#gzip -d ${binary_archive}
#tar --wildcards --delete -f ${binary_archive%".gz"} "*.py"
#gzip ${binary_archive%".gz"}
#printf "done\n"
gzip -d ${binary_archive}
tar --wildcards --delete -f ${binary_archive%".gz"} "*.py"
gzip ${binary_archive%".gz"}
printf "done\n"
rm ${target_file}
#printf "### Created binary archive at %s.\n" ${binary_archive}
printf "### Created binary archive at %s.\n" ${binary_archive}
################################################################################
# set correct permissions

View File

@ -1,7 +1,5 @@
import urllib.request
import urllib.parse
import urllib.error
import urllib
from openmtc_app.onem2m import XAE
import uuid
@ -17,9 +15,9 @@ class DataVisualization(XAE):
self.sensor_register = []
self.sensor_values = []
self.name = uuid.uuid1()
self.things_name = urllib.request.urlopen("https://dweet.io/follow/%s" % self.name)
print("Thing name :", self.name)
print("link for the current data type and values :", self.things_name.geturl())
self.things_name = urllib.urlopen("https://dweet.io/follow/%s" % self.name)
print "Thing name :", self.name
print "link for the current data type and values :", self.things_name.geturl()
# start endless loop
self.periodic_discover(self.remote_cse,
{'labels': ["openmtc:sensor_data"]},
@ -30,19 +28,19 @@ class DataVisualization(XAE):
self.add_container_subscription(uri, self.handle_sensor_data)
def handle_sensor_data(self, container, content):
data = {}
data ={}
self.sensor_register.append(content[0]['n'])
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})
params = urllib.parse.urlencode(data)
urllib.request.urlopen("https://dweet.io/dweet/for/%s?%s" % (self.name, params))
params = urllib.urlencode(data)
urllib.urlopen("https://dweet.io/dweet/for/%s?%s" % (self.name, params))
if __name__ == "__main__":
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
ep = "http://localhost:8000"
Runner(DataVisualization(poas=['http://localhost:21345'])).run(ep)
Runner(DataVisualization(), port=6050, host='auto').run(ep)

View File

@ -91,4 +91,4 @@ if __name__ == "__main__":
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
ep = "http://localhost:8000"
Runner(DataAggregation(poas=['http://localhost:21346'])).run(ep)
Runner(DataAggregation(), port=6050, host='auto').run(ep)

View File

@ -19,4 +19,4 @@ if __name__ == "__main__":
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
ep = "http://localhost:8000"
Runner(SimpleDecision2(poas=['http://localhost:21387'])).run(ep)
Runner(SimpleDecision2(), port=6050, host='auto').run(ep)

View File

@ -47,4 +47,4 @@ if __name__ == "__main__":
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
ep = "http://localhost:8000"
Runner(SimpleDecision(poas=['http://localhost:22245'])).run(ep)
Runner(SimpleDecision(), port=6050, host='auto').run(ep)

View File

@ -31,6 +31,5 @@ app_file=${app_array[$[${choice}-1]]}
################################################################################
# run app_file
cd ${base_path}
cd ..
. ../common/prep-env.sh
python3 ${app_file}
. ../../common/prep-env.sh
python ${app_file}

View File

@ -4,13 +4,13 @@ from openmtc_onem2m.model import AE
my_app = AE()
print(my_app.path)
print my_app.path
#>>> None
print(my_app.App_ID)
print my_app.App_ID
#>>> None
print(my_app.parent_path)
print my_app.parent_path
#>>> None
print(my_app.labels)
print my_app.labels
#>>> 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)]

View File

@ -26,13 +26,13 @@ promise = client.send_onem2m_request(onem2m_request)
# reteive the OneM2MResponse from the returned promise
onem2m_response = promise.get()
print(onem2m_response.to)
print onem2m_response.to
#>>> onem2m
print(onem2m_response.response_status_code)
print onem2m_response.response_status_code
#>>> STATUS(numeric_code=2001, description='CREATED', http_status_code=201)
print(onem2m_response.content)
print onem2m_response.content
#>>> AE(path='None', id='ae0')
print(onem2m_response.content.App_ID)
print onem2m_response.content.App_ID
#>>> myApp
print(onem2m_response.content.labels)
print onem2m_response.content.labels
#>>> [u'keyword1', u'keyword2']

View File

@ -17,12 +17,12 @@ promise = client.send_onem2m_request(onem2m_request)
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)
# Build path to retieve from
path = "onem2m/" + onem2m_response.content.resourceName
print(path)
print path
#>>> onem2m/MYAPP
# Retrieve the AE from the CSE
@ -30,18 +30,18 @@ onem2m_request = OneM2MRequest("retrieve", to=path)
promise = client.send_onem2m_request(onem2m_request)
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)
print(onem2m_response.content)
print onem2m_response.content
#>>> AE(path='None', id='ae0')
# Set the local AE to the retrieved content
my_app = None
my_app = onem2m_response.content
print(my_app.App_ID)
print my_app.App_ID
#>>> myApp
print(my_app.resourceName)
print my_app.resourceName
#>>> MYAPP
print(my_app.labels)
print my_app.labels
#>>> [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)
promise = client.send_onem2m_request(onem2m_request)
onem2m_response = promise.get()
print(onem2m_response.content.labels)
print onem2m_response.content.labels
#>>> [u'keyword1', u'keyword2']
# 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)
promise = client.send_onem2m_request(onem2m_request)
onem2m_response = promise.get()
print(onem2m_response.content.labels)
print onem2m_response.content.labels
#>>> [u'keyword1', u'keyword2']
# 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)
promise = client.send_onem2m_request(onem2m_request)
onem2m_response = promise.get()
print(onem2m_response.content.labels)
print onem2m_response.content.labels
#>>> [u'foo', u'bar', u'coffee']
# Set the local AE to the retrieved content
my_app = None
my_app = onem2m_response.content
print(my_app.labels)
print my_app.labels
#>>> [u'foo', u'bar', u'coffee']

View File

@ -11,18 +11,18 @@ try:
promise = client.send_onem2m_request(onem2m_request)
onem2m_response = promise.get()
except OneM2MErrorResponse as e:
print("CSE reported an error:", e)
print "CSE reported an error:", e
raise
except OpenMTCError as e:
print("Failed to reach the CSE:", e)
print "Failed to reach the CSE:", e
raise
else:
pass
# no exception was raised, the method returned normally.
print(onem2m_response.to)
print onem2m_response.to
#>>> onem2m
print(onem2m_response.response_status_code)
print onem2m_response.response_status_code
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
print(onem2m_response.content)
print onem2m_response.content
#>>> CSEBase(path='None', id='cb0')

View File

@ -7,31 +7,31 @@ client = OneM2MHTTPClient("http://localhost:8000", False)
onem2m_request = OneM2MRequest("retrieve", to="onem2m")
onem2m_response = client.send_onem2m_request(onem2m_request).get()
print("---> Request to: http://localhost:8000" + "/" + onem2m_request.to)
print(onem2m_response.to)
print "---> Request to: http://localhost:8000" + "/" + onem2m_request.to
print onem2m_response.to
#>>> onem2m
print(onem2m_response.response_status_code)
print onem2m_response.response_status_code
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
print(onem2m_response.content)
print onem2m_response.content
#>>> CSEBase(path='None', id='cb0')
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
onem2m_response = client.send_onem2m_request(onem2m_request).get()
print("---> Request to: http://localhost:8000" + "/" + onem2m_request.to)
print(onem2m_response.to)
print "---> Request to: http://localhost:8000" + "/" + onem2m_request.to
print onem2m_response.to
#>>> ~/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)
print(onem2m_response.content)
print onem2m_response.content
#>>> CSEBase(path='None', id='cb0')
client.port = 18000
onem2m_request = OneM2MRequest("retrieve", to="~/mn-cse-1/onem2m")
onem2m_response = client.send_onem2m_request(onem2m_request).get()
print("---> Request to: http://localhost:18000" + "/" + onem2m_request.to)
print(onem2m_response.to)
print "---> Request to: http://localhost:18000" + "/" + onem2m_request.to
print onem2m_response.to
#>>> ~/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)
print(onem2m_response.content)
print onem2m_response.content
#>>> 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"])
print(my_app.path)
print my_app.path
#>>> None
print(my_app.App_ID)
print my_app.App_ID
#>>> myApp
print(my_app.parent_path)
print my_app.parent_path
#>>> None
print(my_app.labels)
print my_app.labels
#>>> [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)]

View File

@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
request = OneM2MRequest("retrieve", to="onem2m")
print(request.to)
print request.to
#>>> onem2m

View File

@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
request = OneM2MRequest("delete", to="onem2m")
print(request.to)
print request.to
#>>> onem2m

View File

@ -7,7 +7,7 @@ my_app = AE(App_ID="myApp")
request = OneM2MRequest("create", to="onem2m", pc="my_app")
print(request.to)
print request.to
#>>> onem2m
print(request.pc)
print request.pc
#>>> myApp

View File

@ -13,7 +13,7 @@ request = OneM2MRequest("create",
pc=data_string,
ty="application/json")
print(request.to)
print request.to
#>>> onem2m
print(request.pc)
print request.pc
#>>> {"type": "temperature", "value": 15}

View File

@ -7,7 +7,7 @@ my_app = AE(App_ID="myApp")
request = OneM2MRequest("notify", to="onem2m", pc=my_app)
print(request.to)
print request.to
#>>> onem2m
print(request.pc.App_ID)
print request.pc.App_ID
#>>> myApp

View File

@ -13,7 +13,7 @@ request = OneM2MRequest("create",
pc=data_string,
ty="application/json")
print(request.to)
print request.to
#>>> onem2m
print(request.pc)
print request.pc
#>>> {"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)
print(request.to)
print request.to
#>>> onem2m
print(request.pc)
print request.pc
#>>> [u'keyword1', u'keyword2']

View File

@ -13,9 +13,9 @@ promise = client.send_onem2m_request(onem2m_request)
# reteive the OneM2MResponse from the returned promise
onem2m_response = promise.get()
print(onem2m_response.to)
print onem2m_response.to
#>>> onem2m
print(onem2m_response.response_status_code)
print onem2m_response.response_status_code
#>>> STATUS(numeric_code=2000, description='OK', http_status_code=200)
print(onem2m_response.content)
print onem2m_response.content
#>>> CSEBase(path='None', id='cb0')

View File

@ -34,4 +34,4 @@ cd ${base_path}
cd ..
. ../common/prep-env.sh
cd ${base_path}
python3 ${app_file}
python ${app_file}

View File

@ -12,7 +12,7 @@ MAINTAINER rst/tgu
# install openmtc dependencies
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-all
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
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-all
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz

View File

@ -20,9 +20,9 @@ RUN printf "Starting update...\n" && \
build-essential \
netbase \
iproute2 \
python3-setuptools \
python3-pip \
python3-dev \
python-setuptools \
python-pip \
python-dev \
jq > /dev/null && \
apt-get clean && \
printf "Installation and cleanup finished.\n"

View File

@ -20,9 +20,9 @@ RUN printf "Starting update...\n" && \
build-essential \
netbase \
iproute2 \
python3-setuptools \
python3-pip \
python3-dev \
python-setuptools \
python-pip \
python-dev \
jq > /dev/null && \
apt-get clean && \
printf "Installation and cleanup finished.\n"

View File

@ -89,4 +89,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done"
exec python3 -m openmtc_gevent.backend_main $@
exec python -m openmtc_gevent.backend_main $@

View File

@ -101,4 +101,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
echo "done"
exec python3 -m openmtc_gevent.gateway_main $@
exec python -m openmtc_gevent.gateway_main $@

View File

@ -12,7 +12,7 @@ MAINTAINER rst/tgu
# install openmtc dependencies
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-all
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
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-all
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
# update pip to latest version
RUN pip3 install --upgrade pip
RUN pip install --upgrade pip
# install openmtc dependencies
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-sdk
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
# update pip to latest version
RUN pip3 install --upgrade pip setuptools
RUN pip install --upgrade pip setuptools
# install openmtc dependencies
COPY tmp/$MOD_NAME-dependencies.txt /tmp/requirements.txt
RUN pip3 install --upgrade --requirement /tmp/requirements.txt
RUN pip install --upgrade --requirement /tmp/requirements.txt
# install openmtc-sdk
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/ }}}
## kca:
print(OrderedSet('simsalabim')[1])
print OrderedSet('simsalabim')[1]
# Test case for exception at shutdown (yes, really...)
x = OrderedSet('simsalabim')

View File

@ -6,7 +6,7 @@ Created on 15.07.2011
from asyncore import dispatcher, loop
from socket import AF_INET, SOCK_STREAM, error
from .sockethelper import socket
from sockethelper import socket
from futile.exc import errorstr
from collections import namedtuple
import sys
@ -38,9 +38,9 @@ def test_port(host, port, family = AF_INET, type = SOCK_STREAM):
try:
with socket(family, type) as s:
s.connect((host, port))
except error as e:
except error, e:
return TestResult(False, "%s (%d)" % (e.strerror, e.errno))
except Exception as e:
except Exception, e:
return TestResult(False, errorstr(e))
return TestResult(True)

View File

@ -285,7 +285,7 @@ class RestClient(LoggerMixin):
req.end()
except Exception as e:
print("Exception triggered: %s"%e)
print "Exception triggered: %s"%e
promise.reject(e)
return promise

View File

@ -39,7 +39,7 @@ class HTTPSMixin(LoggerMixin):
def get_request(self):
try:
return self.socket.accept()
except error as e:
except error, e:
self.logger.exception("Error during accept(): %s", e)
raise

View File

@ -30,10 +30,10 @@ Date: 7 Mar 2004
# it doesn't play nice with other types that implement
# __radd__(). Test this.
from __future__ import generators
def quote(p):
from urllib.parse import quote
from urllib2 import quote
return quote(p, "")
@ -46,15 +46,15 @@ __all__ = ['path']
_base = str
try:
if os.path.supports_unicode_filenames:
_base = str
_base = unicode
except AttributeError:
pass
# Pre-2.3 workaround for basestring.
try:
str
basestring
except NameError:
str = (str, str)
basestring = (str, unicode)
# Universal newline support
_textmode = 'r'
@ -403,7 +403,7 @@ class path(_base):
For example, path('/users').glob('*/bin/*') returns a list
of all the files users have in their bin directories.
"""
return list(map(path, glob.glob(_base(self / pattern))))
return map(path, glob.glob(_base(self / pattern)))
# --- Reading or writing an entire file at once.
@ -467,11 +467,11 @@ class path(_base):
t = f.read()
finally:
f.close()
return (t.replace('\r\n', '\n')
.replace('\r\x85', '\n')
.replace('\r', '\n')
.replace('\x85', '\n')
.replace('\u2028', '\n'))
return (t.replace(u'\r\n', u'\n')
.replace(u'\r\x85', u'\n')
.replace(u'\r', u'\n')
.replace(u'\x85', u'\n')
.replace(u'\u2028', u'\n'))
def write_text(self, text, encoding=None, errors='strict', linesep=os.linesep, append=False):
""" 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
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
writing with fopen(filename, "w") in C or file(filename, 'w')
@ -537,16 +537,16 @@ class path(_base):
conversion.
"""
if isinstance(text, str):
if isinstance(text, unicode):
if linesep is not None:
# Convert all standard end-of-line sequences to
# ordinary newline characters.
text = (text.replace('\r\n', '\n')
.replace('\r\x85', '\n')
.replace('\r', '\n')
.replace('\x85', '\n')
.replace('\u2028', '\n'))
text = text.replace('\n', linesep)
text = (text.replace(u'\r\n', u'\n')
.replace(u'\r\x85', u'\n')
.replace(u'\r', u'\n')
.replace(u'\x85', u'\n')
.replace(u'\u2028', u'\n'))
text = text.replace(u'\n', linesep)
if encoding is None:
encoding = sys.getdefaultencoding()
bytes = text.encode(encoding, errors)
@ -608,7 +608,7 @@ class path(_base):
linesep - The desired line-ending. This line-ending is
applied to every line. If a line already has any
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,
which is platform-dependent ('\r\n' on Windows, '\n' on
Unix, etc.) Specify None to write the lines as-is,
@ -629,15 +629,15 @@ class path(_base):
f = self.open(mode)
try:
for line in lines:
isUnicode = isinstance(line, str)
isUnicode = isinstance(line, unicode)
if linesep is not None:
# Strip off any existing line-end and add the
# specified linesep string.
if isUnicode:
if line[-2:] in ('\r\n', '\x0d\x85'):
if line[-2:] in (u'\r\n', u'\x0d\x85'):
line = line[:-2]
elif line[-1:] in ('\r', '\n',
'\x85', '\u2028'):
elif line[-1:] in (u'\r', u'\n',
u'\x85', u'\u2028'):
line = line[:-1]
else:
if line[-2:] == '\r\n':
@ -754,10 +754,10 @@ class path(_base):
os.renames(self, new)
# --- Create/delete operations on directories
def mkdir(self, mode=0o750):
def mkdir(self, mode=0750):
os.mkdir(self, mode)
def makedirs(self, mode=0o750):
def makedirs(self, mode=0750):
os.makedirs(self, mode)
def rmdir(self):
@ -769,7 +769,7 @@ class path(_base):
# --- Modifying operations on files
def touch(self, mode = 0o640):
def touch(self, mode = 0640):
""" Set the access/modified times of this file to the current time.
Create the file if it does not exist.
"""
@ -823,15 +823,15 @@ class path(_base):
if not self.isfile():
raise Exception("Not a file: '%s'" % (self, ))
def forcedir(self, mode = 0o750):
def forcedir(self, mode = 0750):
if not self.isdir():
if self.exists():
raise Exception("Not a directory: '%s'" % (self, ))
self.makedirs(mode)
def forcefile(self, mode = 0o640):
def forcefile(self, mode = 0640):
if not self.exists():
return self.touch(mode = 0o640)
return self.touch(mode = 0640)
if not self.isfile():
raise Exception("Not a file: %s" % (self ,))

View File

@ -28,7 +28,7 @@ class AbstractXMLSerializer(LoggerMixin):
return XML(input)
else:
return ElementTree().parse(input)
except Exception as e:
except Exception, e:
self._handle_parse_error(e)
raise ParseError(e)

View File

@ -86,7 +86,7 @@ class CheckPIDFileController(DaemonController):
try:
os.kill(pid, 0)
return True
except OSError as e:
except OSError, e:
if e.errno == errno.ESRCH:
return False
raise

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from setuptools import setup
from distutils.core import setup

View File

@ -2,7 +2,7 @@
Interworking Proxy for Cul868 devices.
"""
__version__ = "1.3.0"
__version__ = "1.1.0"
__description__ = "The OpenMTC Cul868IPE"
__author_name__ = "Ronny Kreuch"
__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")
# variables
nm = get_value("name", str, default_name, args, config)
nm = get_value("name", (unicode, str), default_name, args, config)
cb = config.get("cse_base", "onem2m")
ep = get_value("ep", str, default_ep, args, config)
ep = get_value("ep", (unicode, str), default_ep, args, config)
poas = config.get("poas", ["http://auto:28728"])
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
ssl_certs = config.get("ssl_certs", {})
s = config.get("sim", False)
p = int(config.get("sim_period"))
cul_device = get_value('cul_device', str, default_device, args, config)
cul_device = get_value('cul_device', (unicode, str), default_device, args, config)
device_mappings = get_value('device_mappings', dict, {}, 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)
def _generate_simulated_data(self):
p = choice(list(self.sim_parsers.keys()))
p = choice(self.sim_parsers.keys())
fake_parser = self.sim_parsers[p]
dev_id, data = fake_parser(p)
handler = self.handlers[p]

View File

@ -1,7 +1,7 @@
import time
from collections import namedtuple
from .cul_868_coordinator import CUL868Coordinator
from cul_868_coordinator import CUL868Coordinator
from openmtc_app.onem2m import XAE
from openmtc_onem2m.model import Container
@ -44,7 +44,7 @@ class CUL868IPE(XAE):
self.cul = CUL868Coordinator(device=device, sim=sim)
for d in [CULDevice(*s.split(":")[:2]) for s in cul_devices]:
for d in map(lambda s: CULDevice(*s.split(":")[:2]), cul_devices):
if d.type == "fs20":
house_code, device_code = d.device_id.split("-")
self.fs20.append((house_code, device_code))
@ -85,11 +85,11 @@ class CUL868IPE(XAE):
if func:
sub_labels.append('openmtc:actuator_data')
sub_labels += ["openmtc:actuator_data:%s" % x for x in l] if l else []
sub_labels += map(lambda x: "openmtc:actuator_data:%s" % x, l) if l else []
sub_cnt = Container(resourceName=c_id, maxNrOfInstances=0, labels=sub_labels)
else:
sub_labels.append('openmtc:sensor_data')
sub_labels += ["openmtc:sensor_data:%s" % x for x in l] if l else []
sub_labels += map(lambda x: "openmtc:sensor_data:%s" % x, l) if l else []
sub_cnt = Container(resourceName=c_id, labels=sub_labels)
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 handle_switch(container, content):
if isinstance(content, str): # fallback to old behavior
if isinstance(content, (str, unicode)): # fallback to old behavior
if content == 'TOGGLE':
self.cul.toggle(house_code, device_code)
elif content == 'ON':

Some files were not shown because too many files have changed in this diff Show More