mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2025-06-24 16:25:08 +00:00
Compare commits
9 Commits
feature-no
...
feature-co
Author | SHA1 | Date | |
---|---|---|---|
8bd1ea0a48 | |||
94682098ea | |||
1052fd4a08 | |||
c3ac4f9dfb | |||
7781b15c4e | |||
b9034a916f | |||
5257a11cf0 | |||
461698b32a | |||
734a51fb73 |
23
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
23
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
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.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
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.
|
79
.travis.yml
79
.travis.yml
@ -1,36 +1,55 @@
|
||||
services:
|
||||
- docker
|
||||
- docker
|
||||
dist: xenial
|
||||
before_script:
|
||||
- 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"
|
||||
- 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
|
||||
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 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
|
||||
- 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
|
||||
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
|
43
CONTRIBUTING.md
Normal file
43
CONTRIBUTING.md
Normal file
@ -0,0 +1,43 @@
|
||||
# Contributor guidelines template
|
||||
|
||||
## What do I need to know to help?
|
||||
|
||||
|
||||
If you are looking to help to with a code contribution our project uses Python,Bash and Docker.
|
||||
If you don't feel ready to make a code contribution yet, no problem!
|
||||
You can also check out the [documentation issues](https://fiware-openmtc.readthedocs.io/).
|
||||
|
||||
If you are interested in making a code contribution and would like to learn more about the technologies that we use,
|
||||
check out the list below.
|
||||
|
||||
- Include bulleted list of
|
||||
- resources (tutorials, videos, books) that new contributors
|
||||
- can use to learn what they need to know to contribute to your project
|
||||
|
||||
## How do I make a contribution?
|
||||
|
||||
Never made an open source contribution before?
|
||||
Wondering how contributions work in the in our project?
|
||||
Here's a quick rundown!
|
||||
|
||||
1) Find an issue that you are interested in addressing or a feature that you would like to add.
|
||||
2) Fork the repository associated with the issue to your local GitHub organization.
|
||||
This means that you will have a copy of the repository under your-GitHub-username/repository-name.
|
||||
3) Clone the repository to your local machine using git clone https://github.com/OpenMTC/OpenMTC.git .
|
||||
4) Create a new branch for your fix using git checkout -b branch-name-here.
|
||||
5) Make the appropriate changes for the issue you are trying to address or the feature that you want to add.
|
||||
6) Use git add insert-paths-of-changed-files-here to add the file contents of the changed files to the "snapshot" git uses to manage the state of the project, also known as the index.
|
||||
7) Use git commit -m "Insert a short message of the changes made here" to store the contents of the index with a descriptive message.
|
||||
8) Push the changes to the remote repository using git push origin branch-name-here.
|
||||
9) Submit a pull request to the upstream repository.
|
||||
10) Title the pull request with a short description of the changes made and the issue or bug number associated with your change. For example, you can title an issue like so "Added more log outputting to resolve #4352".
|
||||
11) In the description of the pull request, explain the changes that you made, any issues you think exist with the pull request you made, and any questions you have for the maintainer. It's OK if your pull request is not perfect (no pull request is), the reviewer will be able to help you fix any problems and improve it!
|
||||
12) Wait for the pull request to be reviewed by a maintainer.
|
||||
13) Make changes to the pull request if the reviewing maintainer recommends them.
|
||||
14) Celebrate your success after your pull request is merged!
|
||||
|
||||
## Where can I go for help?
|
||||
If you need help, you can ask questions via mail (info@openmtc.org) or Github Issue.
|
||||
|
||||
## What does the Code of Conduct mean for me?
|
||||
Our Code of Conduct means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our Code of Conduct, we are here for you and will do the best to ensure that the abuser is reprimanded appropriately, per our code.
|
6
CONTRIBUTIONS.md
Normal file
6
CONTRIBUTIONS.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Contributors ordered by number of commits
|
||||
|
||||
Ronald Steinke <rst-fokus>
|
||||
Christian Klopp <ckl-fokus>
|
||||
Alexander Ortlieb <aor-fokus>
|
||||
Jason Fox <jason-fox>
|
15
README.md
15
README.md
@ -12,6 +12,8 @@
|
||||

|
||||
[](https://hub.docker.com/u/openmtc)
|
||||
[](https://travis-ci.org/OpenMTC/OpenMTC)
|
||||
[](https://snyk.io/test/github/OpenMTC/OpenMTC?targetFile=openmtc-gevent%2Frequirements.txt)
|
||||
[](https://coveralls.io/github/OpenMTC/OpenMTC?branch=master)
|
||||
|
||||
The OpenMTC SDK aims to provide developers with a convenient yet flexible tool
|
||||
to write oneM2M compliant applications. This includes network applications
|
||||
@ -22,16 +24,19 @@ 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).
|
||||
|
||||
| :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
|
||||
|
||||
- [Install](#install)
|
||||
- [Usage](#usage)
|
||||
- [API](#api)
|
||||
- [Quality Assurance](#quality-assurance)
|
||||
- [Contributing](#contributing)
|
||||
- [License](#license)
|
||||
|
||||
|
||||
## Install
|
||||
## Install
|
||||
|
||||
Information about how to install the JSON IoTAgent can be found at the
|
||||
corresponding section of the
|
||||
@ -89,10 +94,14 @@ follows:
|
||||
|
||||
---
|
||||
|
||||
## Licence
|
||||
## Contributing
|
||||
|
||||
Contribution guidelines are detailed in the [CONTRIBUTIONS](CONTRIBUTIONS.md) file.
|
||||
|
||||
## License
|
||||
|
||||
The OpenMTC SDK is licensed under the Eclipse Public License (EPL)
|
||||
version 1.
|
||||
|
||||
© 2018 OpenMTC
|
||||
© 2018-2019 OpenMTC
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exec python -m influxdbapp $@
|
||||
exec python3 -m influxdbapp $@
|
||||
|
@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m influxdbapp $@
|
||||
exec python3 -m influxdbapp $@
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
|
@ -2,7 +2,7 @@
|
||||
Transfer OpenMTC Data to an InfluxDB
|
||||
"""
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__version__ = "1.3.0"
|
||||
__description__ = "InfluxdbApp"
|
||||
__author_name__ = "Christian Klopp"
|
||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||
|
@ -30,21 +30,21 @@ parser.add_argument("--db-pw", help="InfluxDB User password")
|
||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||
|
||||
# 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")
|
||||
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"])
|
||||
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", (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)
|
||||
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)
|
||||
|
||||
# start
|
||||
app = InfluxdbApp(
|
||||
|
@ -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, basestring):
|
||||
if isinstance(labels, str):
|
||||
self.labels = {labels}
|
||||
elif hasattr(labels, '__iter__') and len(labels):
|
||||
self.labels = set(labels)
|
||||
|
@ -35,8 +35,8 @@ def get_packages(package, package_dir, excluded_list=None, included_list=None):
|
||||
r_prefix = len(root) + 1
|
||||
for path, dirs, files in os.walk(root, onerror=on_error):
|
||||
is_module = "__init__.py" in files and path != root
|
||||
excluded = any(map(lambda x: x in path, excluded_list))
|
||||
included = any(map(lambda x: x in path, included_list))
|
||||
excluded = any([x in path for x in excluded_list])
|
||||
included = any([x in path for x in 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)), 0755)
|
||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||
|
||||
|
||||
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:
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exec python -m orioncontextbroker $@
|
||||
exec python3 -m orioncontextbroker $@
|
||||
|
@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m orioncontextbroker $@
|
||||
exec python3 -m orioncontextbroker $@
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
|
@ -3,7 +3,7 @@ This App will forward all incoming sensor traffic to the Fiware Orion Context
|
||||
Broker
|
||||
"""
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__version__ = "1.3.0"
|
||||
__description__ = "OrionContextBroker"
|
||||
__author_name__ = "Christian Klopp"
|
||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||
|
@ -38,20 +38,17 @@ parser.add_argument(
|
||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||
|
||||
# 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")
|
||||
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"])
|
||||
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", (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)
|
||||
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)
|
||||
|
||||
# start
|
||||
app = OrionContextBroker(
|
||||
|
@ -1,8 +1,6 @@
|
||||
try:
|
||||
from urllib.parse import urljoin
|
||||
except ImportError:
|
||||
from urlparse import urljoin
|
||||
from urllib.parse import urljoin
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
|
||||
@ -32,16 +30,16 @@ class OrionAPI(LoggerMixin):
|
||||
|
||||
def _get_type(self, element):
|
||||
if isinstance(element, int):
|
||||
return u"Int"
|
||||
return "Int"
|
||||
elif isinstance(element, float):
|
||||
return u"Float"
|
||||
return "Float"
|
||||
elif isinstance(element, bool):
|
||||
return u"Boolean"
|
||||
elif isinstance(element, (str, unicode)):
|
||||
return u"String"
|
||||
return "Boolean"
|
||||
elif isinstance(element, str):
|
||||
return "String"
|
||||
else:
|
||||
self.logger.error('Type of "{}" unknown'.format(element))
|
||||
return u"Unknown"
|
||||
return "Unknown"
|
||||
|
||||
def is_host_alive(self):
|
||||
req = self._request(
|
||||
@ -92,7 +90,8 @@ class OrionAPI(LoggerMixin):
|
||||
"type": self._get_type(data_senml["v"]),
|
||||
"metadata": {
|
||||
"timestamp": {
|
||||
"value": data_senml["t"],
|
||||
"value": datetime.fromtimestamp(float(data_senml["t"])).replace(microsecond=0).isoformat()
|
||||
if data_senml["t"] != "none" else data_senml["t"],
|
||||
"type": "String"
|
||||
},
|
||||
"bn": {
|
||||
|
@ -1,14 +1,11 @@
|
||||
import re
|
||||
try:
|
||||
from urllib.parse import urlparse
|
||||
except ImportError:
|
||||
from urlparse import urlparse
|
||||
from urllib.parse 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):
|
||||
@ -20,7 +17,7 @@ class OrionContextBroker(ResourceManagementXAE):
|
||||
*args,
|
||||
**kw):
|
||||
super(OrionContextBroker, self).__init__(*args, **kw)
|
||||
if isinstance(labels, basestring):
|
||||
if isinstance(labels, str):
|
||||
self.labels = {labels}
|
||||
elif hasattr(labels, '__iter__'):
|
||||
self.labels = set(labels)
|
||||
@ -103,9 +100,8 @@ class OrionContextBroker(ResourceManagementXAE):
|
||||
device_type = "sensor" if sensor_info.get("sensor_labels",
|
||||
None) else "actuator"
|
||||
try:
|
||||
id_label = filter(
|
||||
lambda x: (x.startswith('openmtc:id:')),
|
||||
sensor_info['{}_labels'.format(device_type)]).pop()
|
||||
id_label = [x for x in sensor_info['{}_labels'.format(device_type)]
|
||||
if x.startswith('openmtc:id:')].pop()
|
||||
cse_id, dev_id = re.sub('^openmtc:id:', '',
|
||||
id_label).split('/')[:2]
|
||||
except (IndexError, ValueError):
|
||||
|
@ -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(map(lambda x: x in path, excluded_list))
|
||||
included = any(map(lambda x: x in path, included_list))
|
||||
excluded = any([x in path for x in excluded_list])
|
||||
included = any([x in path for x in 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)), 0755)
|
||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||
|
||||
|
||||
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:
|
||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
||||
|
||||
cd csvInjector
|
||||
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python -m csvinjector $@
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python3 -m csvinjector $@
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exec python -m csvinjector $@
|
||||
exec python3 -m csvinjector $@
|
||||
|
@ -70,4 +70,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m csvinjector $@
|
||||
exec python3 -m csvinjector $@
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
|
@ -2,7 +2,7 @@
|
||||
App to inject data from a csv file to OpenMTC
|
||||
"""
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__version__ = "1.3.0"
|
||||
__description__ = "csvInjector"
|
||||
__author_name__ = "Christian Klopp"
|
||||
__author_mail__ = "christian.klopp@fokus.fraunhofer.de"
|
||||
|
@ -42,28 +42,20 @@ parser.add_argument(
|
||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||
|
||||
# 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")
|
||||
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"])
|
||||
originator_pre = config.get("originator_pre", "//openmtc.org/mn-cse-1")
|
||||
ssl_certs = config.get("ssl_certs", {})
|
||||
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)
|
||||
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)
|
||||
|
||||
# start
|
||||
app = csvInjector(
|
||||
|
@ -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 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)
|
||||
timestamp = time.mktime(datetime.datetime.now().timetuple())
|
||||
senml = {
|
||||
|
@ -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)
|
||||
|
@ -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(map(lambda x: x in path, excluded_list))
|
||||
included = any(map(lambda x: x in path, included_list))
|
||||
excluded = any([x in path for x in excluded_list])
|
||||
included = any([x in path for x in 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)), 0755)
|
||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||
|
||||
|
||||
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:
|
||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
||||
|
||||
cd InfluxdbApp
|
||||
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python -m influxdbapp $@
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python3 -m influxdbapp $@
|
||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
||||
|
||||
cd mqttConnector
|
||||
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python -m mqttconnector $@
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python3 -m mqttconnector $@
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exec python -m mqttconnector $@
|
||||
exec python3 -m mqttconnector $@
|
||||
|
@ -76,4 +76,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m mqttconnector $@
|
||||
exec python3 -m mqttconnector $@
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
|
@ -2,7 +2,7 @@
|
||||
TODO: Add description here
|
||||
"""
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__version__ = "1.3.0"
|
||||
__description__ = "mqttConnector"
|
||||
__author_name__ = "Ronald Steinke"
|
||||
__author_mail__ = "ronald.steinke@fokus.fraunhofer.de"
|
||||
|
@ -40,36 +40,27 @@ parser.add_argument("--mqtts-keyfile", help="Path to own mqtts key")
|
||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||
|
||||
# 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")
|
||||
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"])
|
||||
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", (unicode, str), default_topic_pre, args,
|
||||
config)
|
||||
topic_index_location = get_value("topic_index_location", (int),
|
||||
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),
|
||||
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)
|
||||
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", (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)
|
||||
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)
|
||||
|
||||
# start
|
||||
app = mqttConnector(
|
||||
broker_ep=broker_ep,
|
||||
|
@ -115,7 +115,7 @@ class mqttConnector(XAE):
|
||||
# check payload
|
||||
try:
|
||||
readings = json_decode(
|
||||
base64decode(json_decode(payload)['m2m:cin']['con']))
|
||||
base64decode(json_decode(payload)['m2m:cin']['con']).decode('utf-8'))
|
||||
except (ValueError, KeyError, TypeError):
|
||||
self.logger.error('Damaged payload; discarding')
|
||||
return
|
||||
|
@ -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(map(lambda x: x in path, excluded_list))
|
||||
included = any(map(lambda x: x in path, included_list))
|
||||
excluded = any([x in path for x in excluded_list])
|
||||
included = any([x in path for x in 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)), 0755)
|
||||
os.chmod(os.path.join(init_dir, os.path.basename(f)), 0o755)
|
||||
|
||||
|
||||
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:
|
||||
|
@ -6,4 +6,4 @@ cd $(dirname ${0})
|
||||
|
||||
cd OrionContextBroker
|
||||
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python -m orioncontextbroker $@
|
||||
PYTHONPATH=${PYTHONPATH}:src exec python3 -m orioncontextbroker $@
|
||||
|
@ -1,11 +1,13 @@
|
||||
import urllib
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
import urllib.error
|
||||
import ssl
|
||||
from socket import (
|
||||
gaierror,
|
||||
error as socket_error,
|
||||
)
|
||||
from time import time
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
from aplus import Promise
|
||||
from futile.caching import LRUCache
|
||||
from geventhttpclient.client import HTTPClient
|
||||
@ -145,7 +147,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).iteritems()
|
||||
for name, val in filter_criteria.get_values(True).items()
|
||||
})
|
||||
|
||||
if onem2m_request.ae_notifying:
|
||||
@ -154,7 +156,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
||||
path = normalize_path(onem2m_request.to)
|
||||
|
||||
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)
|
||||
|
||||
@ -165,7 +167,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
||||
|
||||
headers = {
|
||||
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
|
||||
}
|
||||
headers['content-type'] = content_type
|
||||
@ -201,7 +203,7 @@ class OneM2MHTTPClient(OneM2MClient):
|
||||
get_response_status(rsc),
|
||||
request=onem2m_request,
|
||||
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):
|
||||
|
@ -32,7 +32,7 @@ from simplejson import (
|
||||
JSONDecodeError,
|
||||
)
|
||||
from socket import error as SocketError
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
from openmtc_onem2m.util import split_onem2m_address
|
||||
|
||||
#: Dictionary mapping supported schemes to port numbers
|
||||
@ -353,7 +353,7 @@ class OneM2MMQTTClient(OneM2MClient):
|
||||
|
||||
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']
|
||||
del request['op'], request['to']
|
||||
|
||||
@ -485,7 +485,8 @@ class OneM2MMQTTClient(OneM2MClient):
|
||||
else:
|
||||
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:
|
||||
request.pc = self._decode(
|
||||
encode_onem2m_content(request.pc, 'application/json', path=request.to)[1]
|
||||
|
@ -1,7 +1,4 @@
|
||||
try:
|
||||
from urllib.parse import urlparse
|
||||
except ImportError:
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from openmtc.mapper import BasicMapper, MapperError
|
||||
from openmtc_onem2m import OneM2MRequest
|
||||
|
@ -2,7 +2,8 @@ from enum import IntEnum, unique
|
||||
|
||||
from openmtc.model import (Resource as Res, UnicodeAttribute, DatetimeAttribute,
|
||||
Attribute, ListAttribute, Entity, EntityAttribute,
|
||||
AnyURI, StringListAttribute, ContentResource)
|
||||
AnyURI, StringListAttribute, ContentResource,
|
||||
BytesAttribute)
|
||||
from openmtc.model.exc import ModelTypeError
|
||||
from futile import issubclass
|
||||
|
||||
@ -407,7 +408,7 @@ class FilterUsageE(OneM2MIntEnum):
|
||||
@unique
|
||||
class CountryCodeE(OneM2MIntEnum):
|
||||
india = 91
|
||||
usa = 01
|
||||
usa = 1
|
||||
|
||||
|
||||
@unique
|
||||
@ -600,7 +601,7 @@ class ResourceC(LabeledResource):
|
||||
|
||||
typename = None
|
||||
|
||||
resourceName = UnicodeAttribute(accesstype=Attribute.WO)
|
||||
resourceName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||
|
||||
resourceType = EntityAttribute(ResourceTypeE, accesstype=Attribute.RO)
|
||||
resourceID = IDS(accesstype=Attribute.RO)
|
||||
@ -789,8 +790,7 @@ 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)
|
||||
@ -991,8 +991,8 @@ class ContentInstance(AnnounceableSubordinateResourceC,
|
||||
# ex: application/json:1
|
||||
contentInfo = UnicodeAttribute() # m2m:contentInfo
|
||||
contentSize = Attribute(int, accesstype=Attribute.RO)
|
||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
|
||||
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
|
||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
|
||||
|
||||
__child_types__ = (
|
||||
Subscription,
|
||||
@ -1004,8 +1004,8 @@ class ContentInstanceAnnc(AnnouncedSubordinateResourceC):
|
||||
stateTag = Attribute(int, accesstype=Attribute.RO)
|
||||
contentInfo = UnicodeAttribute(EncodingTypeE) # m2m:contentInfo
|
||||
contentSize = Attribute(int, accesstype=Attribute.WO)
|
||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
|
||||
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
|
||||
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||
content = BytesAttribute(accesstype=Attribute.WO, mandatory=True)
|
||||
|
||||
|
||||
################################################################################
|
||||
@ -1107,7 +1107,7 @@ class AEAnnc(AnnouncedResourceC, SubscribableResource):
|
||||
|
||||
typename = "AEAnnc"
|
||||
|
||||
appName = UnicodeAttribute(accesstype=Attribute.WO)
|
||||
appName = UnicodeAttribute(accesstype=Attribute.WO, mandatory=False)
|
||||
App_ID = UnicodeAttribute()
|
||||
AE_ID = UnicodeAttribute()
|
||||
pointOfAccess = StringListAttribute()
|
||||
@ -1376,8 +1376,7 @@ 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):
|
||||
@ -1459,8 +1458,7 @@ 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):
|
||||
@ -1584,8 +1582,7 @@ 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):
|
||||
@ -1601,8 +1598,7 @@ 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):
|
||||
@ -1636,8 +1632,7 @@ 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):
|
||||
@ -1648,13 +1643,13 @@ def get_short_parameter_name(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__()}
|
||||
|
||||
_all_types_short = {}
|
||||
_all_types_long = {}
|
||||
|
||||
for k, v in _all_types.iteritems():
|
||||
for k, v in _all_types.items():
|
||||
if get_short_resource_name(k):
|
||||
long_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
|
||||
|
||||
|
||||
_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)}
|
||||
|
||||
_resource_types_short = {}
|
||||
_resource_types_long = {}
|
||||
|
||||
for k, v in _resource_types.iteritems():
|
||||
for k, v in _resource_types.items():
|
||||
if get_short_resource_name(k):
|
||||
long_name = k
|
||||
short_name = get_short_resource_name(k)
|
||||
@ -1725,8 +1720,8 @@ def get_onem2m_resource_type(typename):
|
||||
|
||||
|
||||
def get_onem2m_types():
|
||||
return _all_types.values()
|
||||
return list(_all_types.values())
|
||||
|
||||
|
||||
def get_onem2m_resource_types():
|
||||
return _resource_types.values()
|
||||
return list(_resource_types.values())
|
||||
|
@ -22,7 +22,7 @@ def create_onem2m_serializer(content_type):
|
||||
|
||||
|
||||
def get_onem2m_supported_content_types():
|
||||
return _factories.keys()
|
||||
return list(_factories.keys())
|
||||
|
||||
|
||||
def get_onem2m_decoder(content_type):
|
||||
@ -37,6 +37,8 @@ def get_onem2m_decoder(content_type):
|
||||
serializer = create_onem2m_serializer(content_type)
|
||||
_serializers[content_type] = serializer
|
||||
return serializer
|
||||
|
||||
|
||||
get_serializer = get_onem2m_decoder
|
||||
|
||||
|
||||
|
@ -22,9 +22,7 @@ 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):
|
||||
@ -45,7 +43,7 @@ class OneM2MSerializer(LoggerMixin):
|
||||
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 = map(map_child_resource, child_resource)
|
||||
child_resource = list(map(map_child_resource, child_resource))
|
||||
except (TypeError, AttributeError, KeyError, ValueError):
|
||||
raise CSEValueError("Invalid entry in child resources: %s",
|
||||
child_resource)
|
||||
@ -80,7 +78,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
||||
)
|
||||
representation["notificationEvent"] = {
|
||||
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):
|
||||
self.logger.exception("failed to encode notify")
|
||||
@ -104,7 +102,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
||||
"nm": c.basename,
|
||||
"typ": c.resourceType
|
||||
}
|
||||
representation["childResource"] = map(get_child_rep, representation["childResource"])
|
||||
representation["childResource"] = list(map(get_child_rep, representation["childResource"]))
|
||||
|
||||
if isinstance(resource, URIList):
|
||||
representation = [make_val(path, x) for x in representation]
|
||||
@ -137,7 +135,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
||||
return self.dumps({typename: representation})
|
||||
|
||||
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):
|
||||
resource[k] = v.resourceID
|
||||
if pretty:
|
||||
@ -148,7 +146,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.iteritems()}
|
||||
get_long_member_name(k) or k: v for k, v in d.items()}
|
||||
|
||||
try:
|
||||
if hasattr(s, "read"):
|
||||
@ -161,7 +159,7 @@ class OneM2MDictSerializer(OneM2MSerializer):
|
||||
self.logger.debug("Read data: %s", data)
|
||||
|
||||
try:
|
||||
typename, data = data.items()[0]
|
||||
typename, data = list(data.items())[0]
|
||||
return get_onem2m_type(get_typename(typename)), data
|
||||
except (AttributeError, IndexError, TypeError):
|
||||
raise CSESyntaxError("Not a valid resource representation")
|
||||
|
@ -33,6 +33,8 @@ def _default(x):
|
||||
return x.strftime("%Y%m%dT%H%M%S")
|
||||
elif isinstance(x, ContentInstance):
|
||||
return x.resourceID
|
||||
elif isinstance(x, bytes):
|
||||
return x.decode('utf-8')
|
||||
else:
|
||||
try: # handle model classes
|
||||
return x.values
|
||||
|
@ -6,7 +6,7 @@ logger = get_logger(__name__)
|
||||
|
||||
|
||||
def decode_onem2m_content(content, content_type):
|
||||
if content == "":
|
||||
if not content:
|
||||
content = None
|
||||
if content_type and content is not None:
|
||||
serializer = get_onem2m_decoder(content_type)
|
||||
|
@ -212,7 +212,9 @@ class OneM2MRequest(object):
|
||||
self.to = to
|
||||
# Originator ID
|
||||
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
|
||||
self.resource_type = ty
|
||||
# Resource content to be transferred.
|
||||
@ -423,7 +425,7 @@ class OneM2MRequest(object):
|
||||
|
||||
def __str__(self):
|
||||
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):
|
||||
return '%s: %s' % (self.__class__.__name__, ' | '.join([
|
||||
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.iteritems()
|
||||
'%s: %s' % (str(k), str(v)) for k, v in self.__dict__.items()
|
||||
]))
|
||||
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
import platform
|
||||
import sys
|
||||
from logging import DEBUG
|
||||
from threading import Thread
|
||||
@ -6,8 +7,8 @@ from traceback import print_stack
|
||||
from futile.logging import LoggerMixin
|
||||
from openmtc.exc import OpenMTCError
|
||||
|
||||
if sys.subversion[0] != "CPython":
|
||||
from inspect import ismethod, getargspec
|
||||
if platform.python_implementation != "CPython":
|
||||
from inspect import ismethod, getfullargspec
|
||||
|
||||
# TODO: kca: can't pass in values for then/error currently
|
||||
|
||||
@ -160,11 +161,11 @@ class Promise(LoggerMixin):
|
||||
"""
|
||||
self._errbacks.append(f)
|
||||
|
||||
if sys.subversion[0] != "CPython":
|
||||
if platform.python_implementation != "CPython":
|
||||
def _invoke(self, func, value):
|
||||
try:
|
||||
if value is None:
|
||||
args, _, _, _ = getargspec(func)
|
||||
args = getfullargspec(func).args
|
||||
arglen = len(args)
|
||||
if not arglen or (arglen == 1 and ismethod(func)):
|
||||
return func()
|
||||
@ -181,11 +182,11 @@ class Promise(LoggerMixin):
|
||||
try:
|
||||
if value is None:
|
||||
try:
|
||||
target = func.im_func
|
||||
target = func.__func__
|
||||
except AttributeError:
|
||||
argcount = func.func_code.co_argcount
|
||||
argcount = func.__code__.co_argcount
|
||||
else:
|
||||
argcount = target.func_code.co_argcount - 1
|
||||
argcount = target.__code__.co_argcount - 1
|
||||
|
||||
if argcount == 0:
|
||||
return func()
|
||||
@ -365,7 +366,7 @@ def listPromise(*args):
|
||||
if not arg.isFulfilled():
|
||||
return
|
||||
|
||||
value = map(lambda p: p.value, args)
|
||||
value = [p.value for p in args]
|
||||
ret._fulfill(value)
|
||||
|
||||
for arg in args:
|
||||
|
@ -31,9 +31,7 @@ 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)
|
||||
@ -76,7 +74,7 @@ class ListOption(SimpleOption):
|
||||
|
||||
def _convert(self, 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):
|
||||
if not isinstance(v, self.content_type):
|
||||
@ -92,7 +90,7 @@ class BooleanOption(ConfigurationOption):
|
||||
def _convert(self, v):
|
||||
if isinstance(v, (bool, int)):
|
||||
return bool(v)
|
||||
if isinstance(v, basestring):
|
||||
if isinstance(v, str):
|
||||
return v and v.lower() not in ("0", "no", "n", "f", "false")
|
||||
raise ConfigurationValueError("Illegal value for boolean: %s" % (v, ))
|
||||
|
||||
|
@ -5,7 +5,7 @@ from enum import Enum
|
||||
from iso8601 import parse_date, ParseError
|
||||
from operator import attrgetter
|
||||
|
||||
from futile import basestring, issubclass, NOT_SET
|
||||
from futile import 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 self._map.values()[index]
|
||||
return list(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 self._map.itervalues()
|
||||
return iter(self._map.values())
|
||||
|
||||
def __len__(self):
|
||||
return len(self._map)
|
||||
@ -76,7 +76,7 @@ class Collection(Sequence, Mapping):
|
||||
|
||||
|
||||
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)
|
||||
self.type = type
|
||||
self.version = version
|
||||
@ -109,7 +109,7 @@ class Attribute(Member):
|
||||
RO = "RO"
|
||||
WO = "WO"
|
||||
|
||||
def __init__(self, type=unicode, default=None,
|
||||
def __init__(self, type=str, default=None,
|
||||
accesstype=None, mandatory=None,
|
||||
update_mandatory=None,
|
||||
id_attribute=None, path_attribute=None,
|
||||
@ -157,24 +157,22 @@ class Attribute(Member):
|
||||
return self.default
|
||||
|
||||
|
||||
try:
|
||||
unicode
|
||||
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)
|
||||
|
||||
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)
|
||||
def convert(self, value, instance):
|
||||
if isinstance(value, str):
|
||||
return bytes(value, "utf-8")
|
||||
return super(BytesAttribute, self).convert(value, instance)
|
||||
|
||||
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
|
||||
|
||||
UnicodeAttribute = Attribute
|
||||
|
||||
|
||||
class DatetimeAttribute(Attribute):
|
||||
@ -187,7 +185,7 @@ class DatetimeAttribute(Attribute):
|
||||
**kw)
|
||||
|
||||
def convert(self, value, instance):
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
try:
|
||||
return parse_date(value)
|
||||
except ParseError as e:
|
||||
@ -196,7 +194,7 @@ class DatetimeAttribute(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):
|
||||
super(ListAttribute, self).__init__(type=type,
|
||||
default=default, *args, **kw)
|
||||
@ -239,7 +237,7 @@ class ListAttribute(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):
|
||||
super(StringListAttribute, self).__init__(type=type, default=default,
|
||||
*args, **kw)
|
||||
@ -427,24 +425,22 @@ class ResourceType(ABCMeta):
|
||||
# TODO: caching
|
||||
@property
|
||||
def attribute_names(self):
|
||||
return map(attrgetter("name"), self.attributes)
|
||||
return list(map(attrgetter("name"), self.attributes))
|
||||
|
||||
@property
|
||||
def collection_names(self):
|
||||
return map(attrgetter("name"), self.collections)
|
||||
return list(map(attrgetter("name"), self.collections))
|
||||
|
||||
@property
|
||||
def subresource_names(self):
|
||||
return map(attrgetter("name"), self.subresources)
|
||||
return list(map(attrgetter("name"), self.subresources))
|
||||
|
||||
@property
|
||||
def member_names(self):
|
||||
return map(attrgetter("name"), self.__members__)
|
||||
return list(map(attrgetter("name"), self.__members__))
|
||||
|
||||
|
||||
class Entity(LoggerMixin):
|
||||
__metaclass__ = ResourceType
|
||||
|
||||
class Entity(LoggerMixin, metaclass=ResourceType):
|
||||
def __init__(self, *args, **kw):
|
||||
self.set_values(kw)
|
||||
|
||||
@ -467,7 +463,7 @@ class Entity(LoggerMixin):
|
||||
# TODO: proper solution?
|
||||
if (v is not None and isinstance(member, ListAttribute) and
|
||||
not isinstance(v, (list, tuple, set))):
|
||||
v = v.values()[0]
|
||||
v = list(v.values())[0]
|
||||
setattr(self, member.name, v)
|
||||
except KeyError:
|
||||
pass
|
||||
@ -487,7 +483,7 @@ class Entity(LoggerMixin):
|
||||
"""
|
||||
if values:
|
||||
raise ModelTypeError("%s resource has no attribute %s" %
|
||||
(self.typename, values.keys()[0]))
|
||||
(self.typename, list(values.keys())[0]))
|
||||
|
||||
@classmethod
|
||||
def get_typename(cls):
|
||||
@ -569,7 +565,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, basestring):
|
||||
if path is not None and not isinstance(path, str):
|
||||
raise TypeError(path)
|
||||
self.__path = path
|
||||
self.parent = parent
|
||||
@ -629,7 +625,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 = v.values()[0]
|
||||
v = list(v.values())[0]
|
||||
setattr(self, member.name, v)
|
||||
except KeyError:
|
||||
try:
|
||||
@ -637,7 +633,7 @@ class Resource(Entity):
|
||||
# TODO: proper solution?
|
||||
if (v is not None and isinstance(member, ListAttribute) and
|
||||
not isinstance(v, (list, tuple, set))):
|
||||
v = v.values()[0]
|
||||
v = list(v.values())[0]
|
||||
setattr(self, member.name, v)
|
||||
except KeyError:
|
||||
pass
|
||||
|
@ -289,7 +289,7 @@ cd \$(dirname \${0})
|
||||
|
||||
cd ${APP_NAME}
|
||||
|
||||
PYTHONPATH=\${PYTHONPATH}:src exec python -m ${PKG_NAME} \$@
|
||||
PYTHONPATH=\${PYTHONPATH}:src exec python3 -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 python -m ${PKG_NAME} \$@
|
||||
exec python3 -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 python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
@ -489,7 +489,7 @@ mv \${CONFIG_TEMP} \${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m ${PKG_NAME} \$@
|
||||
exec python3 -m ${PKG_NAME} \$@
|
||||
EOF
|
||||
|
||||
if [ ${WEB_APP} == "false" ]; then
|
||||
|
@ -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}
|
||||
python - << END_OF_PYTHON
|
||||
python3 - << 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}
|
||||
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
|
||||
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
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
import urllib
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
import urllib.error
|
||||
from openmtc_app.onem2m import XAE
|
||||
import uuid
|
||||
|
||||
@ -15,9 +17,9 @@ class DataVisualization(XAE):
|
||||
self.sensor_register = []
|
||||
self.sensor_values = []
|
||||
self.name = uuid.uuid1()
|
||||
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()
|
||||
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())
|
||||
# start endless loop
|
||||
self.periodic_discover(self.remote_cse,
|
||||
{'labels': ["openmtc:sensor_data"]},
|
||||
@ -28,19 +30,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.urlencode(data)
|
||||
urllib.urlopen("https://dweet.io/dweet/for/%s?%s" % (self.name, params))
|
||||
params = urllib.parse.urlencode(data)
|
||||
urllib.request.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(), port=6050, host='auto').run(ep)
|
||||
Runner(DataVisualization(poas=['http://localhost:21345'])).run(ep)
|
||||
|
||||
|
||||
|
@ -91,4 +91,4 @@ if __name__ == "__main__":
|
||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||
|
||||
ep = "http://localhost:8000"
|
||||
Runner(DataAggregation(), port=6050, host='auto').run(ep)
|
||||
Runner(DataAggregation(poas=['http://localhost:21346'])).run(ep)
|
||||
|
@ -19,4 +19,4 @@ if __name__ == "__main__":
|
||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||
|
||||
ep = "http://localhost:8000"
|
||||
Runner(SimpleDecision2(), port=6050, host='auto').run(ep)
|
||||
Runner(SimpleDecision2(poas=['http://localhost:21387'])).run(ep)
|
||||
|
@ -47,4 +47,4 @@ if __name__ == "__main__":
|
||||
from openmtc_app.flask_runner import SimpleFlaskRunner as Runner
|
||||
|
||||
ep = "http://localhost:8000"
|
||||
Runner(SimpleDecision(), port=6050, host='auto').run(ep)
|
||||
Runner(SimpleDecision(poas=['http://localhost:22245'])).run(ep)
|
||||
|
@ -31,5 +31,6 @@ app_file=${app_array[$[${choice}-1]]}
|
||||
################################################################################
|
||||
# run app_file
|
||||
cd ${base_path}
|
||||
. ../../common/prep-env.sh
|
||||
python ${app_file}
|
||||
cd ..
|
||||
. ../common/prep-env.sh
|
||||
python3 ${app_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)]
|
||||
|
@ -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']
|
||||
|
@ -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']
|
||||
|
@ -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']
|
||||
|
@ -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')
|
||||
|
@ -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')
|
||||
|
@ -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)]
|
||||
|
@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
|
||||
|
||||
request = OneM2MRequest("retrieve", to="onem2m")
|
||||
|
||||
print request.to
|
||||
print(request.to)
|
||||
#>>> onem2m
|
||||
|
@ -4,5 +4,5 @@ from openmtc_onem2m.transport import OneM2MRequest
|
||||
|
||||
request = OneM2MRequest("delete", to="onem2m")
|
||||
|
||||
print request.to
|
||||
print(request.to)
|
||||
#>>> onem2m
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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']
|
||||
|
@ -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')
|
||||
|
@ -34,4 +34,4 @@ cd ${base_path}
|
||||
cd ..
|
||||
. ../common/prep-env.sh
|
||||
cd ${base_path}
|
||||
python ${app_file}
|
||||
python3 ${app_file}
|
||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -3,7 +3,7 @@
|
||||
############################################################
|
||||
|
||||
# Set the base image to use debian
|
||||
FROM debian:jessie
|
||||
FROM debian:stretch
|
||||
|
||||
# Set the file maintainer
|
||||
MAINTAINER rst/tgu
|
||||
@ -20,8 +20,9 @@ RUN printf "Starting update...\n" && \
|
||||
build-essential \
|
||||
netbase \
|
||||
iproute2 \
|
||||
python-pip \
|
||||
python-dev \
|
||||
python3-setuptools \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
jq > /dev/null && \
|
||||
apt-get clean && \
|
||||
printf "Installation and cleanup finished.\n"
|
||||
|
@ -3,7 +3,7 @@
|
||||
############################################################
|
||||
|
||||
# Set the base image to use debian
|
||||
FROM resin/rpi-raspbian:jessie
|
||||
FROM resin/rpi-raspbian:stretch
|
||||
|
||||
# Set the file maintainer
|
||||
MAINTAINER rst/tgu
|
||||
@ -20,8 +20,9 @@ RUN printf "Starting update...\n" && \
|
||||
build-essential \
|
||||
netbase \
|
||||
iproute2 \
|
||||
python-pip \
|
||||
python-dev \
|
||||
python3-setuptools \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
jq > /dev/null && \
|
||||
apt-get clean && \
|
||||
printf "Installation and cleanup finished.\n"
|
||||
|
@ -89,4 +89,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m openmtc_gevent.backend_main $@
|
||||
exec python3 -m openmtc_gevent.backend_main $@
|
||||
|
@ -101,4 +101,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m openmtc_gevent.gateway_main $@
|
||||
exec python3 -m openmtc_gevent.gateway_main $@
|
||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -12,7 +12,7 @@ MAINTAINER rst/tgu
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -11,11 +11,11 @@ ENV MOD_NAME=sdk
|
||||
MAINTAINER rst/tgu
|
||||
|
||||
# update pip to latest version
|
||||
RUN pip install --upgrade pip
|
||||
RUN pip3 install --upgrade pip
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -11,11 +11,11 @@ ENV MOD_NAME=sdk
|
||||
MAINTAINER rst/tgu
|
||||
|
||||
# update pip to latest version
|
||||
RUN pip install --upgrade pip setuptools
|
||||
RUN pip3 install --upgrade pip setuptools
|
||||
|
||||
# install openmtc dependencies
|
||||
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
|
||||
COPY tmp/openmtc-$MOD_NAME.tar.gz /tmp/openmtc-$MOD_NAME.tar.gz
|
||||
|
@ -103,7 +103,7 @@ if __name__ == '__main__':
|
||||
## end of http://code.activestate.com/recipes/576694/ }}}
|
||||
|
||||
## kca:
|
||||
print OrderedSet('simsalabim')[1]
|
||||
print(OrderedSet('simsalabim')[1])
|
||||
|
||||
# Test case for exception at shutdown (yes, really...)
|
||||
x = OrderedSet('simsalabim')
|
||||
|
@ -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, e:
|
||||
except error as e:
|
||||
return TestResult(False, "%s (%d)" % (e.strerror, e.errno))
|
||||
except Exception, e:
|
||||
except Exception as e:
|
||||
return TestResult(False, errorstr(e))
|
||||
return TestResult(True)
|
||||
|
||||
|
@ -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
|
||||
|
@ -39,7 +39,7 @@ class HTTPSMixin(LoggerMixin):
|
||||
def get_request(self):
|
||||
try:
|
||||
return self.socket.accept()
|
||||
except error, e:
|
||||
except error as e:
|
||||
self.logger.exception("Error during accept(): %s", e)
|
||||
raise
|
||||
|
||||
|
@ -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 urllib2 import quote
|
||||
from urllib.parse import quote
|
||||
return quote(p, "")
|
||||
|
||||
|
||||
@ -46,15 +46,15 @@ __all__ = ['path']
|
||||
_base = str
|
||||
try:
|
||||
if os.path.supports_unicode_filenames:
|
||||
_base = unicode
|
||||
_base = str
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# Pre-2.3 workaround for basestring.
|
||||
try:
|
||||
basestring
|
||||
str
|
||||
except NameError:
|
||||
basestring = (str, unicode)
|
||||
str = (str, str)
|
||||
|
||||
# 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 map(path, glob.glob(_base(self / pattern)))
|
||||
return list(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(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'))
|
||||
return (t.replace('\r\n', '\n')
|
||||
.replace('\r\x85', '\n')
|
||||
.replace('\r', '\n')
|
||||
.replace('\x85', '\n')
|
||||
.replace('\u2028', '\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, unicode):
|
||||
if isinstance(text, str):
|
||||
if linesep is not None:
|
||||
# Convert all standard end-of-line sequences to
|
||||
# ordinary newline characters.
|
||||
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)
|
||||
text = (text.replace('\r\n', '\n')
|
||||
.replace('\r\x85', '\n')
|
||||
.replace('\r', '\n')
|
||||
.replace('\x85', '\n')
|
||||
.replace('\u2028', '\n'))
|
||||
text = text.replace('\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, unicode)
|
||||
isUnicode = isinstance(line, str)
|
||||
if linesep is not None:
|
||||
# Strip off any existing line-end and add the
|
||||
# specified linesep string.
|
||||
if isUnicode:
|
||||
if line[-2:] in (u'\r\n', u'\x0d\x85'):
|
||||
if line[-2:] in ('\r\n', '\x0d\x85'):
|
||||
line = line[:-2]
|
||||
elif line[-1:] in (u'\r', u'\n',
|
||||
u'\x85', u'\u2028'):
|
||||
elif line[-1:] in ('\r', '\n',
|
||||
'\x85', '\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=0750):
|
||||
def mkdir(self, mode=0o750):
|
||||
os.mkdir(self, mode)
|
||||
|
||||
def makedirs(self, mode=0750):
|
||||
def makedirs(self, mode=0o750):
|
||||
os.makedirs(self, mode)
|
||||
|
||||
def rmdir(self):
|
||||
@ -769,7 +769,7 @@ class path(_base):
|
||||
|
||||
# --- 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.
|
||||
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 = 0750):
|
||||
def forcedir(self, mode = 0o750):
|
||||
if not self.isdir():
|
||||
if self.exists():
|
||||
raise Exception("Not a directory: '%s'" % (self, ))
|
||||
self.makedirs(mode)
|
||||
|
||||
def forcefile(self, mode = 0640):
|
||||
def forcefile(self, mode = 0o640):
|
||||
if not self.exists():
|
||||
return self.touch(mode = 0640)
|
||||
return self.touch(mode = 0o640)
|
||||
if not self.isfile():
|
||||
raise Exception("Not a file: %s" % (self ,))
|
||||
|
||||
|
@ -28,7 +28,7 @@ class AbstractXMLSerializer(LoggerMixin):
|
||||
return XML(input)
|
||||
else:
|
||||
return ElementTree().parse(input)
|
||||
except Exception, e:
|
||||
except Exception as e:
|
||||
self._handle_parse_error(e)
|
||||
raise ParseError(e)
|
||||
|
||||
|
@ -86,7 +86,7 @@ class CheckPIDFileController(DaemonController):
|
||||
try:
|
||||
os.kill(pid, 0)
|
||||
return True
|
||||
except OSError, e:
|
||||
except OSError as e:
|
||||
if e.errno == errno.ESRCH:
|
||||
return False
|
||||
raise
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/env python
|
||||
#! /usr/bin/env python3
|
||||
'''
|
||||
Created on 01.04.2011
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exec python -m cul868ipe $@
|
||||
exec python3 -m cul868ipe $@
|
||||
|
@ -64,4 +64,4 @@ mv ${CONFIG_TEMP} ${CONFIG_FILE}
|
||||
|
||||
echo "done"
|
||||
|
||||
exec python -m cul868ipe $@
|
||||
exec python3 -m cul868ipe $@
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from setuptools import setup
|
||||
from distutils.core import setup
|
||||
|
@ -2,7 +2,7 @@
|
||||
Interworking Proxy for Cul868 devices.
|
||||
"""
|
||||
|
||||
__version__ = "1.2.0"
|
||||
__version__ = "1.3.0"
|
||||
__description__ = "The OpenMTC Cul868IPE"
|
||||
__author_name__ = "Ronny Kreuch"
|
||||
__author_mail__ = "ronny.kreuch@fokus.fraunhofer.de"
|
||||
|
@ -31,16 +31,16 @@ parser.add_argument("devices", nargs="*")
|
||||
args, config = prepare_app(parser, __loader__, __name__, "config.json")
|
||||
|
||||
# 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")
|
||||
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"])
|
||||
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', (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)
|
||||
devices = get_value('devices', list, [], args, config)
|
||||
|
||||
|
@ -59,7 +59,7 @@ class CUL868Coordinator(LoggerMixin):
|
||||
run_forever(period, self._generate_simulated_data)
|
||||
|
||||
def _generate_simulated_data(self):
|
||||
p = choice(self.sim_parsers.keys())
|
||||
p = choice(list(self.sim_parsers.keys()))
|
||||
fake_parser = self.sim_parsers[p]
|
||||
dev_id, data = fake_parser(p)
|
||||
handler = self.handlers[p]
|
||||
|
@ -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 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":
|
||||
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 += 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)
|
||||
else:
|
||||
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)
|
||||
|
||||
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, unicode)): # fallback to old behavior
|
||||
if isinstance(content, str): # 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
Reference in New Issue
Block a user