SaplCorrigirContentType: tipos.py

File tipos.py, 3.5 KB (added by adrianogomes, 7 anos atrás)
Linha 
1SIMULAR=True
2
3import datetime
4import os
5import transaction
6
7from AccessControl.SecurityManagement import newSecurityManager
8user = app.sapl.acl_users.getUser('saploper')
9newSecurityManager(None, user.__of__(app.sapl.acl_users))
10
11#http://www.peterbe.com/plog/zope-image-to-filesystem-image
12def write_zodb_file_to_tempfile( source, temp_file ):
13   """
14   Write data from a file from the ZODB / Zope
15   to a tempfile on the filesystem.
16   input:
17   - source (a zope object, not just a string with the object id!!)
18   - temp_file (a writable file object)
19   """
20   data = source.data
21   if isinstance(data, str): #StringType
22       temp_file.write( str(data) )
23   else:
24       (start,end) = (0,source.getSize())
25       pos = 0
26       while source.data is not None:
27           l =  len(data.data)
28           pos = pos + l
29           if pos > start:
30               # We are within the range
31               lstart = l - (pos - start)
32               if lstart < 0: lstart = 0
33               # find the endpoint
34               if end <= pos:
35                   lend = l - (pos - end)
36                   temp_file.write(data[lstart:lend])
37                   break
38               # Not yet at the end, transmit what we have.
39               temp_file.write(data[lstart:])
40           data = data.next
41   temp_file.flush()
42   temp_file.seek(0, 0)
43
44def main(simular=True):
45    inicio1 = datetime.datetime.now()
46    c1 = 0
47    for nome_pasta in ["administrativo", "ata_sessao", "materia", "norma_juridica", "oradores", "oradores_expediente", "proposicao"]:
48        inicio2 = datetime.datetime.now()
49        caminho_pasta = "/sapl/sapl_documentos/" + nome_pasta
50        pasta = app.restrictedTraverse(caminho_pasta)
51        c2 = 0
52        for id, item in pasta.objectItems():
53            if item.meta_type == 'File':
54                if not item.content_type in ['application/pdf',
55                                             'application/vnd.oasis.opendocument.text',
56                                             'application/vnd.openxmlformats-officedocument.wordprocessingml.document']:
57                    #grava o arquivo no filesystem
58                    tmp_file = 'wrk/' + nome_pasta + "/" + id
59                    f = open(tmp_file, 'w')
60                    write_zodb_file_to_tempfile(item, f)
61                    f.close()
62
63                    #descobre o tipo de arquivo
64                    p = os.popen("file --brief --mime-type " + tmp_file)
65                    mime_type = p.readline().rstrip()
66                    err = p.close()
67                    if not err:
68                        if item.content_type != mime_type:
69                            print "[ALTERA]", id, item.content_type, mime_type
70                            if simular == False:
71                                item.manage_changeProperties(REQUEST=None, content_type=mime_type)
72                            c2 = c2 + 1
73                        else:
74                            print "[MANTEM]", id, item.content_type, mime_type
75                    else:
76                        print "[ERRO-FILE]", id, item.content_type
77                else:
78                    print "[IGNORA-CONTENT-TYPE]", id, item.content_type
79            else:
80                print "[IGNORA-META-TYPE]", id, item.meta_type
81        fim = datetime.datetime.now()
82        print "[RESUMO-PASTA] %s: %s - %s => %d / %s " % (nome_pasta, inicio2, fim, c2, fim - inicio2)
83        c1 = c1 + c2
84        transaction.commit()
85    fim = datetime.datetime.now()
86    print "[RESUMO-TODAS-PASTAS] %s - %s => %d / %s " % (inicio1, fim, c1, fim - inicio1)
87
88if __name__ == "__main__":
89    main(simular=SIMULAR)
 

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