From 7855fad59324f3996b9d5d89721d14ba2892ab37 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 24 Feb 2011 13:18:30 +0100 Subject: [PATCH 1/6] [FIX] setup.py: use the new openerp module. - python setup.py build seems to work (it produces the same result as before). - the install seems not good: code and data are duplicated in both site-packages and dist-packages. (This was already true before.) - The bin/openerp-server is not good yet. bzr revid: vmt@openerp.com-20110224121830-hte18v9zzvel5zb5 --- MANIFEST.in | 23 +++++++++++------------ setup.py | 30 ++++++++++++++---------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index ac545d3d8d4..1c615eb97b0 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,17 +1,16 @@ -include rpminstall_sh.txt +include rpminstall_sh.txt # TODO do we need this file ? include README -include MANIFEST.in +include MANIFEST.in # TODO do we really need this three files ? include setup.nsi include setup.cfg -include bin/import_xml.rng -include bin/server.cert -include bin/server.pkey -include bin/gpl.txt +#include openerp/server.cert +#include openerp/server.pkey +#include openerp/gpl.txt include man/openerp-server.1 include man/openerp_serverrc.5 -recursive-include pixmaps * -recursive-include win32 * -recursive-include doc * -recursive-include bin *xml *xsl *sql *rml *sxw *csv *rng -graft bin/addons -global-exclude *pyc *~ +recursive-include pixmaps *bmp *ico *png +recursive-include win32 *.py *.bat +recursive-include openerp *css *csv *html *png *po *pot +recursive-include openerp *rml *rng *sql *sxw *xml *xsl *yml +graft doc +global-exclude *pyc *~ # Exclude possible garbage from previous graft. diff --git a/setup.py b/setup.py index 00667bcdf96..de2ad54eb70 100755 --- a/setup.py +++ b/setup.py @@ -42,9 +42,7 @@ if os.name == 'nt': import py2exe has_py2exe = True -sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "bin")) - -execfile(join('bin', 'release.py')) +execfile(join('openerp', 'release.py')) if 'bdist_rpm' in sys.argv: version = version.split('-')[0] @@ -85,7 +83,7 @@ if sys.version_info < (2, 6): os.walk = walk_followlinks def find_addons(): - for root, _, names in os.walk(join('bin', 'addons'), followlinks=True): + for root, _, names in os.walk(join('openerp', 'addons'), followlinks=True): if '__openerp__.py' in names or '__terp__.py' in names: yield basename(root), root #look for extra modules @@ -111,9 +109,9 @@ def data_files(): '''Build list of data files to be installed''' files = [] if os.name == 'nt': - os.chdir('bin') + os.chdir('openerp') for (dp, dn, names) in os.walk('addons'): - files.append((dp, map(lambda x: join('bin', dp, x), names))) + files.append((dp, map(lambda x: join('openerp', dp, x), names))) os.chdir('..') #for root, _, names in os.walk(join('bin','addons')): # files.append((root, [join(root, name) for name in names])) @@ -121,7 +119,7 @@ def data_files(): files.append((root, [join(root, name) for name in names])) #for root, _, names in os.walk('pixmaps'): # files.append((root, [join(root, name) for name in names])) - files.append(('.', [join('bin', 'import_xml.rng'),])) + files.append(('.', [join('openerp', 'import_xml.rng'),])) else: man_directory = join('share', 'man') files.append((join(man_directory, 'man1'), ['man/openerp-server.1'])) @@ -134,9 +132,9 @@ def data_files(): files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'), filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*')))) - openerp_site_packages = join(get_python_lib(prefix=''), 'openerp-server') + openerp_site_packages = join(get_python_lib(prefix=''), 'openerp') - files.append((openerp_site_packages, [join('bin', 'import_xml.rng'),])) + files.append((openerp_site_packages, [join('openerp', 'import_xml.rng'),])) if sys.version_info[0:2] == (2,5): files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'), @@ -144,7 +142,7 @@ def data_files(): join('python25-compat','SocketServer.py')])) for addonname, add_path in find_addons(): - addon_path = join(get_python_lib(prefix=''), 'openerp-server','addons', addonname) + addon_path = join(get_python_lib(prefix=''), 'openerp','addons', addonname) for root, dirs, innerfiles in os.walk(add_path): innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles) if innerfiles: @@ -163,16 +161,16 @@ exit 1 f.close() def find_package_dirs(): - package_dirs = {'openerp-server': 'bin'} + package_dirs = {'openerp': 'openerp'} for mod, path in find_addons(): - package_dirs['openerp-server.addons.' + mod] = path + package_dirs['openerp.addons.' + mod] = path return package_dirs class openerp_server_install(install): def run(self): - # create startup script + # create startup script TODO not correct since the openerp lib was made start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\ - % (join(self.install_libbase, "openerp-server"), sys.executable) + % (join(self.install_libbase, "openerp"), sys.executable) # write script f = open('openerp-server', 'w') f.write(start_script) @@ -214,7 +212,7 @@ setup(name = name, }, scripts = ['openerp-server'], packages = [ - '.'.join(['openerp-server'] + package.split('.')[1:]) + '.'.join(['openerp'] + package.split('.')[1:]) for package in find_packages() ], include_package_data = True, @@ -224,7 +222,7 @@ setup(name = name, package_dir = find_package_dirs(), console = [ { - "script": join("bin", "openerp-server.py"), + "script": "openerp-server.py", "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))] } ], From 44b392ef0996b2cb077b02cfec5ff21ead7476af Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 24 Feb 2011 15:26:59 +0100 Subject: [PATCH 2/6] [FIX] setup.py: easy_install seems to work. - the generated bin/openerp-server.py seems to work. - I would like to remove the data_files() call as it seems redundant with MANIFEST.in. - Same for find_package_dirs(). - I have to check first how the build on windows work (as it includes different files than on unix). bzr revid: vmt@openerp.com-20110224142659-r2wbm9f8tkldgwe6 --- setup.py | 46 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 38 deletions(-) diff --git a/setup.py b/setup.py index de2ad54eb70..c9008920fa9 100755 --- a/setup.py +++ b/setup.py @@ -34,7 +34,6 @@ import glob from pprint import pprint as pp from setuptools import setup, find_packages -from setuptools.command.install import install from distutils.sysconfig import get_python_lib has_py2exe = False @@ -152,33 +151,12 @@ def data_files(): return files -f = file('openerp-server','w') -f.write("""#!/bin/sh -echo "Error: the content of this file should have been replaced during " -echo "installation\n" -exit 1 -""") -f.close() - def find_package_dirs(): package_dirs = {'openerp': 'openerp'} for mod, path in find_addons(): package_dirs['openerp.addons.' + mod] = path return package_dirs -class openerp_server_install(install): - def run(self): - # create startup script TODO not correct since the openerp lib was made - start_script = "#!/bin/sh\ncd %s\nexec %s ./openerp-server.py $@\n"\ - % (join(self.install_libbase, "openerp"), sys.executable) - # write script - f = open('openerp-server', 'w') - f.write(start_script) - f.close() - install.run(self) - - - options = { "py2exe": { "compressed": 1, @@ -197,6 +175,10 @@ options = { } } +#import pprint +#def setup(**args): +# pprint.pprint(args) + setup(name = name, version = version, description = description, @@ -207,32 +189,20 @@ setup(name = name, classifiers = filter(None, classifiers.split("\n")), license = license, data_files = data_files(), - cmdclass = { - 'install' : openerp_server_install, - }, - scripts = ['openerp-server'], - packages = [ - '.'.join(['openerp'] + package.split('.')[1:]) - for package in find_packages() - ], + scripts = ['openerp-server.py'], + packages = find_packages(), include_package_data = True, package_data = { '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'], }, package_dir = find_package_dirs(), - console = [ - { - "script": "openerp-server.py", - "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))] - } - ], options = options, install_requires = [ - 'lxml', + 'lxml==2.1.5', # we require the same version as caldav 'mako', 'python-dateutil', 'psycopg2', - 'pychart', + 'pychart', # if not available from pypi, an alternate site is http://home.gna.org/pychart/ 'pydot', 'pytz', 'reportlab', From 175dc967475198d681892fb0c40d42750e09f114 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 4 Mar 2011 17:09:11 +0100 Subject: [PATCH 3/6] [IMP] setup.py: cleaning - Removed unnecessary custom code to search/list files and addons. - Handling of some environment variable and files created specifically by debian/rule. - This case should be handled by simply copying the addons in the server (as is done) for packaging if needed. A setup.py file will probably be created for addons in the future. - The console option has been reintroduced (it is needed for py2exe) but taking care of adding it only on os=nt. - The dependency on pychart as been commented out as we already include its code. - Building (with py2exe) on windows has yet to be tested. bzr revid: vmt@openerp.com-20110304160911-4redpkh8mbn19rid --- doc/Changelog-4.x.moved | 951 ---------------------------------------- setup.README | 27 ++ setup.py | 188 ++------ 3 files changed, 66 insertions(+), 1100 deletions(-) delete mode 100644 doc/Changelog-4.x.moved create mode 100644 setup.README diff --git a/doc/Changelog-4.x.moved b/doc/Changelog-4.x.moved deleted file mode 100644 index d884fe8d391..00000000000 --- a/doc/Changelog-4.x.moved +++ /dev/null @@ -1,951 +0,0 @@ -4.2.1 - Bugfixes - Fix context for source_count function - Create stock move on production for products without BOM lines - Add IBAN fields in bank view - Fix uninitialize variable in import data - Update due date on invoice when payment term change - Fix store on field function that have type many2one or one2one - Request summary must be truncate - Partner event name must be truncate - Remove parent field on partner contact view - Fix icon type on journal period - Remove exception on the size of char field - Fix reference on move line that comes from invoice (Customer != Supplier) - Add function search on sheet_id of timesheet_sheet - Don't return 0 for balance account if there is no fiscal year - Fix set to draft for expense, now really set to draft - Add product and partner in the recursive call of tax compute - Don't compute balance account for inactive account - Fix bad encoding in log message on report_sxw - Fix overdue report for refund lines - Don't start server in non secure mode if secure mode have been set - Fix default value of move line if move_id is not find - Fix _product_partner_ref for cannot concatenate 'str' and 'bool' objects - Add partner_id in the context of SO for browsing the product - Fix multi-tax code on invoice - Fix tax definition for Belgium chart - Remove compute debit/credit on inactive account - Fix the way the tax are rounded for invoice with tax included prices - Fix SO to use the right uom and price to create invoice - Fix on_chnage uos on SO to return the id not the browse record - Add condition on the button "Sending goods>Packing to be invoiced" to show - only customer packings - Fix zero division error when the quantity is zero on an invoice line - Fix duplicate timesheet line that have been invoiced - Fix invoice report for bad removeParentNode tag - Fix priority for product view - Fix tax line computation when encoding account lines manually - Fix refund supplier invoice to have the same journal - New chinese translation - Pass context to action_done on stock move - Add product_uom change on sale order line - Fix demo data for working time UOM - Fix _sheet function in timesheet_sheet when called with a list of non - unique id - Remove commit inside function validate on account move - Use one function to post account move - Fix computation of sale/purchase amount in segmentation module - Use standar uom converion in analytic lines - Add journal_id in context for account move line search in payment module - Fix wrong id used by pricelist based on partner form - Use partner reference from SO/PO for invoice name if there is one - Make analysis analytic module include child accounts - -4.2.0 - Summary: - Add new view graph - REPORT_INTRASTAT: new module - KERNEL: add netrpc (speed improvement) - REPORT_STOCK: add report on stock by stock location and production lots - HR_TIMESHEET_INVOICE: add final invoice - MULTI_COMPANY_ACCOUNT: new module - ADD modules publication tools - KERNEL: add timezone - KERNEL: add concurnecy check - BASE: allow to specify many view_id in act_window - BASE: add ir.rules (acces base on record fields) - KERNEL: add search_count on objects - KERNEL: add assert tools (unit test) - KERNEL: improve workflow speed - KERNEL: move some modules to extra_addons - Bugfixes: - Fix pooler for multi-db - REPORT_ANALYTIC: new reports - BOARD_ACCOUNT: new dashboard for accountants - PURCHASE: allow multiple pickings for the same purchase order - STOCK: When refunding picking: confirm & Assign the newly generated picking - PRODUCT: add average price - STOCK: Fix workflow for stock - TOOLS: Fix export translate for wizard - KERNEL: add id in import_data - BASE: add history rate to currency - ACCOUNT: partner_id is now required for an invoice - HR_TIMESHEET: add exception if employee haven't product - I18N: new fr_CH file - HR_EXPENSE: fix domain - ACCOUNT: Fix invoice with currency and payment term - ACCOUNT: Fix currency - KERNEL: add pidfile - ACCOUNT,PURCHASE,SALE: use partner lang for description - Model Acces: Unlink permission (delete) is now available - KERNEL: Remove set for python2.3 - HR: add id to Attendance menu - PRODUCT: add dimension to packaging - ACCOUNT: new cash_discount on payment term - KERNEL: Add price accuracy - BASE: Function to remove installed modules - REPORT_SALE: fix for sale without line - PURCHASE: remove use of currency - KERNEL: fix set without values - PURCHASE: fix domain pricelist - INVOICE: use date for currency rate - KERNEL: Fix import many2many by id - KERNEL: run the cron - ACCOUNT: bank statment line now have a ref t othe corresponding invoice - ACCOUNT: Add possibilitty to include tax amount in base amount for the computation of the next taxes - ACCOUNT: Add product in tax compute python code - KERNEL: use reportlab 2.0 - BASE: fix import the same lang - ACCOUNT: fix tax code - ACCOUNT: define tax account for invoice and refund - ACCOUNT: add supplier tax to product - ACCOUNT: don't overwrite tax_code on the creation for account line - PURCHASE: use partner code for report order - KERNEL: fix pooler netsvc for multi-db - TOOLS: add ref to function tag - PRODUCT: fix digits on volume and weight, add weight_net - ACCOUNT: split to new module account_cash_discount - ORM : error message on python constraints are now displayed correctly - ACCOUNT: add partner to tax compute context - KERNEL: improve logger - PROJECT: add check_recursion for project - HR_TIMESHEET_INVOICE: improve create invoice - ACCOUNT: add product_id to analytic line create by invoice - KERNEL: fix the inheritance mechanism - KERNEL: Fix use always basename for cvs file - BASE: fix IBAN len to 27 - INVOICE: fix invoice number for analytic - REPORT: add replace tag for custom header - ACCOUNT: add ref to analytic line - BASE: prevent exception in ir_cron - SALE: fix uos for tax_amount - MRP: fix dbname in _procure_confirm - HR_EXPENSE: add domain to analytic_account - KERNEL: use 0 instead of False for fix on _fnct_read - SUBSCRIPTION: add required to model - HR_TIMESHEET: add rounding on report - SALE: Fix cancel invoice and recreate invoice, now cancel also the order lines - STOCK-DELIVERY: add wizard invoice_onshipping from delivery to stock - STOCK: use tax from sale for invoice - BASE: improve copy of res.partner - ACCOUNT: pay only invoice if not in state draft - REPORT: fix rml translation, translate before eval - PRODUCT_EXTENDED: don't use seller price for bom price - ACCOUNT_TAX_INCLUDE: fix right amount in account move generate with tax_include - BASE: improve workflow print - SALE: fix workflow error when create invoice from wizard - MRP: Use company currency for Product Cost Structure - BASE: prevent recursion in company - KERNEL: Fix deleted property and many2one - KERNEL: allow directory for import csv - KERNEL: add store option to fields function - ACCOUNT: use property_account_tax on on_change_product - KERNEL: add right-click for translate label - KERNEL: fix log of backtrace - KERNEL: fix search on xxx2many - BASE: use tool to call popen.pipe2 - KERNEL: fix print workflow on win32 - BASE: fix US states - KERNEL: use python 2.3 format_exception - ACCOUNT: add multi-company into base accounting - KERNEL: check return code for exec_pg_command_pipe - KERNEL: fix search with active args - KERNEL: improve _sql_contsraints, now insert if doesn't exist - KERNEL: remove old inheritor and add _constraints and _sql_constraints to the fields inherited - CRM: bugfix mailgate - PURCHASE: fix the UOM for purchase line and improve update price unit - ACCOUNT: new invoice view - KERNEL,BASE: allow to create zip modules - BASE: add right-to-left - KERNEL: copy now ignore technical values ('create_date', 'create_uid', 'write_date' and 'write_uid') - ACCOUNT_TAX_INCLUDE: Now the module manage correctly the case when the taxes defined on the product differ from the taxes defined on the invoice line - ALL: fix colspan 3 -> 4 - KERNEL: use context for search - ACCOUNT: improve speed of analytic account - ACCOUNT: fix search debit/credit on partner - ACCOUNT: fix refund invoice if no product_id nor uos_id on lines - MRP: fix scheduler location of product to produce and method, date of automatic orderpoint - KERNEL: many2many : fix unlink and link action - MRP: add default product_uom from context and add link from product to bom - PROJECT: improve speed for function fields - ALL: remove bad act_window name - KERNEL: modification for compatibility with postgres 7.4 - KERNEL: fix size for selection field - KERNEL: fix compatibility for python2.5 - KERNEL: add new win32 build script - KERNEL: add test for duplicate report and wizard - ACCOUNT: force round amount fixed in payment term - KERNEL: fix print screen - CRM: Better ergonomy - SERVER: add sum tag on tree view that display sum of the selected lines - KERNEL: allow subfield query on one2many - KERNEL: fix create_date and write_date as there are timestamp now - SERVER: improve language - KERNEL: fix search on fields function of type one2many, many2many - ACCOUNT: fix pay invoice to use period - ACCOUNT: add check recursion in account.tax.code - MRP: fix compute cycle for workcenter - BASE: add constraint uniq module name - BASE: improve update module list - ACCOUNT: add round to last payment term - KERNEL: don't modify the args of the call - KERNEL: don't use mutable as default value in function defintion - KERNEL: fix orm for sql query with reserved words - -16/03/2007 -4.0.3 - Summary: - Improve the migration scripts - Some bugfixes - Print workflow on win32 (with ghostscript) - - Bugfixes: - BASE: Fix "set default value" - HR_TIMESHEET_INVOICE: Improve invoice on timesheet - ACCOUNT: Fix tax amount - KERNEL: correct the delete for property - PURCHASE: fix the journal for invoice created by PO - KERNEL: fix the migration for id removed - Add id to some menuitem - BASE: prevent exception in ir_cron when the DB is dropped - HR: Fix sign-in/sign-out, the user is now allowed to provide a date in - the future - SALE: fix uos for the tax amount - MRP: fix wrong dbname in _procure_confirm - HR_EXPENSE: add domain to analytic_account - ACCOUNT: fix debit_get - SUBSCRIPTION: model is required now - HR_TIMESHEET: add rounding value to report - SALE: Fix cancel and recreate invoice, now cancel also the order lines - STOCK: use the tax define in sale for the invoice - ACCOUNT: add test to pay only if invoice not in state draft - KERNEL: root have access to all records - REPORT: fix rml translation to translate before the eval - ACCOUNT_TAX_INCLUDE: Use the right amount in account mmove generate - with tax_include - BASE: Improve the workflow print - SALE: Fix workflow error when creating invoice from the wizard - PRODUCT_EXTENDED: don't use pricelist to compute standard price - MRP: Use company currency for product cost structure - KERNEL: fix where clause when deleting false items - ACCOUNT: product source account depend on the invoice type now - ACCOUNT: use the property account tax for the on_change_product - ACCOUNT: use the invoice date for the date of analytic line - ACCOUNT: Fix the pay invoice when multi-currency - HR_TIMESHEET_PROJECT: use the right product - STOCK: Fix to assign picking with product consumable and call the - workflow - STOCK: Fix the split lot production - PURCHASE: fix workflow for purchase with manual invoice to not set - invoice and paid - DELIVERY: can use any type of journal for invoice - KERNEL: fix search on xxx2many - ACCOUNT: add id to sequence record - KERNEL: set properly the demo flag for module installed - KERNEL: Fix print workflow on win32 - LETTER: fix print letter - - Migration: - Fix migration for postreSQL 7.4 - Fix the default value of demo in module - Fix migration of account_uos to product_uos - -Wed Jan 17 15:06:07 CET 2007 -4.0.2 - Summary: - Improve the migration - Some bugfixes - Improve tax - - Bugfixes: - Fix tax for invoice, refund, etc - SALE: fix view priority - PURCHASE: wizard may crash on some data - BASE: Fix import the same lang - BASE: start the cron - PURCHASE: fix domain for pricelist - KERNEL: fix object set without values - REPORT_SALE: fix for sale without line - KERNEL: add pidfile - BASE: remove 'set' for python2.3 compliant - Migration: - Migrate hr_timesheet user_id - -Fri Dec 22 12:01:26 CET 2006 -4.0.1 - Summary: - Improve the migration - Some bugfixes - - Bugfixes: - HR_EXPENSE: Fix domain - HR_TIMESHEET: Fix employee without product - TOOLS: Fix export translate - BASE: fix for concurrency of sequence number - MRP: fix report - CRM: fix graph report - KERNEL: fix instance of osv_pool - KERNEL: fix setup.py - - -Mon Dec 4 18:01:55 CET 2006 -4.0.0 - Summary: - Some bugfixes - -Tue Nov 28 14:44:20 CET 2006 -4.0.0-rc1 - Summary: - This is a stable version (RC1) with lots of new features. Main - Improvements were: - Accounting: more functions, new modules, more stable - Much more better ergonomy - Lots of simplification to allows non IT people to use and - configure Tiny ERP: manage database, step by step configuration - menu, auto-installers, better help, ... - - New: - Skill management module - ACCOUNT: - New and simpler bank statement form - New reports: - on Timesheets (analytic accounting) - Theorical revenue based on time spent - Global timesheet report by month - Chart of accounts - Different taxes methods supported - Gross (brut) - Net - Fixed amount - INVOICE: - invoice on shipping (manufacturing industry) - invoice on timesheet (services) - PURCHASE: - different invoicing control method (on order, on shipping, - manual) - Support of prices tax included /excluded in sales orders - New modules: - Sale_journal, stock_journal for bigger industries: - Divide works in different journals - New invoicing method from partner, to so, to picking - Daily, Monthly (grouped by partner or not) - New modules for prices with taxes included / excluded - New chart of accounts supported: - l10n_be/ l10n_chart_be_frnl/ - l10n_chart_id/ l10n_chart_uk/ - l10n_ca-qc/ l10n_chart_br/ - l10n_chart_it/ l10n_chart_us_general/ - l10n_ch/ l10n_chart_ca_en/ - l10n_chart_it_cc2424/ l10n_chart_us_manufacturing/ - l10n_ch_pcpbl_association/ l10n_chart_ca_fr/ - l10n_chart_la/ l10n_chart_us_service/ - l10n_ch_pcpbl_independant/ l10n_chart_ch_german/ - l10n_chart_nl/ l10n_chart_us_ucoa/ - l10n_ch_pcpbl_menage/ l10n_chart_cn/ - l10n_chart_nl_standard/ l10n_chart_us_ucoa_ez/ - l10n_ch_pcpbl_plangen/ l10n_chart_cn_traditional/ - l10n_chart_no/ l10n_chart_ve/ - l10n_ch_pcpbl_plangensimpl/ l10n_chart_co/ - l10n_chart_pa/ l10n_fr/ - l10n_ch_vat_brut/ l10n_chart_cz/ - l10n_chart_pl/ l10n_se/ - l10n_ch_vat_forfait/ l10n_chart_da/ - l10n_chart_sp/ l10n_simple/ - l10n_ch_vat_net/ l10n_chart_de_datev_skr03/ - l10n_chart_sw/ - l10n_chart_at/ l10n_chart_de_skr03/ - l10n_chart_sw_church/ - l10n_chart_au/ l10n_chart_hu/ - l10n_chart_sw_food/ - Step by step configuration menu - Setup wizard on first connection - Select a company profile, auto-install language, demo data, ... - - Imrovements: - KERNEL: Demo data improved - Better import / export system - KERNEL: Multi-database management system - Backup, Restore, Create, Drop from the client - PRODUCT/PRODUCT_EXTD: Eavily change the product form, use the new - object to compute the pricelist - REPORTS: - Better Sale order, purchase order, invocies and customers reports - ACCOUNT: Support of taxes in accounts - management of the VAT taxes for most european countries: - Support of VAT codes in invoices - Better computation of default values in accounting entries - Preferences in partners, override products - Bugfix when closing a fiscal year - Better ergonomy when writting entries - New Module Management System: - Install / Upgrade new modules directly from the client - Install new languages - KERNEL: - Ability to add select=True at the object level for postgresql indexes - Bugfix in search in some inherited objects - Added the ability to call methods from a browse object - KERNEL+BASE: changed the way the migration system works for menuitems: - now you can change a menuitem defined elsewhere. And this will work - whether that menuitem has an id or not (it use the name of the - menuitem to find it) - KERNEL: - Installing a module from the client - Better Windows Auto-Installer - DELIVERY: - Delivery and invoicing on picking list - KERNEL: - Distinction between active (by default) and installable - ACCOUNT/PROJECT: Added support for the type of invoicing - CRM: - eMAil gateway - Management of different departments and sections - Rule system - About 20 new statistics reporting - eCommerce interface: - Better Joomla (virtuemart, OSCommerce) support - Joomla is now fully functionnal - - Bugfixes: - ACCOUNT: tree view on reporting analytic account - KERNEL: Fix the bug that happened when mixing active and child_of - search - KERNEL: Check for the existance of active when computing child_of - PRODUCT: production computation with different UoM - ------------------------------------------------------------------------- - -Fri Oct 6 14:44:05 CEST 2006 -Server 3.4.2 - Improvements: - BASE: changed workflow print system so that it handles inexisting - workflows more gracefully (patch from Geoff Gardiner) - MRP: new view to take into account the orderpoint exceptions - MRP: made menu title more explicit - - Bugfixes: - ACCOUNT: fixed typo in invoice + changed sxw file so that it is in - sync with the rml file - DELIVERY: fixed taxes on delivery line (patch from Brice Vissière) - PROJECT: skip tasks without user in Gantt charts (it crashed the report) - PRODUCT: fixed bug when no active pricelist version was found - PRODUCT_EXTENDED: correct recursive computation of the price - SALE: get product price from price list even when quantity is set after - the product is set - STOCK: fixed partial picking - - Packaging: - Changed migration script so that it works on PostgreSQL 7.4 - ------------------------------------------------------------------------- - -Tue Sep 12 15:10:31 CEST 2006 -Server 3.4.1 - Bugfixes: - ACCOUNT: fixed a bug which prevented to reconcile posted moves. - ------------------------------------------------------------------------- - -Mon Sep 11 16:12:10 CEST 2006 -Server 3.4.0 (changes since 3.3.0) - New modules: - ESALE_JOOMLA: integration with Joomla CMS - HR_TIMESHEET_ICAL: import iCal to automatically complete timesheet - based on outlook meetings - PARTNER_LDAP: adds partner synchronization with an LDAP server - SALE_REBATE: adds rebates to sale orders - - 4 new modules for reporting using postgresql views: - REPORT_CRM: reporting on CRM cases: by month, user, ... - REPORT_PROJECT: reporting on projects: tasks closed by project, user, - month, ... - REPORT_PURCHASE: reporting on purchases - REPORT_SALE: reporting on sales by periods and by product, category of - product, ... - - New features: - KERNEL: Tiny ERP server and client may now communicate through HTTPS. - To launch the server with HTTPS, use the -S or --secure option - Note that if the server runs on HTTPS, the clients MUST connect - with the "secure" option checked. - KERNEL: the server can now run as a service on Windows - Printscreen function (Tree view print) - KERNEL: added a new --stop-after-init option which stops the server - just before it starts listening - KERNEL: added support for a new forcecreate attribute on XML record - fields: it is useful for records are in a data node marked as - "noupdate" but the record still needs to be added if it doesn't - exit yet. The typical use for that is when you add a new record - to a noupdate file/node. - KERNEL: manage SQL constraints with human-readable error message on the - client side, eg: Unique constraints - KERNEL: added a new system to be able to specify the tooltip for each - field in the definition of the field (by using the new help="" - attribute) - ACCOUNT: new report: aged trial balance system - ACCOUNT: added a wizard to pay an invoice from the invoice form - BASE: print on a module to print the reference guide using introspection - HR: added report on attendance errors - PRODUCT: products now support multi-Level variants - - Improvements: - KERNEL: speed improvement in many parts of the system thanks to some - optimizations and a new caching system - KERNEL: New property system which replace the, now deprecated, ir_set - system. This leads to better migration of properties, more - practical use of them (they can be used like normal fields), - they can be translated, they are "multi-company aware", and - you can specify access rights for them on a per field basis. - KERNEL: Under windows, the server looks for its configuration file in - the "etc" sub directory (relative to the installation path). - This was needed so that the server can be run as a windows - service (using the SYSTEM profile). - KERNEL: added ability to import CSV files from the __terp__.py file - KERNEL: force freeing cursor when closing them, so that they are - available again immediately and not when garbage collected. - KERNEL: automatically drop not null/required constraints from removed - fields (ie which are in the database but not in the object) - KERNEL: added a command-line option to specify which smtp server to use - to send emails. - KERNEL: made browse_record hashable - ALL: removed shortcuts for the demo user. - ACCOUNT: better invoice report - ACCOUNT: Modifs for account chart, removed old stock_income account type - ACCOUNT: made the test_paid method on invoices more tolerant to buggy - data (open invoices without move/movelines) - ACCOUNT: better bank statement reconciliation system - ACCOUNT: accounting entries encoding improved a lot (using journal) - ACCOUNT: Adding a date and max Qty field in analytic accounts for - support contract - ACCOUNT: Adding the View type to analytic account / cost account - ACCOUNT: changed test_paid so that the workflow works even if there is - no move line - ACCOUNT: Cleanup credit/debit and balance computation methods. Should - be faster too. - ACCOUNT: use the normal sequence (from the journal) for the name of - moves generated from invoices instead of the longer name. - ACCOUNT: print Payment delay in invoices - ACCOUNT: account chart show subtotals - ACCOUNT: Subtotal in view accounts - ACCOUNT: Replaced some Typo: moves-> entries, Transaction -> entry - ACCOUNT: added quantities in analytic accounts view, and modified - cost ledger report for partners/customers - ACCOUNT: added default value for the currency field in invoices - ACCOUNT: added the comment/notes field on the invoice report - BASE: added menuitem (and action) to access partner functions (in the - definitions menu) - BASE: better demo data - BASE: duplicating a menu item now duplicates its action and submenus - BASE: Bank Details on Partners - CRM: View on all actions made on cases (used by our ISO9002 customer - to manage corrections to actions) - CRM: fixed wizard to create a sale order from a case - CRM: search on non active case, not desactivated by default - CRM: Case ID in fields with search - HR_TIMESHEET: new "sign_in, sign_out" using projects. It fills - timesheets and attendance at the same time. - HR_TIMESHEET: added cost unit to employee demo data - MRP: improvement in the scheduler - MRP: purchase order lines' description generated from a procurement - defaults to the product name instead of procurement name - MRP: Better traceability - MRP: Better view for procurement in exception - MRP: Added production delay in product forms. Use this delay for - average production delay for one product - MRP: dates scheduler, better computation - MRP: added constraint for non 0 BoM lines - PRODUCT: Better pricelist system (on template or variant of product) - PRODUCT_EXTENDED: Compute the price only if there is a supplier - PROJECT: when a task is closed, use the task's customer to warn the - customer if it is set, otherwise use the project contact. - PROJECT: better system to automatically send an email to the customer - when a task is closed or reopened. - PURCHASE: date_planned <= current_time line in red - PURCHASE: better purchase order report - PURCHASE: better purchase order duplication: you can now duplicate non - draft purchase orders and the new one will become draft. - SALE: better sale order report - SALE: better demo data for sale orders - SALE: better view for buttons in sale.order - SALE: select product => description = product name instead of code - SALE: warehouse field in shop is now required - SCRUM: lots of improvements for better useability - STOCK: allows to confirm empty picking lists. - STOCK: speed up stock computation methods - - Bugfixes: - KERNEL: fix a huge bug in the search method for objects involving - "old-style" inheritance (inherits) which prevented some records - to be accessible in some cases. Most notable example was some - products were not accessible in the sale order lines if you had - more products in your database than the limit of your search - (80 by default). - KERNEL: fixed bug which caused OO (sxw) reports to behave badly (crash - on Windows and not print correctly on Linux) when data - contained XML entities (&, <, >) - KERNEL: reports are now fully concurrency compliant - KERNEL: fixed bug which caused menuitems without id to cause havoc on - update. The menuitems themselves were not created (which is - correct) but they created a bad "default" action for all - menuitems without action (such as all "menu folders"). - KERNEL: fix a small security issue: we should check the password of the - user when a user asks for the result of a report (in addition - to the user id and id of that report) - KERNEL: bugfix in view inheritancy - KERNEL: fixed duplicating resource with a state field whose selection - doesn't contain a 'draft' value (for example project tasks). It - now uses the default value of the resource for that field. - KERNEL: fixed updating many2many fields using the (4, id) syntax - KERNEL: load/save the --logfile option correctly in the config file - KERNEL: fixed duplicating a resource with many2many fields - ALL: all properties should be inside a data tag with "noupdate" and - should have a forcecreate attribute. - ACCOUNT: fixed rounding bug in tax computation method - ACCOUNT: bugfix in balance and aged balance reports - ACCOUNT: fixing precision in function fields methods - ACCOUNT: fixed creation of account move lines without using the client - interface - ACCOUNT: fixed duplicating invoices - ACCOUNT: fixed opening an invoices whose description contained non - ASCII chars at specific position - ACCOUNT: small bugfixes in all accounting reports - ACCOUNT: fixed crash when --without-demo due to missing payment.term - ACCOUNT: fixed bug in automatic reconciliation - ACCOUNT: pass the address to the tax computation method so that it is - available in the tax "python applicable code" - BASE: allows to delete a request which has a history (it now deletes the - history as well as the request) - BASE: override copy method for users so that we can duplicate them - BASE: fixed bug when the user search for a partner by hitting on an - empty many2one field (it searched for a partner with ref=='') - BASE: making ir.sequence call thread-safe. - CRM: fixed a bug which introduced an invalid case state when closing a - case (Thanks to Leigh Willard) - HR: added domain to category tree view so that they are not displayed - twice - HR_TIMESHEET: fixed print graph - HR_TIMESHEET: fixed printing timesheet report - HR_TIMESHEET: Remove a timesheet entry removes the analytic line - MRP: bugfix on "force reservation" - MRP: fixed bugs in some reports and MRP scheduler when a partner has - no address - MRP: fix Force production button if no product available - MRP: when computing lots of procurements, the scheduler could raise - locking error at the database level. Fixed. - PRODUCT: added missing context to compute product list price - PRODUCT: fixed field type of qty_available and virtual_available - (integer->float). This prevented these fields to be displayed - in forms. - PROJECT: fixed the view of unassigned task (form and list) instead of - form only. - PURCHASE: fixed merging orders that made inventory errors when coming - from a procurement (orderpoint). - PURCHASE: fix bug which prevented to make a purchase order with - "manual" lines (ie without product) - PURCHASE: fix wizard to group purchase orders in several ways: - - only group orders if they are to the same location - - only group lines if they are the same except for qty and unit - - fix the workflow redirect method so that procurement are not - canceled when we merge orders - SALE: fixed duplicating a confirmed sale order - SALE: fixed making sale orders with "manual" lines (without product) - STOCK: future stock prevision bugfix (for move when date_planned < now) - STOCK: better view for stock.move - STOCK: fixed partial pickings (waiting for a production) - Miscellaneous minor bugfixes - - Packaging: - Fixed bug in setup.py which didn't copy csv files nor some sub- - directories - Added a script to migrate a 3.3.0 server to 3.4.0 (you should read the - README file in doc/migrate/3.3.0-3.4.0) - Removed OsCommerce module - ------------------------------------------------------------------------- - -Fri May 19 10:16:18 CEST 2006 -Server 3.3.0 - New features: - NEW MODULE: hr_timesheet_project - Automatically maps projects and tasks to analytic account - So that hours spent closing tasks are automatically encoded - KERNEL: Added a logfile and a pidfile option (patch from Dan Horak) - STOCK: Added support for revisions of tracking numbers - STOCK: Added support for revision of production lots - STOCK: Added a "splitting and tracking lines" wizard - PRODUCT_EXTENDED: Added a method to compute the cost of a product - automatically from the cost of its parts - - Improvements: - ALL: Small improvements in wizards (order of buttons) - PRODUCT: Remove packaging info from supplierinfo - PROJECT: Better task view (moved unused fields to other tab) - SALE: Keep formating for sale order lines' notes in the sale order report - - Bugfixes: - KERNEL: Fixed bug which caused field names with non ascii chars didn't work - in list mode on Windows - KERNEL: Fix concurrency issue with UpdatableStr with the use of - threading.local - KERNEL: Removed browse_record __unicode__ method... It made the sale order - report crash when using product names with non ASCII characters - KERNEL: Fixed bug which caused the translation export to fail when the server - was not launched from the directory its source is. - BASE: Updating a menuitem now takes care its parent menus - BASE: Fixed a cursor locking issue with updates - BASE: Fixed viewing sequence types as a tree/list - HR: Month field needs to be required in the "hours spent" report - PURCHASE: fixed group purchase order wizard: - - if there were orders from several different suppliers, it created a purchase - order for only the first supplier but canceled other orders, even those which - weren't merged in the created order (closes bugzilla #236) - - doesn't trash "manual" lines (ie lines with no product) - - pay attentions to unit factors when adding several lines together - MRP: fixed workcenter load report (prints only the selected workcenters) and - does't crash if the user didn't select all workcenters - - Miscellaneous: - Removed pydot from required dependencies - ------------------------------------------------------------------------- - -Server 3.3.0-rc1 -================ - -Changelog for Users -------------------- - -New module: OS Commerce - Integration with Tiny ERP and OS Commerce - Synchronisation 100% automated with eSale; - Import of categories of products - Export of products (with photos support) - Import of Orders (with the eslae module) - Export of stock level - Import of OSCommerce Taxes - Multiple shop allowed with different rules/products - Simple Installation - -New Module: HR_TIMESHEET - Management by affair, timesheets creates analytic entries in the - accounting to get costs and revenue of each affairs. Affairs are - structured in trees. - -New Module: Account Follow Up - Multi-Level and configurable Follows ups for the accounting module - -New module; Productivity Analysis of users - A module to compare productivity of users of Tiny ERP - Generic module, you can compare everything (sales, products, partners, - ...) - -New Modules for localisations: - Accounting localisations for be, ca, fr, de, ch, sw - Fix: corrected encoding (latin1 to utf8) of Swedish account tree XML file - -New Module - Sandwich - Allows employees to order the lunch - Keeps employees preferences - -New Module TOOLS: - Email automatic importation/integration in the ERP - -New Module EDI: - Import of EDI sale orders - Export of shippings - -Multi-Company: - Tiny ERP is now fully multi-company ! - New Company and configuration can be made in the client side. - -ACCOUNTING: - Better Entries > Standard Entries (Editable Tree, like in Excel) - Automatic creation of lines - Journal centralised or not - Counterpart of lines in one line or one counterpart per entry - Analytic accounting recoded from scratch - 5 new reports - Completly integrated with: - production, - hr_timesheet > Management by affairs - sales & purchases, - Tasks. - Added unreconciliation functionnalities - Added account tree fast rendering - Better tax computation system supporting worldwide specific countries - Better subscription system - Wizard to close a period - Wizard to clase a fiscal year - Very powerfull, simple and complete multi-currency system - in pricelists, sale order, purchases, ... - Added required fields in currencies (currency code) - Added decimal support - Better search on accounts (on code, shortcut or name) - Added constraint; - on users - on group - on accounts in a journal - added menuitem for automatic reconciliation; Multi-Levels - added factor to analytic units - added form view for budget items dotations - made number of digits in quantity field of the budget spread wizard coherent with the object field - fixed journal on purchase invoices/refunds (SugarCRM #6) - Better bank statement reconciliation - Fixed some reports - -STOCK: - Better view for location (using localisation of locations; posx, posy, posz) - -MARKETING: - fixed small bug when a partner has no adress - state field of marketing partner set as readonly - fixed marketing steps form view - better history view - disabled completely send sms wizard - fixed send email wizard - good priority -> high priority - fixed 'call again later' button - -NETWORK: - added tree view for login/password - -HR: - added holiday_status (=type of ...) to expense claim form view - -BASE (partner): - fixed email_send and _email_send methods - removed partner without addresses from demo data - Added a date field in the partner form - -MRP: - New report: workcenter futur loads - Analytic entries when production done. - SCHEDULER: better error msg in the generated request - Allows services in BoMs (for eg, subcontracting) - -Project/Service Management: - create orders from tasks; bugfixes - Completly integrated with the rest of the ERP - Services can now be MTO/MTS, Buy (subcontracting), produce (task), ... - Services can be used anywhere (sale.order, bom, ...) - See this graph; - http://tiny.be/download/flux/flux_procurement.png - tasks sorted by ... AND id, so that the order is not random - within a priority - -Automatic translations of all wizards - -Scrum Project Management - Better Ergonomy; click on a sprint to view tasks - Planned, Effetive hours and progress in backlog, project and sprint - Better Burndown Chart computation - Better (simpler) view of tasks - -Better demo Data - In All modules, eth converted to english - -PRODUCT: - computing the weight of the packaging - Added last order date - Alternative suppliers (with delay, prefs, ...) for one product - -PRICELISTS: - much more powerfull system - views simplified - one pricelist per usage: sale, order, pvc - price_type on product_view - Multi-Currency pricelist (EUR pricelist can depend on a $ one) - -HR-TIMESHEET: fixed bugs in hours report: - sum all lines for the same day instead of displaying only the first one - it now uses the analytic unit factor, so that mixing hours and days has some sense - close cursor - -SALE: - invoices generated from a sale order are pre-computed (taxes are computed) - - new invoicing functionnality; - invoice on order quantities or, - invoice on shipped quantities - - Invoice on a sale.order or a sale.order.line - - added default value for uos_qty in sale order lines (default to 1) - - -Changelog for Developers ------------------------- - -New option --debug, that opens a python interpreter when an exception -occurs on the server side. - -Better wizard system. Arguements self, cr, uid, context are passed in all -functions of the wizard like normal objects. All wizards converted. - -Speed improvements in many views; partners, sale.order, ... - less requests from client to server when opening a form - -Better translation system, wizard terms are exported. - -Script to render module dependency graph - -KERNEL+ALL: pass context to methods computing a selection. - -Modification for actions and view definitions: - Actions Window: - New field: view_mode = 'tree,form' or 'form,tree' -> default='form,tree' - New role of view_type: tree (with shortcuts), form (others with switch button) - If you need a form that opens in list mode: - view_mode = 'tree,form' or 'tree' - view_type = form - You can define a view in a view (for example sale.order.line in - sale.order) - less requests on the client side, no need to define 2 views - -Better command-line option message - -Fixed bug which prevented to search for names using non ASCII -chars in many2one or many2many fields - -Report Engine: bugfix for concurrency - -Support of SQL constraints - Uniq, check, ... - Good error message in the client side (check an account entry with - credit and debit >0) - -Fixed: when an exception was raised, the cursor wasn't closed and this -could cause a freeze in some cases - -Sequence can contains code: %(year)s, ... for prefix, suffix - EX: ORDER %(year)/0005 - -Bugfixes for automatic migration system - -bugfix on default value with creation of inherits - -Improvement in report_sxw; you can redefine preprocess to do some -preprocessing before printing - -Barcode support enabled by default - -Fixed OpenOffice reports when the server is not launched from the -directory the code reside - -Print workflow use a pipe instead of using a temporary file (now workflows -works on Windows Servers) - -Inheritancy improved (multiple arguments: replace, inside, after, before) - -Lots of small bugfixes - diff --git a/setup.README b/setup.README new file mode 100644 index 00000000000..4432e5bd1a6 --- /dev/null +++ b/setup.README @@ -0,0 +1,27 @@ +Some instructions to use setup.py for a user-install. +This file should/will be moved on a proper documentation place later. + +- Possibly clean any left-over of the previous build. + > rm -rf dist openerp_server.egg-info + +- Possibly copy the addons in the server if we want them to be packaged + together: + > rsync -av --delete \ + --exclude .bzr/ \ + --exclude .bzrignore \ + --exclude /__init__.py \ + --exclude /base \ + --exclude /base_quality_interrogation.py \ + openerp/addons + +- Create the user-local directory where we want the package to be installed: + > mkdir -p /home/openerp/openerp-tmp/lib/python2.6/site-packages/ + +- Use --prefix to specify where the package is installed and include that + place in PYTHONPATH: + > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ + python setup.py install --prefix=/home/openerp/openerp-tmp + +- Run the main script, again specifying the PYTHONPATH: + > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ + bin/openerp-server.py diff --git a/setup.py b/setup.py index c9008920fa9..70c4893fac8 100755 --- a/setup.py +++ b/setup.py @@ -25,160 +25,44 @@ # taken from gnomolicious http://www.nongnu.org/gnomolicious/ # adapted by Nicolas Évrard # +# doc/migrate is not included since about 6.1-dev +# doc/tests is not included +# python25-compat/*py should be in the openerp (and imported appropriately) import sys import os -from os.path import join, isfile, basename +from os.path import join, isfile import glob -from pprint import pprint as pp - from setuptools import setup, find_packages -from distutils.sysconfig import get_python_lib -has_py2exe = False +py2exe_keywords = {} if os.name == 'nt': import py2exe - has_py2exe = True + py2exe_keywords['console'] = [ + { "script": join("bin", "openerp-server.py"), + "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))], + }] + py2exe_keywords['options'] = { + "py2exe": { + "compressed": 1, + "optimize": 2, + "dist_dir": 'dist', + "packages": [ + "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree", + "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath", + "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing", + "pydot", "asyncore","asynchat", "reportlab", "vobject", + "HTMLParser", "select", "mako", "poplib", + "imaplib", "smtplib", "email", "yaml", "DAV", + "uuid", + ], + "excludes" : ["Tkconstants","Tkinter","tcl"], + } + } execfile(join('openerp', 'release.py')) -if 'bdist_rpm' in sys.argv: - version = version.split('-')[0] - -# get python short version -py_short_version = '%s.%s' % sys.version_info[:2] - -# backports os.walk with followlinks from python 2.6 -def walk_followlinks(top, topdown=True, onerror=None, followlinks=False): - from os.path import join, isdir, islink - from os import listdir, error - - try: - names = listdir(top) - except error, err: - if onerror is not None: - onerror(err) - return - - dirs, nondirs = [], [] - for name in names: - if isdir(join(top, name)): - dirs.append(name) - else: - nondirs.append(name) - - if topdown: - yield top, dirs, nondirs - for name in dirs: - path = join(top, name) - if followlinks or not islink(path): - for x in walk_followlinks(path, topdown, onerror, followlinks): - yield x - if not topdown: - yield top, dirs, nondirs - -if sys.version_info < (2, 6): - os.walk = walk_followlinks - -def find_addons(): - for root, _, names in os.walk(join('openerp', 'addons'), followlinks=True): - if '__openerp__.py' in names or '__terp__.py' in names: - yield basename(root), root - #look for extra modules - try: - empath = os.getenv('EXTRA_MODULES_PATH', '../addons/') - for mname in open(join(empath, 'server_modules.list')): - mname = mname.strip() - if not mname: - continue - - terp = join(empath, mname, '__openerp__.py') - if not os.path.exists(terp): - terp = join(empath, mname, '__terp__.py') - - if os.path.exists(terp): - yield mname, join(empath, mname) - else: - print "Module %s specified, but no valid path." % mname - except Exception: - pass - -def data_files(): - '''Build list of data files to be installed''' - files = [] - if os.name == 'nt': - os.chdir('openerp') - for (dp, dn, names) in os.walk('addons'): - files.append((dp, map(lambda x: join('openerp', dp, x), names))) - os.chdir('..') - #for root, _, names in os.walk(join('bin','addons')): - # files.append((root, [join(root, name) for name in names])) - for root, _, names in os.walk('doc'): - files.append((root, [join(root, name) for name in names])) - #for root, _, names in os.walk('pixmaps'): - # files.append((root, [join(root, name) for name in names])) - files.append(('.', [join('openerp', 'import_xml.rng'),])) - else: - man_directory = join('share', 'man') - files.append((join(man_directory, 'man1'), ['man/openerp-server.1'])) - files.append((join(man_directory, 'man5'), ['man/openerp_serverrc.5'])) - - doc_directory = join('share', 'doc', 'openerp-server-%s' % version) - files.append((doc_directory, filter(isfile, glob.glob('doc/*')))) - files.append((join(doc_directory, 'migrate', '3.3.0-3.4.0'), - filter(isfile, glob.glob('doc/migrate/3.3.0-3.4.0/*')))) - files.append((join(doc_directory, 'migrate', '3.4.0-4.0.0'), - filter(isfile, glob.glob('doc/migrate/3.4.0-4.0.0/*')))) - - openerp_site_packages = join(get_python_lib(prefix=''), 'openerp') - - files.append((openerp_site_packages, [join('openerp', 'import_xml.rng'),])) - - if sys.version_info[0:2] == (2,5): - files.append((openerp_site_packages, [ join('python25-compat','BaseHTTPServer.py'), - join('python25-compat','SimpleXMLRPCServer.py'), - join('python25-compat','SocketServer.py')])) - - for addonname, add_path in find_addons(): - addon_path = join(get_python_lib(prefix=''), 'openerp','addons', addonname) - for root, dirs, innerfiles in os.walk(add_path): - innerfiles = filter(lambda fil: os.path.splitext(fil)[1] not in ('.pyc', '.pyd', '.pyo'), innerfiles) - if innerfiles: - res = os.path.normpath(join(addon_path, root.replace(join(add_path), '.'))) - files.extend(((res, map(lambda fil: join(root, fil), - innerfiles)),)) - - return files - -def find_package_dirs(): - package_dirs = {'openerp': 'openerp'} - for mod, path in find_addons(): - package_dirs['openerp.addons.' + mod] = path - return package_dirs - -options = { - "py2exe": { - "compressed": 1, - "optimize": 2, - "dist_dir": 'dist', - "packages": [ - "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree", - "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath", - "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing", - "pydot", "asyncore","asynchat", "reportlab", "vobject", - "HTMLParser", "select", "mako", "poplib", - "imaplib", "smtplib", "email", "yaml", "DAV", - "uuid", - ], - "excludes" : ["Tkconstants","Tkinter","tcl"], - } -} - -#import pprint -#def setup(**args): -# pprint.pprint(args) - setup(name = name, version = version, description = description, @@ -188,21 +72,26 @@ setup(name = name, author_email = author_email, classifiers = filter(None, classifiers.split("\n")), license = license, - data_files = data_files(), + data_files = [ + (join('man', 'man1'), ['man/openerp-server.1']), + (join('man', 'man5'), ['man/openerp_serverrc.5']), + ('doc', filter(isfile, glob.glob('doc/*'))), + ], scripts = ['openerp-server.py'], packages = find_packages(), include_package_data = True, package_data = { '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'], }, - package_dir = find_package_dirs(), - options = options, install_requires = [ - 'lxml==2.1.5', # we require the same version as caldav + # We require the same version as caldav for lxml. + 'lxml==2.1.5', 'mako', 'python-dateutil', 'psycopg2', - 'pychart', # if not available from pypi, an alternate site is http://home.gna.org/pychart/ + # We include pychart in our tree as it is difficult to get it via pypi. + # An alternate site is http://home.gna.org/pychart/. + # 'pychart', 'pydot', 'pytz', 'reportlab', @@ -211,8 +100,9 @@ setup(name = name, 'pywebdav', 'feedparser', ], - extras_require={ + extras_require = { 'SSL' : ['pyopenssl'], - } + }, + **py2exe_keywords ) From 4db9a2533c2b8466e0ee089b36a0840c646a1e6d Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 9 Mar 2011 11:19:39 +0100 Subject: [PATCH 4/6] [FIX] setup.py: modification so py2exe works. - still needs some testing, sdist should be tested again. bzr revid: vmt@openerp.com-20110309101939-zo19v7gxd1bqryrb --- setup.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 70c4893fac8..d8d872dfde8 100755 --- a/setup.py +++ b/setup.py @@ -36,30 +36,78 @@ import glob from setuptools import setup, find_packages +# Backports os.walk with followlinks from python 2.6. +# Needed to add all addons files to data_files for Windows packaging. +def walk_followlinks(top, topdown=True, onerror=None, followlinks=False): + from os.path import join, isdir, islink + from os import listdir, error + + try: + names = listdir(top) + except error, err: + if onerror is not None: + onerror(err) + return + + dirs, nondirs = [], [] + for name in names: + if isdir(join(top, name)): + dirs.append(name) + else: + nondirs.append(name) + + if topdown: + yield top, dirs, nondirs + for name in dirs: + path = join(top, name) + if followlinks or not islink(path): + for x in walk_followlinks(path, topdown, onerror, followlinks): + yield x + if not topdown: + yield top, dirs, nondirs + +if sys.version_info < (2, 6): + os.walk = walk_followlinks + py2exe_keywords = {} +py2exe_data_files = [] if os.name == 'nt': import py2exe py2exe_keywords['console'] = [ - { "script": join("bin", "openerp-server.py"), + { "script": "openerp-server.py", "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))], }] py2exe_keywords['options'] = { "py2exe": { - "compressed": 1, + "skip_archive": 1, "optimize": 2, "dist_dir": 'dist', "packages": [ "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree", "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath", - "encodings", "dateutil", "wizard", "pychart", "PIL", "pyparsing", + "encodings", "dateutil", "pychart", "PIL", "pyparsing", # Why is wizard listed here? "pydot", "asyncore","asynchat", "reportlab", "vobject", "HTMLParser", "select", "mako", "poplib", "imaplib", "smtplib", "email", "yaml", "DAV", - "uuid", + "uuid", "openerp", ], "excludes" : ["Tkconstants","Tkinter","tcl"], } } + # TODO is it still necessary now that we don't use the library.zip file? + def data_files(): + '''For Windows, we consider all the addons as data files. + It seems also that package_data below isn't honored by py2exe.''' + files = [] + os.chdir('openerp') + for (dp, dn, names) in os.walk('addons'): + files.append((join('openerp',dp), map(lambda x: join('openerp', dp, x), names))) + os.chdir('..') + files.append(('openerp', [join('openerp', 'import_xml.rng'),])) + return files + py2exe_data_files = data_files() + +#sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "openerp")) # Is it just for wizard, or something else? execfile(join('openerp', 'release.py')) @@ -76,7 +124,7 @@ setup(name = name, (join('man', 'man1'), ['man/openerp-server.1']), (join('man', 'man5'), ['man/openerp_serverrc.5']), ('doc', filter(isfile, glob.glob('doc/*'))), - ], + ] + py2exe_data_files, scripts = ['openerp-server.py'], packages = find_packages(), include_package_data = True, From 4c45313a04bb030de0a2a548866d4dcfbbec84bb Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 11 Mar 2011 12:09:05 +0100 Subject: [PATCH 5/6] [FIX] setup.py: py2exe, sdist, and install seem good. - added commands to the list of modules - provide an explicit dependency link for pychart (which will be used by easy_install) bzr revid: vmt@openerp.com-20110311110905-y8s85a24naq5zxdy --- setup.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/setup.py b/setup.py index d8d872dfde8..f90e52da3f3 100755 --- a/setup.py +++ b/setup.py @@ -85,11 +85,11 @@ if os.name == 'nt': "packages": [ "lxml", "lxml.builder", "lxml._elementpath", "lxml.etree", "lxml.objectify", "decimal", "xml", "xml", "xml.dom", "xml.xpath", - "encodings", "dateutil", "pychart", "PIL", "pyparsing", # Why is wizard listed here? + "encodings", "dateutil", "pychart", "PIL", "pyparsing", "pydot", "asyncore","asynchat", "reportlab", "vobject", "HTMLParser", "select", "mako", "poplib", "imaplib", "smtplib", "email", "yaml", "DAV", - "uuid", "openerp", + "uuid", "commands", "openerp", ], "excludes" : ["Tkconstants","Tkinter","tcl"], } @@ -107,8 +107,6 @@ if os.name == 'nt': return files py2exe_data_files = data_files() -#sys.path.append(join(os.path.abspath(os.path.dirname(__file__)), "openerp")) # Is it just for wizard, or something else? - execfile(join('openerp', 'release.py')) setup(name = name, @@ -131,15 +129,19 @@ setup(name = name, package_data = { '': ['*.yml', '*.xml', '*.po', '*.pot', '*.csv'], }, + dependency_links = ['http://download.gna.org/pychart/'], install_requires = [ # We require the same version as caldav for lxml. 'lxml==2.1.5', 'mako', 'python-dateutil', 'psycopg2', - # We include pychart in our tree as it is difficult to get it via pypi. - # An alternate site is http://home.gna.org/pychart/. - # 'pychart', + # TODO the pychart package we include in openerp corresponds to PyChart 1.37. + # It seems there is a single difference, which is a spurious print in generate_docs.py. + # It is probably safe to move to PyChart 1.39 (the latest one). + # (Let setup.py choose the latest one, and we should check we can remove pychart from + # our tree.) + 'pychart', 'pydot', 'pytz', 'reportlab', From 7766fcca6215e7bf27bf436ee484c8beb0d0eaad Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 24 Mar 2011 10:50:12 +0100 Subject: [PATCH 6/6] [REF] renamed openerp-server.py to openerp-server. bzr revid: vmt@openerp.com-20110324095012-a5joofz60zrhbit5 --- bin/openerp-server.py | 2 +- openerp-server.py => openerp-server | 0 openerp/addons/base_quality_interrogation.py | 2 +- openerp/osv/orm.py | 2 +- setup.README | 2 +- setup.py | 4 ++-- 6 files changed, 6 insertions(+), 6 deletions(-) rename openerp-server.py => openerp-server (100%) diff --git a/bin/openerp-server.py b/bin/openerp-server.py index b31dbd1e6a5..c61a22858c0 100755 --- a/bin/openerp-server.py +++ b/bin/openerp-server.py @@ -14,6 +14,6 @@ if __name__ == "__main__": os.chdir(os.path.normpath(os.path.dirname(__file__))) os.chdir('..') # ... and execute the new executable. - os.execv('openerp-server.py', sys.argv) + os.execv('openerp-server', sys.argv) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp-server.py b/openerp-server similarity index 100% rename from openerp-server.py rename to openerp-server diff --git a/openerp/addons/base_quality_interrogation.py b/openerp/addons/base_quality_interrogation.py index fe5bc27811b..ae49996ec95 100755 --- a/openerp/addons/base_quality_interrogation.py +++ b/openerp/addons/base_quality_interrogation.py @@ -49,7 +49,7 @@ def to_decode(s): return s def start_server(root_path, port, netport, addons_path): - os.system('python2.5 %sopenerp-server.py --pidfile=openerp.pid --no-xmlrpcs --xmlrpc-port=%s --netrpc-port=%s --addons-path=%s' %(root_path, str(port),str(netport),addons_path)) + os.system('python2.5 %sopenerp-server --pidfile=openerp.pid --no-xmlrpcs --xmlrpc-port=%s --netrpc-port=%s --addons-path=%s' %(root_path, str(port),str(netport),addons_path)) def clean(): if os.path.isfile('openerp.pid'): ps = open('openerp.pid') diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index c2e5743099b..9ecf547969f 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2690,7 +2690,7 @@ class orm(orm_template): self._table, k) except Exception: msg = "WARNING: unable to set column %s of table %s not null !\n"\ - "Try to re-run: openerp-server.py --update=module\n"\ + "Try to re-run: openerp-server --update=module\n"\ "If it doesn't work, update records and execute manually:\n"\ "ALTER TABLE %s ALTER COLUMN %s SET NOT NULL" self.__logger.warn(msg, k, self._table, self._table, k) diff --git a/setup.README b/setup.README index 4432e5bd1a6..5ee564ecfb4 100644 --- a/setup.README +++ b/setup.README @@ -24,4 +24,4 @@ This file should/will be moved on a proper documentation place later. - Run the main script, again specifying the PYTHONPATH: > PYTHONPATH=/home/openerp/openerp-tmp/lib/python2.6/site-packages/ \ - bin/openerp-server.py + /home/openerp/openerp-tmp/bin/openerp-server diff --git a/setup.py b/setup.py index f90e52da3f3..76c59126e73 100755 --- a/setup.py +++ b/setup.py @@ -74,7 +74,7 @@ py2exe_data_files = [] if os.name == 'nt': import py2exe py2exe_keywords['console'] = [ - { "script": "openerp-server.py", + { "script": "openerp-server", "icon_resources": [(1, join("pixmaps","openerp-icon.ico"))], }] py2exe_keywords['options'] = { @@ -123,7 +123,7 @@ setup(name = name, (join('man', 'man5'), ['man/openerp_serverrc.5']), ('doc', filter(isfile, glob.glob('doc/*'))), ] + py2exe_data_files, - scripts = ['openerp-server.py'], + scripts = ['openerp-server'], packages = find_packages(), include_package_data = True, package_data = {