def _generate_line(self, period_ids=None): if period_ids: periods = self.env['perso.account.period'].browse(period_ids) else: periods = self.env['perso.account.period'].search([]) period_to_sort = { period : [period.previous_period_id] for period in periods} for period in topological_sort(period_to_sort): period._close_period() _logger.info("Generate Report Line Done")
def _generate_line(self, period_ids=None): if period_ids: periods = self.env['perso.account.period'].browse(period_ids) else: periods = self.env['perso.account.period'].search([]) period_to_sort = { period: [period.previous_period_id] for period in periods } for period in topological_sort(period_to_sort): period._close_period() _logger.info("Generate Report Line Done")
def field_sequence(self): """ Return a function mapping a field to an integer. The value of a field is guaranteed to be strictly greater than the value of the field's dependencies. """ # map fields on their dependents dependents = { field: set(dep for dep, _ in model._field_triggers[field] if dep != field) for model in self.itervalues() for field in model._fields.itervalues() } # sort them topologically, and associate a sequence number to each field mapping = { field: num for num, field in enumerate(reversed(topological_sort(dependents))) } return mapping.get
def test_topological_sort(self): random.shuffle(self.mods) modules = [(k, sample(self.mods[:i])) for i, k in enumerate(self.mods)] random.shuffle(modules) ms = dict(modules) seen = set() sorted_modules = topological_sort(ms) for module in sorted_modules: deps = ms[module] self.assertGreaterEqual( seen, set(deps), 'Module %s (index %d), ' \ 'missing dependencies %s from loaded modules %s' % ( module, sorted_modules.index(module), deps, seen )) seen.add(module)
def test_topological_sort(self): random.shuffle(self.mods) modules = [ (k, sample(self.mods[:i])) for i, k in enumerate(self.mods)] random.shuffle(modules) ms = dict(modules) seen = set() sorted_modules = topological_sort(ms) for module in sorted_modules: deps = ms[module] self.assertGreaterEqual( seen, set(deps), 'Module %s (index %d), ' \ 'missing dependencies %s from loaded modules %s' % ( module, sorted_modules.index(module), deps, seen )) seen.add(module)
def module_installed_bypass_session(dbname): loadable = http.addons_manifest.keys() modules = {} try: registry = openerp.modules.registry.RegistryManager.get(dbname) with registry.cursor() as cr: m = registry.get('ir.module.module') # TODO The following code should move to ir.module.module.list_installed_modules() domain = [('state', '=', 'installed'), ('name', 'in', loadable)] ids = m.search(cr, 1, [('state', '=', 'installed'), ('name', 'in', loadable)]) for module in m.read(cr, 1, ids, ['name', 'dependencies_id']): modules[module['name']] = [] deps = module.get('dependencies_id') if deps: deps_read = registry.get( 'ir.module.module.dependency').read( cr, 1, deps, ['name']) dependencies = [i['name'] for i in deps_read] modules[module['name']] = dependencies except: pass sorted_modules = topological_sort(modules) return sorted_modules
# TODO The following code should move to ir.module.module.list_installed_modules() domain = [('state', '=', 'installed'), ('name', 'in', loadable)] ids = m.search(cr, 1, [('state', '=', 'installed'), ('name', 'in', loadable)]) for module in m.read(cr, 1, ids, ['name', 'dependencies_id']): modules[module['name']] = [] deps = module.get('dependencies_id') if deps: deps_read = registry.get( 'ir.module.module.dependency').read( cr, 1, deps, ['name']) dependencies = [i['name'] for i in deps_read] modules[module['name']] = dependencies except Exception, e: pass sorted_modules = topological_sort(modules) return sorted_modules def module_boot(db=None): server_wide_modules = openerp.conf.server_wide_modules or ['web'] serverside = [] dbside = [] for i in server_wide_modules: if i in http.addons_manifest: serverside.append(i) monodb = db or db_monodb() if monodb: dbside = module_installed_bypass_session(monodb) dbside = [i for i in dbside if i not in serverside] addons = serverside + dbside
registry = openerp.modules.registry.RegistryManager.get(dbname) with registry.cursor() as cr: m = registry.get('ir.module.module') # TODO The following code should move to ir.module.module.list_installed_modules() domain = [('state','=','installed'), ('name','in', loadable)] ids = m.search(cr, 1, [('state','=','installed'), ('name','in', loadable)]) for module in m.read(cr, 1, ids, ['name', 'dependencies_id']): modules[module['name']] = [] deps = module.get('dependencies_id') if deps: deps_read = registry.get('ir.module.module.dependency').read(cr, 1, deps, ['name']) dependencies = [i['name'] for i in deps_read] modules[module['name']] = dependencies except Exception,e: pass sorted_modules = topological_sort(modules) return sorted_modules def module_boot(db=None): server_wide_modules = openerp.conf.server_wide_modules or ['web'] serverside = [] dbside = [] for i in server_wide_modules: if i in http.addons_manifest: serverside.append(i) monodb = db or db_monodb() if monodb: dbside = module_installed_bypass_session(monodb) dbside = [i for i in dbside if i not in serverside] addons = serverside + dbside return addons