source: publico/ILSAPL/branches/2.1/instalacao/sapl_migracao.py @ 2530

Última Alteração nesse arquivo desde 2530 foi 2530, incluída por ciciliati, 14 anos atrás

Incorporacao de rotina para migracao de NuxDocuments? (SAPL 2.0.0).
Falta testar.

File size: 6.3 KB
Linha 
1### Script a ser rodado durante o processo de migração de dados de versões anteriores do SAPL.
2### ESTE SCRIPT NÃO DEVE SER EXECUTADO DIRETAMENTE. ELE É CHAMADO PELO SHELL SCRIPT sapl_migracao.sh
3### Criado por Ciciliati, em 07/04/2006
4### Versão do SAPL: 2.1
5## Versão deste script: 1.0 - Ciciliati - 07/04/2006
6
7import App.version_txt
8from OFS.Image import File
9
10### Funções genéricas
11def _renameObj(container,id_old,id_new):
12  obj =  container._getOb(id_old)
13  container._delObject(id_old)
14  obj._setId(id_new)
15  container._setObject(id_new,obj,set_owner='0')
16
17def _copyFile(f_from, f_to, id, keep_new=False):
18  obj_id = id
19  if hasattr(f_to,id):
20    if keep_new:
21      obj_id = 'old_' + id
22    else:
23      _renameObj (f_to, id, 'new_' + id)
24  oldobj = f_from._getOb(id)
25  newobj = File(obj_id,oldobj.title,'',oldobj.content_type)
26  newobj.size = oldobj.size
27  newobj.data = oldobj.data
28  f_to._setObject(obj_id, newobj)
29
30def _prepTransaction():
31  ### Prepara mecanismo de transação do ZODB
32  versao = App.version_txt.version_txt()
33
34  if versao.find('Zope 2.7') > -1:
35    t=get_transaction()
36  else:
37    import transaction
38    t=transaction.get()
39  return t
40
41### Renomear o python script '/sapl' para 'sapl.py'
42_renameObj(app,'sapl','sapl.py')
43print "ok... 'sapl' renomeado para 'sapl.py'"
44
45### Criar o mount-point do Data.fs antigo em '/sapl'
46app.manage_addProduct['ZODBMountPoint'].manage_addMounts(paths=['/sapl'],create_mount_points=1)
47print "ok... Criado o mount-point para o 'Data.fs' antigo em '/sapl'"
48
49### Migrar usuários
50print "..... Iniciando migracao de usuarios"
51acl = app.acl_users
52users=acl.getUserNames()
53for u in app.sapl.acl_users.getUsers():
54  t_id = u.getUserName()
55  if t_id in users:
56    print ".....    ATENCAO: Usuario '%s' ja existe na versao atual." % t_id
57    t_id = 'old_' + t_id
58    print ".....       O usuario da versao anterior foi criado com o username '%s'" % t_id
59  t_pwd = u._getPassword()
60  acl._addUser(t_id,t_pwd,t_pwd,list(u.getRoles()),[])
61  print ".....    Migrado usuario %s" % t_id
62print "ok... Concluida migracao de usuarios"
63
64### Migrar propriedades do /sapl para /sapl_documentos/props_sapl
65props = app.sapl_documentos.props_sapl
66for p in app.sapl.propertyItems():
67  if p[0] != 'versao':
68    setattr(props,p[0],p[1])
69print "ok... Concluida migracao dos dados da Casa"
70
71t = _prepTransaction()
72t.commit()
73print "ok... Primeiro commit efetuado com sucesso."
74
75### Migrar documentos (cuidado com versões antigas do SAPL)
76
77# Migrar matérias
78print "..... Iniciando migracao de materias"
79erro = False
80fo = app.sapl.documentos.materia
81fd = app.sapl_documentos.materia
82for obj in fo.objectItems('File'):
83  print "  ...    Iniciando migracao da materia '%s'" % obj[0]
84  if obj[1].size > 0:
85    _copyFile (fo, fd, obj[0])
86    print "  ...    Migrada materia '%s'" % obj[0]
87    try:
88      t = _prepTransaction()
89      t.commit()
90      print "  ok.    Commit da materia efetuado com sucesso"
91    except:
92      erro = True
93      print "  ***    Commit da materia deu ERRO - A MATERIA NAO FOI GRAVADA!!!"
94      t.abort()
95  else:
96    print "  ***    Materia %s NÃO FOI MIGRADA: TAMANHO ZERO!!!" % obj[0]
97###############???????? É necessário fazer algo com o catálogo?
98###############???????? Cuidado com a mudança de nomenclatura de objetos
99if erro:
100  print "!!!!! ATENCAO: Migracao de materias concluida com alguns erros."
101else:
102  print "ok... Concluida migracao de materias sem nenhum erro."
103
104# Migrar normas
105print "..... Iniciando migracao de normas"
106erro = False
107fo = app.sapl.documentos.norma_juridica
108fd = app.sapl_documentos.norma_juridica
109print "  ... Iniciando migracao de normas armazenadas em 'File'"
110for obj in fo.objectItems('File'):
111  print "  ...    Iniciando migracao da norma '%s'" % obj[0]
112  if obj[1].size > 0:
113    _copyFile (fo, fd, obj)
114    print "  ...    Migrada norma '%s'" % obj[0]
115    try:
116      t = _prepTransaction()
117      t.commit()
118      print "  ok.    Commit da norma efetuado com sucesso"
119    except:
120      erro = True
121      print "  ***    Commit da norma deu ERRO - A NORMA NAO FOI GRAVADA!!!"
122      t.abort()
123  else:
124    print "  ***    Norma %s NÃO FOI MIGRADA: TAMANHO ZERO!!!" % obj[0]
125print "  ... Iniciando migracao de normas armazenadas em 'NuxDocument'"
126############  !!! INCORPORAR Produto NuxDocument no SAPL 2.1
127for obj in fo.objectItems('NuxDocument'):
128  print "  ...    Iniciando migracao da norma '%s'" % obj[0]
129  fd.manage_addFile(id=obj[0])
130  new = fd[obj[0]]
131  new.manage_edit(title=old[1].title,filedata=old[1].getRaw(),content_type=old[1].content_type())
132  try:
133    t = _prepTransaction()
134    t.commit()
135    print "  ok.    Commit da norma efetuado com sucesso"
136  except:
137    erro = True
138    print "  ***    Commit da norma deu ERRO - A NORMA NAO FOI GRAVADA!!!"
139    t.abort()
140  print "  ...    Migrada norma '%s'" % obj[0]
141############ ????????  É necessário fazer algo com o catálogo?
142if erro:
143  print "!!!!! ATENCAO: Migracao de normas concluida com alguns erros."
144else:
145  print "ok... Concluida migracao de normas"
146
147# Migrar modelos de proposições
148### Considerando qu até o momento (abr/2006) nenhuma casa
149### notificou haver criado seus próprios modelos de proposição,
150### os modelos importados serão deixados inativos, prefixados
151### como old.
152
153# Migrar proposições
154# Apenas copiar... a migração do SDE 0 para o SDE 1 será feita abaixo (ou por script externo)
155
156### Migrar o logotipo
157fo = app.sapl.imagens                      #fo = folder de origem
158fd = app.sapl_documentos.props_sapl        #fd = folder de destino
159logo_id = 'logo_casa'                      #logo_id = id do logotipo
160if hasattr(fo, logo_id):
161  old_logo = getattr(fo, logo_id)
162  if hasattr(fd, logo_id):
163    _renameObj(fd,logo_id,'new_'+logo_id)
164  fd.manage_addImage(id=logo_id,file='')
165  new_logo = fd._getOb(logo_id)
166  new_logo.data = old_logo.data
167  new_logo.size = old_logo.size
168  new_logo.width = old_logo.width
169  new_logo.height = old_logo.height
170  new_logo.content_type = old_logo.content_type
171  print "ok... Logotipo encontrado e migrado"
172
173t = _prepTransaction()
174t.commit()
175print "ok... Commit do logotipo efetuado com sucesso."
176
177### Remover o mount-point '/sapl'
178app._delObject('sapl')
179print "ok... Mount-point da base antiga removido com sucesso"
180
181### Renomear '/sapl.py' para '/sapl'
182_renameObj(app,'sapl.py','sapl')
183print "ok... 'sapl.py' renomeado para 'sapl'"
184
185t = _prepTransaction()
186t.commit()
187print "ok... Commit final efetuado com sucesso"
188
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.