[MERGE] Sync with server/trunk.

bzr revid: tde@openerp.com-20121107083807-12i51iax0imkhjf1
This commit is contained in:
Thibault Delavallée 2012-11-07 09:38:07 +01:00
commit ee6e9894a4
10 changed files with 175 additions and 35 deletions

26
README
View File

@ -6,17 +6,9 @@ Customer Relationship Management software. More info at:
http://www.openerp.com
Installation on Debian Ubuntu
Installation on Debian/Ubuntu
-----------------------------
Download the deb file and type:
$ sudo dpkg -i <openerp-deb-filename>
$ sudo apt-get install install -f
Installation on Debian Ubuntu from nightly build
------------------------------------------------
Add the the apt repository
deb http://nightly.openerp.com/6.1/deb/ ./
@ -26,6 +18,11 @@ in your source.list and type:
$ sudo apt-get update
$ sudo apt-get install openerp
Or download the deb file and type:
$ sudo dpkg -i <openerp-deb-filename>
$ sudo apt-get install install -f
Installation on RedHat, Fedora, CentOS
--------------------------------------
@ -42,6 +39,8 @@ Install the openerp rpm
Installation on Windows
-----------------------
Check the notes in setup.py
Installation on MacOSX
-----------------------
@ -54,14 +53,7 @@ default master password is "admin".
Detailed System Requirements
----------------------------
You need the following software installed:
postgresql-client, python-dateutil, python-feedparser, python-gdata,
python-ldap, python-libxslt1, python-lxml, python-mako, python-openid,
python-psycopg2, python-pybabel, python-pychart, python-pydot,
python-pyparsing, python-reportlab, python-simplejson, python-tz,
python-vatnumber, python-vobject, python-webdav, python-werkzeug, python-xlwt,
python-yaml, python-zsi
The dependencies are listed in setup.py
For Luxembourg localization, you also need:

View File

@ -24,6 +24,7 @@ import logging
import openerp.modules
from openerp.osv import fields, osv
from tools.translate import _
_logger = logging.getLogger(__name__)
@ -336,6 +337,8 @@ class ir_translation(osv.osv):
trans_model = self.pool.get(model)
domain = ['&', ('res_id', '=', id), ('name', '=like', model + ',%')]
langs_ids = self.pool.get('res.lang').search(cr, uid, [('code', '!=', 'en_US')], context=context)
if not langs_ids:
raise osv.except_osv(_('Error'), _("Translation features are unavailable until you install an extra OpenERP translation."))
langs = [lg.code for lg in self.pool.get('res.lang').browse(cr, uid, langs_ids, context=context)]
main_lang = 'en_US'
translatable_fields = []

View File

@ -264,10 +264,15 @@ class res_partner(osv.osv, format_address):
return False
def _get_default_image(self, cr, uid, is_company, context=None, colorize=False):
if is_company:
image = open(openerp.modules.get_module_resource('base', 'static/src/img', 'company_image.png')).read()
else:
image = tools.image_colorize(open(openerp.modules.get_module_resource('base', 'static/src/img', 'avatar.png')).read())
img_path = openerp.modules.get_module_resource('base', 'static/src/img',
('company_image.png' if is_company else 'avatar.png'))
with open(img_path, 'rb') as f:
image = f.read()
# colorize user avatars
if not is_company:
image = tools.image_colorize(image)
return tools.image_resize_image_big(image.encode('base64'))
def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):

View File

@ -38,7 +38,6 @@ import openerp.osv as osv
import openerp.pooler as pooler
import openerp.release as release
import openerp.tools as tools
import openerp.tools.assertion_report as assertion_report
from openerp import SUPERUSER_ID
from openerp import SUPERUSER_ID
@ -285,7 +284,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
# processed_modules: for cleanup step after install
# loaded_modules: to avoid double loading
report = assertion_report.assertion_report()
report = pool._assertion_report
loaded_modules, processed_modules = load_module_graph(cr, graph, status, perform_checks=(not update_module), report=report)
if tools.config['load_language']:

View File

@ -32,6 +32,7 @@ import openerp.cron
import openerp.tools
import openerp.modules.db
import openerp.tools.config
from openerp.tools import assertion_report
_logger = logging.getLogger(__name__)
@ -49,6 +50,7 @@ class Registry(object):
self._store_function = {}
self._init = True
self._init_parent = {}
self._assertion_report = assertion_report.assertion_report()
# modules fully loaded (maintained during init phase by `loading` module)
self._init_modules = set()

View File

@ -3861,10 +3861,12 @@ class BaseModel(object):
getattr(wf_service, trigger)(uid, self._name, res_id, cr)
def _workflow_signal(self, cr, uid, ids, signal, context=None):
"""Send given workflow signal"""
"""Send given workflow signal and return a dict mapping ids to workflow results"""
wf_service = netsvc.LocalService("workflow")
result = {}
for res_id in ids:
wf_service.trg_validate(uid, self._name, res_id, signal, cr)
result[res_id] = wf_service.trg_validate(uid, self._name, res_id, signal, cr)
return result
def unlink(self, cr, uid, ids, context=None):
"""

View File

@ -189,7 +189,8 @@ class object_proxy(object):
object = pooler.get_pool(cr.dbname).get(obj)
if not object:
raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
return object._workflow_signal(cr, uid, [args[0]], signal)
res_id = args[0]
return object._workflow_signal(cr, uid, [res_id], signal)[res_id]
@check
def exec_workflow(self, db, uid, obj, signal, *args):

View File

@ -34,7 +34,6 @@ import openerp.netsvc
import openerp.osv
import openerp.tools
import openerp.service.wsgi_server
import openerp.service.workers
#.apidoc title: RPC Services
@ -119,6 +118,7 @@ def stop_services():
openerp.modules.registry.RegistryManager.delete_all()
def start_services_workers():
import openerp.service.workers
openerp.multi_process = True # Nah!
openerp.service.workers.Multicorn(openerp.service.wsgi_server.application).run()

View File

@ -3,20 +3,17 @@
# TODO rename class: Multicorn -> Arbiter ?
#-----------------------------------------------------------
import errno
try:
import fcntl
except ImportError:
fcntl = None
import fcntl
import logging
import os
import psutil
import random
import resource
import select
import socket
import time
import logging
import os
import signal
import socket
import sys
import time
import werkzeug.serving

139
setup.py Executable file
View File

@ -0,0 +1,139 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import glob, os, re, setuptools, sys
from os.path import join, isfile
# List all data files
def data():
files = []
for root, dirnames, filenames in os.walk('openerp'):
for filename in filenames:
if not re.match(r'.*(\.pyc|\.pyo|\~)$',filename):
files.append(os.path.join(root, filename))
d = {}
for v in files:
k=os.path.dirname(v)
if k in d:
d[k].append(v)
else:
d[k]=[v]
r = d.items()
if os.name == 'nt':
r.append(("Microsoft.VC90.CRT", glob.glob('C:\Microsoft.VC90.CRT\*.*')))
import babel
r.append(("localedata",
glob.glob(os.path.join(os.path.dirname(babel.__file__), "localedata" , '*'))))
return r
def gen_manifest():
file_list="\n".join(data())
open('MANIFEST','w').write(file_list)
if os.name == 'nt':
sys.path.append("C:\Microsoft.VC90.CRT")
def py2exe_options():
if os.name == 'nt':
import py2exe
return {
"console" : [ { "script": "openerp-server", "icon_resources": [(1, join("install","openerp-icon.ico"))], }],
'options' : {
"py2exe": {
"skip_archive": 1,
"optimize": 2,
"dist_dir": 'dist',
"packages": [ "DAV", "HTMLParser", "PIL", "asynchat", "asyncore", "commands", "dateutil", "decimal", "email", "encodings", "imaplib", "lxml", "lxml._elementpath", "lxml.builder", "lxml.etree", "lxml.objectify", "mako", "openerp", "poplib", "pychart", "pydot", "pyparsing", "reportlab", "select", "simplejson", "smtplib", "uuid", "vatnumber", "vobject", "xml", "xml.dom", "yaml", ],
"excludes" : ["Tkconstants","Tkinter","tcl"],
}
}
}
else:
return {}
execfile(join(os.path.dirname(__file__), 'openerp', 'release.py'))
# Notes for OpenERP developer on windows:
#
# To setup a windows developer evironement install python2.7 then pip and use
# "pip install <depencey>" for every dependency listed below.
#
# Dependecies that requires DLLs are not installable with pip install, for
# them we added comments with links where you can find the installers.
#
# OpenERP on windows also require the pywin32, the binary can be found at
# http://pywin32.sf.net
#
# Both python2.7 32bits and 64bits are known to work.
setuptools.setup(
name = 'openerp',
version = version,
description = description,
long_description = long_desc,
url = url,
author = author,
author_email = author_email,
classifiers = filter(None, classifiers.split("\n")),
license = license,
scripts = ['openerp-server'],
data_files = data(),
packages = setuptools.find_packages(),
dependency_links = ['http://download.gna.org/pychart/'],
#include_package_data = True,
install_requires = [
'pychart', # not on pypi, use: pip install http://download.gna.org/pychart/PyChart-1.39.tar.gz
'babel',
'docutils',
'feedparser',
'gdata',
'lxml < 3', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
'mako',
'PIL', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
'psutil', # windows binary code.google.com/p/psutil/downloads/list
'psycopg2',
'pydot',
'python-dateutil < 2',
'python-ldap', # optional
'python-openid',
'pytz',
'pywebdav',
'pyyaml',
'reportlab', # windows binary pypi.python.org/pypi/reportlab
'simplejson',
'vatnumber',
'vobject',
'werkzeug',
'xlwt',
'zsi', # optional
],
extras_require = {
'SSL' : ['pyopenssl'],
},
tests_require = ['unittest2'],
**py2exe_options()
)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: