Example #1
0
 def post(self, request, *args, **kwargs):
     json = YpSerialiser()
     form = forms.ReviewsForm(request.POST)
     if form.is_valid():
         review = form.save(commit=False)
         review.author = PointsModels.Person.objects.get(username=request.user)
         review.save()
         point_id = form.cleaned_data.get("point", 0)
         if point_id:
             point = get_object_or_404(PointsModels.Points, pk=point_id)
             point.reviews.add(review)
             point.save()
         return HttpResponse(
             json.serialize(
                 [review],
                 excludes=(),
                 extras=(),
                 relations={"author": {"fields": ("first_name", "last_name", "avatar")}},
             ),
             mimetype="application/json",
         )
     else:
         e = form.errors
         errors = []
         for er in e:
             errors.append(er + ":" + e[er][0])
         return HttpResponse(simplejson.dumps({"id": 0, "status": 1, "txt": ", ".join(errors)}))
Example #2
0
 def post(self, request, *args, **kwargs):
     object = self.get_object()
     json = YpSerialiser()
     form = PhotosForm(request.POST, request.FILES)
     if form.is_valid():
         photo = form.save(commit=False)
         photo.author = request.user.get_profile()
         photo.save()
         if object:
             object.imgs.add(photo)
         json = YpSerialiser()
         return HttpResponse(json.serialize(
             [photo],
             excludes=("img"),
             extras=('thumbnail104x104', 'img_url', 'thumbnail560',
                     'thumbnail207', 'thumbnail625x370',
                     'thumbnail207_height'),
             relations={
                 'author': {
                     'fields': ('first_name', 'last_name', 'avatar')
                 }
             }),
                             mimetype="application/json")
     return HttpResponse(simplejson.dumps({
         'id': 0,
         'status': form._errors
     }),
                         mimetype="application/json")
Example #3
0
 def post(self, request, *args, **kwargs):
     json = YpSerialiser()
     form = forms.ReviewsForm(request.POST)
     if form.is_valid():
         review = form.save(commit=False)
         review.author = PointsModels.Person.objects.get(username=request.user)
         review.save()
         point_id = form.cleaned_data.get("point", 0)
         if point_id:
             point = get_object_or_404(PointsModels.Points, pk=point_id)
             point.reviews.add(review)
             point.save()
         return HttpResponse(json.serialize([review], excludes=(),
                                            extras=(),
                                            relations={
                                                'author': {
                                                    'fields': ('first_name', 'last_name', 'avatar')
                                                }
                                            }),
                             mimetype="application/json")
     else:
         e = form.errors
         errors = []
         for er in e:
             errors.append(er +':'+e[er][0])
         return HttpResponse(simplejson.dumps({'id': 0, "status": 1, "txt": ", ".join(errors)}))
Example #4
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        
        COUNT_ELEMENTS = 10
        
        page = kwargs.get("page", 1) or 1
        
        limit = COUNT_ELEMENTS*int(page)
        offset = (int(page)-1)*COUNT_ELEMENTS
        
        person = MainModels.Person.objects.get(username=request.user)

        content_type = ContentType.objects.get_for_model(MainModels.Points).id        
        points = MainModels.Points.objects.extra(
                select = {
                          "new_feedbacks": "select coalesce(count(*), 0) from reports_reports where reports_reports.content_type_id=%(content_type)s and reports_reports.object_id=main_points.id and reports_reports.updated>'%(date)s'" % ({"content_type": content_type, "date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")}),
                          "updated_events": "select coalesce(count(*), 0) from main_events where main_events.id=main_points.id and main_events.updated>'%(date)s'" % ({"date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")}),
                          "new_photos": "select coalesce(count(*), 0) from main_photos join main_points_imgs on main_photos.id=main_points_imgs.photos_id and main_photos.updated>'%(date)s' where main_points_imgs.points_id=main_points.id " % ({"date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")}),
                          #"all_params": "select new_feedbacks + new_events as all_params",
                          },
            ).order_by("-new_photos", "-new_feedbacks", "-updated_events")
        
        points = points[offset:limit]
        
        YpJson = YpSerialiser()
        return HttpResponse(YpJson.serialize(points, extras=["new_feedbacks", "updated_events", "new_photos"], relations={'tags': {'fields': ('name', 'id', 'level')}, 'author':{'fields':('first_name','last_name','avatar')},'imgs':{'extras':('thumbnail207','thumbnail325',)},'type':{}}), mimetype="application/json")
Example #5
0
 def get(self, request, *args, **kwargs):
     point = get_object_or_404(CollectionsModels.Collections, pk=kwargs.get("id"))
     YpJson = YpSerialiser()
     relations = {
         'likeusers': {'fields': ('first_name', 'last_name', 'avatar')},
         'author': {'fields': ('first_name', 'last_name', 'avatar')},
         'points': {
             'relations': {
                 'tags': {'fields': ('name', 'id', 'level')},
                 'author': {'fields': ('first_name', 'last_name', 'avatar')},
                 'imgs': {
                     'extras': ('thumbnail104x104', 'thumbnail207', 'thumbnail560'),
                     'relations': {
                         'author': {'fields': ('last_name', 'first_name', 'avatar')},
                         'likeusers': {'fields': ('last_name', 'first_name', 'avatar')},
                         'comments': {
                             'relations': {
                                 'author': {'fields': ('first_name', 'last_name', 'avatar')}
                             }
                         }
                     }
                 }
             }
         }
     }
     t0 = time.time()
     point = YpJson.serialize([point], excludes=('points_by_user',), relations=relations)
     self.log.info('Serialize collection detail complete (%.2f sec.) point id: %s' % (time.time()-t0, kwargs.get('id')))
     return HttpResponse(point, mimetype="application/json")
Example #6
0
    def post(self, request, *args, **kwargs):
        json = YpSerialiser()
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.author = request.user.get_profile()
            comment.save()

            photo_id = kwargs.get("id")
            if photo_id:
                photo = get_object_or_404(PhotosModels.Photos, pk=photo_id)
                photo.comments.add(comment)
                photo.save()
            else:
                return HttpResponse(
                    simplejson.dumps({"id": 0, "status": 2, "txt": "комментарий не добавлен к изображению"}),
                    mimetype="application/json",
                )

            return HttpResponse(
                json.serialize(
                    [comment],
                    excludes=("object_id", "content_type"),
                    relations={"author": {"fields": ("first_name", "last_name", "avatar")}},
                ),
                mimetype="application/json",
            )
        return HttpResponse(simplejson.dumps({"id": 0, "status": form._errors}), mimetype="application/json")
Example #7
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = 5
        errors = []

        limit = COUNT_ELEMENTS
        offset = 0

        form = forms.SearchForm(params)
        if form.is_valid():
            pointsreq = MainModels.Events.objects;

            name = form.cleaned_data.get("s")
            if name:
                pointsreq = pointsreq.filter(name__icontains=name)

            content = form.cleaned_data.get("content")
            if content == 'new':
                pointsreq  = pointsreq.order_by('-created')
            elif content == "popular":
                pointsreq  = pointsreq.annotate(uslikes=Count('likeusers__id')).order_by('-uslikes', '-created')
            else:
                pointsreq  = pointsreq.order_by("name")

            events = pointsreq[offset:limit]

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(events, fields=("name")), mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er +':'+e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)});
Example #8
0
 def get(self, request, *args, **kwargs):
     pk = kwargs.get("id")
     event = get_object_or_404(MainModels.Events, pk=pk)
     YpJson = YpSerialiser()
     return HttpResponse(YpJson.serialize(
         [event],
         relations={
             'point': {},
             'feedbacks': {
                 'fields': ('type', 'feedback')
             },
             'tags': {
                 'fields': ('name', 'id', 'level')
             },
             'author': {
                 'fields': ('first_name', 'last_name', 'avatar')
             },
             'imgs': {
                 'extras': (
                     'thumbnail207',
                     'thumbnail325',
                 )
             }
         }),
                         mimetype="application/json")
Example #9
0
    def get(self, request, id, *args, **kwargs):
        user_id = id
        person = MainModels.Person.objects.filter(id=user_id).extra(
                select={"liked_points": "select count(*) from main_points_likeusers where person_id=main_person.user_id",
                        "liked_events": "select count(*) from main_events_likeusers where person_id=main_person.user_id",
                        "liked_photos": "select count(*) from photos_photos_likeusers where user_id=main_person.user_id",
                        "liked_routes": "select count(*) from main_routes_likeusers where user_id=main_person.user_id",
                        "liked_trips": "select count(*) from trips_trips_likeusers where person_id=main_person.user_id",

                        "added_points": "select count(*) from main_points where author_id=main_person.user_id",
                        "added_events": "select count(*) from main_events where author_id=main_person.user_id",
                        "added_routes": "select count(*) from main_routes where author_id=main_person.user_id",
                        "added_trips": "select count(*) from trips_trips where author_id=main_person.user_id",
                        "added_photos": "select count(*) from photos_photos where author_id=main_person.user_id",

                        "want_visit_points": "select count(*) from main_points_visitusers where user_id=main_person.user_id",
                        "want_visit_events": "select count(*) from main_events_visitusers where user_id=main_person.user_id",

                        "person_followers": "select count(*) from main_person_followers where user_id=main_person.user_id",
                        }
            )

        YpJson = YpSerialiser()
        return HttpResponse(YpJson.serialize(person,
                                             extras=["liked_points", "liked_events", "liked_photod", "liked_routes", "liked_trips",
                                                     "added_points", "added_events", "added_routes", "added_trips",
                                                     "want_visit_points", "want_visit_events",
                                                     "person_followers", "icon", "icon_small"
                                                     ],
                                             fields=("username", "first_name", "last_name", "email", "dealer",
                                                     "avatar", "phone", "city", "website", "about")),
                            mimetype="application/json")
Example #10
0
 def get(self, request, *args, **kwargs):
     trip = get_object_or_404(TripsModels.Trips, pk=kwargs.get("id"))
     YpJson = YpSerialiser()
     t0 = time.time()
     trip = YpJson.serialize([trip], relations=TripOption.relations.getTripRelation())
     self.log.info('Serialize trip detail complete (%.2f sec.) trip id: %s' % (time.time()-t0, kwargs.get('id')))
     return HttpResponse(trip, mimetype="application/json")
Example #11
0
 def photoList(self, photos):
     json = YpSerialiser()
     return HttpResponse(json.serialize(
         photos,
         excludes=("img", ),
         extras=["isliked", "likes_count", 'thumbnail104x104', 'img_url'],
         relations={
             'author': {
                 'fields': ('first_name', 'last_name', 'avatar')
             },
             'likeusers': {
                 'fields': ('first_name', 'last_name', 'avatar'),
                 'limit': LIMITS.IMAGES_LIST.LIKEUSERS_COUNT
             },
             'comments': {
                 'fields': ['txt', 'created', 'author'],
                 'relations': {
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar']
                     },
                 },
                 'limit': LIMITS.IMAGES_LIST.COMMENTS_COUNT
             },
         }),
                         mimetype="application/json")
Example #12
0
 def reviewList(self, reviews):
     json = YpSerialiser()
     return HttpResponse(
         json.serialize(
             reviews, excludes=(), relations={"author": {"fields": ("first_name", "last_name", "avatar")}}
         ),
         mimetype="application/json",
     )
Example #13
0
 def reviewList(self, reviews):
     json = YpSerialiser()
     return HttpResponse(json.serialize(reviews, excludes=(),
                                            relations={'author': {'fields': (
                                                'first_name',
                                                'last_name',
                                                'avatar'
                                            )},
                                        }), mimetype="application/json")
Example #14
0
    def get(self, request, *args, **kwargs):
        params = request.GET

        COUNT_ELEMENTS = 10

        page = kwargs.get("page", 1) or 1

        limit = COUNT_ELEMENTS * int(page)
        offset = (int(page) - 1) * COUNT_ELEMENTS

        person = MainModels.Person.objects.get(username=request.user)

        content_type = ContentType.objects.get_for_model(MainModels.Points).id
        points = MainModels.Points.objects.extra(
            select={
                "new_feedbacks":
                "select coalesce(count(*), 0) from reports_reports where reports_reports.content_type_id=%(content_type)s and reports_reports.object_id=main_points.id and reports_reports.updated>'%(date)s'"
                % ({
                    "content_type": content_type,
                    "date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")
                }),
                "updated_events":
                "select coalesce(count(*), 0) from main_events where main_events.id=main_points.id and main_events.updated>'%(date)s'"
                % ({
                    "date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")
                }),
                "new_photos":
                "select coalesce(count(*), 0) from main_photos join main_points_imgs on main_photos.id=main_points_imgs.photos_id and main_photos.updated>'%(date)s' where main_points_imgs.points_id=main_points.id "
                % ({
                    "date": person.last_login.strftime("%Y-%m-%d %H:%M:%S")
                }),
                #"all_params": "select new_feedbacks + new_events as all_params",
            }, ).order_by("-new_photos", "-new_feedbacks", "-updated_events")

        points = points[offset:limit]

        YpJson = YpSerialiser()
        return HttpResponse(YpJson.serialize(
            points,
            extras=["new_feedbacks", "updated_events", "new_photos"],
            relations={
                'tags': {
                    'fields': ('name', 'id', 'level')
                },
                'author': {
                    'fields': ('first_name', 'last_name', 'avatar')
                },
                'imgs': {
                    'extras': (
                        'thumbnail207',
                        'thumbnail325',
                    )
                },
                'type': {}
            }),
                            mimetype="application/json")
Example #15
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = RESPONSE_LIMITS[kwargs["type"]]
        errors = []

        limit = COUNT_ELEMENTS
        offset = 0

        form = forms.SearchForm(params)
        if form.is_valid():
            pointsreq = TagsModels.Tags.objects

            name = form.cleaned_data.get("s")
            if name:
                name_spl = name.split(' ')

                pointsreq = []
                blocklist = []
                for phrase in name_spl:
                    if phrase.encode('utf-8') != '':
                        pointsrq = TagsModels.Tags.search.query(phrase)
                        for item2 in pointsreq:
                            blocklist.append(item2.id)
                        for item1 in pointsrq:
                            if item1.id in blocklist:
                                item2 = item1
                            else:
                                pointsreq.append(item1)

            content = form.cleaned_data.get("content")
            if content == 'new':
                pointsreq = pointsreq.order_by('-id')
            elif content == "popular":
                pointsreq = pointsreq.extra(
                    select={
                        'popular1':
                        'select count(*) as p from main_points_tags where main_points_tags.tags_id = tags_tags.id',
                        'popular2':
                        'select count(*)+popular1 as p from main_events_tags where main_events_tags.tags_id = tags_tags.id'
                    }).order_by('-popular2', '-id')
            else:
                pointsreq = pointsreq

            tags = pointsreq[offset:limit]

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(
                tags,
                fields=("name", "level", "icons", "style", "parent",
                        "onmainmap")),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er + ':' + e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)})
Example #16
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = 5
        errors = []

        limit = COUNT_ELEMENTS
        offset = 0

        form = forms.SearchForm(params)
        if form.is_valid():
            #pointsreq = MainModels.Person.objects;

            name = form.cleaned_data.get("s")
            users_list = []
            morph = get_morph('/home/tenoclock/yasenput/dicts')
            if name:
                #pointsreq = MainModels.Person.search.query(params.get("s"))
                #search = SphinxSearch()
                search = SphinxQuerySet(index="auth_user")
                name_morph = morph.normalize(name.upper())
                file1 = open('file1.txt','w')
                file1.write(str(list(name_morph)))
                file1.close()
                phrase_list = name.split(' ')
                for phrase in phrase_list:
                    if phrase != '':
                        name_morph = morph.normalize(phrase.upper())
                        for name_m in name_morph:
                            search_query = search.query(name_m)
                            for splited_item in search_query:
                                if not MainModels.Person.objects.get(id = splited_item['id']) in users_list:
                                   users_list.append(MainModels.Person.objects.get(id = splited_item['id']))





            content = form.cleaned_data.get("content")
            if content == 'new':
                pointsreq  = pointsreq.order_by('-id')
            elif content == "popular":
                pointsreq  = pointsreq.annotate(usfiliwers=Count('followers__id')).order_by('-usfiliwers', '-id')
            else:
                pointsreq  = users_list


            points = users_list[offset:limit]

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(points, fields=("username", "first_name", "last_name")),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er +':'+e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)});
Example #17
0
    def post(self, request, *args, **kwargs):
            params = request.POST.copy()
            data = params.get('model', "{}")
            data = json.loads(data)

            if request.POST.get('_method') == 'DELETE':
                trip = Trips.objects.get(pk=kwargs.get('id'))
                trip.delete()
                return JsonHTTPResponse({
                    'deleted': True
                })
            ## update point with PUT emulate
            if request.META.get('HTTP_X_HTTP_METHOD_OVERRIDE') == 'PUT':
                form = forms.AddTripForm(data,
                                          instance=Trips.objects.get(pk=kwargs.get('id')))
            else:
                form = forms.AddTripForm(data)
            if form.is_valid():
                trip = form.save(commit=False)
                person = MainModels.Person.objects.get(username=request.user)
                trip.author = person
                trip.save()
                trip.admins.add(person)

                #Members
                members = data.get('members')
                if members is not None:
                    for member_id in members:
                        member = MainModels.Points.objects.get(id=member_id)
                        trip.members.add(member)

                #Blocks
                blocks = data.get('blocks')
                block_ids = [block.get('id') for block in blocks]
                b = trip.blocks.exclude(id__in=block_ids)
                trip.blocks.remove(*b)
                if blocks is not None:
                    for block in blocks:
                        block['points'] = [point['id'] for point in block['points']]
                        block['imgs'] = [img['id'] for img in block['imgs']]
                        if block.get('id'):
                            block_obj = Blocks.objects.get(id=block.get('id'))
                            block_form = forms.AddBlockForm(block, instance=block_obj)
                        else:
                            block_form = forms.AddBlockForm(block)
                        if block_form.is_valid():
                            block_obj = block_form.save()
                            trip.blocks.add(block_obj)
                YpJson = YpSerialiser()
                trip = YpJson.serialize([trip], relations=TripOption.relations.getTripRelation())
                return HttpResponse(trip, mimetype="application/json")
            else:
                return JsonHTTPResponse({"id": 0, "status": 1, "txt": "Error"})
Example #18
0
    def post(self, request, *args, **kwargs):
        queryset = self.get_queryset(request)
        page_size = self.get_paginate_by(queryset)
        if page_size:
            paginator, page, reviews, is_paginated = self.paginate_queryset(queryset, page_size)
        else:
            reviews = []

        json = YpSerialiser()
        return HttpResponse(
            json.serialize(reviews, relations={"author": {"fields": ("first_name", "last_name", "avatar")}}),
            mimetype="application/json",
        )
Example #19
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = RESPONSE_LIMITS[kwargs["type"]]
        errors = []

        limit = COUNT_ELEMENTS
        offset = 0

        form = forms.SearchForm(params)
        if form.is_valid():
            pointsreq = TagsModels.Tags.objects

            name = form.cleaned_data.get("s")
            if name:
                name_spl = name.split(' ')

                pointsreq = []
                blocklist = []
                for phrase in name_spl:
                    if phrase.encode('utf-8') != '':
                        pointsrq = TagsModels.Tags.search.query(phrase)
                        for item2 in pointsreq:
                            blocklist.append(item2.id)
                        for item1 in pointsrq:
                            if item1.id in blocklist:
                                item2 = item1
                            else:
                                pointsreq.append(item1)

            content = form.cleaned_data.get("content")
            if content == 'new':
                pointsreq  = pointsreq.order_by('-id')
            elif content == "popular":
                pointsreq  = pointsreq.extra(
                        select={
                             'popular1': 'select count(*) as p from main_points_tags where main_points_tags.tags_id = tags_tags.id',
                             'popular2': 'select count(*)+popular1 as p from main_events_tags where main_events_tags.tags_id = tags_tags.id'
                        }
                    ).order_by('-popular2', '-id')
            else:
                pointsreq = pointsreq

            tags = pointsreq[offset:limit]

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(tags, fields=("name","level", "icons", "style", "parent", "onmainmap")), mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er +':'+e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)})
Example #20
0
 def get(self, request):
     queryset = self.get_queryset()
     page_size = self.get_paginate_by(queryset)
     if page_size:
         paginator, page, reports, is_paginated = self.paginate_queryset(queryset, page_size)
     else:
         reports = []
     json = YpSerialiser()
     return HttpResponse(json.serialize(reports, excludes=("object_id", "content_type"),
                                                  relations={'author': {'fields': (
                                                     'first_name',
                                                     'last_name',
                                                     'avatar'
                                                  )}}), mimetype="application/json")
Example #21
0
 def get(self, request):
     queryset = self.get_queryset()
     page_size = self.get_paginate_by(queryset)
     if page_size:
         paginator, page, comments, is_paginated = self.paginate_queryset(queryset, page_size)
     else:
         comments = []
     json = YpSerialiser()
     return HttpResponse(json.serialize(comments, excludes=("object_id", "content_type"),
                                                  relations={'author': {'fields': (
                                                     'first_name',
                                                     'last_name',
                                                     'avatar'
                                                  )}}), mimetype="application/json")
Example #22
0
 def post(self, request):
     json = YpSerialiser()
     form = ReportForm(request.POST)
     if form.is_valid():
         comment = form.save(commit=False)
         comment.author = request.user.get_profile()
         comment.save()
         return HttpResponse(json.serialize([comment], excludes=("object_id", "content_type"),
                                                         relations={
                                                             'author': {
                                                                 'fields': ('first_name', 'last_name', 'avatar')
                                                             }
                                                         }),
                             mimetype="application/json")
     return HttpResponse(simplejson.dumps({'id': 0, 'status': form._errors}), mimetype="application/json")
Example #23
0
    def post(self, request, *args, **kwargs):
        queryset = self.get_queryset(request)
        page_size = self.get_paginate_by(queryset)
        if page_size:
            paginator, page, reviews, is_paginated = self.paginate_queryset(queryset, page_size)
        else:
            reviews = []

        json = YpSerialiser()
        return HttpResponse(json.serialize(reviews, relations={
                                                   'author': {
                                                       'fields': ('first_name', 'last_name', 'avatar')
                                                   }
                                               }),
                                mimetype="application/json")
Example #24
0
 def get(self, request):
     queryset = self.get_queryset()
     page_size = self.get_paginate_by(queryset)
     if page_size:
         paginator, page, comments, is_paginated = self.paginate_queryset(queryset, page_size)
     else:
         comments = []
     json = YpSerialiser()
     return HttpResponse(
         json.serialize(
             comments,
             excludes=("object_id", "content_type"),
             relations={"author": {"fields": ("first_name", "last_name", "avatar")}},
         ),
         mimetype="application/json",
     )
Example #25
0
    def post(self, request, *args, **kwargs):
        id = kwargs.get('id', None)
        if not request.user.is_authenticated():
            return JsonHTTPResponse({"id":id,
                                     "status": 1,
                                     "txt":"Вы не авторизованы"})
        trip = get_object_or_404(Trips, id=id)

        if request.user.person in trip.likeusers.all():
            trip.likeusers.remove(request.user.person)
            trip.ypi -= 1
        else:
            trip.likeusers.add(request.user.person)
            trip.ypi += 1
        trip.save()
        YpJson = YpSerialiser()
        trip = YpJson.serialize([trip], extras=TripOption.getExtras(),
                                relations=TripOption.relations.getTripRelation())
        return HttpResponse(trip, mimetype="application/json")
Example #26
0
 def post(self, request, *args, **kwargs):
     object = self.get_object()
     json = YpSerialiser()
     form = PhotosForm(request.POST, request.FILES)
     if form.is_valid():
         photo = form.save(commit=False)
         photo.author = request.user.get_profile()
         photo.save()
         if object:
             object.imgs.add(photo)
         json = YpSerialiser()
         return HttpResponse(json.serialize([photo], excludes=("img"),
                                            extras=('thumbnail104x104', 'img_url', 'thumbnail560', 'thumbnail207', 'thumbnail625x370', 'thumbnail207_height'),
                                            relations={
                                                'author': {
                                                    'fields': ('first_name', 'last_name', 'avatar')
                                                }
                                            }),
                             mimetype="application/json")
     return HttpResponse(simplejson.dumps({'id': 0, 'status': form._errors}), mimetype="application/json")
Example #27
0
 def photoList(self, photos):
     json = YpSerialiser()
     return HttpResponse(json.serialize(photos, excludes= ("img",),
                                                 extras=["isliked", "likes_count", 'thumbnail104x104','img_url'],
                                                  relations={'author': {'fields': (
                                                                 'first_name',
                                                                 'last_name',
                                                                 'avatar'
                                                                  )},
                                                             'likeusers': {'fields': (
                                                                 'first_name',
                                                                 'last_name',
                                                                 'avatar'
                                                                 ),
                                                                           'limit': LIMITS.IMAGES_LIST.LIKEUSERS_COUNT},
                                                             'comments': {'fields': ['txt', 'created', 'author'],
                                                                  'relations': {'author': {'fields': ['id', 'first_name', 'last_name', 'avatar']},},
                                                                  'limit': LIMITS.IMAGES_LIST.COMMENTS_COUNT
                                                                 },
                                                             }), mimetype="application/json")
Example #28
0
 def post(self, request):
     json = YpSerialiser()
     form = ReportForm(request.POST)
     if form.is_valid():
         comment = form.save(commit=False)
         comment.author = request.user.get_profile()
         comment.save()
         return HttpResponse(json.serialize(
             [comment],
             excludes=("object_id", "content_type"),
             relations={
                 'author': {
                     'fields': ('first_name', 'last_name', 'avatar')
                 }
             }),
                             mimetype="application/json")
     return HttpResponse(simplejson.dumps({
         'id': 0,
         'status': form._errors
     }),
                         mimetype="application/json")
Example #29
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = 5
        errors = []

        limit = COUNT_ELEMENTS
        offset = 0

        form = forms.SearchForm(params)
        if form.is_valid():
            pointsreq = MainModels.Events.objects

            name = form.cleaned_data.get("s")
            if name:
                pointsreq = pointsreq.filter(name__icontains=name)

            content = form.cleaned_data.get("content")
            if content == 'new':
                pointsreq = pointsreq.order_by('-created')
            elif content == "popular":
                pointsreq = pointsreq.annotate(
                    uslikes=Count('likeusers__id')).order_by(
                        '-uslikes', '-created')
            else:
                pointsreq = pointsreq.order_by("name")

            events = pointsreq[offset:limit]

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(events, fields=("name")),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er + ':' + e[er][0])
            return JsonHTTPResponse({
                "status": 0,
                "txt": ", ".join(errors)
            })
Example #30
0
    def post(self, request, *args, **kwargs):
        json = YpSerialiser()
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.author = request.user.get_profile()
            comment.save()

            photo_id = kwargs.get('id')
            if photo_id:
                photo = get_object_or_404(PhotosModels.Photos, pk=photo_id)
                photo.comments.add(comment)
                photo.save()
            else:
                return HttpResponse(simplejson.dumps({
                    'id':
                    0,
                    'status':
                    2,
                    'txt':
                    'комментарий не добавлен к изображению'
                }),
                                    mimetype="application/json")

            return HttpResponse(json.serialize(
                [comment],
                excludes=("object_id", "content_type"),
                relations={
                    'author': {
                        'fields': ('first_name', 'last_name', 'avatar')
                    }
                }),
                                mimetype="application/json")
        return HttpResponse(simplejson.dumps({
            'id': 0,
            'status': form._errors
        }),
                            mimetype="application/json")
Example #31
0
    def get(self, request, *args, **kwargs):
        params = request.GET
        COUNT_ELEMENTS = LIMITS.POINTS_LIST.POINTS_SEARCH_COUNT
        errors = []
        limit = COUNT_ELEMENTS
        offset = 0
        form = forms.SearchForm(params)
        #search_res_points = []
        #search_res_sets = []
        if form.is_valid():
            #pointsreq = MainModels.Points.objects
            #collectionsreq = CollectionsModels.Collections.objects
            name = form.cleaned_data.get("s")
            if name:

                search_res_points = MainModels.Points.search.query(
                    params.get("s"))
                search_res_sets = CollectionsModels.Collections.search.query(
                    name)

            YpJson = YpSerialiser()

            all_items = QuerySetJoin(
                search_res_points.extra(select={'type_of_item': 1}),
                search_res_sets.extra(select={'type_of_item': 2}))
            items = json.loads(
                self.getSerializeCollections(all_items.order_by('-ypi')))
            #return HttpResponse(json.dumps({"points": allpoints, "collections": allcollections}), mimetype="application/json")
            return HttpResponse(
                YpJson.serialize(all_items, fields=('id', 'name')))

        else:
            e = form.errors
            for er in e:
                errors.append(er + ':' + e[er][0])

            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)})
Example #32
0
    def post(self, request, *args, **kwargs):
        params = request.POST

        COUNT_ELEMENTS = LIMITS.COLLECTIONS_LIST.COLLECTIONS_LIST_COUNT
        errors = []

        page = kwargs.get("page", 1) or 1

        limit = COUNT_ELEMENTS*int(page)
        offset = (int(page)-1)*COUNT_ELEMENTS

        form = forms.FiltersForm(params)
        if form.is_valid():
            tripsreq = TripsModels.Trips.objects

            user = form.cleaned_data.get("user")
            if user:
                tripsreq = tripsreq.filter(author__id__icontains=user)

            coord_left = params.get("coord_left")
            if coord_left:
                try:
                    coord_left = json.loads(coord_left)
                except:
                    errors.append("некорректно задана левая точка на карте для фильтра")
                else:
                    ln = coord_left.get("ln")
                    lt = coord_left.get("lt")
                    if str(ln).replace(".", "", 1).isdigit() and str(lt).replace(".", "", 1).isdigit() and ln >= 0 and lt >= 0:
                        tripsreq = tripsreq.filter(blocks__points__longitude__gte=ln, blocks__points__latitude__gte=lt)
                    else:
                        errors.append("некорректно задана левая точка на карте для фильтра")
            coord_right = params.get("coord_right")
            if coord_right:
                try:
                    coord_right = json.loads(coord_right)
                except:
                    errors.append("некорректно задана правая точка на карте для фильтра")
                else:
                    ln = coord_right.get("ln")
                    lt = coord_right.get("lt")
                    if str(ln).replace(".", "", 1).isdigit() and str(lt).replace(".", "", 1).isdigit() and ln >= 0 and lt >= 0:
                        tripsreq = tripsreq.filter(blocks__points__longitude__lte=ln, blocks__points__latitude__lte=lt)

            name = form.cleaned_data.get("name")
            if name:
                tripsreq = tripsreq.filter(name__icontains=name)

            tags = params.getlist("tags[]")
            if tags and len(tags) > 0:
                tripsreq = tripsreq.filter(blocks__points__tags__in=tags)
                #.extra(where=['main_points.id in (select points_id from main_points_tags where tags_id in (%s))' % (",".join(map(lambda x: "'%s'" % x, tags)))])

            content = form.cleaned_data.get("content") or 'new'
            if content == 'new':
                tripsreq = tripsreq.order_by('-created')
            elif content == "popular":
                tripsreq = tripsreq.annotate(uslikes=Count('likeusers__id')).order_by('-uslikes')

            if request.user.is_authenticated():
                user = MainModels.User.objects.get(username=request.user)
                tripsreq  = tripsreq.extra(
                        select={
                            'isliked': 'SELECT case when COUNT(*) > 0 then 1 else 0 end FROM trips_trips_likeusers WHERE trips_trips_likeusers.trips_id = trips_trips.id and trips_trips_likeusers.user_id = '+str(user.id),
                            'likes_count': 'SELECT count(*) from trips_trips_likeusers where trips_trips_likeusers.trips_id=trips_trips.id',
                        }
                    )
            else:
                tripsreq  = tripsreq.extra(
                    select={
                        'isliked': 'SELECT 0 ',
                        'likes_count': 'SELECT count(*) from trips_trips_likeusers where trips_trips_likeusers.trips_id=trips_trips.id',
                    }
                )

            trips = tripsreq[offset:limit].all()

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(trips,
                                                 extras=["isliked", "likes_count"],
                                                 fields=('id', 'name', 'members', 'admins', 'likeusers', 'updated', 'blocks', 'author'),
                                                 relations={'blocks': {'fields': ('id', 'name', 'txt', 'likeusers', 'points', 'events', 'imgs'),
                                                                       'relations': {
                                                                            'author': {'fields': ('first_name', 'last_name', 'avatar')},
                                                                            'imgs': {'extras': ('thumbnail207', 'thumbnail560', 'thumbnail104x104', 'thumbnail625x370'),
                                                                                  'limit': LIMITS.POINTS_LIST.IMAGES_COUNT},
                                                                            },
                                                                            'points': {'fields': ('name', 'address', 'longitude', 'latitude')},
                                                                            'events': {'fields': ('name', 'address', 'longitude', 'latitude')},
                                                                       'limit': LIMITS.COLLECTIONS_LIST.POINTS_COUNT
                                                                       },
                                                            'author': {'fields': ('id', 'first_name', 'last_name', 'avatar')},
                                                            'likeusers': {'fields': ('id', 'first_name', 'last_name', 'avatar'),
                                                                          'limit': LIMITS.COLLECTIONS_LIST.LIKEUSERS_COUNT}
                                                            }
                                                 ),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er + ':' + e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)})
Example #33
0
 def getSerializePoints(self, points):
     YpJson = YpSerialiser()
     return YpJson.serialize(
         points,
         fields=[
             'main_img', 'id', 'name', 'description', 'address', 'author',
             'imgs', 'longitude', 'latitude', 'tags', 'description',
             'reviews', 'wifi', 'wc', 'invalid', 'parking', 'likeusers',
             'created', 'updated', 'likes_count', 'isliked'
         ],
         extras=[
             'popular', 'type_of_item', 'name', 'address', 'longitude',
             'latitude', 'wifi', 'wc', 'invalid', 'parking',
             'reviewusersplus', 'reviewusersminus', 'id_point', 'isliked',
             'collections_count', 'likes_count', 'beens_count'
         ],
         relations={
             'tags': {
                 'fields': ['name', 'id', 'level', 'icons'],
                 'limit': LIMITS.POINTS_LIST.TAGS_COUNT
             },
             'likeusers': {
                 'fields': ['id', 'first_name', 'last_name', 'avatar'],
                 'limit': LIMITS.POINTS_LIST.LIKEUSERS_COUNT
             },
             'author': {
                 'fields': ['id', 'first_name', 'last_name', 'avatar']
             },
             'main_img': {
                 'extras': [
                     'thumbnail207', 'thumbnail560', 'thumbnail104x104',
                     'isliked', 'thumbnail207_height'
                 ],
             },
             'imgs': {
                 'extras': [
                     'thumbnail207', 'thumbnail560', 'thumbnail104x104',
                     'isliked', 'thumbnail207_height'
                 ],
                 'relations': {
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar']
                     },
                     'comments': {
                         'fields': ['txt', 'created', 'author'],
                         'relations': {
                             'author': {
                                 'fields': [
                                     'id', 'first_name', 'last_name',
                                     'avatar'
                                 ]
                             },
                         },
                         'limit': LIMITS.IMAGES_LIST.COMMENTS_COUNT
                     },
                 },
                 'limit':
                 LIMITS.POINTS_LIST.IMAGES_COUNT
             },
             'reviews': {
                 'fields': ['id', 'review', 'rating', 'author'],
                 'relations': {
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar']
                     },
                 },
                 'limit': LIMITS.POINTS_LIST.REVIEWS_COUNT
             }
         })
Example #34
0
 def getSerializeCollections(self, collections):
     YpJson = YpSerialiser()
     return YpJson.serialize(
         collections,
         fields=[
             'id', 'name', 'sets', 'isliked', 'description', 'author',
             'points', 'points_by_user', 'likeusers', 'updated',
             'likes_count', 'imgs', 'longitude', 'latitude', 'address',
             'reviewusersplus', 'reviewusersminus', 'ypi'
         ],
         extras=[
             'likes_count', 'sets', 'isliked', 'type_of_item',
             'reviewusersplus', 'reviewusersminus'
         ],
         relations={
             'likeusers': {
                 'fields': ['id', 'first_name', 'last_name', 'avatar'],
                 'limit': LIMITS.COLLECTIONS_LIST.LIKEUSERS_COUNT
             },
             'imgs': {
                 'extras': [
                     'thumbnail207', 'thumbnail560', 'thumbnail104x104',
                     'thumbnail207_height'
                 ],
                 'relations': {
                     'comments': {
                         'fields': ['id', 'txt', 'created', 'author'],
                         'relations': {
                             'author': {
                                 'fields': [
                                     'id', 'first_name', 'last_name',
                                     'avatar'
                                 ]
                             }
                         }
                     },
                     'likeusers': {
                         'fields': ['id', 'first_name', 'last_name'],
                     },
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar'],
                     },
                 },
                 'limit':
                 LIMITS.COLLECTIONS_LIST.IMAGES_COUNT
             },
             'points': {
                 'fields':
                 ['imgs', 'name', 'author', 'longitude', 'latitude', 'id'],
                 'relations': {
                     'imgs': {
                         'extras': [
                             'thumbnail207', 'thumbnail207_height',
                             'thumbnail560', 'thumbnail65x52',
                             'thumbnail135x52', 'thumbnail205x52',
                             'thumbnail104x104'
                         ],
                         'limit':
                         4,
                         'relations': {
                             'author': {
                                 'fields': [
                                     'id', 'first_name', 'last_name',
                                     'avatar'
                                 ]
                             },
                             'comments': {
                                 'fields': ['txt', 'created', 'author'],
                                 'relations': {
                                     'author': {
                                         'fields': [
                                             'id', 'first_name',
                                             'last_name', 'avatar'
                                         ]
                                     },
                                 },
                                 'limit': LIMITS.IMAGES_LIST.COMMENTS_COUNT
                             },
                         }
                     },
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar']
                     },
                 },
             },
             'points_by_user': {
                 'fields': [
                     'imgs',
                     'name',
                     'author',
                     'longitude',
                     'latitude',
                     'id',
                     'point',
                 ],
                 'relations': {
                     'imgs': {
                         'extras': [
                             'thumbnail207', 'thumbnail207_height',
                             'thumbnail560', 'thumbnail65x52',
                             'thumbnail135x52', 'thumbnail205x52',
                             'thumbnail104x104'
                         ],
                         'limit':
                         4,
                         'relations': {
                             'author': {
                                 'fields': [
                                     'id', 'first_name', 'last_name',
                                     'avatar'
                                 ]
                             },
                             'comments': {
                                 'fields': ['txt', 'created', 'author'],
                                 'relations': {
                                     'author': {
                                         'fields': [
                                             'id', 'first_name',
                                             'last_name', 'avatar'
                                         ]
                                     },
                                 },
                                 'limit': LIMITS.IMAGES_LIST.COMMENTS_COUNT
                             },
                         }
                     },
                     'author': {
                         'fields':
                         ['id', 'first_name', 'last_name', 'avatar']
                     },
                     'point': {
                         'fields': [
                             'name',
                             'longitude',
                             'latitude',
                         ]
                     }
                 },
             },
         })
Example #35
0
 def get(self, request, *args, **kwargs):
     trip = get_object_or_404(TripsModels.Trips, pk=kwargs.get("id"))
     YpJson = YpSerialiser()
     relations = {
         'likeusers': {'fields': ('first_name', 'last_name', 'avatar')},
         'author': {'fields': ('first_name', 'last_name', 'avatar')},
         'admins': {'fields': ('first_name', 'last_name', 'avatar')},
         'members': {'fields': ('first_name', 'last_name', 'avatar')},
         'blocks': {
             'relations': {
                 'points': {
                     # 'relations': {
                     #     'tags': {'fields': ('name', 'id', 'level')},
                     #     'author': {'fields': ('first_name', 'last_name', 'avatar')},
                     #     'imgs': {
                     #         'extras': ('thumbnail104x104', 'thumbnail207', 'thumbnail560'),
                     #         'relations': {
                     #             'author': {'fields': ('last_name', 'first_name', 'avatar')},
                     #             'likeusers': {'fields': ('last_name', 'first_name', 'avatar')},
                     #             'comments': {
                     #                 'relations': {
                     #                     'author': {'fields': ('first_name', 'last_name', 'avatar')}
                     #                 }
                     #             }
                     #         }
                     #     }
                     # }
                 },
                 'events': {
                     # 'relations': {
                     #     'tags': {'fields': ('name', 'id', 'level')},
                     #     'author': {'fields': ('first_name', 'last_name', 'avatar')},
                     #     'imgs': {
                     #         'extras': ('thumbnail104x104', 'thumbnail207', 'thumbnail560'),
                     #         'relations': {
                     #             'author': {'fields': ('last_name', 'first_name', 'avatar')},
                     #             'likeusers': {'fields': ('last_name', 'first_name', 'avatar')},
                     #             'comments': {
                     #                 'relations': {
                     #                     'author': {'fields': ('first_name', 'last_name', 'avatar')}
                     #                 }
                     #             }
                     #         }
                     #     }
                     # }
                 },
                 'likeusers': {'fields': ('last_name', 'first_name', 'avatar')},
                 'imgs': {
                     'extras': ('thumbnail104x104', 'thumbnail207', 'thumbnail560', 'thumbnail625x370'),
                     'relations': {
                         'author': {'fields': ('last_name', 'first_name', 'avatar')},
                         'likeusers': {'fields': ('last_name', 'first_name', 'avatar')},
                         'comments': {
                             'relations': {
                                 'author': {'fields': ('first_name', 'last_name', 'avatar')}
                             }
                         }
                     }
                 }
             }
         }
     }
     t0 = time.time()
     trip = YpJson.serialize([trip], relations=relations)
     self.log.info('Serialize trip detail complete (%.2f sec.) trip id: %s' % (time.time()-t0, kwargs.get('id')))
     return HttpResponse(trip, mimetype="application/json")
Example #36
0
    def post(self, request, *args, **kwargs):
        params = request.POST

        COUNT_ELEMENTS = LIMITS.COLLECTIONS_LIST.COLLECTIONS_LIST_COUNT
        errors = []

        page = kwargs.get("page", 1) or 1

        limit = COUNT_ELEMENTS*int(page)
        offset = (int(page)-1)*COUNT_ELEMENTS

        form = forms.FiltersForm(params)
        if form.is_valid():
            pointsreq = CollectionsModels.Collections.objects

            user = form.cleaned_data.get("user")
            if user:
                pointsreq = pointsreq.filter(author__id__icontains=user)

            coord_left = params.get("coord_left")
            if coord_left:
                try:
                    coord_left = json.loads(coord_left)
                except:
                    errors.append("некорректно задана левая точка на карте для фильтра")
                else:
                    ln = coord_left.get("ln")
                    lt = coord_left.get("lt")
                    if str(ln).replace(".", "", 1).isdigit() and str(lt).replace(".", "", 1).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(points__longitude__gte=ln, points__latitude__gte=lt)
                    else:
                        errors.append("некорректно задана левая точка на карте для фильтра")
            coord_right = params.get("coord_right")
            if coord_right:
                try:
                    coord_right = json.loads(coord_right)
                except:
                    errors.append("некорректно задана правая точка на карте для фильтра")
                else:
                    ln = coord_right.get("ln")
                    lt = coord_right.get("lt")
                    if str(ln).replace(".", "", 1).isdigit() and str(lt).replace(".", "", 1).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(points__longitude__lte=ln, points__latitude__lte=lt)

            name = form.cleaned_data.get("name")
            if name:
                pointsreq = pointsreq.filter(name__icontains=name)

            tags = params.getlist("tags[]")
            if tags and len(tags) > 0:
                pointsreq = pointsreq.filter(points__tags__in=tags)
                #.extra(where=['main_points.id in (select points_id from main_points_tags where tags_id in (%s))' % (",".join(map(lambda x: "'%s'" % x, tags)))])

            content = form.cleaned_data.get("content") or 'new'
            if content == 'new':
                pointsreq  = pointsreq.order_by('-created')
            elif content == "popular":
                pointsreq  = pointsreq.annotate(uslikes=Count('likeusers__id')).order_by('-uslikes')

            if request.user.is_authenticated():
                user = MainModels.User.objects.get(username = request.user)
                pointsreq  = pointsreq.extra(
                        select={
                            'isliked': 'SELECT case when COUNT(*) > 0 then 1 else 0 end FROM collections_collections_likeusers WHERE collections_collections_likeusers.collections_id = collections_collections.id and collections_collections_likeusers.user_id = '+str(user.id),
                            'likes_count': 'SELECT count(*) from collections_collections_likeusers where collections_collections_likeusers.collections_id=collections_collections.id',
                        }
                    )
            else:
                pointsreq  = pointsreq.extra(
                    select={
                        'isliked': 'SELECT 0 ',
                        'likes_count': 'SELECT count(*) from collections_collections_likeusers where collections_collections_likeusers.collections_id=collections_collections.id',
                    }
                )

            collections  = pointsreq[offset:limit].all()

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(collections,
                                                 extras=["isliked", "likes_count"],
                                                 fields=('id', 'name', 'description', 'likeusers', 'updated', 'points', 'author'),
                                                 relations={'points': {'fields': ('id', 'name', 'address', 'author', 'imgs'),
                                                                       'relations': {'author': {'fields': ('first_name', 'last_name', 'avatar')},
                                                                                     'imgs': {'extras': ('thumbnail207', 'thumbnail560', 'thumbnail104x104'),
                                                                                              'limit': LIMITS.POINTS_LIST.IMAGES_COUNT},
                                                                                     },
                                                                       'limit': LIMITS.COLLECTIONS_LIST.POINTS_COUNT
                                                                       },
                                                            'author': {'fields': ('id', 'first_name', 'last_name', 'avatar')},
                                                            'likeusers': {'fields': ('id', 'first_name', 'last_name', 'avatar'),
                                                                          'limit': LIMITS.COLLECTIONS_LIST.LIKEUSERS_COUNT}
                                                            }
                                                 ),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er +':'+e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)})
Example #37
0
    def get(self, request, *args, **kwargs):
        params = request.GET

        COUNT_ELEMENTS = 10
        status = 2
        errors = []

        page = kwargs.get("page", 1) or 1

        limit = COUNT_ELEMENTS * int(page)
        offset = (int(page) - 1) * COUNT_ELEMENTS

        form = forms.FiltersForm(params)
        if form.is_valid():
            pointsreq = MainModels.Events.objects

            user = form.cleaned_data.get("user")
            if user:
                pointsreq = pointsreq.filter(author__id_icontains=user)

            coord_left = params.get("coord_left")
            if coord_left:
                try:
                    coord_left = json.loads(coord_left)
                except:
                    status = 1
                    errors.append(
                        "некорректно задана левая точка на карте для фильтра")
                else:
                    ln = coord_left.get("ln")
                    lt = coord_left.get("lt")
                    if str(ln).isdigit() and str(
                            lt).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(point__longitude__gte=ln,
                                                     point__latitude__gte=lt)

            coord_right = params.get("coord_right")
            if coord_right:
                try:
                    coord_right = json.loads(coord_right)
                except:
                    status = 1
                    errors.append(
                        "некорректно задана правая точка на карте для фильтра")
                else:
                    ln = coord_right.get("ln")
                    lt = coord_right.get("lt")
                    if str(ln).isdigit() and str(
                            lt).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(point__longitude__lte=ln,
                                                     point__latitude__lte=lt)

            categ = form.cleaned_data.get("categ")
            if categ:
                pointsreq = pointsreq.filter(
                    point__categories__id__icontains=categ)

            name = form.cleaned_data.get("name")
            if name:
                pointsreq = pointsreq.filter(name__icontains=name)

            tags = form.cleaned_data.get("tags")
            if tags:
                try:
                    tags = json.loads(tags)
                except:
                    status = 1
                    errors.append(
                        "некорректно задана правая точка на карте для фильтра")
                else:
                    if len(tags) > 0:
                        object_type = ContentType.objects.get_for_model(
                            MainModels.Events).id
                        pointsreq = pointsreq.extra(where=[
                            'main_events.id in (select events_id from main_events_tags where tags_id in (%s))'
                            % (",".join(map(lambda x: "'%s'" % x, tags)))
                        ])

            content = form.cleaned_data.get("content") or 'new'
            if content == 'new':
                pointsreq = pointsreq.order_by('-created')
            elif content == "popular":
                pointsreq = pointsreq.annotate(
                    uslikes=Count('likeusers__id')).order_by('-uslikes')

            points = pointsreq[offset:limit].all()

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(
                points,
                relations={
                    'point': {},
                    'tags': {
                        'fields': ('name', 'id', 'level')
                    },
                    'feedbacks': {
                        'fields': ('type', 'feedback')
                    },
                    'author': {
                        'fields': ('first_name', 'last_name', 'avatar')
                    },
                    'imgs': {
                        'extras': (
                            'thumbnail207',
                            'thumbnail325',
                        )
                    }
                }),
                                mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er + ':' + e[er][0])
            return JsonHTTPResponse({
                "status": 0,
                "txt": ", ".join(errors)
            })
Example #38
0
 def get(self, request, *args, **kwargs):
     pk = kwargs.get("id")
     event = get_object_or_404(MainModels.Events, pk=pk)
     YpJson = YpSerialiser()
     return HttpResponse(YpJson.serialize([event], relations={'point':{}, 'feedbacks': {'fields': ('type', 'feedback')}, 'tags': {'fields': ('name', 'id', 'level')}, 'author':{'fields':('first_name','last_name','avatar')},'imgs':{'extras':('thumbnail207','thumbnail325',)}}), mimetype="application/json")
Example #39
0
    def get(self, request, *args, **kwargs):
        params = request.GET

        COUNT_ELEMENTS = 10
        status = 2
        errors = []

        page = kwargs.get("page", 1) or 1

        limit = COUNT_ELEMENTS*int(page)
        offset = (int(page)-1)*COUNT_ELEMENTS

        form = forms.FiltersForm(params)
        if form.is_valid():
            pointsreq = MainModels.Events.objects;

            user = form.cleaned_data.get("user")
            if user:
                pointsreq = pointsreq.filter(author__id_icontains=user)

            coord_left = params.get("coord_left")
            if coord_left:
                try:
                    coord_left = json.loads(coord_left)
                except:
                    status = 1
                    errors.append("некорректно задана левая точка на карте для фильтра")
                else:
                    ln = coord_left.get("ln")
                    lt = coord_left.get("lt")
                    if str(ln).isdigit() and str(lt).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(point__longitude__gte=ln, point__latitude__gte=lt)

            coord_right = params.get("coord_right")
            if coord_right:
                try:
                    coord_right = json.loads(coord_right)
                except:
                    status = 1
                    errors.append("некорректно задана правая точка на карте для фильтра")
                else:
                    ln = coord_right.get("ln")
                    lt = coord_right.get("lt")
                    if str(ln).isdigit() and str(lt).isdigit() and ln >= 0 and lt >= 0:
                        pointsreq = pointsreq.filter(point__longitude__lte=ln, point__latitude__lte=lt)

            categ = form.cleaned_data.get("categ")
            if categ:
                pointsreq = pointsreq.filter(point__categories__id__icontains=categ)

            name = form.cleaned_data.get("name")
            if name:
                pointsreq = pointsreq.filter(name__icontains=name)

            tags = form.cleaned_data.get("tags")
            if tags:
                try:
                    tags = json.loads(tags)
                except:
                    status = 1
                    errors.append("некорректно задана правая точка на карте для фильтра")
                else:
                    if len(tags) > 0:
                        object_type = ContentType.objects.get_for_model(MainModels.Events).id
                        pointsreq = pointsreq.extra(where=['main_events.id in (select events_id from main_events_tags where tags_id in (%s))' % (",".join(map(lambda x: "'%s'" % x, tags)))])

            content = form.cleaned_data.get("content") or 'new'
            if content == 'new':
                pointsreq  = pointsreq.order_by('-created')
            elif content == "popular":
                pointsreq  = pointsreq.annotate(uslikes=Count('likeusers__id')).order_by('-uslikes')

            points  = pointsreq[offset:limit].all()

            YpJson = YpSerialiser()
            return HttpResponse(YpJson.serialize(points, relations={'point':{}, 'tags': {'fields': ('name', 'id', 'level')}, 'feedbacks': {'fields': ('type', 'feedback')}, 'author':{'fields':('first_name','last_name','avatar')},'imgs':{'extras':('thumbnail207','thumbnail325',)}}), mimetype="application/json")
        else:
            e = form.errors
            for er in e:
                errors.append(er +':'+e[er][0])
            return JsonHTTPResponse({"status": 0, "txt": ", ".join(errors)});