source: publico/ILSAPL/trunk/lexml/SAPLOAIServer.py @ 6142

Última Alteração nesse arquivo desde 6142 foi 6142, incluída por lucianodefazio, 9 anos atrás

Commit do SAPL 2.5 - GoogleCode? - no trunk (Versão 2.4 + Módulos de Protocolo Geral e Documentos Administrativos

File size: 4.4 KB
Linha 
1from datetime import datetime
2from DateTime import DateTime
3from OFS import SimpleItem, Folder
4import Globals
5import Acquisition
6from Persistence import Persistent
7from Globals import PersistentMapping
8from AccessControl import ClassSecurityInfo, Permissions
9from Products.PageTemplates.PageTemplateFile import PageTemplateFile
10import time, os, sys
11
12from OAI import OAIServerFactory
13
14from oaipmh import client, metadata, error, server
15from oaipmh.datestamp import datetime_to_datestamp
16
17from Products.CMFCore.utils import getToolByName
18
19manage_addSAPLOAIServerForm = PageTemplateFile('www/addSAPLOAIServer', globals())
20manage_addSAPLOAIServerForm.__name__='addSAPLOAIServer'
21
22def manage_addSAPLOAIServer(self, email, titulo, batch_size, base_url, id='oai', REQUEST=None):
23    """Adicionar um servidor OAI para integracao com o LeXML.
24    """
25    SAPL_OAI = SAPLOAIServer(email,titulo,batch_size,base_url)
26    self._setObject(id, SAPL_OAI)
27    if REQUEST is None:
28        return
29    try:
30        u = self.DestinationURL()
31    except:
32        u = REQUEST['URL1']
33    if REQUEST.has_key('submit_edit'):
34        u = "%s/%s" % (u, urllib.quote(id))
35    REQUEST.RESPONSE.redirect(u+'/manage_main')
36
37class SAPLOAIServer(SimpleItem.SimpleItem,Persistent):
38    """ """
39   
40    security = ClassSecurityInfo()
41    meta_type = 'SAPL OAI Server'
42    manage_options = (
43        {'label':'Editar', 'action':'manage_main'},
44        ) + SimpleItem.SimpleItem.manage_options
45
46    def __init__(self, email, titulo, batch_size, base_url):
47        self.id = 'oai'
48        self._titulo = titulo
49        self._email = email
50        self._batch_size = batch_size
51        self._base_url = base_url
52
53    manage_editForm = PageTemplateFile(
54        "www/editSAPLOAIServer", globals(), __name__='manage_editForm')
55    manage_main = manage_editForm
56
57    security.declareProtected('View management screens', 'manage_edit')
58    def manage_edit(self, email, titulo,batch_size, base_url, REQUEST=None):
59        """Edit settings.
60        """
61       
62        if titulo:
63            self._titulo = titulo
64        if email:
65            self._email = email
66        if batch_size:
67            self._batch_size = batch_size
68        if base_url:
69            self._base_url = base_url
70        if REQUEST is not None:
71            return self.manage_main(manage_tabs_message="Configurações alteradas")
72
73    def config(self):
74        config = {}
75        config['titulo'] = self.get_nome_repositorio()
76        config['email'] = self.get_email()
77        config['base_url'] = self.get_base_url()
78        config['metadata_prefixes'] = ['oai_lexml',]
79        config['descricao'] = self.get_descricao_casa()
80        config['batch_size'] = self.get_batch_size()
81        config['content_type'] = None,
82        config['delay'] = 0,
83        config['base_asset_path']=None
84        return config
85
86    def get_nome_repositorio(self):
87        return self._titulo
88   
89    def get_email(self):
90        emails = []
91        emails.append(self._email)
92        return emails
93
94    def get_descricao_casa(self):
95        descricao = ''
96        consulta = self.zsql.lexml_provedor_obter_zsql()
97        if consulta:
98            descricao = consulta[0].xml_provedor
99            if descricao:
100                descricao = descricao.encode('utf-8')
101        return descricao
102
103    def get_batch_size(self):
104        return int(self._batch_size)
105   
106    def get_base_url(self):
107        return self._base_url
108
109    def index_html(self, REQUEST=None,RESPONSE=None):
110        """ processa os argumentos recebidos pela URL
111        """
112        if REQUEST is not None:
113            return self.handle_request(req=REQUEST)
114        else:
115            return None
116
117    def write(self, req, data, mimetype,RESPONSE=None):
118        """ Retorna os dados para o cliente
119        """
120        req.RESPONSE.setHeader('Content-Type' , mimetype)
121        req.RESPONSE.setHeader('Content-Length' ,len(data))
122        return data.decode('utf-8').encode('ascii', 'xmlcharrefreplace')
123
124    def handle_request(self, req,RESPONSE=None):
125        if not req.URL.startswith(self._base_url):
126            return req.RESPONSE.setStatus('500 Internal Server Error',
127                 'The url "%s" does not start with base url "%s".' % (req.URL,
128                                                                      self._base_url))
129        sapl_tool = getToolByName(self,'portal_sapl')
130        oai_server = OAIServerFactory(sapl_tool, self.config())
131        return self.write(req, oai_server.handleRequest(req.form),'text/xml',RESPONSE)
132
133   
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.