Design¶
balaio¶
Utilitário de linha de comando para apoiar a instalação e operação da aplicação.
Exemplo:
$ python manage.py
usage: manage.py [-h] --config CONFIGFILE
[--alembic-config ALEMBIC_CONFIGFILE]
{syncdb,shell}
Os comandos disponíveis até o momento são:
syncdb¶
Cria a estrutura de banco de dados da aplicação. Esse comando só deve ser executado no momento da instalação. Para a aplicação das migrações de schema de dados, o alembic deve ser utilizado diretamente.
shell¶
Acessa o console interativo do python com o contexto pré-configurado para facilitar o acesso ao banco de dados, por exemplo:
>>> from lib import models
>>> session = Session()
>>> session.query(models.Attempt).all()
monitor¶
Monitora eventos no sistema de arquivos em busca de pacotes SPS e rSPS que deverão ser incorporados, em 1 ou N coleções, e é dividido em:
- monitor:
Monitora eventos no sistema de arquivos por meio da lib inotify (linux), produz uma instância de models.Attempt representando a tentativa de ingresso de um pacote no sistema, e encaminha essa instância para o módulo validator, onde será realizada sua validação.
- checkin
Inspeciona o conteúdo do pacote em busca de extrair sua identidade. A identidade de um pacote é composta pelo seu checksum, e metadados do artigo presentes no arquivo xml que deve estar presente.
validator¶
Submete a instância de models.Attempt a um pipeline de validação, onde cada pipe (segmento do pipeline) é responsável pela validação de um aspecto do pacote.
loggingserver¶
Recebe e consolida os logs dos módulos monitor, validator e balaio.
wsgiapp¶
Disponibiliza uma interface HTTP para acesso e manipulação dos dados.
uploader¶
Abstrai os backends de persistência de arquivos estáticos, por meio da superclasse uploader.BlobBackend.
Classes concretas de uploader.BlobBackend devem implementar os métodos connect(self) e cleanup(self). Ambos os métodos não devem receber argumentos, que devem ser passados na inicialização da instância quando necessário.
uploader.StaticScieloBackend¶
Classe concreta para a persistência de arquivos no servidores de ativos estáticos do SciELO. A comunicação é realizada via protocolo SFTP, e depende das credenciais de um usuário apto a realizar a ação.
Exemplo:
>>> from uploader import StaticScieloBackend
>>> with StaticScieloBackend(u'some.user', u'some.pass', u'/base/path/') as backend:
... backend.send(open(u'article.pdf', 'rb'), u'/abc/article.pdf')
...
u'http://static.scielo.org/abc/article.pdf'
Note
É importante que diferentes aplicações, que manipulam base paths distintos, possuam usuários com as devidas restrições de acesso, para evitar perda de dados acidental.