system_administration:infrastructure:module_manager

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
system_administration:infrastructure:module_manager [2022/09/18 14:36] madjidsystem_administration:infrastructure:module_manager [2022/09/18 15:24] (current) – removed madjid
Line 1: Line 1:
-====== Module-Manager ======  
-===== fonctionnement du module ===== 
-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é 
-<code python> 
-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) 
-</code> 
-Aussi elle vérifie la pièce jointe (attachement) sur le module product.template  
-<code python> 
- # 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) 
-</code> 
-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 
-<code python> 
-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'] 
-            }) 
-</code> 
- 
-Au niveau du serveur Module-manager: 
-La fonction update_module_list() fait appel à la fonction module_populator(): 
-<code python> def update_module_list(request, version): 
-    utils.modules_populator(Module, str(version)) 
-    return JsonResponse({'status': 200, 'date':" DATE "}) 
-</code> 
-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 
-<code python> 
-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 
-                ) 
-</code> 
-la fonction **get_module_liste()** : 
-<code python> 
-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 
-</code> 
- 
-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()** : 
-<code python> 
-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)) 
-</code> 
-La fonction **get_acces()** vérifie si l’utilisateur existe au niveau du serveur module-manager: 
-  * Sur le service module-manager la vérification de l'utilisateur se fait à travers la route: http://m-m/user/exists/+mail 
-  * Si l'utilisateur existe sur le serveur module-manager et possède d'un token sur odoo , la fonction **get_acces()** reourne le token 
-  * Si l'utilisateur existe sur le serveur module-manager et ne possède pas un token sur odoo ; une requete sera enovoyé à la route : http://m-m/api-token-auth + data  = {'username':mail, 'password':PILOT-ALGA-ANDY} , cette requette récupere le token depuis e servaur sans creer un nouveau utilisateur 
-  * Si l'utilisateur n'existe pas sur le serveur module-manager, une requette va creer un nouveauutilisateur su le serveur avec le mail du client de odoo , cela fait à travers la route suivante : http://api/register  + data  = {'username':mail, 'password':PILOT-ALGA-ANDY} et retourne le token  
- 
- 
- 
- 
- 
- 
- 
-  
  • system_administration/infrastructure/module_manager.1663508188.txt.gz
  • Last modified: 2022/09/18 14:36
  • by madjid