Add optional document type to documents uploaded for a POP3 email source
This commit is contained in:
@@ -0,0 +1,112 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
import 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 'POP3Email.document_type'
|
||||||
|
db.add_column('sources_pop3email', 'document_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentType'], null=True, blank=True), keep_default=False)
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
|
||||||
|
# Deleting field 'POP3Email.document_type'
|
||||||
|
db.delete_column('sources_pop3email', 'document_type_id')
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
'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'})
|
||||||
|
},
|
||||||
|
'documents.documenttype': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'},
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'})
|
||||||
|
},
|
||||||
|
'sources.outofprocess': {
|
||||||
|
'Meta': {'ordering': "('title',)", 'object_name': 'OutOfProcess'},
|
||||||
|
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
|
||||||
|
},
|
||||||
|
'sources.pop3email': {
|
||||||
|
'Meta': {'ordering': "('title',)", 'object_name': 'POP3Email'},
|
||||||
|
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'host': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'interval': ('django.db.models.fields.PositiveIntegerField', [], {'default': '900'}),
|
||||||
|
'password': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'port': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'ssl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
|
||||||
|
},
|
||||||
|
'sources.pop3emaillog': {
|
||||||
|
'Meta': {'ordering': "('creation_datetime',)", 'object_name': 'POP3EmailLog'},
|
||||||
|
'creation_datetime': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'pop3_email': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sources.POP3Email']"}),
|
||||||
|
'status': ('django.db.models.fields.TextField', [], {})
|
||||||
|
},
|
||||||
|
'sources.sourcetransformation': {
|
||||||
|
'Meta': {'ordering': "('order',)", 'object_name': 'SourceTransformation'},
|
||||||
|
'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||||
|
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
|
||||||
|
'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'})
|
||||||
|
},
|
||||||
|
'sources.stagingfolder': {
|
||||||
|
'Meta': {'ordering': "('title',)", 'object_name': 'StagingFolder'},
|
||||||
|
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
'delete_after_upload': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'folder_path': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'icon': ('django.db.models.fields.CharField', [], {'max_length': '24', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'preview_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'preview_width': ('django.db.models.fields.IntegerField', [], {}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
||||||
|
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
|
||||||
|
},
|
||||||
|
'sources.watchfolder': {
|
||||||
|
'Meta': {'ordering': "('title',)", 'object_name': 'WatchFolder'},
|
||||||
|
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
'delete_after_upload': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'folder_path': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'interval': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
||||||
|
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
|
||||||
|
},
|
||||||
|
'sources.webform': {
|
||||||
|
'Meta': {'ordering': "('title',)", 'object_name': 'WebForm'},
|
||||||
|
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'icon': ('django.db.models.fields.CharField', [], {'max_length': '24', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||||
|
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
||||||
|
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['sources']
|
||||||
@@ -200,10 +200,11 @@ class POP3Email(BaseModel):
|
|||||||
password = models.CharField(max_length=64, verbose_name=_(u'password'))
|
password = models.CharField(max_length=64, verbose_name=_(u'password'))
|
||||||
uncompress = models.CharField(max_length=1, choices=SOURCE_UNCOMPRESS_CHOICES, verbose_name=_(u'uncompress'), help_text=_(u'Whether to expand or not compressed archives.'))
|
uncompress = models.CharField(max_length=1, choices=SOURCE_UNCOMPRESS_CHOICES, verbose_name=_(u'uncompress'), help_text=_(u'Whether to expand or not compressed archives.'))
|
||||||
interval = models.PositiveIntegerField(default=DEFAULT_POP3_INTERVAL, verbose_name=_(u'interval'), help_text=_(u'Interval in seconds between document downloads from this account.'))
|
interval = models.PositiveIntegerField(default=DEFAULT_POP3_INTERVAL, verbose_name=_(u'interval'), help_text=_(u'Interval in seconds between document downloads from this account.'))
|
||||||
|
document_type = models.ForeignKey(DocumentType, null=True, blank=True, verbose_name=_(u'document type'), help_text=_(u'Assign a document type to documents uploaded from this source.'))
|
||||||
|
|
||||||
# From: http://bookmarks.honewatson.com/2009/08/11/python-gmail-imaplib-search-subject-get-attachments/
|
# From: http://bookmarks.honewatson.com/2009/08/11/python-gmail-imaplib-search-subject-get-attachments/
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def process_message(source, message, expand=False):
|
def process_message(source, message):
|
||||||
email = message_from_string(message)
|
email = message_from_string(message)
|
||||||
counter = 1
|
counter = 1
|
||||||
|
|
||||||
@@ -223,7 +224,7 @@ class POP3Email(BaseModel):
|
|||||||
logger.debug('filename: %s' % filename)
|
logger.debug('filename: %s' % filename)
|
||||||
|
|
||||||
document_file = Attachment(part, name=filename)
|
document_file = Attachment(part, name=filename)
|
||||||
source.upload_file(document_file, expand=expand)
|
source.upload_file(document_file, expand=source.uncompress, document_type=source.document_type)
|
||||||
|
|
||||||
|
|
||||||
def fetch_mail(self):
|
def fetch_mail(self):
|
||||||
@@ -267,7 +268,7 @@ class POP3Email(BaseModel):
|
|||||||
|
|
||||||
complete_message = '\n'.join(mailbox.retr(message_number)[1])
|
complete_message = '\n'.join(mailbox.retr(message_number)[1])
|
||||||
|
|
||||||
POP3Email.process_message(source=self, message=complete_message, expand=self.uncompress)
|
POP3Email.process_message(source=self, message=complete_message)
|
||||||
mailbox.dele(message_number)
|
mailbox.dele(message_number)
|
||||||
|
|
||||||
mailbox.quit()
|
mailbox.quit()
|
||||||
|
|||||||
Reference in New Issue
Block a user