system_administration:infrastructure:module_manager

This is an old revision of the document!


Module-Manager

Quand l’utilisateur clique sur le lien de téléchargement de l'attachement au niveau du portail Odoo : La fonction download_attachement() sera lancé ,elle vérifie si le client à acheté le produit associé

def download_attachment(self, attachment_id):
        # Check if this is a valid attachment id
        log.warning("########### i''m in #######################")
        attachment = request.env['ir.attachment'].sudo().search_read(
            [('id', '=', int(attachment_id))],
            ["name", "datas", "mimetype", "res_model", "res_id", "type", "url"]
        )
 
        if attachment:
            attachment = attachment[0]
        else:
            return redirect(self.orders_page)
 
        # Check if the user has bought the associated product
        res_model = attachment['res_model']
        res_id = attachment['res_id']
        purchased_products = request.env['account.move.line'].get_digital_purchases()
 
 
        if res_model == 'product.product':
            if res_id not in purchased_products:
                return redirect(self.orders_page)

Aussi elle vérifie la pièce jointe (attachement) sur le module product.template

 # Also check for attachments in the product templates
        elif res_model == 'product.template':
            template_ids = request.env['product.product'].sudo().browse(purchased_products).mapped('product_tmpl_id').ids
            if res_id not in template_ids:
                return redirect(self.orders_page)
 
        else:
            return redirect(self.orders_page)

Si le type de l’attachement == 'module' une requête sera envoyé pour vérifier si les modules avec ces versions existe sur le serveur (module-manager) a travers la route : http://m-m/api/update/modules/version

data = []
# Get the list of product & append them in a list [name, version]
for a in attachments:
    if a['version']:
        b = requests.get(f'{static_url}/api/update/modules/{a["version"]}')
        log.warning('======== B ============== {} '.format(b))
        data.append(
            {
            "name": a['name'],
            "version": a['version']
            })

Au niveau du serveur Module-manager: La fonction update_module_list() fait appel à la fonction module_populator():

 def update_module_list(request, version):
    utils.modules_populator(Module, str(version))
    return JsonResponse({'status': 200, 'date':" DATE "})

La fonction module_populator() récupère la version du module et le nom du modele:

  • La fonction récupère la liste des modules depuis gitlab a traves la fonction get_module_liste() et vérifie si la version du module existe sur la liste
  • Si la version n'existe pas elle va créer des modules sur la base de données locale du module manager pour les version qui n’existe pas
def modules_populator(model, version):
    """
        Create Modules in The Local Database    
    """
    for module in get_module_list(version=version):
        # Check if module exists in the local database
        if not model.objects.filter(
            name=module,
            version=version
            ).exists():
                model.objects.create(
                    name=module,
                    version=version
                )

la fonction get_module_liste() :

def get_module_list(version):
    """
        Fetch all the modules by Name & Version then return the it as a list
    """
 
    repo_modules = f'{settings.GITLAB_URL}/projects/{settings.PROJECT_ID}/repository/tree?ref={version}'
    get_modules_req = requests.get(
            repo_modules,
            headers=settings.HEADERS
        ).text
 
    # GET ALL MODULES OF ELOAPPS REPOSITORY
    modules_list = []
    for module in json.loads(get_modules_req):
        modules_list.append(module['path'])
    print(f"==== modules_list = {modules_list} ====")
    return modules_list

Après la mise à jour des modules sur le serveur module-manager et la vérification avec le dépôt Gitlab , on arrivera à l’étape de vérification du token de l'utilisateur , cette étape sera faite sur la même fonction download_attachement() :

if user['access_token'] :
    log.warning('in if token')
    token_id = request.env['user.token'].sudo().search_read([('id','=', user['access_token'][0])],['access_token'])
    token = token_id[0]['access_token']
    log.warning('token {}'.format(token))
 
# If the user doesn t have a token create a call to the url service to create
# a access token ()
else :
    log.warning('in else token')
    token = request.env['res.users'].sudo().get_access(user['login'],user['access_token']).access_token
log.warning("token{} ".format(token))
  • system_administration/infrastructure/module_manager.1663506642.txt.gz
  • Last modified: 2022/09/18 14:10
  • by madjid