Cmara Municipal de Curiti Assistente de Migrao HTML

  • Slides: 20
Download presentation
Câmara Municipal de Curiti

Câmara Municipal de Curiti

Assistente de Migração HTML para Postgresql Descrição do sistema Funcionalidades do sistema Desenvolvimento O

Assistente de Migração HTML para Postgresql Descrição do sistema Funcionalidades do sistema Desenvolvimento O que falta fazer? Palestrante: Ramiro Batista da Luz Desenvolvimento de Sistemas

Descrição Migração de dados Notes -> Postgresql Opções Exportação Lotus Notes Programação Notes Script(Notes

Descrição Migração de dados Notes -> Postgresql Opções Exportação Lotus Notes Programação Notes Script(Notes Basic) ODBC Servidor Intranet(HTML) Python Beautiful. Soap, re, thread, mpi, urllib Treinamento da equipe Primeiro protótipo Andamento

Objetivos Migrar todas as proposições do sistema Lotus Notes para a base Postgresql. Manter

Objetivos Migrar todas as proposições do sistema Lotus Notes para a base Postgresql. Manter integridade referencial. A formatação de alguns campos deve ser mantida.

Proposta Navegação - urllib Parser HTML – Beautiful. Soup Tratamento do texto – re

Proposta Navegação - urllib Parser HTML – Beautiful. Soup Tratamento do texto – re Banco de dados - Jython + Hibernate Teste unitários - unittest

Funcionalidades Navegação por comandos Notes URL Interpretação de HTML Testes unitários Multi Thread MPI

Funcionalidades Navegação por comandos Notes URL Interpretação de HTML Testes unitários Multi Thread MPI Jython + Hibernate

Desenvolvimento Treinamento Programação em par Protótipo Divisão de tarefas Navegador Parser Novos colaboradores

Desenvolvimento Treinamento Programação em par Protótipo Divisão de tarefas Navegador Parser Novos colaboradores

Módulos urllib Beautiful. Soup re unittest Multi. Thread MPI

Módulos urllib Beautiful. Soup re unittest Multi. Thread MPI

urllib endereco = 'http: //10. 0. 0. 6/prop. nsf/%s/%s? Open. Document' % (oid_visao, amostra_oid)

urllib endereco = 'http: //10. 0. 0. 6/prop. nsf/%s/%s? Open. Document' % (oid_visao, amostra_oid) doc_html = urllib. urlopen(endereco). read() soup = Beautiful. Soup(doc_html)

Beautiful. Soup # Todas as ocorrencias de font Arial onde o texto seja 'tipo'.

Beautiful. Soup # Todas as ocorrencias de font Arial onde o texto seja 'tipo'. lista_tr_font_arial = self. soup. find. All(name='font', size=2, face='Arial', color='ffffff', text='Tipo') # <TR> pai da primeira linha encontrada. tr_tipo = lista_tr_font_arial[0]. find. Parent('tr') # Todas as ocorrencias de font Arial cor 004080. lista_tipo = tr_tipo. find. All(name='font', size=2, face='Arial', color='004080') # Conteúdo do primeiro ítem da lista. tipo = lista_tipo[0]. contents[0]

re # <TR> que contém o número da proposição. tr_numero = self. soup. find.

re # <TR> que contém o número da proposição. tr_numero = self. soup. find. All(name='td', size=2, face='Arial', color='ffffff', text=u' Nº Proposição ')[0]. find. Parent('tr') # Obtém o primeiro elemento da lista que atende a # expressão regular que extrai o número da proposição. numero = tr_numero. find. All(text=re. compile('([0 -9]{2}). ([09]{5}). ([0 -9]{4})'))[0]

unittest class Test. Emen(unittest. Test. Case): def set. Up(self): self. dict_emen = emen_testdata. dict_emen

unittest class Test. Emen(unittest. Test. Case): def set. Up(self): self. dict_emen = emen_testdata. dict_emen def test. Amostra(self): for tst_oid, amostra_emen in self. dict_emen. iteritems(): end = 'http: //10. 0. 0. 6/prop. nsf/%s/%s? Open. Document' % (oid_visao, tst_oid) soup = Beautiful. Soup(urllib. urlopen(end)). read()) emen_tst = Emen(soup, tst_oid) # Testa os dados de amostra self. dict_emen com os # obtidos da intranet. self. assert. Equal(amostra_emen, emen_tst)

Multi. Thread Clique para adicionar uma estrutura de tópicos

Multi. Thread Clique para adicionar uma estrutura de tópicos

MPI Clique para adicionar uma estrutura de tópicos

MPI Clique para adicionar uma estrutura de tópicos

Custos Treinamento Instrutor: 4 h * R$ 20, 00 = R$ 80, 00 Estagiários(4):

Custos Treinamento Instrutor: 4 h * R$ 20, 00 = R$ 80, 00 Estagiários(4): 80 h * R$ 8, 00 = R$ 640, 00 Desenvolvimento Analista/Programador: 524 h * R$ 25, 00 = R$ 13. 100, 00 Estagiários: 616 h * R$ 8, 00 = R$ 4. 928, 00 Total: R$ 18. 748, 00

Custos - Totalização Total Treinamento: R$ 720, 00 Desenvolvimento: R$ 18. 028, 00 Total:

Custos - Totalização Total Treinamento: R$ 720, 00 Desenvolvimento: R$ 18. 028, 00 Total: R$ 18. 748, 00 Comparação mercado: Treinamento(tempo=2 X): R$ 1440, 00 Desenvolvimento(tempo=+1/4): R$ 22. 535, 00 Total: R$ 23. 975, 00

Pontos Fortes e Vantagens Tecnologias livres Python Módulos livres Debian Aprendizado rápido Desenvolvimento interativo

Pontos Fortes e Vantagens Tecnologias livres Python Módulos livres Debian Aprendizado rápido Desenvolvimento interativo Tecnologias avançadas são relativamente fáceis de usar

O que falta fazer? Extração de documentos anexados(doc, rtf, etc. . . ). Tratamento

O que falta fazer? Extração de documentos anexados(doc, rtf, etc. . . ). Tratamento de ligações(links) internos para outros documentos. Alimentação do banco de dados. (Jython+Hybernate). Opções de linha de comando. Casos de teste para tramites. Interface gráfica.

Agradecimentos Comunidade Python Brasil Diretoria de informática da CMC Carlos Niemeyer – Diretor Lincoln

Agradecimentos Comunidade Python Brasil Diretoria de informática da CMC Carlos Niemeyer – Diretor Lincoln Cesar Medina de Oliveira – Chefe de desenvolvimento Equipe de desenvolvimento da CMC Márcio Dias Azevedo, Claudia Fantin Charles Maske, André Gustavo Timermann, Marcilio Torres dos Santos Jr, Moisés Chiaretto

Conclusão Treinamento rápido da equipe Produtividade Desenvolvimento em equipe Variedade de bibliotecas livres Desenvolvimento

Conclusão Treinamento rápido da equipe Produtividade Desenvolvimento em equipe Variedade de bibliotecas livres Desenvolvimento interativo Economia de recursos Trabalho gratificante