Bonjour,
Je m’intéresse à l’API Python sur mon serveur scsuitestarter 6.4. Et actuellement je suis en train d’essayer de faire un script python dont le but est de modifier un item de contenu pour y ajouter ou modifier un lien vers un item image. J’ai pu envoyer un fichier jpg sur mon serveur Scenari via « scenaripy_api.wsp_set_res() ». J’arrive à retrouver cette image avec un « scenaripy_api.wsp_search() » utilisant un critère de type scsuitestarter_6_4.api.search.SearchRegExpUri . Avec ça je retrouve l’uri en clair de la ressource mais pas l’id en base.
J’ai commencé à regarder la classe python xml.etree.ElementTree pour manipuler le XML récupéré de mon item de contenu mais je me heurte au souci de savoir comment ajouter le lien vers la ressource que j’ai déposé. l’Uri retourné par wsp_search() ne fonctionnera pas en contexte serveur.
Si vous aviez une piste, je sui preneur.
merci d’avance
Franck
Salut Franck,
Lorsque tu upload ton image, tu passes le path de ton item dans l’argument src_uri.
Tu simplement ajouter ton lien avec la référence sc:refUri=”[/ton/src_uri]” dans ton item et l’envoyer au serveur. Le serveur remplacera le srcUri (le path) par un srcId (un id db) à l’enregistrement.
Si ça ne fonctionne pas, c’est possiblement que tu as une erreur ailleurs. Hésites pas à poster un exemple de code si veux plus d’aide.
Thibaut
Top ! merci Thibaut ça fonctionne nickel.
Je poste ici pour qui veux tester un bout de code qui reprend le code de la doc de l’API Python qui change à la volée le titre du module exemple sur le thé en y ajoutant un bloc qui ajoute une image dans l’introduction du module
import xml.etree.ElementTree as ET
import scsuitestarter_6_4.portal as portal
import scsuitestarter_6_4.api as api
import scenaripy_api
# Connexion au serveur
server = portal.new_portal(system_conf=False, overridden_conf_file="conf.json")
ns = {
"sc": "http://www.utc.fr/ics/scenari/v3/core",
"sp": "http://www.utc.fr/ics/scenari/v3/primitive",
"op": "utc.fr:ics/opale3"
}
for prefix, uri in ns.items():
ET.register_namespace(prefix, uri)
# Récupération de l'atelier
wsp_code = scenaripy_api.search_wsp_code(portal=server, title_fragment="Opale25 test")
item = ET.fromstring(scenaripy_api.wsp_get_item(portal=server, wsp_code=wsp_code, ref_uri="/Module_demo/_Module-LeThe.xml"))
title = item.find(".//op:title/sc:para", ns)
print (title)
title.text = "Décourir le thé - titre modifié par Python"
# Ajout d'une image dans l'introduction du module
introRes = item.find('.//op:ue/sp:intro/op:res', ns)
if introRes is not None:
pict = ET.Element(f"{{{ns['sp']}}}res")
pict.set(f"{{{ns['sc']}}}refUri", "/Module_demo/ressources/images/luYu.jpg")
pictM = ET.Element(f"{{{ns['op']}}}resInfoM")
pict.append(pictM)
introRes.append(pict)
scenaripy_api.wsp_set_item(portal=server, wsp_code=wsp_code, ref_uri="/Module_demo/_Module-LeThe.xml", item=ET.tostring(item, "UTF-8"))
Le code nécessite un fichier conf.json comme indiqué dans la doc de l’API Python