mirror of https://github.com/interlegis/sapl.git
2 changed files with 146 additions and 4 deletions
@ -0,0 +1,135 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from datetime import datetime |
||||
|
from DateTime import DateTime |
||||
|
from OFS import SimpleItem, Folder |
||||
|
import Globals |
||||
|
import Acquisition |
||||
|
from Persistence import Persistent |
||||
|
from Globals import PersistentMapping |
||||
|
from AccessControl import ClassSecurityInfo, Permissions |
||||
|
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
||||
|
|
||||
|
import time, os, sys |
||||
|
|
||||
|
from OAI import OAIServerFactory |
||||
|
|
||||
|
from oaipmh import client, metadata, error, server |
||||
|
from oaipmh.datestamp import datetime_to_datestamp |
||||
|
|
||||
|
from Products.CMFCore.utils import getToolByName |
||||
|
|
||||
|
manage_addSAPLOAIServerForm = PageTemplateFile('www/addSAPLOAIServer', globals()) |
||||
|
manage_addSAPLOAIServerForm.__name__='addSAPLOAIServer' |
||||
|
|
||||
|
def manage_addSAPLOAIServer(self, email, titulo, batch_size, base_url, id='oai', REQUEST=None): |
||||
|
"""Adicionar um servidor OAI para integracao com o LeXML. |
||||
|
""" |
||||
|
SAPL_OAI = SAPLOAIServer(email,titulo,batch_size,base_url) |
||||
|
self._setObject(id, SAPL_OAI) |
||||
|
if REQUEST is None: |
||||
|
return |
||||
|
try: |
||||
|
u = self.DestinationURL() |
||||
|
except: |
||||
|
u = REQUEST['URL1'] |
||||
|
if REQUEST.has_key('submit_edit'): |
||||
|
u = "%s/%s" % (u, urllib.quote(id)) |
||||
|
REQUEST.RESPONSE.redirect(u+'/manage_main') |
||||
|
|
||||
|
class SAPLOAIServer(SimpleItem.SimpleItem,Persistent): |
||||
|
""" """ |
||||
|
|
||||
|
security = ClassSecurityInfo() |
||||
|
meta_type = 'SAPL OAI Server' |
||||
|
manage_options = ( |
||||
|
{'label':'Editar', 'action':'manage_main'}, |
||||
|
) + SimpleItem.SimpleItem.manage_options |
||||
|
|
||||
|
def __init__(self, email, titulo, batch_size, base_url): |
||||
|
self.id = 'oai' |
||||
|
self._titulo = titulo |
||||
|
self._email = email |
||||
|
self._batch_size = batch_size |
||||
|
self._base_url = base_url |
||||
|
|
||||
|
manage_editForm = PageTemplateFile( |
||||
|
"www/editSAPLOAIServer", globals(), __name__='manage_editForm') |
||||
|
manage_main = manage_editForm |
||||
|
|
||||
|
security.declareProtected('View management screens', 'manage_edit') |
||||
|
def manage_edit(self, email, titulo,batch_size, base_url, REQUEST=None): |
||||
|
"""Edit settings. |
||||
|
""" |
||||
|
|
||||
|
if titulo: |
||||
|
self._titulo = titulo |
||||
|
if email: |
||||
|
self._email = email |
||||
|
if batch_size: |
||||
|
self._batch_size = batch_size |
||||
|
if base_url: |
||||
|
self._base_url = base_url |
||||
|
if REQUEST is not None: |
||||
|
return self.manage_main(manage_tabs_message="Configurações alteradas") |
||||
|
|
||||
|
def config(self): |
||||
|
config = {} |
||||
|
config['titulo'] = self.get_nome_repositorio() |
||||
|
config['email'] = self.get_email() |
||||
|
config['base_url'] = self.get_base_url() |
||||
|
config['metadata_prefixes'] = ['oai_lexml',] |
||||
|
config['descricao'] = self.get_descricao_casa() |
||||
|
config['batch_size'] = self.get_batch_size() |
||||
|
config['content_type'] = None, |
||||
|
config['delay'] = 0, |
||||
|
config['base_asset_path']=None |
||||
|
return config |
||||
|
|
||||
|
def get_nome_repositorio(self): |
||||
|
return self._titulo |
||||
|
|
||||
|
def get_email(self): |
||||
|
emails = [] |
||||
|
emails.append(self._email) |
||||
|
return emails |
||||
|
|
||||
|
def get_descricao_casa(self): |
||||
|
descricao = '' |
||||
|
consulta = self.zsql.lexml_provedor_obter_zsql() |
||||
|
if consulta: |
||||
|
descricao = consulta[0].xml_provedor |
||||
|
if descricao: |
||||
|
descricao = descricao.encode('utf-8') |
||||
|
return descricao |
||||
|
|
||||
|
def get_batch_size(self): |
||||
|
return int(self._batch_size) |
||||
|
|
||||
|
def get_base_url(self): |
||||
|
return self._base_url |
||||
|
|
||||
|
def index_html(self, REQUEST=None,RESPONSE=None): |
||||
|
""" processa os argumentos recebidos pela URL |
||||
|
""" |
||||
|
if REQUEST is not None: |
||||
|
return self.handle_request(req=REQUEST) |
||||
|
else: |
||||
|
return None |
||||
|
|
||||
|
def write(self, req, data, mimetype,RESPONSE=None): |
||||
|
""" Retorna os dados para o cliente |
||||
|
""" |
||||
|
req.RESPONSE.setHeader('Content-Type' , mimetype) |
||||
|
req.RESPONSE.setHeader('Content-Length' ,len(data)) |
||||
|
return data.decode('utf-8').encode('ascii', 'xmlcharrefreplace') |
||||
|
|
||||
|
|
||||
|
def handle_request(self, req,RESPONSE=None): |
||||
|
if not req.URL.startswith(self._base_url): |
||||
|
return req.RESPONSE.setStatus('500 Internal Server Error', |
||||
|
u'The url "%s" does not start with base url "%s".' % (req.URL, |
||||
|
self._base_url)) |
||||
|
sapl_tool = getToolByName(self,'portal_sapl') |
||||
|
oai_server = OAIServerFactory(sapl_tool, self.config()) |
||||
|
return self.write(req, oai_server.handleRequest(req.form),'text/xml',RESPONSE) |
||||
Loading…
Reference in new issue