diff --git a/docs/dev/exporttoisis.rst b/docs/dev/exporttoisis.rst
index b4cf00dc..a51bdec0 100644
--- a/docs/dev/exporttoisis.rst
+++ b/docs/dev/exporttoisis.rst
@@ -22,14 +22,14 @@ Para a nova versão da ferramenta de gestão de periódicos, considerando as car
Introdução
----------
-As bases de dados ISIS geradas pelo Title Manager são utilizadas em dois prontos do processo de publicação da SciELO, são eles: processo de marcação e processamento para inclusão de conteúdo.
+As bases de dados ISIS geradas pelo Title Manager são utilizadas em dois pontos do processo de publicação da SciELO, são eles: processo de marcação e processamento para inclusão de conteúdo.
Processamento para inclusão de conteúdo
=======================================
Atualmente o SciELO possui um processamento (geraPadrao.bat) para inclusão de novas revistas, fascículos e artigos na coleção. Esse processamento recebe como entrada um conjunto de bases de dados, são elas: artigo, issue, code, title.
-As bases code, title e issue são únicadas para todo o processamento, significa que uma base de dados com todo o conteúdo de título, outra com todo conteúdo de code e outra com todo conteúdo de issues são geradas e gravadas em um diretório chamado serial gerando a seguinte estrutura de dados de entrada para o processamento.
+As bases code, title e issue são únicas para todo o processamento, significa que uma base de dados com todo o conteúdo de título, outra com todo conteúdo de code e outra com todo conteúdo de issues são geradas e gravadas em um diretório chamado serial gerando a seguinte estrutura de dados de entrada para o processamento.
.. code-block:: text
@@ -74,7 +74,7 @@ Em resumo, significa que o processo de exportação de bases do SciELO Manager p
Processo de Marcação
====================
-O processo de marcação de metadados de artigos nas SciELO é feito através da ferramenta Markup, que corresponde a um aplicativo VBSript embutido no Word para identificar os elementos dos artigos. Esse plugin do Word consulta algumas bases de dados ISIS geradas pela Title Manager para complementar a identificação de elementos no texto do artigo, como por exemplo:
+O processo de marcação de metadados de artigos nas SciELO é feito através da ferramenta Markup, que corresponde a um aplicativo VBScript embutido no Word para identificar os elementos dos artigos. Esse plugin do Word consulta algumas bases de dados ISIS geradas pela Title Manager para complementar a identificação de elementos no texto do artigo, como por exemplo:
* Identificação de seções dos fascículos (base code)
@@ -334,7 +334,7 @@ Title
quando mais de uma coleção compartilha mesma base title no site local. Resolver este problema
criando instalações independentes para cada coleção SciELO, ex: Brasil e Saúde Pública.
- Foram encontradas ocorrencias do campo v691 no arquivo sci_serial.xis entretanto parece não estar
+ Foram encontradas ocorrências do campo v691 no arquivo sci_serial.xis entretanto parece não estar
em uso uma vez que faz referência a arquivos template (ScieloXML/collections.xis) que não estão
atualizados.
@@ -418,4 +418,4 @@ Title
20. Seção (130)
- Excluído da aplicação. Não precisa ser mantido para compatibilidade. Nunca foi usado
\ No newline at end of file
+ Excluído da aplicação. Não precisa ser mantido para compatibilidade. Nunca foi usado
diff --git a/requirements.txt b/requirements.txt
index 90058441..02851db7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,10 +13,9 @@ yuicompressor
jsonfield
django-tastypie==0.9.16
django-htmlmin==0.7.0
-packtools==1.3.1
-Celery
-django-celery
-django-kombu
+packtools==1.3.3
+celery==3.1.25
+django-celery==3.1.16
defusedxml==0.4.1
cython
thriftpy
diff --git a/scielomanager/journalmanager/migrations/0032_auto__add_field_articleasset_preferred_alt_file.py b/scielomanager/journalmanager/migrations/0032_auto__add_field_articleasset_preferred_alt_file.py
new file mode 100644
index 00000000..4c7268e7
--- /dev/null
+++ b/scielomanager/journalmanager/migrations/0032_auto__add_field_articleasset_preferred_alt_file.py
@@ -0,0 +1,401 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'ArticleAsset.preferred_alt_file'
+ db.add_column('journalmanager_articleasset', 'preferred_alt_file',
+ self.gf('django.db.models.fields.files.FileField')(default=u'', max_length=1024),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'ArticleAsset.preferred_alt_file'
+ db.delete_column('journalmanager_articleasset', 'preferred_alt_file')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'journalmanager.aheadpressrelease': {
+ 'Meta': {'object_name': 'AheadPressRelease', '_ormbases': ['journalmanager.PressRelease']},
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'press_releases'", 'to': "orm['journalmanager.Journal']"}),
+ 'pressrelease_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.PressRelease']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.article': {
+ 'Meta': {'object_name': 'Article'},
+ 'aid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
+ 'article_type': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now_add': 'True', 'blank': 'True'}),
+ 'doi': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '2048', 'db_index': 'True'}),
+ 'domain_key': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_aop': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'issn_epub': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'issn_ppub': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'articles'", 'null': 'True', 'to': "orm['journalmanager.Issue']"}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'articles'", 'null': 'True', 'to': "orm['journalmanager.Journal']"}),
+ 'journal_title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
+ 'related_articles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['journalmanager.Article']", 'null': 'True', 'through': "orm['journalmanager.ArticlesLinkage']", 'blank': 'True'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}),
+ 'xml': ('scielomanager.custom_fields.XMLSPSField', [], {}),
+ 'xml_version': ('django.db.models.fields.CharField', [], {'max_length': '9'})
+ },
+ 'journalmanager.articleasset': {
+ 'Meta': {'object_name': 'ArticleAsset'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assets'", 'to': "orm['journalmanager.Article']"}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '1024'}),
+ 'preferred_alt_file': ('django.db.models.fields.files.FileField', [], {'default': "u''", 'max_length': '1024'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.TextField', [], {'default': "u''"})
+ },
+ 'journalmanager.articlecontrolattributes': {
+ 'Meta': {'object_name': 'ArticleControlAttributes'},
+ 'article': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'control_attributes'", 'unique': 'True', 'to': "orm['journalmanager.Article']"}),
+ 'articles_linkage_is_pending': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'es_is_dirty': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'es_updated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'journalmanager.articlehtmlrendition': {
+ 'Meta': {'unique_together': "(('article', 'lang'),)", 'object_name': 'ArticleHTMLRendition'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'htmls'", 'to': "orm['journalmanager.Article']"}),
+ 'build_version': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.articleslinkage': {
+ 'Meta': {'object_name': 'ArticlesLinkage'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'link_to': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'referrers'", 'to': "orm['journalmanager.Article']"}),
+ 'link_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'referrer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'links_to'", 'to': "orm['journalmanager.Article']"})
+ },
+ 'journalmanager.collection': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Collection'},
+ 'acronym': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
+ 'address': ('django.db.models.fields.TextField', [], {}),
+ 'address_complement': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
+ 'address_number': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'collection': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_collection'", 'to': "orm['auth.User']", 'through': "orm['journalmanager.UserCollections']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'fax': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'name_slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+ 'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.institution': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Institution'},
+ 'acronym': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
+ 'address': ('django.db.models.fields.TextField', [], {}),
+ 'address_complement': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
+ 'address_number': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'cel': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'complement': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'fax': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.issue': {
+ 'Meta': {'ordering': "('created', 'id')", 'object_name': 'Issue'},
+ 'cover': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'ctrl_vocabulary': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
+ 'editorial_standard': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_marked_up': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'null': 'True', 'blank': 'True'}),
+ 'number': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}),
+ 'publication_end_month': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'publication_start_month': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'publication_year': ('django.db.models.fields.IntegerField', [], {}),
+ 'section': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Section']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'spe_text': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'suppl_text': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'total_documents': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'type': ('django.db.models.fields.CharField', [], {'default': "'regular'", 'max_length': '15'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.UseLicense']", 'null': 'True'}),
+ 'volume': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'})
+ },
+ 'journalmanager.issuetitle': {
+ 'Meta': {'object_name': 'IssueTitle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Issue']"}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.journal': {
+ 'Meta': {'ordering': "('title', 'id')", 'object_name': 'Journal'},
+ 'abstract_keyword_languages': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'abstract_keyword_languages'", 'symmetrical': 'False', 'to': "orm['journalmanager.Language']"}),
+ 'acronym': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'ccn_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'collections': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Collection']", 'through': "orm['journalmanager.Membership']", 'symmetrical': 'False'}),
+ 'copyrighter': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+ 'cover': ('scielomanager.custom_fields.ContentTypeRestrictedFileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'creator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'enjoy_creator'", 'to': "orm['auth.User']"}),
+ 'ctrl_vocabulary': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'current_ahead_documents': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '3', 'blank': 'True'}),
+ 'editor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'editor_journal'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'editor_address': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'editor_address_city': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'editor_address_country': ('scielo_extensions.modelfields.CountryField', [], {'max_length': '2'}),
+ 'editor_address_state': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'editor_address_zip': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'editor_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'editor_name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'editor_phone1': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'editor_phone2': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'editorial_standard': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'eletronic_issn': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'final_num': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'final_vol': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'final_year': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4', 'blank': 'True'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_coverage': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'init_num': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'init_vol': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'init_year': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'is_indexed_aehci': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_indexed_scie': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_indexed_ssci': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Language']", 'symmetrical': 'False'}),
+ 'logo': ('scielomanager.custom_fields.ContentTypeRestrictedFileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'medline_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'medline_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}),
+ 'notes': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '254', 'blank': 'True'}),
+ 'other_previous_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
+ 'previous_ahead_documents': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '3', 'blank': 'True'}),
+ 'previous_title': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'prev_title'", 'null': 'True', 'to': "orm['journalmanager.Journal']"}),
+ 'print_issn': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'pub_level': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'publication_city': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'publisher_country': ('scielo_extensions.modelfields.CountryField', [], {'max_length': '2'}),
+ 'publisher_name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'publisher_state': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'scielo_issn': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'secs_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'short_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'db_index': 'True'}),
+ 'sponsor': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'journal_sponsor'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['journalmanager.Sponsor']"}),
+ 'study_areas': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'journals_migration_tmp'", 'null': 'True', 'to': "orm['journalmanager.StudyArea']"}),
+ 'subject_categories': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'journals'", 'null': 'True', 'to': "orm['journalmanager.SubjectCategory']"}),
+ 'subject_descriptors': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'title_iso': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'twitter_user': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'url_journal': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'url_online_submission': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.UseLicense']"})
+ },
+ 'journalmanager.journalmission': {
+ 'Meta': {'object_name': 'JournalMission'},
+ 'description': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'missions'", 'to': "orm['journalmanager.Journal']"}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']", 'null': 'True'})
+ },
+ 'journalmanager.journaltimeline': {
+ 'Meta': {'object_name': 'JournalTimeline'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'statuses'", 'to': "orm['journalmanager.Journal']"}),
+ 'reason': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'since': ('django.db.models.fields.DateTimeField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '16'})
+ },
+ 'journalmanager.journaltitle': {
+ 'Meta': {'object_name': 'JournalTitle'},
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'other_titles'", 'to': "orm['journalmanager.Journal']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.language': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Language'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iso_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'})
+ },
+ 'journalmanager.membership': {
+ 'Meta': {'unique_together': "(('journal', 'collection'),)", 'object_name': 'Membership'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'reason': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'since': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'inprogress'", 'max_length': '16'})
+ },
+ 'journalmanager.pendedform': {
+ 'Meta': {'object_name': 'PendedForm'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'form_hash': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pending_forms'", 'to': "orm['auth.User']"}),
+ 'view_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.pendedvalue': {
+ 'Meta': {'object_name': 'PendedValue'},
+ 'form': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['journalmanager.PendedForm']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'journalmanager.pressrelease': {
+ 'Meta': {'object_name': 'PressRelease'},
+ 'doi': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'journalmanager.pressreleasearticle': {
+ 'Meta': {'object_name': 'PressReleaseArticle'},
+ 'article_pid': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'press_release': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'articles'", 'to': "orm['journalmanager.PressRelease']"})
+ },
+ 'journalmanager.pressreleasetranslation': {
+ 'Meta': {'object_name': 'PressReleaseTranslation'},
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'press_release': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['journalmanager.PressRelease']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.regularpressrelease': {
+ 'Meta': {'object_name': 'RegularPressRelease', '_ormbases': ['journalmanager.PressRelease']},
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'press_releases'", 'to': "orm['journalmanager.Issue']"}),
+ 'pressrelease_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.PressRelease']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.section': {
+ 'Meta': {'ordering': "('id',)", 'object_name': 'Section'},
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '21', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'legacy_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.sectiontitle': {
+ 'Meta': {'ordering': "['title']", 'object_name': 'SectionTitle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'section': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'titles'", 'to': "orm['journalmanager.Section']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.sponsor': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Sponsor', '_ormbases': ['journalmanager.Institution']},
+ 'collections': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Collection']", 'symmetrical': 'False'}),
+ 'institution_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.Institution']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.studyarea': {
+ 'Meta': {'object_name': 'StudyArea'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'study_area': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.subjectcategory': {
+ 'Meta': {'object_name': 'SubjectCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'term': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'})
+ },
+ 'journalmanager.translateddata': {
+ 'Meta': {'object_name': 'TranslatedData'},
+ 'field': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'translation': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.uselicense': {
+ 'Meta': {'ordering': "['license_code']", 'object_name': 'UseLicense'},
+ 'disclaimer': ('django.db.models.fields.TextField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'license_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
+ 'reference_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.usercollections': {
+ 'Meta': {'unique_together': "(('user', 'collection'),)", 'object_name': 'UserCollections'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_manager': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'journalmanager.userprofile': {
+ 'Meta': {'object_name': 'UserProfile'},
+ 'email_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'America/Sao_Paulo'", 'max_length': '150'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ }
+ }
+
+ complete_apps = ['journalmanager']
\ No newline at end of file
diff --git a/scielomanager/journalmanager/migrations/0033_update_issue_label.py b/scielomanager/journalmanager/migrations/0033_update_issue_label.py
new file mode 100644
index 00000000..a4425975
--- /dev/null
+++ b/scielomanager/journalmanager/migrations/0033_update_issue_label.py
@@ -0,0 +1,401 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import DataMigration
+from django.db import models
+
+class Migration(DataMigration):
+
+ def forwards(self, orm):
+ "Write your forwards methods here."
+ # Note: Don't use "from appname.models import ModelName".
+ # Use orm.ModelName to refer to models in this application,
+ # and orm['appname.ModelName'] for models in other applications.
+ for spe_issue in orm.Issue.objects.filter(type='special'):
+ spe_issue.label = unicode(spe_issue)
+ spe_issue.save()
+
+ def backwards(self, orm):
+ "Write your backwards methods here."
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'journalmanager.aheadpressrelease': {
+ 'Meta': {'object_name': 'AheadPressRelease', '_ormbases': ['journalmanager.PressRelease']},
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'press_releases'", 'to': "orm['journalmanager.Journal']"}),
+ 'pressrelease_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.PressRelease']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.article': {
+ 'Meta': {'object_name': 'Article'},
+ 'aid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
+ 'article_type': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now_add': 'True', 'blank': 'True'}),
+ 'doi': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '2048', 'db_index': 'True'}),
+ 'domain_key': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_aop': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'issn_epub': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'issn_ppub': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'articles'", 'null': 'True', 'to': "orm['journalmanager.Issue']"}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'articles'", 'null': 'True', 'to': "orm['journalmanager.Journal']"}),
+ 'journal_title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
+ 'related_articles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['journalmanager.Article']", 'null': 'True', 'through': "orm['journalmanager.ArticlesLinkage']", 'blank': 'True'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}),
+ 'xml': ('scielomanager.custom_fields.XMLSPSField', [], {}),
+ 'xml_version': ('django.db.models.fields.CharField', [], {'max_length': '9'})
+ },
+ 'journalmanager.articleasset': {
+ 'Meta': {'object_name': 'ArticleAsset'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assets'", 'to': "orm['journalmanager.Article']"}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'owner': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '1024'}),
+ 'preferred_alt_file': ('django.db.models.fields.files.FileField', [], {'default': "u''", 'max_length': '1024'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.TextField', [], {'default': "u''"})
+ },
+ 'journalmanager.articlecontrolattributes': {
+ 'Meta': {'object_name': 'ArticleControlAttributes'},
+ 'article': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'control_attributes'", 'unique': 'True', 'to': "orm['journalmanager.Article']"}),
+ 'articles_linkage_is_pending': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'es_is_dirty': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'es_updated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'journalmanager.articlehtmlrendition': {
+ 'Meta': {'unique_together': "(('article', 'lang'),)", 'object_name': 'ArticleHTMLRendition'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'htmls'", 'to': "orm['journalmanager.Article']"}),
+ 'build_version': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.articleslinkage': {
+ 'Meta': {'object_name': 'ArticlesLinkage'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'link_to': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'referrers'", 'to': "orm['journalmanager.Article']"}),
+ 'link_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'referrer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'links_to'", 'to': "orm['journalmanager.Article']"})
+ },
+ 'journalmanager.collection': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Collection'},
+ 'acronym': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
+ 'address': ('django.db.models.fields.TextField', [], {}),
+ 'address_complement': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
+ 'address_number': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'collection': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_collection'", 'to': "orm['auth.User']", 'through': "orm['journalmanager.UserCollections']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'fax': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
+ 'name_slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+ 'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.institution': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Institution'},
+ 'acronym': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
+ 'address': ('django.db.models.fields.TextField', [], {}),
+ 'address_complement': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
+ 'address_number': ('django.db.models.fields.CharField', [], {'max_length': '8'}),
+ 'cel': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'complement': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'fax': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'zip_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.issue': {
+ 'Meta': {'ordering': "('created', 'id')", 'object_name': 'Issue'},
+ 'cover': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'ctrl_vocabulary': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
+ 'editorial_standard': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_marked_up': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'null': 'True', 'blank': 'True'}),
+ 'number': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}),
+ 'publication_end_month': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'publication_start_month': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'publication_year': ('django.db.models.fields.IntegerField', [], {}),
+ 'section': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Section']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'spe_text': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'suppl_text': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'total_documents': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'type': ('django.db.models.fields.CharField', [], {'default': "'regular'", 'max_length': '15'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.UseLicense']", 'null': 'True'}),
+ 'volume': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'})
+ },
+ 'journalmanager.issuetitle': {
+ 'Meta': {'object_name': 'IssueTitle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Issue']"}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.journal': {
+ 'Meta': {'ordering': "('title', 'id')", 'object_name': 'Journal'},
+ 'abstract_keyword_languages': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'abstract_keyword_languages'", 'symmetrical': 'False', 'to': "orm['journalmanager.Language']"}),
+ 'acronym': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'ccn_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'collections': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Collection']", 'through': "orm['journalmanager.Membership']", 'symmetrical': 'False'}),
+ 'copyrighter': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+ 'cover': ('scielomanager.custom_fields.ContentTypeRestrictedFileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'creator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'enjoy_creator'", 'to': "orm['auth.User']"}),
+ 'ctrl_vocabulary': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'current_ahead_documents': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '3', 'blank': 'True'}),
+ 'editor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'editor_journal'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'editor_address': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'editor_address_city': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+ 'editor_address_country': ('scielo_extensions.modelfields.CountryField', [], {'max_length': '2'}),
+ 'editor_address_state': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'editor_address_zip': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'editor_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
+ 'editor_name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'editor_phone1': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'editor_phone2': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'editorial_standard': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'eletronic_issn': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'final_num': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'final_vol': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'final_year': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4', 'blank': 'True'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_coverage': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'init_num': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'init_vol': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
+ 'init_year': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'is_indexed_aehci': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_indexed_scie': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_indexed_ssci': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Language']", 'symmetrical': 'False'}),
+ 'logo': ('scielomanager.custom_fields.ContentTypeRestrictedFileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'medline_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'medline_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}),
+ 'notes': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '254', 'blank': 'True'}),
+ 'other_previous_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
+ 'previous_ahead_documents': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '3', 'blank': 'True'}),
+ 'previous_title': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'prev_title'", 'null': 'True', 'to': "orm['journalmanager.Journal']"}),
+ 'print_issn': ('django.db.models.fields.CharField', [], {'max_length': '9', 'db_index': 'True'}),
+ 'pub_level': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'publication_city': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'publisher_country': ('scielo_extensions.modelfields.CountryField', [], {'max_length': '2'}),
+ 'publisher_name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'publisher_state': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+ 'scielo_issn': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'secs_code': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64', 'blank': 'True'}),
+ 'short_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'db_index': 'True'}),
+ 'sponsor': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'journal_sponsor'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['journalmanager.Sponsor']"}),
+ 'study_areas': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'journals_migration_tmp'", 'null': 'True', 'to': "orm['journalmanager.StudyArea']"}),
+ 'subject_categories': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'journals'", 'null': 'True', 'to': "orm['journalmanager.SubjectCategory']"}),
+ 'subject_descriptors': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'title_iso': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
+ 'twitter_user': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'url_journal': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'url_online_submission': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
+ 'use_license': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.UseLicense']"})
+ },
+ 'journalmanager.journalmission': {
+ 'Meta': {'object_name': 'JournalMission'},
+ 'description': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'missions'", 'to': "orm['journalmanager.Journal']"}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']", 'null': 'True'})
+ },
+ 'journalmanager.journaltimeline': {
+ 'Meta': {'object_name': 'JournalTimeline'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'statuses'", 'to': "orm['journalmanager.Journal']"}),
+ 'reason': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'since': ('django.db.models.fields.DateTimeField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '16'})
+ },
+ 'journalmanager.journaltitle': {
+ 'Meta': {'object_name': 'JournalTitle'},
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'other_titles'", 'to': "orm['journalmanager.Journal']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.language': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Language'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iso_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'})
+ },
+ 'journalmanager.membership': {
+ 'Meta': {'unique_together': "(('journal', 'collection'),)", 'object_name': 'Membership'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'reason': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
+ 'since': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'inprogress'", 'max_length': '16'})
+ },
+ 'journalmanager.pendedform': {
+ 'Meta': {'object_name': 'PendedForm'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'form_hash': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pending_forms'", 'to': "orm['auth.User']"}),
+ 'view_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.pendedvalue': {
+ 'Meta': {'object_name': 'PendedValue'},
+ 'form': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['journalmanager.PendedForm']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'journalmanager.pressrelease': {
+ 'Meta': {'object_name': 'PressRelease'},
+ 'doi': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'journalmanager.pressreleasearticle': {
+ 'Meta': {'object_name': 'PressReleaseArticle'},
+ 'article_pid': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'press_release': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'articles'", 'to': "orm['journalmanager.PressRelease']"})
+ },
+ 'journalmanager.pressreleasetranslation': {
+ 'Meta': {'object_name': 'PressReleaseTranslation'},
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'press_release': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['journalmanager.PressRelease']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
+ },
+ 'journalmanager.regularpressrelease': {
+ 'Meta': {'object_name': 'RegularPressRelease', '_ormbases': ['journalmanager.PressRelease']},
+ 'issue': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'press_releases'", 'to': "orm['journalmanager.Issue']"}),
+ 'pressrelease_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.PressRelease']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.section': {
+ 'Meta': {'ordering': "('id',)", 'object_name': 'Section'},
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '21', 'blank': 'True'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_trashed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'journal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Journal']"}),
+ 'legacy_code': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.sectiontitle': {
+ 'Meta': {'ordering': "['title']", 'object_name': 'SectionTitle'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Language']"}),
+ 'section': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'titles'", 'to': "orm['journalmanager.Section']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.sponsor': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Sponsor', '_ormbases': ['journalmanager.Institution']},
+ 'collections': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['journalmanager.Collection']", 'symmetrical': 'False'}),
+ 'institution_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['journalmanager.Institution']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'journalmanager.studyarea': {
+ 'Meta': {'object_name': 'StudyArea'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'study_area': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+ },
+ 'journalmanager.subjectcategory': {
+ 'Meta': {'object_name': 'SubjectCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'term': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'})
+ },
+ 'journalmanager.translateddata': {
+ 'Meta': {'object_name': 'TranslatedData'},
+ 'field': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'translation': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.uselicense': {
+ 'Meta': {'ordering': "['license_code']", 'object_name': 'UseLicense'},
+ 'disclaimer': ('django.db.models.fields.TextField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'license_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
+ 'reference_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'journalmanager.usercollections': {
+ 'Meta': {'unique_together': "(('user', 'collection'),)", 'object_name': 'UserCollections'},
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['journalmanager.Collection']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_manager': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'journalmanager.userprofile': {
+ 'Meta': {'object_name': 'UserProfile'},
+ 'email_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'America/Sao_Paulo'", 'max_length': '150'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ }
+ }
+
+ complete_apps = ['journalmanager']
+ symmetrical = True
diff --git a/scielomanager/journalmanager/models.py b/scielomanager/journalmanager/models.py
index 4fd7d9fd..44792312 100644
--- a/scielomanager/journalmanager/models.py
+++ b/scielomanager/journalmanager/models.py
@@ -31,9 +31,13 @@
from scielo_extensions import modelfields
from tastypie.models import create_api_key
import celery
+from PIL import Image
from scielomanager.utils import base28
-from scielomanager.custom_fields import ContentTypeRestrictedFileField, XMLSPSField
+from scielomanager.custom_fields import (
+ ContentTypeRestrictedFileField,
+ XMLSPSField,
+)
from . import modelmanagers
@@ -993,7 +997,8 @@ def identification(self):
values.append('suppl.%s' % self.suppl_text)
if self.type == 'special':
- values.append('spe.%s' % self.spe_text)
+ _spe_text = 'spe' + self.spe_text if self.spe_text else 'spe'
+ values.append(_spe_text)
return ' '.join([val for val in values if val]).strip().replace('ahead', 'ahead of print')
@@ -1497,8 +1502,12 @@ class ArticleAsset(models.Model):
"""
article = models.ForeignKey('Article', on_delete=models.CASCADE,
related_name='assets')
- file = models.FileField(upload_to=make_article_directory_path('assets'),
+ file = models.FileField(
+ upload_to=make_article_directory_path('assets'),
max_length=1024)
+ preferred_alt_file = models.FileField(
+ upload_to=make_article_directory_path('alt_assets'),
+ max_length=1024, default=u'')
owner = models.CharField(max_length=1024, default=u'')
use_license = models.TextField(default=u'')
updated_at = models.DateTimeField(auto_now=True)
@@ -1507,6 +1516,23 @@ def __repr__(self):
return u'<%s id="%s" url="%s">' % (self.__class__.__name__,
self.pk, self.file.url)
+ def is_image(self):
+ """Verifica se o ativo digital é uma imagem.
+ """
+ try:
+ img = Image.open(self.file)
+ except IOError:
+ return False
+ else:
+ return True
+
+ @property
+ def best_file(self):
+ if self.preferred_alt_file:
+ return self.preferred_alt_file
+ else:
+ return self.file
+
class ArticleHTMLRendition(models.Model):
"""Documento HTML de uma tradução de uma instância de Article.
diff --git a/scielomanager/journalmanager/tasks.py b/scielomanager/journalmanager/tasks.py
index ef5b0544..8736cd14 100644
--- a/scielomanager/journalmanager/tasks.py
+++ b/scielomanager/journalmanager/tasks.py
@@ -15,6 +15,7 @@
from celery.utils.log import get_task_logger
from django.templatetags.static import static
import packtools
+from PIL import Image
from scielomanager.celery import app
from scielomanager import connectors
@@ -389,10 +390,14 @@ def create_articleasset_from_bytes(aid, filename, content, owner=None,
_owner = owner or u''
_use_license = use_license or u''
+ # create and save the asset
asset = models.ArticleAsset(article=article, owner=_owner,
use_license=_use_license)
asset.file.save(filename, ContentFile(content))
+ # create a preferred alternative for the asset
+ create_preferred_image_file.delay(asset.pk)
+
logger.info('New ArticleAsset %s added to Article with aid: %s.',
repr(asset), aid)
@@ -434,3 +439,83 @@ def create_article_html_renditions(article_pk, css_url=None, valid_only=False):
return files_urls
+
+def convert_image_to_jpeg(filepath, mode=None, **kwargs):
+ """Converte a imagem no caminho `filepath` para o formato JPEG.
+
+ Retorna um buffer com o conteúdo convertido da imagem. Pode levantar
+ `ValueError` caso `filepath` não seja reconhecido como uma imagem.
+
+ :param **kwargs: (opcional) argumentos nomeados serão repassados para a
+ função `Image.save`, com exceção de `format` que foi pré-definido.
+ """
+ output_buffer = io.BytesIO()
+ _ = kwargs.pop('format', None)
+
+ original = Image.open(filepath)
+ if mode:
+ _image = original.convert(mode=mode)
+ else:
+ _image = original
+
+ _image.save(output_buffer, format='jpeg', **kwargs)
+
+ return output_buffer
+
+
+@app.task(throws=(ValueError, TypeError,))
+def create_preferred_image_file(asset_pk):
+ """Cria uma versão alternativa de `ArticleAsset.file`, preferida para o
+ manuseio.
+
+ Por hora a versão preferida é o JPEG ao invés de TIFF. Para os demais
+ formatos não serão geradas outras versões.
+
+ :param asset_pk: chave primária da instância de `ArticleAsset`.
+ """
+ try:
+ asset = models.ArticleAsset.objects.get(pk=asset_pk)
+
+ except models.ArticleAsset.DoesNotExist:
+ raise ValueError('Cannot find ArticleAsset with pk: %s' % asset_pk)
+
+ try:
+ filepath = asset.file.path
+ except ValueError as exc:
+ logger.exception(exc)
+ logger.error('Cannot create a preferred alt file for %s. Skipping.',
+ filepath)
+ raise
+
+ if not asset.is_image():
+ logger.error('Cannot create a preferred alt file for %s. Skipping.',
+ filepath)
+ raise ValueError('Cannot create preferred alternatives for files '
+ 'other than images.')
+
+ _file = Image.open(asset.file.path)
+ if _file.format.lower() != 'tiff':
+ raise ValueError('Image is already in a preferred format.')
+
+ try:
+ # Levanta IOError caso `filepath` não seja um arquivo de imagem.
+ jpeg_buffer = convert_image_to_jpeg(filepath)
+ except IOError as exc:
+ logger.exception(exc)
+ logger.error('Cannot create a preferred alt file for %s. Skipping.',
+ filepath)
+ raise
+
+ _, filename = os.path.split(filepath)
+ filename_head, _ = os.path.splitext(filename)
+
+ jpeg_filename = filename_head + '.jpeg'
+
+ asset.preferred_alt_file.save(jpeg_filename,
+ ContentFile(jpeg_buffer.getvalue()))
+
+ logger.info('Finished creating an alternative file for %s.',
+ repr(asset))
+
+ return asset.preferred_alt_file.url
+
diff --git a/scielomanager/journalmanager/tests/image_test/sample_tif_image.tif b/scielomanager/journalmanager/tests/image_test/sample_tif_image.tif
new file mode 100755
index 00000000..55ce3be0
Binary files /dev/null and b/scielomanager/journalmanager/tests/image_test/sample_tif_image.tif differ
diff --git a/scielomanager/journalmanager/tests/modelfactories.py b/scielomanager/journalmanager/tests/modelfactories.py
index b367a19f..c981bd63 100644
--- a/scielomanager/journalmanager/tests/modelfactories.py
+++ b/scielomanager/journalmanager/tests/modelfactories.py
@@ -6,6 +6,7 @@
from journalmanager import models
from django.contrib.auth.models import Group
+from django.core.files.base import File
_HERE = os.path.dirname(os.path.abspath(__file__))
@@ -15,6 +16,10 @@
SAMPLE_XML = xml_file.read()
+SAMPLE_TIFF_IMAGE = open(
+ os.path.join(_HERE, 'image_test', 'sample_tif_image.tif'))
+
+
with open(os.path.join(_HERE, 'xml_samples', '0034-8910-rsp-48-2-0216_related.xml')) as xml_file:
SAMPLE_XML_RELATED = xml_file.read()
@@ -232,3 +237,13 @@ class ArticleFactory(factory.Factory):
article_type = u'research-article'
doi = u'10.1590/S0034-8910.2014048004965'
+
+class ArticleAssetFactory(factory.Factory):
+ FACTORY_FOR = models.ArticleAsset
+
+ article = factory.SubFactory(ArticleFactory)
+ file = File(SAMPLE_TIFF_IMAGE)
+ owner = u'SciELO'
+ use_license = u'Creative Commons - BY'
+
+
diff --git a/scielomanager/journalmanager/tests/tests_models.py b/scielomanager/journalmanager/tests/tests_models.py
index d4c2a63c..513b6fb0 100644
--- a/scielomanager/journalmanager/tests/tests_models.py
+++ b/scielomanager/journalmanager/tests/tests_models.py
@@ -158,7 +158,7 @@ def test_identification_for_ahead(self):
def test_identification_for_special(self):
issue = IssueFactory.create(number='1', spe_text='2', type='special')
- expected = u'1 spe.2'
+ expected = u'1 spe2'
self.assertEqual(issue.identification, expected)
diff --git a/scielomanager/journalmanager/tests/tests_tasks.py b/scielomanager/journalmanager/tests/tests_tasks.py
index b54acd0c..43edb452 100644
--- a/scielomanager/journalmanager/tests/tests_tasks.py
+++ b/scielomanager/journalmanager/tests/tests_tasks.py
@@ -1,4 +1,5 @@
#coding: utf-8
+import os
import io
import copy
import unittest
@@ -898,3 +899,103 @@ def test_htmls_filenames_are_suffixed_with_lang(self):
for url, lang in urls:
self.assertTrue(url.endswith(u'-' + lang + u'.html'))
+
+class ConvertImageToJpegTests(TestCase):
+ def test_convert_gif_image_to_jpeg(self):
+ from PIL import Image
+ image_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ u'image_test', u'cover_too_heavy.gif')
+
+ # A conversão de GIF para JPEG depende da conversão do modo para a
+ # profundidade de cor por pixel. Por isso do argumento `mode`.
+ jpeg_buff = tasks.convert_image_to_jpeg(image_path, mode='RGB')
+ jpeg_buff.seek(0)
+
+ img = Image.open(jpeg_buff)
+ self.assertEquals(img.format.lower(), 'jpeg')
+
+ def test_convert_tif_image_to_jpeg(self):
+ from PIL import Image
+ image_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ u'image_test', u'sample_tif_image.tif')
+
+ jpeg_buff = tasks.convert_image_to_jpeg(image_path)
+ jpeg_buff.seek(0)
+
+ img = Image.open(jpeg_buff)
+ self.assertEquals(img.format.lower(), 'jpeg')
+
+ def test_convert_pdf_to_jpeg(self):
+ """That should raise a IOError.
+ """
+ from PIL import Image
+ image_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ u'image_test', u'logo.pdf')
+
+ self.assertRaises(IOError,
+ lambda: tasks.convert_image_to_jpeg(image_path))
+
+
+class CreatePreferredImageFileTests(TestCase):
+ def setUp(self):
+ self.unlink_registry = []
+
+ def tearDown(self):
+ for path in self.unlink_registry:
+ os.unlink(path)
+
+ def test_create_alt_image_from_tiff(self):
+ asset = modelfactories.ArticleAssetFactory.create()
+ self.assertEquals(False, bool(asset.preferred_alt_file))
+
+ tasks.create_preferred_image_file(asset.pk)
+
+ modified_asset = models.ArticleAsset.objects.get(pk=asset.pk)
+ self.assertEquals(True, bool(modified_asset.preferred_alt_file))
+
+ # evitar que arquivos temporários sobrem no disco.
+ self.unlink_registry.append(asset.file.path)
+ self.unlink_registry.append(modified_asset.preferred_alt_file.path)
+
+ def test_alt_to_tiff_is_jpeg(self):
+ from PIL import Image
+ asset = modelfactories.ArticleAssetFactory.create()
+ tasks.create_preferred_image_file(asset.pk)
+ modified_asset = models.ArticleAsset.objects.get(pk=asset.pk)
+ self.assertEquals('jpeg',
+ Image.open(modified_asset.preferred_alt_file.path).format.lower())
+
+ # evitar que arquivos temporários sobrem no disco.
+ self.unlink_registry.append(asset.file.path)
+ self.unlink_registry.append(modified_asset.preferred_alt_file.path)
+
+ def test_non_images_raise_ValueError(self):
+ from django.core.files.base import File
+ SAMPLE_PDF = open(os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ u'image_test',
+ u'logo.pdf'))
+
+ asset = modelfactories.ArticleAssetFactory.build()
+ asset.file = File(SAMPLE_PDF)
+
+ self.assertRaises(ValueError,
+ lambda: tasks.create_preferred_image_file(asset.pk))
+
+ def test_images_other_than_tiff_raise_ValueError(self):
+ from django.core.files.base import File
+ SAMPLE_PDF = open(os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ u'image_test',
+ u'cover.gif'))
+
+ asset = modelfactories.ArticleAssetFactory.build()
+ asset.file = File(SAMPLE_PDF)
+
+ self.assertRaises(ValueError,
+ lambda: tasks.create_preferred_image_file(asset.pk))
+
+ def test_missing_asset_raise_ValueError(self):
+ self.assertRaises(ValueError,
+ lambda: tasks.create_preferred_image_file(999999))
+
diff --git a/scielomanager/scielomanager/locale/es_ES/LC_MESSAGES/django.po b/scielomanager/scielomanager/locale/es_ES/LC_MESSAGES/django.po
index 605f2c77..3fad0949 100644
--- a/scielomanager/scielomanager/locale/es_ES/LC_MESSAGES/django.po
+++ b/scielomanager/scielomanager/locale/es_ES/LC_MESSAGES/django.po
@@ -1,11 +1,12 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
# Translators:
# fabiobatalha
\n" " A .zip package will be downloaded, containing the\n" -" metadata files required by the Markup" -"a> software.\n" +" metadata files required by the Markup software.\n" "
\n" "\n" "
\n" -"
\n" -"Un paquete .zipserá descargado, conteniendo los archivos " -"del metadata requeridos por el software de Margen.\n" -"
\n" -"\n" -"
\n
\nUn paquete .zipserá descargado, conteniendo los archivos del metadata requeridos por el software de Margen.\n
\n\n