[ADD] olap_extract : Module added

bzr revid: vir@tinyerp.com-20100119090907-7qyesnshx57k7su7
This commit is contained in:
Vir (Open ERP)
2010-01-19 14:39:07 +05:30
parent 70cc0fab79
commit 7c8f3e8411
6 changed files with 429 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 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 olap_extract
import wizard_olap_extract
+37
View File
@@ -0,0 +1,37 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 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/>.
#
##############################################################################
{
"name" : "Module to extracts the schema structure",
"version" : "0.1",
"author" : "Tiny",
"website" : "http://www.openerp.com",
"depends" : ["olap"],
"category" : "Generic Modules/Olap",
"description": """
Extracts the schema structure.
""",
"init_xml" : [],
"update_xml" : ["olap_extract_wizard.xml"],
"demo_xml" : [],
"active": False,
"installable": True
}
+54
View File
@@ -0,0 +1,54 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * olap_extract
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-11-26 05:29:21+0000\n"
"PO-Revision-Date: 2009-11-26 05:29:21+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: olap_extract
#: model:ir.module.module,shortdesc:olap_extract.module_meta_information
msgid "olap_extract"
msgstr ""
#. module: olap_extract
#: wizard_button:olap.extract.schema,init,ok:0
msgid "OK"
msgstr ""
#. module: olap_extract
#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema
msgid "Olap Extract"
msgstr ""
#. module: olap_extract
#: model:ir.module.module,description:olap_extract.module_meta_information
msgid "\n"
" Extracts the schema structure.\n"
" "
msgstr ""
#. module: olap_extract
#: wizard_field:olap.extract.schema,init,module_name:0
msgid "Module Name"
msgstr ""
#. module: olap_extract
#: wizard_button:olap.extract.schema,init,end:0
msgid "Cancel"
msgstr ""
#. module: olap_extract
#: wizard_view:olap.extract.schema,init:0
msgid "New Module Name"
msgstr ""
+54
View File
@@ -0,0 +1,54 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * olap_extract
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-11-26 05:29:21+0000\n"
"PO-Revision-Date: 2009-11-26 05:29:21+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: olap_extract
#: model:ir.module.module,shortdesc:olap_extract.module_meta_information
msgid "olap_extract"
msgstr ""
#. module: olap_extract
#: wizard_button:olap.extract.schema,init,ok:0
msgid "OK"
msgstr ""
#. module: olap_extract
#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema
msgid "Olap Extract"
msgstr ""
#. module: olap_extract
#: model:ir.module.module,description:olap_extract.module_meta_information
msgid "\n"
" Extracts the schema structure.\n"
" "
msgstr ""
#. module: olap_extract
#: wizard_field:olap.extract.schema,init,module_name:0
msgid "Module Name"
msgstr ""
#. module: olap_extract
#: wizard_button:olap.extract.schema,init,end:0
msgid "Cancel"
msgstr ""
#. module: olap_extract
#: wizard_view:olap.extract.schema,init:0
msgid "New Module Name"
msgstr ""
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" ?>
<openerp>
<data>
<wizard
string="Olap Extract"
model="olap.schema"
name="olap.extract.schema"
menu= "True"
id="bi_olap_extract_schema"/>
</data>
</openerp>
+249
View File
@@ -0,0 +1,249 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 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 wizard
import pooler
import csv
import os
import time
import netsvc
import zipfile
form1 = '''<?xml version="1.0"?>
<form string="New Module Name">
<field name='module_name'/>
</form>'''
field1 = {
'module_name': {'string':'Module Name', 'type':'char','size':'64', 'required':True},
}
class wizard_olap_extract(wizard.interface):
def zipper(self,zipname,filename,mode="a"):
z = zipfile.ZipFile(zipname+".zip", mode)
z.write(filename)
print "\n",z.printdir()
def write_csv(self,filename,content=[]):
fid = open(filename, 'w')
if fid == -1:
print 'File: temp.csv not found or could not be opened'
return False
else:
writer=csv.writer(fid, 'TINY',delimiter=',')
for row in content:
writer.writerow(row)
fid.close
return True
def table_depth(self,cr,uid,list=[],context={}):
res={}
templeft={}
tempright={}
for table_id in list:
lines=pooler.get_pool(cr.dbname).get('olap.cube.table').browse(cr, uid,table_id,context)
res[str(lines.id)] = ["cubetable_"+str(lines.id),lines.name and lines.name or '',lines.table_alias and lines.table_alias or '',lines.key_left and lines.key_left or '',lines.key_right and lines.key_right or '',lines.table_left_id.id and "cubetable_"+str(lines.table_left_id.id) or '',lines.table_right_id.id and "cubetable_"+str(lines.table_right_id.id) or '']
if(lines.table_left_id.id):
templeft = self.table_depth(cr,uid,[lines.table_left_id.id],context)
if templeft:
for temp in templeft:
if not res.has_key(temp):
res[temp]= templeft[temp]
if(lines.table_right_id.id):
tempright = self.table_depth(cr,uid,[lines.table_right_id.id],context)
if tempright:
for temp in tempright:
if not res.has_key(temp):
res[temp]= tempright[temp]
return res
def _extract_schema(self, cr, uid, data, context={}):
_name = data['form']['module_name']
_modulename = "olap_"+_name
dirname = _modulename
if not os.path.isdir("./addons/" + dirname + "/"):
os.mkdir("./addons/" + dirname + "/")
os.chdir("./addons/"+dirname)
_init = "import %s" % _modulename
f = open("__init__.py","w")
f.write(_init)
f.close()
self.zipper(_modulename, "__init__.py","w")
_init_files = {
"1":"olap.fact.database.csv",
"2":"olap.schema.csv",
"5":"olap.cube.table.csv",
"6":"olap.cube.csv",
"7":"olap.dimension.csv",
"8":"olap.hierarchy.csv",
"9":"olap.level.csv",
"10":"olap.measure.csv"
}
_init_xml = """"%(1)s",
"%(2)s",
"%(5)s",
"%(6)s",
"%(7)s",
"%(8)s",
"%(9)s",
"%(10)s",
""" % _init_files
data['modulename'] = _modulename
data['init_xml'] = _init_xml
_terp= """{
"name" : "%(modulename)s",
"version" : "0.1",
"author" : "Tiny",
"website" : "http://tinyerp.com/",
"depends" : ["olap"],
"category" : "Generic Modules/Others",
"description": "Module will load the data in olap tables",
"init_xml" :[
%(init_xml)s
],
"update_xml" : [],
"demo_xml" : [],
"active": False,
"installable": True
}"""%data
f = open("__terp__.py","w")
f.write(_terp)
f.close()
self.zipper(_modulename, "__terp__.py")
schema_id = data['id']
lines=pooler.get_pool(cr.dbname).get('olap.schema').browse(cr, uid, schema_id,context)
_extract=[]
_extract.append(['id','name','db_name','db_login','db_password'])
_extract.append(["db_"+str(lines.database_id.id),lines.database_id.name,lines.database_id.db_name,lines.database_id.db_login,lines.database_id.db_password])
self.write_csv('olap.fact.database.csv',_extract)
self.zipper(_modulename, "olap.fact.database.csv")
_extract=[]
_extract.append(['id','name','database_id:id','loaded','configure','ready','state','note'])
_extract.append(["schema_"+str(lines.id),lines.name,"db_"+str(lines.database_id.id),lines.loaded and lines.loaded or '',lines.configure and lines.configure or '', lines.ready and lines.ready or '',lines.state,lines.note and lines.note or ''])
self.write_csv('olap.schema.csv',_extract)
self.zipper(_modulename, "olap.schema.csv")
cube_ids = lines.cube_ids
_extractcubes=[]
_extractcubes.append(['id','name','table_id:id','schema_id:id'])
_extractmeasures=[]
_extractmeasures.append(['id','name','cube_id:id','value_column','value_sql','agregator','datatype','formatstring'])
_extractdimension=[]
_extractdimension.append(['id','name','foreign_key','foreign_key_table','cube_id:id'])
_extracthiers=[]
_extracthiers.append(['id','name','primary_key','primary_key_table','field_name','member_all','member_default','sequence','type','dimension_id:id','table_id:id'])
_extractlevels=[]
_extractlevels.append(['id','name','column_name','column_id_name','type','table_name','sequence','hierarchy_id:id'])
_cube_table_ids = []
for cube in cube_ids:
_extractcubes.append(["cube_"+str(cube.id),cube.name,"cubetable_"+str(cube.table_id.id),"schema_"+str(cube.schema_id.id)])
_cube_table_ids.append(cube.table_id.id)
measure_ids = cube.measure_ids
for measure in measure_ids:
_extractmeasures.append(["msr_"+str(measure.id),measure.name,"cube_"+str(measure.cube_id.id),measure.value_column and measure.value_column or '',measure.value_sql and measure.value_sql or '',measure.agregator,measure.datatype and measure.datatype or '',measure.formatstring])
dimension_ids = cube.dimension_ids
for dimension in dimension_ids:
_extractdimension.append(["dim_"+str(dimension.id),dimension.name,dimension.foreign_key and dimension.foreign_key or '',dimension.foreign_key_table and dimension.foreign_key_table or '',"cube_"+str(dimension.cube_id.id)])
hiers_ids = dimension.hierarchy_ids
for hier in hiers_ids:
_extracthiers.append(["hier_"+str(hier.id),hier.name,hier.primary_key,hier.primary_key_table and hier.primary_key_table or '',hier.field_name,hier.member_all,hier.member_default,hier.sequence,hier.type,"dim_"+str(hier.dimension_id.id),"cubetable_"+str(hier.table_id.id)])
_cube_table_ids.append(hier.table_id.id)
level_ids = hier.level_ids
for level in level_ids:
_extractlevels.append(["lvl_"+str(level.id),level.name,level.column_name,level.column_id_name,level.type,level.table_name,level.sequence,"hier_"+str(level.hierarchy_id.id)])
res={}
_extract=[]
_extract.append(['id','name','table_alias','key_left','key_right','table_left_id:id','table_right_id:id'])
res = self.table_depth(cr,uid,_cube_table_ids,context)
key = res.keys()
key = map(lambda x: int(x),key)
key.sort()
for k in key:
_extract.append(res[str(k)])
self.write_csv('olap.cube.csv',_extractcubes)
self.zipper(_modulename, "olap.cube.csv")
self.write_csv('olap.measure.csv',_extractmeasures)
self.zipper(_modulename, "olap.measure.csv")
self.write_csv('olap.dimension.csv',_extractdimension)
self.zipper(_modulename, "olap.dimension.csv")
self.write_csv('olap.hierarchy.csv',_extracthiers)
self.zipper(_modulename, "olap.hierarchy.csv")
self.write_csv('olap.level.csv',_extractlevels)
self.zipper(_modulename, "olap.level.csv")
self.write_csv('olap.cube.table.csv',_extract)
self.zipper(_modulename, "olap.cube.table.csv")
return {}
states = {
'init': {
'actions': [],
'result': {'type':'form','arch':form1, 'fields':field1, 'state':[('end','Cancel'),('ok','OK')]}
},
'ok' : {
'actions' : [],
'result' : {'type' : 'action' ,'action':_extract_schema,'state':'end'}
}
}
wizard_olap_extract('olap.extract.schema')