Skip to content

Commit

Permalink
Merge pull request #11 from etalab/clean_publish_as
Browse files Browse the repository at this point in the history
Refactor forms with current_user and publish_as handling
  • Loading branch information
noirbizarre committed May 5, 2015
2 parents 4a828aa + 2459296 commit 0927c42
Show file tree
Hide file tree
Showing 17 changed files with 653 additions and 163 deletions.
23 changes: 5 additions & 18 deletions udata/core/dataset/forms.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from udata.auth import current_user
from udata.forms import Form, ModelForm, UserModelFormMixin, fields, validators, widgets
from udata.forms import Form, ModelForm, fields, validators, widgets
from udata.i18n import lazy_gettext as _

from udata.core.storages import resources

from .models import Dataset, Resource, License, Checksum, UPDATE_FREQUENCIES, DEFAULT_FREQUENCY, RESOURCE_TYPES, CHECKSUM_TYPES

__all__ = ('DatasetForm', 'DatasetCreateForm', 'ResourceForm', 'CommunityResourceForm', 'DatasetExtraForm')
__all__ = ('DatasetForm', 'ResourceForm', 'CommunityResourceForm', 'DatasetExtraForm')


class DatasetForm(ModelForm):
Expand All @@ -31,20 +30,9 @@ class DatasetForm(ModelForm):
private = fields.BooleanField(_('Private'),
description=_('Restrict the dataset visibility to you or your organization only.'))


class DatasetCreateForm(DatasetForm):
owner = fields.CurrentUserField()
organization = fields.PublishAsField(_('Publish as'))

def save(self, commit=True, **kwargs):
dataset = super(DatasetCreateForm, self).save(commit=False, **kwargs)
if not dataset.organization:
dataset.owner = current_user._get_current_object()

if commit:
dataset.save()

return dataset


class DatasetFullForm(DatasetForm):
organization = fields.PublishAsField()
Expand Down Expand Up @@ -90,15 +78,14 @@ class ResourceForm(ModelForm):
description=_('Whether the resource is an uploaded file, a remote file or an API'))
url = fields.UploadableURLField(_('URL'), [validators.required()], storage=resources)
format = fields.StringField(_('Format'), widget=widgets.FormatAutocompleter())
# checksum = fields.FormField(ChecksumForm, _('Checksum'))
checksum = ChecksumField(_('Checksum'))
mime = fields.StringField(_('Mime type'),
description=_('The mime type associated to the extension. (ex: text/plain)'))
size = fields.IntegerField(_('Size'), [validators.optional()], description=_('The file size in bytes'))


class CommunityResourceForm(UserModelFormMixin, ResourceForm):
pass
class CommunityResourceForm(ResourceForm):
owner = fields.CurrentUserField()


class DatasetExtraForm(Form):
Expand Down
4 changes: 2 additions & 2 deletions udata/core/dataset/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from udata.core import storages
from udata.core.site.views import current_site

from .forms import DatasetForm, DatasetCreateForm, ResourceForm, CommunityResourceForm, DatasetExtraForm
from .forms import DatasetForm, ResourceForm, CommunityResourceForm, DatasetExtraForm
from .permissions import CommunityResourceEditPermission, DatasetEditPermission

blueprint = I18nBlueprint('datasets', __name__, url_prefix='/datasets')
Expand Down Expand Up @@ -106,7 +106,7 @@ def get_context(self):
@blueprint.route('/new/', endpoint='new')
class DatasetCreateView(CreateView):
model = Dataset
form = DatasetCreateForm
form = DatasetForm
template_name = 'dataset/create.html'

def get_success_url(self):
Expand Down
6 changes: 3 additions & 3 deletions udata/core/organization/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from __future__ import unicode_literals

from udata.auth import current_user
from udata.forms import Form, ModelForm, UserModelForm, fields, validators
from udata.forms import Form, ModelForm, fields, validators
from udata.i18n import lazy_gettext as _

from .models import Organization, MembershipRequest, Member, LOGO_SIZES, ORG_ROLES
Expand Down Expand Up @@ -56,10 +56,10 @@ class OrganizationExtraForm(Form):
old_key = fields.StringField(_('Old key'))


class MembershipRequestForm(UserModelForm):
class MembershipRequestForm(ModelForm):
model_class = MembershipRequest
user_field = 'user'

user = fields.CurrentUserField()
comment = fields.StringField(_('Comment'), [validators.required()])


Expand Down
8 changes: 4 additions & 4 deletions udata/core/post/forms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from udata.forms import UserModelForm, fields, validators, widgets
from udata.forms import ModelForm, fields, validators, widgets
from udata.i18n import lazy_gettext as _

from .models import Post, IMAGE_SIZES
Expand All @@ -10,9 +10,11 @@
__all__ = ('PostForm', )


class PostForm(UserModelForm):
class PostForm(ModelForm):
model_class = Post

owner = fields.CurrentUserField()

name = fields.StringField(_('Name'), [validators.required()])
headline = fields.StringField(_('Headline'), widget=widgets.TextArea())
content = fields.MarkdownField(_('Content'), [validators.required()])
Expand All @@ -21,8 +23,6 @@ class PostForm(UserModelForm):
reuses = fields.ReuseListField(_('Associated reuses'))

image = fields.ImageField(_('Image'), sizes=IMAGE_SIZES)
# image_url = fields.UploadableURLField(_('Image URL'), description=_('The post thumbnail'),
# endpoint='storage.add_image')
credit_to = fields.StringField(_('Image credits'))
credit_url = fields.URLField(_('Credit URL'))

Expand Down
4 changes: 2 additions & 2 deletions udata/core/reuse/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from udata.core.followers.api import FollowAPI

from .api_fields import reuse_fields, reuse_page_fields, reuse_suggestion_fields, image_fields
from .forms import ReuseForm, ReuseCreateForm
from .forms import ReuseForm
from .models import ReuseIssue, FollowReuse
from .permissions import ReuseEditPermission
from .search import ReuseSearch
Expand All @@ -43,7 +43,7 @@ def get(self):
@api.marshal_with(reuse_fields)
def post(self):
'''Create a new object'''
form = api.validate(ReuseCreateForm)
form = api.validate(ReuseForm)
return form.save(), 201


Expand Down
18 changes: 2 additions & 16 deletions udata/core/reuse/forms.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from udata.auth import current_user
from udata.forms import Form, ModelForm, fields, validators
from udata.i18n import lazy_gettext as _
from udata.models import Reuse, REUSE_TYPES

from .models import IMAGE_SIZES

__all__ = ('ReuseForm', 'ReuseCreateForm', 'AddDatasetToReuseForm')
__all__ = ('ReuseForm', 'AddDatasetToReuseForm')


def check_url_does_not_exists(form, field):
Expand All @@ -25,28 +24,15 @@ class ReuseForm(ModelForm):
description=_('The details about the reuse (build process, specifics, self-critics...).'))
type = fields.SelectField(_('Type'), choices=REUSE_TYPES.items())
url = fields.URLField(_('URL'), [validators.required(), check_url_does_not_exists])
# image_url = fields.URLField(_('Image URL'),
# description=_('The reuse thumbnail'))
image = fields.ImageField(_('Image'), sizes=IMAGE_SIZES, placeholder='reuse')
tags = fields.TagField(_('Tags'), description=_('Some taxonomy keywords'))
datasets = fields.DatasetListField(_('Used datasets'))
private = fields.BooleanField(_('Private'),
description=_('Restrict the dataset visibility to you or your organization only.'))


class ReuseCreateForm(ReuseForm):
owner = fields.CurrentUserField()
organization = fields.PublishAsField(_('Publish as'))

def save(self, commit=True, **kwargs):
reuse = super(ReuseCreateForm, self).save(commit=False, **kwargs)
if not reuse.organization:
reuse.owner = current_user._get_current_object()

if commit:
reuse.save()

return reuse


class AddDatasetToReuseForm(Form):
dataset = fields.StringField()
4 changes: 2 additions & 2 deletions udata/core/reuse/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from udata.i18n import I18nBlueprint, lazy_gettext as _
from udata.models import Reuse, Issue, FollowReuse, Dataset

from .forms import ReuseForm, ReuseCreateForm, AddDatasetToReuseForm
from .forms import ReuseForm, AddDatasetToReuseForm
from .permissions import ReuseEditPermission
from .tasks import notify_new_reuse

Expand Down Expand Up @@ -107,7 +107,7 @@ def get_context(self):
@blueprint.route('/new/', endpoint='new')
class ReuseCreateView(CreateView):
model = Reuse
form = ReuseCreateForm
form = ReuseForm
template_name = 'reuse/create.html'

def initialize_form(self, form):
Expand Down
6 changes: 4 additions & 2 deletions udata/core/topic/forms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from udata.forms import UserModelForm, fields, validators
from udata.forms import ModelForm, fields, validators
from udata.i18n import lazy_gettext as _

from .models import Topic
Expand All @@ -10,9 +10,11 @@
__all__ = ('TopicForm', )


class TopicForm(UserModelForm):
class TopicForm(ModelForm):
model_class = Topic

owner = fields.CurrentUserField()

name = fields.StringField(_('Name'), [validators.required()])
description = fields.MarkdownField(_('Description'), [validators.required()])

Expand Down
3 changes: 1 addition & 2 deletions udata/core/user/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from flask import current_app

from udata.forms import ModelForm, fields, validators, widgets
from udata.forms import ModelForm, fields, validators
from udata.i18n import lazy_gettext as _
from udata.models import User

Expand All @@ -18,7 +18,6 @@ class UserProfileForm(ModelForm):

first_name = fields.StringField(_('First name'), [validators.required()])
last_name = fields.StringField(_('Last name'), [validators.required()])
# avatar_url = fields.URLField(_('Avatar URL'))
avatar = fields.ImageField(_('Avatar'), sizes=AVATAR_SIZES)
website = fields.URLField(_('Website'))
about = fields.MarkdownField(_('About'))
Expand Down
34 changes: 0 additions & 34 deletions udata/forms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from flask.ext.mongoengine.wtf import model_form

from flask.ext.mongoengine.wtf.models import ModelForm as MEModelForm
from flask.ext.security import current_user
from flask.ext.wtf import Form

from udata import i18n
Expand All @@ -18,36 +17,3 @@
class ModelForm(MEModelForm):
def _get_translations(self):
return i18n.domain.get_translations()


class UserModelFormMixin(object):
user_field = 'owner'

def validate(self):
return super(UserModelFormMixin, self).validate() and current_user.is_authenticated()

@property
def errors(self):
_errors = super(UserModelFormMixin, self).errors
if not current_user.is_authenticated():
_errors[self.user_field] = 'An authenticated user is required'
return _errors

def populate_obj(self, obj):
if not getattr(obj, self.user_field):
setattr(obj, self.user_field, current_user.to_dbref())
super(UserModelFormMixin, self).populate_obj(obj)

def save(self, **kwargs):
self.data[self.user_field] = self.data.get(self.user_field, current_user.to_dbref())
return super(UserModelFormMixin, self).save(**kwargs)

@property
def data(self):
data = super(UserModelFormMixin, self).data
data[self.user_field] = data.get(self.user_field, current_user.to_dbref())
return data


class UserModelForm(UserModelFormMixin, ModelForm):
pass

0 comments on commit 0927c42

Please sign in to comment.