Yardım

0

How to override load_addons shared folder

I want to share local directory on my apps. Found load_addons definition in http.Root class, append in statics['/shared_folder'] = '/home/shared_folder' that is work but, override load_addons function with monkey_patch like this

# -- coding: utf-8 --

import ast

import logging

import odoo

import os

import werkzeug

from odoo import http, tools

from odoo.modules.module import module_manifest

from odoo.tools import ustr, consteq, frozendict, pycompat, unique, date_utils

from os.path import join as opj

import mock

logger = logging.getLogger(name_)

STATIC_CACHE = 60 * 60 * 24 * 7

addons_manifest = {}

def load_addons():

    """ Load all addons from addons path containing static files and

    controllers and configure them.  """

    # TODO should we move this to ir.http so that only configured modules are served ?

    statics = {}

    for addons_path in odoo.modules.module.ad_paths:

        for module in sorted(os.listdir(str(addons_path))):

            if module not in addons_manifest:

                mod_path = opj(addons_path, module)

                manifest_path = module_manifest(mod_path)

                path_static = opj(addons_path, module, 'static')

                if manifest_path and os.path.isdir(path_static):

                    manifest_data = open(manifest_path, 'rb').read()

                    manifest = ast.literal_eval(pycompat.to_native(manifest_data))

                    if not manifest.get('installable', True):

                        continue

                    manifest['addons_path'] = addons_path

                    _logger.debug("Loading %s", module)

                    addons_manifest[module] = manifest

                    statics['/%s/static' % module] = path_static

    statics['/shared_files'] = opj(odoo.tools.config.options['data_dir'], 'shared_files')

    if statics:

        _logger.info("HTTP Configuring static files")

    app = werkzeug.wsgi.SharedDataMiddleware(http.Root.dispatch, statics, cache_timeout=STATIC_CACHE)

    http.Root.dispatch = http.DisableCacheMiddleware(app)

with mock.patch.object(http.Root, 'load_addons', load_addons):

    http.root


but doesnt work. How to override this function in my apps.

Avatar
Vazgeç
1 Cevap
1
Avatar
Ibrahim Boudmir
En iyi cevap

Hi, 

since you did not specify which version you're working on, i'll take V11 in this example.
This is how we apply a monkey patch on function load_addons:  

from odoo.http import Root

def load_addons(self):

      # HERE you add your code. 

     # End of function

Root.load_addons = load_addons


Regards, 

upvote if this helps. If not, you can write back. 

2 Yorumlar
Avatar
Vazgeç
Avatar
Ilyas Bahri Dudak
-

V12 use but load_addons function run before started the thread,

ı try this method but not work for want to me

if 'werkzeug.wsgi.SharedDataMiddleware' append my file after running the server my problem is gone

Avatar
Ibrahim Boudmir
-

Then you may want to check again which function you need to modify. Maybe it's not load_addons but another one where your changes should be added...