Issue #56, remove document version fields 'release_level' and 'serial'

This commit is contained in:
Roberto Rosario
2014-10-18 02:32:11 -04:00
parent afc7bffca6
commit eaefa305a2
8 changed files with 151 additions and 66 deletions

View File

@@ -6,7 +6,7 @@ from django.conf import settings
from django.core.files.base import File
from django.test import TestCase
from documents.literals import VERSION_UPDATE_MAJOR, RELEASE_LEVEL_FINAL
from documents.literals import VERSION_UPDATE_MAJOR
from documents.models import Document, DocumentType
from django_gpg.literals import SIGNATURE_STATE_VALID
from django_gpg.runtime import gpg
@@ -44,8 +44,6 @@ class DocumentTestCase(TestCase):
new_version_data = {
'comment': 'test comment 1',
'version_update': VERSION_UPDATE_MAJOR,
'release_level': RELEASE_LEVEL_FINAL,
'serial': 0,
}
self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data)
@@ -57,8 +55,6 @@ class DocumentTestCase(TestCase):
new_version_data = {
'comment': 'test comment 2',
'version_update': VERSION_UPDATE_MAJOR,
'release_level': RELEASE_LEVEL_FINAL,
'serial': 0,
}
with open(TEST_DOCUMENT_PATH) as file_object:
self.document.new_version(file=File(file_object), **new_version_data)

View File

@@ -143,16 +143,16 @@ class_permissions(Document, [PERMISSION_DOCUMENT_DELETE,
PERMISSION_HISTORY_VIEW])
document_search = SearchModel('documents', 'Document', permission=PERMISSION_DOCUMENT_VIEW, serializer=DocumentSerializer)
document_search.add_model_field('document_type__name', label=_(u'Document type'))
# TODO: move these to their respective apps
# Moving these to other apps cause an ImportError; circular import?
document_search.add_model_field('document_type__name', label=_(u'Document type'))
document_search.add_model_field('versions__mimetype', label=_(u'MIME type'))
document_search.add_model_field('versions__filename', label=_(u'Filename'))
document_search.add_model_field('metadata__metadata_type__name', label=_(u'Metadata type'))
document_search.add_model_field('metadata__value', label=_(u'Metadata value'))
document_search.add_model_field('versions__pages__content', label=_(u'Content'))
document_search.add_model_field('description', label=_(u'Description'))
document_search.add_related_field('comments', 'Comment', 'comment', 'object_pk', label=_(u'Comments'))
namespace = StatisticNamespace(name='documents', label=_(u'Documents'))
namespace.add_statistic(DocumentStatistics(name='document_stats', label=_(u'Document tendencies')))

View File

@@ -93,14 +93,12 @@ class APIDocumentVersionCreateView(generics.CreateAPIView):
major=serializer.object.major,
minor=serializer.object.minor,
micro=serializer.object.micro,
release_level=serializer.object.release_level,
serial=serializer.object.serial
)
except DocumentVersion.DoesNotExist:
self.object = serializer.save(force_insert=True)
else:
return Response(
{'non_field_errors': 'A version with the same major, minor, micro, release_level and serial values already exist for this document.'},
{'non_field_errors': 'A version with the same major, minor and micro values already exist for this document.'},
status=status.HTTP_400_BAD_REQUEST
)

View File

@@ -13,8 +13,7 @@ from common.widgets import TextAreaDiv
from .models import (Document, DocumentType, DocumentPage,
DocumentPageTransformation, DocumentTypeFilename,
DocumentVersion)
from .literals import (DEFAULT_ZIP_FILENAME, RELEASE_LEVEL_CHOICES,
RELEASE_LEVEL_FINAL)
from .literals import DEFAULT_ZIP_FILENAME
from .widgets import DocumentPagesCarouselWidget, DocumentPageImageWidget
@@ -143,20 +142,6 @@ class DocumentForm(forms.ModelForm):
choices=DocumentVersion.get_version_update_choices(document.latest_version)
)
self.fields['release_level'] = forms.ChoiceField(
label=_(u'Release level'),
choices=RELEASE_LEVEL_CHOICES,
initial=RELEASE_LEVEL_FINAL,
)
self.fields['serial'] = forms.IntegerField(
label=_(u'Release level serial'),
initial=0,
widget=forms.widgets.TextInput(
attrs={'style': 'width: auto;'}
),
)
self.fields['comment'] = forms.CharField(
label=_(u'Comment'),
required=False,
@@ -172,8 +157,6 @@ class DocumentForm(forms.ModelForm):
cleaned_data['new_version_data'] = {
'comment': self.cleaned_data.get('comment'),
'version_update': self.cleaned_data.get('version_update'),
'release_level': self.cleaned_data.get('release_level'),
'serial': self.cleaned_data.get('serial'),
}
# Always return the full collection of cleaned data.
@@ -191,8 +174,6 @@ class DocumentForm_edit(DocumentForm):
def __init__(self, *args, **kwargs):
super(DocumentForm_edit, self).__init__(*args, **kwargs)
if kwargs['instance'].latest_version:
self.fields.pop('serial')
self.fields.pop('release_level')
self.fields.pop('version_update')
self.fields.pop('comment')
else:

View File

@@ -5,20 +5,6 @@ PICTURE_ERROR_MEDIUM = u'1297211435_error.png'
PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png'
PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.png'
RELEASE_LEVEL_FINAL = 1
RELEASE_LEVEL_ALPHA = 2
RELEASE_LEVEL_BETA = 3
RELEASE_LEVEL_RC = 4
RELEASE_LEVEL_HF = 5
RELEASE_LEVEL_CHOICES = (
(RELEASE_LEVEL_FINAL, _(u'Final')),
(RELEASE_LEVEL_ALPHA, _(u'Alpha')),
(RELEASE_LEVEL_BETA, _(u'Beta')),
(RELEASE_LEVEL_RC, _(u'Release candidate')),
(RELEASE_LEVEL_HF, _(u'Hotfix')),
)
VERSION_UPDATE_MAJOR = u'major'
VERSION_UPDATE_MINOR = u'minor'
VERSION_UPDATE_MICRO = u'micro'

View File

@@ -0,0 +1,139 @@
# -*- 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):
# Removing unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro', 'release_level', 'serial']
db.delete_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro', 'release_level', 'serial'])
# Deleting field 'DocumentVersion.serial'
db.delete_column(u'documents_documentversion', 'serial')
# Deleting field 'DocumentVersion.release_level'
db.delete_column(u'documents_documentversion', 'release_level')
# Adding unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro']
db.create_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro'])
def backwards(self, orm):
# Removing unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro']
db.delete_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro'])
# Adding field 'DocumentVersion.serial'
db.add_column(u'documents_documentversion', 'serial',
self.gf('django.db.models.fields.PositiveIntegerField')(default=0),
keep_default=False)
# Adding field 'DocumentVersion.release_level'
db.add_column(u'documents_documentversion', 'release_level',
self.gf('django.db.models.fields.PositiveIntegerField')(default=1),
keep_default=False)
# Adding unique constraint on 'DocumentVersion', fields ['document', 'major', 'minor', 'micro', 'release_level', 'serial']
db.create_unique(u'documents_documentversion', ['document_id', 'major', 'minor', 'micro', 'release_level', 'serial'])
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'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'}),
u'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'})
},
u'documents.document': {
'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'},
'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'documents'", 'null': 'True', 'to': u"orm['documents.DocumentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'uuid': ('django.db.models.fields.CharField', [], {'max_length': '48', 'blank': 'True'})
},
u'documents.documentpage': {
'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'},
'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'document_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': u"orm['documents.DocumentVersion']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'page_label': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'})
},
u'documents.documentpagetransformation': {
'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'},
'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.DocumentPage']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'})
},
u'documents.documenttype': {
'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
},
u'documents.documenttypefilename': {
'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'},
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.DocumentType']"}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'documents.documentversion': {
'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro'),)", 'object_name': 'DocumentVersion'},
'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'versions'", 'to': u"orm['documents.Document']"}),
'encoding': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
'mimetype': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
u'documents.recentdocument': {
'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'},
'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.Document']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
}
}
complete_apps = ['documents']

View File

@@ -30,8 +30,7 @@ from mimetype.api import get_mimetype
from .events import HISTORY_DOCUMENT_CREATED
from .exceptions import NewDocumentVersionNotAllowed
from .literals import (RELEASE_LEVEL_CHOICES, RELEASE_LEVEL_FINAL,
VERSION_UPDATE_MAJOR, VERSION_UPDATE_MICRO,
from .literals import (VERSION_UPDATE_MAJOR, VERSION_UPDATE_MICRO,
VERSION_UPDATE_MINOR)
from .managers import (DocumentPageTransformationManager, DocumentTypeManager,
RecentDocumentManager)
@@ -187,7 +186,7 @@ class Document(models.Model):
def size(self):
return self.latest_version.size
def new_version(self, file, user=None, comment=None, version_update=None, release_level=None, serial=None):
def new_version(self, file, user=None, comment=None, version_update=None):
logger.debug('creating new document version')
# TODO: move this restriction to a signal processor of the checkouts app
if not self.is_new_versions_allowed(user=user):
@@ -202,8 +201,6 @@ class Document(models.Model):
major=new_version_dict.get('major'),
minor=new_version_dict.get('minor'),
micro=new_version_dict.get('micro'),
release_level=release_level,
serial=serial,
comment=comment,
)
new_version.save()
@@ -316,8 +313,8 @@ class DocumentVersion(models.Model):
@staticmethod
def get_version_update_choices(document_version):
return (
(VERSION_UPDATE_MAJOR, _(u'Major %(major)i.%(minor)i, (new release)') % document_version.get_new_version_dict(VERSION_UPDATE_MAJOR)),
(VERSION_UPDATE_MINOR, _(u'Minor %(major)i.%(minor)i, (some updates)') % document_version.get_new_version_dict(VERSION_UPDATE_MINOR)),
(VERSION_UPDATE_MAJOR, _(u'Major %(major)i.%(minor)i.%(micro)i, (new release)') % document_version.get_new_version_dict(VERSION_UPDATE_MAJOR)),
(VERSION_UPDATE_MINOR, _(u'Minor %(major)i.%(minor)i.%(micro)i, (some updates)') % document_version.get_new_version_dict(VERSION_UPDATE_MINOR)),
(VERSION_UPDATE_MICRO, _(u'Micro %(major)i.%(minor)i.%(micro)i, (fixes)') % document_version.get_new_version_dict(VERSION_UPDATE_MICRO))
)
@@ -333,8 +330,6 @@ class DocumentVersion(models.Model):
major = models.PositiveIntegerField(verbose_name=_(u'Mayor'), default=1)
minor = models.PositiveIntegerField(verbose_name=_(u'Minor'), default=0)
micro = models.PositiveIntegerField(verbose_name=_(u'Micro'), default=0)
release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'Release level'))
serial = models.PositiveIntegerField(verbose_name=_(u'Serial'), default=0)
timestamp = models.DateTimeField(verbose_name=_(u'Timestamp'), auto_now_add=True)
comment = models.TextField(blank=True, verbose_name=_(u'Comment'))
@@ -346,7 +341,7 @@ class DocumentVersion(models.Model):
checksum = models.TextField(blank=True, null=True, verbose_name=_(u'Checksum'), editable=False)
class Meta:
unique_together = ('document', 'major', 'minor', 'micro', 'release_level', 'serial')
unique_together = ('document', 'major', 'minor', 'micro')
verbose_name = _(u'Document version')
verbose_name_plural = _(u'Document version')
@@ -379,13 +374,7 @@ class DocumentVersion(models.Model):
"""
Return the formatted version information
"""
vers = [u'%i.%i' % (self.major, self.minor), ]
if self.micro:
vers.append(u'.%i' % self.micro)
if self.release_level != RELEASE_LEVEL_FINAL:
vers.append(u'%s%i' % (self.get_release_level_display(), self.serial))
return u''.join(vers)
return u'%i.%i.%i' % (self.major, self.minor, self.micro)
def save(self, *args, **kwargs):
"""

View File

@@ -13,7 +13,7 @@ from django.test import TestCase
from rest_framework import status
from rest_framework.test import APIClient
from .literals import VERSION_UPDATE_MAJOR, RELEASE_LEVEL_FINAL
from .literals import VERSION_UPDATE_MAJOR
from .models import Document, DocumentType
TEST_ADMIN_PASSWORD = 'test_admin_password'
@@ -59,8 +59,6 @@ class DocumentTestCase(TestCase):
new_version_data = {
'comment': 'test comment 1',
'version_update': VERSION_UPDATE_MAJOR,
'release_level': RELEASE_LEVEL_FINAL,
'serial': 0,
}
new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data)
@@ -70,8 +68,6 @@ class DocumentTestCase(TestCase):
new_version_data = {
'comment': 'test comment 2',
'version_update': VERSION_UPDATE_MAJOR,
'release_level': RELEASE_LEVEL_FINAL,
'serial': 0,
}
with open(TEST_DOCUMENT_PATH) as file_object:
new_version = self.document.new_version(file=File(file_object), **new_version_data)