This is an old revision of the document!
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é
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))