des crons qui appellent un script python du coup? sinon je ne comprend pas trop l’interêt sur tout ça ![]()
et si c’est juste l’appel à un script via cron, asyncio ne va rien apporter mais je n’ai p-e pas bien compris
pour revenir à la question sur les modifs à avoir dans le plugin, entre autre sur dependancy_info() et dependancy_install(), en fait c’est déjà documenté ici:
https://doc.jeedom.com/fr_FR/dev/daemon_plugin#La%20méthode%20par%20procédures
- mettre à jour
plugin_info/info.json dependancy_install()peut-être repris tel quel de la documentation, bien sur ne pas suivre l’explication pourinstall_apt.shpuisque c’est l’objet de ce postdependancy_info()tu peux t’inspirer de ce qu’il y a dans la doc, c’est ce que je faisais avant mais c’est fastidieux car il faut adapter la liste des dépendances pour chaque plugin;
Désormais ma fonction dependancy_info() est celle-ci (quasi toujours):
public static function dependancy_info() {
$return = array();
$return['log'] = log::getPathToLog(__CLASS__ . '_update');
$return['progress_file'] = jeedom::getTmpFolder(__CLASS__) . '/dependance';
$return['state'] = 'ok';
if (file_exists(jeedom::getTmpFolder(__CLASS__) . '/dependance')) {
$return['state'] = 'in_progress';
} elseif (!file_exists(self::PYTHON_PATH)) {
$return['state'] = 'nok';
} elseif (!self::pythonRequirementsInstalled(self::PYTHON_PATH, __DIR__ . '/../../resources/requirements.txt')) {
$return['state'] = 'nok';
}
return $return;
}
dans la class je déclare PYTHON_PATH pour utiliser mon venv (c’est juste pour ne pas devoir modifier à 4 endroits le path au cas où)
const PYTHON_PATH = __DIR__ . '/../../resources/venv/bin/python3';
et ma fonction pythonRequirementsInstalled() est celle-ci:
private static function pythonRequirementsInstalled(string $pythonPath, string $requirementsPath) {
if (!file_exists($pythonPath) || !file_exists($requirementsPath)) {
return false;
}
exec("{$pythonPath} -m pip freeze", $packages_installed);
$packages = join("||", $packages_installed);
exec("cat {$requirementsPath}", $packages_needed);
foreach ($packages_needed as $line) {
if (preg_match('/([^\s]+)[\s]*([>=~]=)[\s]*([\d+\.?]+)$/', $line, $need) === 1) {
if (preg_match('/' . $need[1] . '==([\d+\.?]+)/i', $packages, $install) === 1) {
if ($need[2] == '==' && $need[3] != $install[1]) {
return false;
} elseif (version_compare($need[3], $install[1], '>')) {
return false;
}
} else {
return false;
}
}
}
return true;
}
elle permet de vérifier que les dépendances d’un fichier requirements.txt sont bien installées dans le venv (avec la version voulue);
attention je ne gère pas toutes les syntaxes possibles mais juste >=, ~= et ==
cette fonction est aussi dispo dans GitHub - Mips2648/jeedom-tools: Tools and helper class for plugin development (parce que je déteste faire du copier/coller)
last but not least, très important, ajouter cette fonction dans la class eqLogic pour exclure le dossier venv du backup, sinon ca augmente beaucoup la taille du backup jeedom:
public static function backupExclude() {
return [
'resources/venv'
];
}