diff --git a/addons/base_module_publish/__terp__.py b/addons/base_module_publish/__terp__.py index adb9d554de9..632c09dcfad 100644 --- a/addons/base_module_publish/__terp__.py +++ b/addons/base_module_publish/__terp__.py @@ -5,15 +5,15 @@ "website" : "http://tinyerp.com", "category" : "Generic Modules/Base", "description": """ - This module can be used by developpers to automatically publish their modules - in a few click to the following websites: - * http://TinyERP.com, section module - * http://TinyForge.org - * PyPi, The python offical repository - * http://Freshmeat.net +This module can be used by developpers to automatically publish their modules +in a few click to the following websites: +* http://TinyERP.com, section module +* http://TinyForge.org +* PyPi, The python offical repository +* http://Freshmeat.net - It adds a button "Publish module" on each module, so that you simply have - to call this button when you want to release a new version of your module. +It adds a button "Publish module" on each module, so that you simply have +to call this button when you want to release a new version of your module. """, "depends" : ["base"], "init_xml" : [ ], diff --git a/addons/base_module_publish/wizard/base_module_publish.py b/addons/base_module_publish/wizard/base_module_publish.py index 90f67858aec..8edf08f90d8 100644 --- a/addons/base_module_publish/wizard/base_module_publish.py +++ b/addons/base_module_publish/wizard/base_module_publish.py @@ -29,6 +29,7 @@ import time import wizard import osv import pooler +import urllib intro_form = '''
''' check_fields = { @@ -67,35 +88,11 @@ check_fields = { 'author': {'string':'Author', 'type':'char', 'size':128, 'readonly':True}, 'website': {'string':'Website', 'type':'char', 'size':200, 'readonly':True}, 'url': {'string':'Download URL', 'type':'char', 'size':200, 'readonly':True}, + 'image': {'string':'Image file', 'type':'binary'}, 'description': {'string':'Description', 'type':'text', 'readonly':True}, 'version': {'string':'Version', 'type':'char', 'readonly':True}, -} - - -upload_info_form = ''' -''' - -def _get_selection(*Args): - import urllib - a = urllib.urlopen('http://www.tinyerp.com/mtree_interface.php') - res = filter(None, a.read().split('\n')) - return map(lambda x:x.split('='), res) - -upload_info_fields = { - 'login': {'string':'Login', 'type':'char', 'size':32, 'required':True}, - 'password': {'string':'Password', 'type':'char', 'size':32, 'required':True}, + 'demourl': {'string':'Demo URL', 'type':'char', 'size':100}, + 'docurl': {'string':'Documentation URL', 'type':'char', 'size':100}, 'category': {'string':'Category', 'type':'selection', 'size':64, 'required':True, 'selection': _get_selection }, @@ -104,13 +101,54 @@ upload_info_fields = { 'selection': [('GPL', 'GPL'), ('Other proprietary','Other proprietary')], 'default': lambda *args: 'GPL' }, + 'operation': { + 'string':'Operation', + 'type':'selection', + 'readonly':True, + 'selection':[('0','Creation'),('1','Modification')], + }, 'url_download': {'string':'Download URL', 'type':'char', 'size':128}, } + +upload_info_form = ''' +''' + +def _get_edit(self, cr, uid, datas, *args): + pool = pooler.get_pool(cr.dbname) + name = pool.get('ir.module.module').read(cr, uid, [datas['id']], ['name'])[0]['name'] + a = urllib.urlopen('http://www.tinyerp.com/mtree_interface.php?module=%s' % (name,)) + content = a.read() + try: + email = self.pool.get('res.users').browse(cr, uid, uid).address.email or '' + except: + email ='' + return {'operation': content[0], 'email':email} + + +upload_info_fields = { + 'login': {'string':'Login', 'type':'char', 'size':32, 'required':True}, + 'email': {'string':'Email', 'type':'char', 'size':100, 'required':True}, + 'password': {'string':'Password', 'type':'char', 'size':32, 'required':True, 'invisible':True}, +} + end_form = ''' ''' end_fields = { @@ -121,8 +159,82 @@ Your module has been successfully uploaded to the official website. You must wait a few hours/days so that the Tiny ERP core team review your module for approval on the website. """}, + 'result': {'string':'Result page', 'type':'text', 'readonly':True} } +import httplib, mimetypes + +def post_multipart(host, selector, fields, files): + def encode_multipart_formdata(fields, files): + BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' + CRLF = '\r\n' + L = [] + for (key, value) in fields: + L.append('--' + BOUNDARY) + L.append('Content-Disposition: form-data; name="%s"' % key) + L.append('') + L.append(value) + for (key,value) in files: + L.append('--' + BOUNDARY) + L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, key+'.png')) + L.append('Content-Type: application/octet-stream') + L.append('') + L.append(value) + L.append('--' + BOUNDARY + '--') + L.append('') + body = CRLF.join(L) + content_type = 'multipart/form-data; boundary=%s' % BOUNDARY + return content_type, body + content_type, body = encode_multipart_formdata(fields, files) + import httplib + + headers = {"Content-type": content_type, "Accept": "*/*"} + conn = httplib.HTTPConnection(host) + conn.request("POST", selector, body, headers = headers) + response = conn.getresponse() + val = response.status + res = response.read() + print res + print host, selector, val + conn.close() + return res + + +def _upload(self, cr, uid, datas, context): + download = datas['form']['downloadurl'] or '' + if not download: + # Create a .ZIP file and send them online + # Set the download url to this .ZIP file + download = '/' + lpool = pooler.get_pool(cr.dbname) + mod = pool.get('ir.module.module').browse(cr, uid, datas['id']) + updata = { + 'link_name': mod.shortdesc or '', + 'new_cat_id': datas['form']['category'], + 'link_desc': (mod.description or '').replace('\n','