Example of some ‘db’ resources calls in Python language

The following resources are directly used in this example or could be used in a similar way :

Enter the Python code/instructions in a Python interpreter.

Memo

# -*- coding: utf-8 -*-
"""erecord_cmn.utils.using.send_get_and_receive

Methods that may be used by a user calling the erecord web services from python

"""

#import urllib.parse as urllib_local    # only in python 3   version case
from __future__ import print_function   # only in python 2.7 version case
import urllib as urllib_local           # only in python 2.7 version case

import pycurl
import io
import json

def send_get_and_receive(url, id=None, options=None):
    """Send GET request and return response datas"""
#
    # full_url composed by : url {id} /? options
    full_url = url
    if id is not None :
        full_url = full_url + "%i/" % id
    if options is not None :
        full_url = full_url + "?%s" % urllib_local.urlencode(options)
    #print("request GET ", full_url)
    buffer = io.BytesIO()
    c = pycurl.Curl()
    c.setopt(c.CUSTOMREQUEST, 'GET')
    c.setopt(c.URL, full_url)
    #c.setopt(c.FOLLOWLOCATION, True) # to follow redirect
    c.setopt(c.WRITEFUNCTION, buffer.write)
    c.perform()
    buffer_str = buffer.getvalue()
    buffer.close()
    buffer_str = buffer_str.decode("utf8")
    responsedata = json.loads(buffer_str)
    #responsedata
    #responsedata.keys()
    return responsedata
#

# -*- coding: utf-8 -*-
"""erecord_cmn.utils.using.content_rep_pkg_vpz_tree

Methods that may be used by a user calling the erecord web services from python

"""

from __future__ import print_function # python 2.7 version case

def content_rep_tree(vlerep):
    """Content of the models repository (vlerep) in 'tree' style of
       presentation
    """
#
    #vlerep.keys()
    vlerep_id= vlerep['id']
    vlerep_name= vlerep['name']
    vlerep_verbose_name= vlerep['verbose_name']
    vlerep_path = vlerep['path']
    print("\nModels repository (id, name, verbose_name) : ", vlerep_id, vlerep_name, vlerep_verbose_name)
    print("List of its models (id, name, verbose_name) :")
    vlerep_vlepkg_list = vlerep['vlepkg_list']
    for vlepkg in vlerep_vlepkg_list :
        # vlepkg.keys()
        vlepkg_id = vlepkg['id']
        vlepkg_name = vlepkg['name']
        vlepkg_verbose_name = vlepkg['verbose_name']
        vlepkg_vlerep = vlepkg['vlerep']
        print("- ", vlepkg_id, vlepkg_name, vlepkg_verbose_name)

def content_pkg_tree(vlepkg):
    """Content of the model (vlepkg) in 'tree' style of presentation"""
#
    #vlepkg.keys()
    vlepkg_id = vlepkg['id']
    vlepkg_name = vlepkg['name']
    vlepkg_verbose_name = vlepkg['verbose_name']
    vlepkg_vlerep = vlepkg['vlerep']
    print("\nModel (id, name, verbose_name, vlerep) : ", vlepkg_id, vlepkg_name, vlepkg_verbose_name, vlepkg_vlerep)
    print("List of its simulators (id, name, verbose_name, vlepkg) :")
    vlepkg_vlevpz_list = vlepkg['vlevpz_list']
    for vlevpz in vlepkg_vlevpz_list :
        # vlevpz.keys()
        vlevpz_id = vlevpz['id']
        vlevpz_name = vlevpz['name']
        vlevpz_verbose_name = vlevpz['verbose_name']
        vlevpz_vlepkg = vlevpz['vlepkg']
        print("- ", vlevpz_id, vlevpz_name, vlevpz_verbose_name, vlevpz_vlepkg)

def content_vpz_tree(vlevpz):
    """Content of the simulator (vlevpz) in 'tree' style of presentation"""
#
    #vlevpz.keys()
    vlevpz_id = vlevpz['id']
    vlevpz_name = vlevpz['name']
    vlevpz_verbose_name = vlevpz['verbose_name']
    vlevpz_vlepkg = vlevpz['vlepkg']
    print("\nSimulator (id, name, verbose_name, vlepkg) : ", vlevpz_id, vlevpz_name, vlevpz_verbose_name, vlevpz_vlepkg)
#

# Python code :

from __future__ import print_function # python 2.7 version case

##############################################
# All the models repositories in 'tree' style
##############################################
url = "http://erecord.toulouse.inra.fr:8000/db/rep/"
options = {'mode':'tree'}
vlerep_list = send_get_and_receive(url=url,options=options)
for vlerep in vlerep_list :
    content_rep_tree(vlerep)

pass
################################################################################
# Among all the models repositories, looking for the model with name model_name
################################################################################
url = "http://erecord.toulouse.inra.fr:8000/db/rep/"
options = {'mode':'tree'}
vlerep_list = send_get_and_receive(url=url,options=options)
for model_name in ["2CV", "wwdm"]:
    for vlerep in vlerep_list :
        vlerep_vlepkg_list = vlerep['vlepkg_list']
        for vlepkg in vlerep_vlepkg_list :
            vlepkg_id = vlepkg['id']
            vlepkg_name = vlepkg['name']
            if (vlepkg_name == model_name) :
            #################################################################
            # New request for the model with name model_name in 'tree' style
            #################################################################
                print("\n\nMore about the model with name ", model_name)
                url = "http://erecord.toulouse.inra.fr:8000/db/pkg/"
                options = {'mode':'tree'}
                vlepkg = send_get_and_receive(url=url,id=vlepkg_id, options=options)
                content_pkg_tree(vlepkg)

pass
#####################################################################
# All the simulators of the model with id=19 ("2CV") in 'tree' style
#####################################################################
vlepkg_id = 19
url = "http://erecord.toulouse.inra.fr:8000/db/vpz/"
options = {'mode':'tree', 'pkg':vlepkg_id}
vlevpz_list = send_get_and_receive(url=url,options=options)
print("\n\nSimulators of the model with id=", vlepkg_id, " :")
for vlevpz in vlevpz_list :
    content_vpz_tree(vlevpz)

pass
##################################
# domino requests in 'link' style
##################################
# (models repositories => theirs models => their simulators)
url = "http://erecord.toulouse.inra.fr:8000/db/rep/"
options = {'mode':'link'}
vlerep_list = send_get_and_receive(url=url,options=options)
for vlerep in vlerep_list :
    vlerep_id = vlerep['id']
    vlerep_name = vlerep['name']
    vlerep_verbose_name = vlerep['verbose_name']
    vlerep_path = vlerep['path']
    vlepkg_url_list = vlerep['vlepkg_list']
    print("=> models repository ", vlerep_id, vlerep_name, vlerep_verbose_name, vlerep_path, vlepkg_url_list)
    for vlepkg_url in vlepkg_url_list :
        vlepkg = send_get_and_receive(url=vlepkg_url,options=options)
        vlepkg_id = vlepkg['id']
        vlepkg_name = vlepkg['name']
        vlepkg_verbose_name = vlepkg['verbose_name']
        vlerep_url = vlepkg['vlerep']
        vlevpz_url_list = vlepkg['vlevpz_list']
        print("   => model ",  vlepkg_id, vlepkg_name, vlepkg_verbose_name, vlerep_url, vlevpz_url_list)
        for vlevpz_url in vlevpz_url_list :
            vlevpz = send_get_and_receive(url=vlevpz_url,options=options)
            vlevpz_id = vlevpz['id']
            vlevpz_name = vlevpz['name']
            vlevpz_verbose_name = vlevpz['verbose_name']
            vlevpz_vlepkg_url = vlevpz['vlepkg']
            print("      => simulator ", vlevpz_id, vlevpz_name, vlevpz_verbose_name, vlevpz_vlepkg_url)

pass