diff --git a/accounts/api.py b/accounts/api.py index f69358d..a743179 100644 --- a/accounts/api.py +++ b/accounts/api.py @@ -11,7 +11,6 @@ from tastypie.http import HttpUnauthorized, HttpForbidden from tastypie.authentication import Authentication, BasicAuthentication, ApiKeyAuthentication from tastypie.authorization import DjangoAuthorization, Authorization -from tastypie.constants import ALL_WITH_RELATIONS from tastypie.models import ApiKey, create_api_key from tastypie.resources import ModelResource from tastypie.utils import trailing_slash @@ -41,6 +40,8 @@ def dehydrate(self, bundle): except Profile.DoesNotExist: pass bundle.data['groups'] = [{"id" : group.id, "name":group.name} for group in bundle.obj.groups.all()] + #bundle.data['first_name'] = bundle.obj.user.first_name + #bundle.data['last_name'] = bundle.obj.user.last_name return bundle @@ -172,20 +173,15 @@ class Meta: resource_name = 'account/profile' authentication = Authentication() authorization = Authorization() - filtering = { - "id" : ['exact',], - "user" : ALL_WITH_RELATIONS, - } def dehydrate(self, bundle): bundle.data["username"] = bundle.obj.username return bundle - + class ObjectProfileLinkResource(ModelResource): """ Resource for linking profile with objects s.a a Project, a Category, etc. """ - content_type = fields.CharField(attribute='content_type__model') profile = fields.OneToOneField(ProfileResource, 'profile', full=True) level = fields.IntegerField(attribute='level') detail = fields.CharField(attribute='detail') @@ -198,10 +194,7 @@ class Meta: authorization = DjangoAuthorization() default_format = "application/json" filtering = { - "object_id" : ['exact', ], - "content_type" : ['exact', ], - "profile" : ALL_WITH_RELATIONS, - + "object_id" : ['exact', ] } always_return_data = True @@ -221,7 +214,7 @@ def dispatch_list(self, request, **kwargs): data = json.loads(request.body) if 'profile_id' in data: profile = get_object_or_404(Profile, pk=data['profile_id']) - else: + else: profile=request.user.profile objectprofilelink_item, created = ObjectProfileLink.objects.get_or_create(profile=profile, content_type=ContentType.objects.get(model=kwargs['content_type']), diff --git a/graffiti/api.py b/graffiti/api.py index 0428fa1..7a04dfa 100644 --- a/graffiti/api.py +++ b/graffiti/api.py @@ -30,19 +30,6 @@ class Meta: authentication = AnonymousApiKeyAuthentication() authorization = DjangoAuthorization() - def build_filters(self, filters=None): - if filters is None: - filters = {} - - orm_filters = super(TagResource, self).build_filters(filters) - - if "content_type" in filters: - qs = Tag.objects.filter(taggit_taggeditem_items__content_type__model=filters['content_type']) - - orm_filters["pk__in"] = [i.pk for i in qs] - - return orm_filters - def dehydrate(self, bundle): try: bundle.data["weight"] = bundle.obj.taggit_taggeditem_items__count diff --git a/projects/api.py b/projects/api.py index c78a56d..0199756 100644 --- a/projects/api.py +++ b/projects/api.py @@ -1,7 +1,7 @@ from tastypie.resources import ModelResource from tastypie import fields -from .models import Project, ProjectProgressRange, ProjectProgress +from .models import Project, ProjectProgressRange, ProjectProgress, ProjectTeam from scout.api import PlaceResource from dataserver.authentication import AnonymousApiKeyAuthentication @@ -13,23 +13,23 @@ class ProjectProgressRangeResource(ModelResource): class Meta : queryset = ProjectProgressRange.objects.all() allowed_methods = ['get'] - + filtering = { "slug": ('exact',), } - + class ProjectProgressResource(ModelResource): range = fields.ToOneField(ProjectProgressRangeResource, "progress_range") - + class Meta: queryset = ProjectProgress.objects.all() allowed_methods = ['get'] always_return_data = True - + filtering = { "range": ALL_WITH_RELATIONS, } - + class ProjectResource(ModelResource): location = fields.ToOneField(PlaceResource, 'location', null=True, blank=True, full=True) @@ -49,6 +49,7 @@ class Meta: always_return_data = True authentication = AnonymousApiKeyAuthentication() authorization = DjangoAuthorization() + filtering = { 'slug': ('exact',), 'id' : ('exact', ), @@ -66,4 +67,3 @@ class Meta: # filtering = { # "project": ALL_WITH_RELATIONS, # } - diff --git a/projects/migrations/0011_migrate_projectteam.py b/projects/migrations/0013_auto__add_community.py similarity index 75% rename from projects/migrations/0011_migrate_projectteam.py rename to projects/migrations/0013_auto__add_community.py index d621f4c..945d089 100644 --- a/projects/migrations/0011_migrate_projectteam.py +++ b/projects/migrations/0013_auto__add_community.py @@ -1,27 +1,37 @@ # -*- coding: utf-8 -*- from south.utils import datetime_utils as datetime from south.db import db -from south.v2 import DataMigration +from south.v2 import SchemaMigration from django.db import models -from django.contrib.contenttypes.models import ContentType -from projects.models import ProjectTeam -from accounts.models import ObjectProfileLink -class Migration(DataMigration): +class Migration(SchemaMigration): def forwards(self, orm): - for team in ProjectTeam.objects.all(): - for member in team.members.all(): - ObjectProfileLink.objects.get_or_create(content_type = ContentType.objects.get_for_model(team.project), - object_id = team.project.id, - profile = member, - level = 0, - isValidated = True) - team.delete() + # Adding model 'Community' + db.create_table(u'projects_community', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + )) + db.send_create_signal(u'projects', ['Community']) + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + def backwards(self, orm): - "Write your backwards methods here." + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + models = { u'accounts.profile': { @@ -67,14 +77,20 @@ def backwards(self, orm): 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + u'projects.community': { + 'Meta': {'object_name': 'Community'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, u'projects.project': { 'Meta': {'object_name': 'Project'}, 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), - 'begin_date': ('django.db.models.fields.DateField', [], {}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.PostalAddress']", 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), @@ -101,17 +117,22 @@ def backwards(self, orm): 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['accounts.Profile']", 'symmetrical': 'False'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, u'scout.postaladdress': { 'Meta': {'object_name': 'PostalAddress'}, - 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}), + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), - 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), - 'street_address': ('django.db.models.fields.TextField', [], {'null': 'True'}) + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) } } - complete_apps = ['projects'] - symmetrical = True + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/migrations/0013_auto__del_projectteam.py b/projects/migrations/0013_auto__del_projectteam.py new file mode 100644 index 0000000..6089d87 --- /dev/null +++ b/projects/migrations/0013_auto__del_projectteam.py @@ -0,0 +1,96 @@ +# -*- 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): + # Deleting model 'ProjectTeam' + db.delete_table(u'projects_projectteam') + + # Removing M2M table for field members on 'ProjectTeam' + db.delete_table(db.shorten_name(u'projects_projectteam_members')) + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + + + def backwards(self, orm): + # Adding model 'ProjectTeam' + db.create_table(u'projects_projectteam', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['ProjectTeam']) + + # Adding M2M table for field members on 'ProjectTeam' + m2m_table_name = db.shorten_name(u'projects_projectteam_members') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), + ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) + )) + db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) + + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + + + models = { + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/migrations/0014_auto__del_community__del_projectteam.py b/projects/migrations/0014_auto__del_community__del_projectteam.py new file mode 100644 index 0000000..677c0c6 --- /dev/null +++ b/projects/migrations/0014_auto__del_community__del_projectteam.py @@ -0,0 +1,94 @@ +# -*- 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): + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Deleting model 'ProjectTeam' + db.delete_table(u'projects_projectteam') + + # Removing M2M table for field members on 'ProjectTeam' + db.delete_table(db.shorten_name(u'projects_projectteam_members')) + + + def backwards(self, orm): + # Adding model 'Community' + db.create_table(u'projects_community', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['Community']) + + # Adding model 'ProjectTeam' + db.create_table(u'projects_projectteam', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['ProjectTeam']) + + # Adding M2M table for field members on 'ProjectTeam' + m2m_table_name = db.shorten_name(u'projects_projectteam_members') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), + ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) + )) + db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) + + + models = { + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/models.py b/projects/models.py index a8ecb9e..bc988bd 100644 --- a/projects/models.py +++ b/projects/models.py @@ -6,9 +6,6 @@ from taggit.managers import TaggableManager from scout.models import Place from accounts.models import Profile -# from django.db.models.signals import post_save -# from django.dispatch.dispatcher import receiver - class ProjectProgressRange(models.Model): @@ -57,22 +54,7 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) - groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ - return self.title - - -# XXX/TODO: obsolete -class ProjectTeam(models.Model): - - """ A project team. - - .. todo:: this model is probably obsolete. - Someones knowing the truth checks it? - Does the project group replaces it ? - """ - - project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) + return self.title \ No newline at end of file diff --git a/setup.py b/setup.py index d14ef9e..76d716a 100644 --- a/setup.py +++ b/setup.py @@ -24,4 +24,3 @@ } setup(**config) -