Comments (7)
Meinst Du eine Lösung wie:
- Auf dem Parameter Tab ein Feld für die Requirements hinzufügen
- beim Start von shng Die Logik Paremeter auf die Requirements hin durchsehen und
- die Requirements der requirements/conf_all.txt und der requirements/all.txt hinzufügen bevor die Requirements geprüft werden
?
from smarthome.
Wenn das auf dem Parameter-Tab eingetragen werden kann, müsste es ja irgendwo gesichert werden - im Header der Logics- bzw. userfunctions-Datei?
In dem Fall wäre das ein Wechsel der bisherigen Konvention, Metadaten in gesonderten Dateien zu speichern. Möglich wäre ggf.
# requirements: foo
im Header der Python-Datei (z.B.: ununterbrochener Kommentarblock von Dateibeginn an)
Eine zusätzliche yaml-Datei wäre möglich, müsste aber von Hand gepflegt werden und gilt dann jeweils für alle Logiken bzw. UF, da scheint mir Variante 1 besser handlebar.
from smarthome.
Wenn das auf dem Parameter-Tab eingetragen werden kann, müsste es ja irgendwo gesichert werden - im Header der Logics- bzw. userfunctions-Datei?
Ich wäre für weder-noch. Meiner Meinung nach, würde die Information in die etc/logic.yaml gehören.
Einen direkten Zusammenhang mit den Userfunctions sehe ich erstmal nicht. Logiken können ja einfach ein import Statement enthalten.
Bei den Userfunctions Requirements zu hinterlegen ist noch mal ein weiteres Thema. Da muss ich noch mal drauf rumdenken. Eine Datei unter etc (analog zur etc/logic.yaml) könnte für Userfunctions auch noch ein anderes Problem lösen, das ich habe: Wenn ich eine Userfunctions Datei disablen möchte, muss ich bisher die .py Datei umbenennen (andere Endung dran). Es gibt bisher dafür keinen "Schalter".
from smarthome.
Nei den Userfunctions könnte man das auch analog zu Plugins, dem lib Verzeichnis, … lösen.
In das functions Verzeichnis könnte man eine requirements.txt legen und shpypi könnte diese Datei mit in den Aufbau der Gesamt-Requirements aufnehmen.
from smarthome.
Ich habe lib.shpypi erstmal so erweitert, dass in den Verzeichnissen ../logics und ../functions gespeicherte requirements.txt Dateien mit ausgewertet werden. In den generierten Dateien werden die Einträge als **user-defined'' gelistet. In der requirements/conf-all.txt sieht das z.B. dann so aus:
# configured plugin 'piratewthr'
# configured plugin 'darksky'
# configured plugin 'avm'
# configured plugin 'enigma2'
# SmartHomeNG-lib
# user-defined 'functions'
# user-defined 'logics'
requests>=2.20.0
Das ist noch nicht die eleganteste Version (da Logiken ja häufig in der Admin GUI geschrieben/modifiziert werden und man für die Requirements noch in den Maschinenraum muss, aber es ist erstmal eine praktikable Lösung.
Die requirements.txt Dateien werden im Konfigurations-Backup mit gesichert.
from smarthome.
Macht es nicht Sinn die requirements direkt in die User-Funktion oder Logik auszulagern. Also irgendwie als Kommentar oder in einer Variable im Code? Also so z.B.:
#requirements: pymodbus>='3.5.2'
oder
requirements = 'pymodbus>=3.5.2'
VIelleicht denke ich da zu naiv. Aber wäre die Auswertung aufwändig?
from smarthome.
Ich glaube, die meisten Ideen, die nicht auf einer requirements.txt basieren, dürften einfach daran scheitern, dass die requirements bei Laden von shng geprüft werden, die Logiken aber erst beim Starten geladen werden. Die notwendigen Informationen (nicht zuletzt die notwendigen/konfigurierten Verzeichnisse) stehen zu dem Zeitpunkt noch gar nicht zur Verfügung.
Ich halte es da für praktikabler, eine logics/requirements.txt (und analog) zu lesen, und wenn im Admin-UI die Logiken bearbeitet werden, könnte man die ggf. dort auf eine solche Zeile hin parsen, die dann an die requirements.txt angefügt wird. Das scheint mir aber noch ein langer Weg zu sein; und persönlich halte ich das nicht für dringlich über die schon vorhandene Implementation der requirements.txt hinaus.
from smarthome.
Related Issues (20)
- structs not checked for wrong configurations? HOT 1
- Issue with smartdeviceplugin with UTF-8 response HOT 1
- Websocket crashed HOT 4
- Vorschlag zum besseren Handling von Items mit Datentyp 'dict' oder 'list' HOT 25
- Websocket Exceptions HOT 4
- struct names are applied to items including the struct
- Visu subscription of a memory log activates sending of env.core.log HOT 5
- smarthome/doc/user/source/beispiele/eval.rst Beispiel "Enumeration über Liste" funktioniert nicht HOT 1
- Log configuration: allow placeholders for filename and rotate correctly HOT 1
- Delay in scenes HOT 4
- Problem when Item has the same name as a class Item method HOT 5
- Http module cannot bind on all interfaces
- Incompability to paho-mqtt-2.0.0 HOT 1
- Usage of logging.default.yaml HOT 7
- Problem bei max python Version zum Start? HOT 5
- Item Funktionen in der plugin.yaml? HOT 14
- Bug in ``Utils.get_all_local_ipv4_addresses()`` HOT 7
- Darstellung von Paketversion falsch mit Paketen für die ``<`` gilt - Beispiel paho-mqtt HOT 2
- Subscribed item properties should be updated on the websocket HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from smarthome.