Allow egg installation working

This commit is contained in:
Cédric Krier committed 2008-11-18 17:40:30 +01:00
1 parent c497b28903
commit 9ff90ce067
6 files changed
+101 -62

No files matched your search

+3 -3
View File
@@ -13,6 +13,8 @@ setup(name=PACKAGE,
author='B2CK',
author_email='info@b2ck.com',
url=WEBSITE,
download_url="http://downloads.tryton.org/" + \
VERSION.rsplit('.', 1)[0] + '/',
packages=find_packages(exclude=['*.modules.*', 'modules.*', 'modules']),
package_data={
'trytond': ['init.sql'],
@@ -23,9 +25,6 @@ setup(name=PACKAGE,
'trytond.webdav': ['*.xml', '*.csv'],
'trytond.workflow': ['*.xml', '*.csv'],
},
data_files=[
('/etc', ['etc/trytond.conf']),
],
scripts=['bin/trytond'],
classifiers=[
'Development Status :: 5 - Production/Stable',
@@ -54,4 +53,5 @@ setup(name=PACKAGE,
'graphviz': ['pydot'],
'timezone': ['pytz'],
},
zip_safe = False,
)
+4
View File
@@ -73,6 +73,8 @@ class ConfigManager(object):
configdir = os.path.abspath(os.path.normpath(os.path.join(
os.path.dirname(__file__), '..')))
self.configfile = os.path.join(configdir, 'etc', 'trytond.conf')
if not os.path.isfile(self.configfile):
self.configfile = None
self.load()
# Verify that we want to log or not, if not the output will go to stdout
@@ -113,6 +115,8 @@ class ConfigManager(object):
def load(self):
parser = ConfigParser.ConfigParser()
if not self.configfile:
return
try:
parser.read([self.configfile])
for (name, value) in parser.items('options'):
+28 -33
View File
@@ -175,11 +175,9 @@ class Module(OSV):
"Return the content of the __tryton__.py"
try:
if name in ['ir', 'workflow', 'res', 'webdav']:
file_p = tools.file_open(os.path.join(
os.path.dirname(MODULES_PATH), name, '__tryton__.py'))
file_p = tools.file_open(os.path.join(name, '__tryton__.py'))
else:
file_p = tools.file_open(os.path.join(MODULES_PATH, name,
'__tryton__.py'))
file_p = tools.file_open(os.path.join(name, '__tryton__.py'))
data = file_p.read()
info = eval(data)
file_p.close()
@@ -336,9 +334,7 @@ class Module(OSV):
lang_codes = [x.code for x in lang_obj.browse(cursor, user, lang_ids,
context=context)]
module_names = ['ir', 'workflow', 'res', 'webdav']
if os.path.isdir(MODULES_PATH):
module_names += os.listdir(MODULES_PATH)
module_names = get_module_list()
module_ids = self.search(cursor, user, [], context=context)
modules = self.browse(cursor, user, module_ids, context=context)
@@ -396,37 +392,36 @@ class Module(OSV):
self._update_dependencies(cursor, user, mod,
tryton.get('depends', []), context=context)
continue
if name in ['ir', 'workflow', 'res', 'webdav']:
mod_path = os.path.join(
os.path.dirname(MODULES_PATH), name)
else:
mod_path = os.path.join(MODULES_PATH, name)
if os.path.isdir(mod_path) \
or os.path.islink(mod_path) \
or zipfile.is_zipfile(mod_path):
tryton = Module.get_module_info(mod_name)
if not tryton:
continue
new_id = self.create(cursor, user, {
'name': mod_name,
'state': 'uninstalled',
'description': tryton.get('description', ''),
'shortdesc': tryton.get('name', ''),
'author': tryton.get('author', 'Unknown'),
'website': tryton.get('website', ''),
}, context=context)
for code in lang_codes:
ctx = context.copy()
ctx['language'] = code
self.write(cursor, user, new_id, {
'description': tryton.get('description_' + code, ''),
'shortdesc': tryton.get('name_' + code, ''),
}, context=ctx)
res += 1
name2module[mod_name] = self.browse(cursor, user, new_id,
context=context)
self._update_dependencies(cursor, user, name2module[mod_name],
tryton.get('depends', []), context=context)
tryton = Module.get_module_info(mod_name)
if not tryton:
continue
new_id = self.create(cursor, user, {
'name': mod_name,
'state': 'uninstalled',
'description': tryton.get('description', ''),
'shortdesc': tryton.get('name', ''),
'author': tryton.get('author', 'Unknown'),
'website': tryton.get('website', ''),
}, context=context)
for code in lang_codes:
ctx = context.copy()
ctx['language'] = code
self.write(cursor, user, new_id, {
'description': tryton.get('description_' + code, ''),
'shortdesc': tryton.get('name_' + code, ''),
}, context=ctx)
res += 1
name2module[mod_name] = self.browse(cursor, user, new_id,
context=context)
self._update_dependencies(cursor, user, name2module[mod_name],
tryton.get('depends', []), context=context)
return res
def _update_dependencies(self, cursor, user, module, depends=None,
+51 -24
View File
@@ -16,6 +16,15 @@ sys.path.insert(1, MODULES_PATH)
MODULES = []
EGG_MODULES = {}
try:
import pkg_resources
for ep in pkg_resources.iter_entry_points('trytond.modules'):
mod_name = ep.module_name.split('.')[-1]
EGG_MODULES[mod_name] = ep
except ImportError:
pass
class Graph(dict):
@@ -126,9 +135,14 @@ def create_graph(module_list, force=None):
root_path = os.path.dirname(os.path.dirname(__file__))
tryton_file = OPJ(root_path, module, '__tryton__.py')
mod_path = OPJ(root_path, module)
elif module in EGG_MODULES:
ep = EGG_MODULES[module]
tryton_file = OPJ(ep.dist.location, 'trytond', 'modules', module,
'__tryton__.py')
mod_path = OPJ(ep.dist.location, 'trytond', 'modules', module)
if os.path.isfile(tryton_file) or zipfile.is_zipfile(mod_path+'.zip'):
try:
info = eval(tools.file_open(tryton_file).read())
info = eval(tools.file_open(tryton_file, subdir='').read())
except:
logging.getLogger('init').error(
'module:%s:eval file %s' % (module, tryton_file))
@@ -272,6 +286,9 @@ def get_module_list():
module_list.append(file)
elif file[-4:] == '.zip':
module_list.append(file)
for ep in pkg_resources.iter_entry_points('trytond.modules'):
mod_name = ep.module_name.split('.')[-1]
module_list.append(mod_name)
module_list.append('ir')
module_list.append('workflow')
module_list.append('res')
@@ -283,6 +300,7 @@ def register_classes():
import trytond.workflow
import trytond.res
import trytond.webdav
for package in create_graph(get_module_list())[0]:
module = package.name
logging.getLogger('init').info(
@@ -292,29 +310,8 @@ def register_classes():
MODULES.append(module)
continue
if not os.path.isfile(OPJ(MODULES_PATH, module+'.zip')):
try:
imp.load_module(module, *imp.find_module(module,
[MODULES_PATH]))
except ImportError:
tb_s = ''
for line in traceback.format_exception(*sys.exc_info()):
try:
line = line.encode('utf-8', 'ignore')
except:
continue
tb_s += line
for path in sys.path:
tb_s = tb_s.replace(path, '')
if CONFIG['debug_mode']:
import pdb
traceb = sys.exc_info()[2]
pdb.post_mortem(traceb)
logging.getLogger('init').error(
'Couldn\'t import module %s:\n%s' % (module, tb_s))
break
else:
mod_path = OPJ(MODULES_PATH, module+'.zip')
if os.path.isfile(OPJ(MODULES_PATH, module + '.zip')):
mod_path = OPJ(MODULES_PATH, module + '.zip')
try:
zimp = zipimport.zipimporter(mod_path)
zimp.load_module(module)
@@ -335,6 +332,36 @@ def register_classes():
logging.getLogger('init').error(
'Couldn\'t import module %s:\n%s' % (module, tb_s))
break
elif os.path.isdir(OPJ(MODULES_PATH, module)):
try:
imp.load_module(module, *imp.find_module(module,
[MODULES_PATH]))
except ImportError:
tb_s = ''
for line in traceback.format_exception(*sys.exc_info()):
try:
line = line.encode('utf-8', 'ignore')
except:
continue
tb_s += line
for path in sys.path:
tb_s = tb_s.replace(path, '')
if CONFIG['debug_mode']:
import pdb
traceb = sys.exc_info()[2]
pdb.post_mortem(traceb)
logging.getLogger('init').error(
'Couldn\'t import module %s:\n%s' % (module, tb_s))
break
elif module in EGG_MODULES:
ep = EGG_MODULES[module]
mod_path = os.path.join(ep.dist.location,
*ep.module_name.split('.')[:-1])
imp.load_module(module, *imp.find_module(module, [mod_path]))
else:
logging.getLogger('init').error(
'Couldn\'t find module %s' % module)
break
MODULES.append(module)
def load_modules(database, pool, pool_wizard, pool_report, update_module=False,
+3 -1
View File
@@ -62,7 +62,9 @@ class TrytonServer(object):
self.logger = logging.getLogger("init")
self.logger.info('using %s as configuration file' % CONFIG.configfile)
if CONFIG.configfile:
self.logger.info('using %s as configuration file' % \
CONFIG.configfile)
self.logger.info('initialising distributed objects services')
self.dispatcher = netsvc.Dispatcher()
+12 -1
View File
@@ -64,7 +64,18 @@ def exec_command_pipe(name, *args):
def file_open(name, mode="r", subdir='modules'):
"""Open a file from the root dir, using a subdir folder."""
from trytond.modules import EGG_MODULES
root_path = os.path.dirname(os.path.dirname(__file__))
name3 = False
if subdir == 'modules':
module_name = name.split(os.sep)[0]
if module_name in EGG_MODULES:
ep = EGG_MODULES[module_name]
mod_path = os.path.join(ep.dist.location,
*ep.module_name.split('.')[:-1])
name3 = os.path.join(mod_path, name)
if subdir:
if subdir == 'modules'\
and (name.startswith('ir' + os.sep) \
@@ -97,7 +108,7 @@ def file_open(name, mode="r", subdir='modules'):
os.sep, '/')))
except:
name2 = os.path.normpath(os.path.join(head + '.zip', zipname))
for i in (name2, name):
for i in (name2, name, name3):
if i and os.path.isfile(i):
return file(i, mode)