Exemple #1
0
 def save(self, *args, **kwargs):
     # first must save the object before we can use the many_to_many field
     super(Post, self).save(*args, **kwargs)
     link_hashtags_to_model(self.text, self, self.user)
     notify_on_mention(self.text, self, self.user)
     # generate thumbnail picture version
     if self.pictures is not None:
         for p in self.pictures.all():
             p.create_thumbnail()
def parse_fields_looking_for_hashtags(sender,
                                      instance,
                                      hashtagged_field_list=None,
                                      **kwargs):
    """
    A function handler to work with ``hashtagged_model_was_saved`` signal. This
    handler parse a list of model fields looking for hashtags to be
    linked/related with the instance in question.

    Usage example::

        # You need connect ``parse_fields_looking_for_hashtags`` on
        # ``hashtagged_model_was_saved`` only one time.
        from hashtags.signals import (hashtagged_model_was_saved,
                                      parse_fields_looking_for_hashtags)
        hashtagged_model_was_saved.connect(parse_fields_looking_for_hashtags)

    Connecting your models that you want track hashtags (FlatPage example)::

        from django.contrib.flatpages.models import FlatPage
        from django.db.models.signals import post_save

        # connect hashtagged_model_was_saved signal to post_save
        def post_save_handler(sender, instance, **kwargs):
            hashtagged_model_was_saved.send(sender=sender, instance=instance,
                # put the hashtagged fields of your app here
                hashtagged_field_list=['title', 'content']
            )
        post_save.connect(post_save_handler, sender=FlatPage)

    Alternatively you can set ``hashtagged_field_list`` in your model as a
    class attribute, then your ``post_save_handler`` can be:

        def post_save_handler(sender, instance, **kwargs):
            hashtagged_model_was_saved.send(sender=sender, instance=instance)

    """
    if not hashtagged_field_list:
        try:
            hashtagged_field_list = sender._meta.hashtagged_field_list
        except AttributeError:
            return
    text = ''
    for field in hashtagged_field_list:
        text += instance.__getattribute__(field) + '\n'
    link_hashtags_to_model(text, instance)
    print 'Parsing hashtags\n'
Exemple #3
0
def parse_fields_looking_for_hashtags(sender, instance, hashtagged_field_list=None, 
                                      **kwargs):
    """
    A function handler to work with ``hashtagged_model_was_saved`` signal. This
    handler parse a list of model fields looking for hashtags to be
    linked/related with the instance in question.

    Usage example::

        # You need connect ``parse_fields_looking_for_hashtags`` on
        # ``hashtagged_model_was_saved`` only one time.
        from hashtags.signals import (hashtagged_model_was_saved,
                                      parse_fields_looking_for_hashtags)
        hashtagged_model_was_saved.connect(parse_fields_looking_for_hashtags)

    Connecting your models that you want track hashtags (FlatPage example)::

        from django.contrib.flatpages.models import FlatPage
        from django.db.models.signals import post_save

        # connect hashtagged_model_was_saved signal to post_save
        def post_save_handler(sender, instance, **kwargs):
            hashtagged_model_was_saved.send(sender=sender, instance=instance,
                # put the hashtagged fields of your app here
                hashtagged_field_list=['title', 'content']
            )
        post_save.connect(post_save_handler, sender=FlatPage)

    Alternatively you can set ``hashtagged_field_list`` in your model as a
    class attribute, then your ``post_save_handler`` can be:

        def post_save_handler(sender, instance, **kwargs):
            hashtagged_model_was_saved.send(sender=sender, instance=instance)

    """
    if not hashtagged_field_list:
        try:
            hashtagged_field_list = sender._meta.hashtagged_field_list
        except AttributeError:
            return
    text = ''
    for field in hashtagged_field_list:
        text += instance.__getattribute__(field) + '\n'
    link_hashtags_to_model(text, instance)
    print 'Parsing hashtags\n'
Exemple #4
0
def profile(request,
            username='',
            template='account/profile.html',
            extra_context=None):
    user = None
    if username == "":
        user = User.objects.get(username=request.user.username)
    else:
        user = User.objects.get(username=username)

    if request.method == 'POST':
        form = PostForm(
            data=request.POST,
            files=request.FILES,
        )
        if form.is_valid():
            post = form.save(commit=False)
            # Check for image
            picture = request.POST.get('picture')
            if picture != '':
                picture = UploadedFile.objects.get(pk=int(picture, 0))
                post.picture = picture
            post.pub_date = timezone.now()
            post.user = request.user
            post.save()
            try:
                UploadedFile.objects.get(pk=int(picture, 0)).delete()
            except:
                pass
            link_hashtags_to_model(post.text, post, user)
            notify_on_mention(post.text, post, user)
            return redirect('./')
    context = {
        'posts':
        Post.objects.filter(user=user).order_by('-pub_date').distinct()[:500],
        'form':
        PostForm(),
        'user_sub':
        user,
    }
    if extra_context is not None:
        context.update(extra_context)
    return render(request, template, context)
def urlize_and_track_hashtags(value, object_to_track):
    """
    Works like ``urlize_hashtags`` but you can pass a object parameter to
    link/relate hashtags on text with the object in question.

    Usage example::

        {{ value|urlize_and_track_hashtags:object_to_track }}

    Real world example::

        {{ flatpage.content|urlize_and_track_hashtags:flatpage }}

    **Important**: ``urlize_and_track_hashtags`` doesn't works properly if your
    object has two fields with hashtags to be tracked. Use the signals below if
    you want this feature or if you want hashtags updated on ``post_save``
    signal instead on template rendering.
    """
    link_hashtags_to_model(value, object_to_track)
    return mark_safe(urlize_hashtags(value))
def urlize_and_track_hashtags(value, object_to_track):
    """
    Works like ``urlize_hashtags`` but you can pass a object parameter to
    link/relate hashtags on text with the object in question.

    Usage example::

        {{ value|urlize_and_track_hashtags:object_to_track }}

    Real world example::

        {{ flatpage.content|urlize_and_track_hashtags:flatpage }}

    **Important**: ``urlize_and_track_hashtags`` doesn't works property if your
    object has two fields with hashtags to be tracked. Use the signals below if
    you want this feature or if you want hashtags updated on ``post_save``
    signal instead on template rendering.
    """
    link_hashtags_to_model(value, object_to_track)
    return mark_safe(urlize_hashtags(value))
Exemple #7
0
    def create(self, request):
        """
        Creates a new comment

        POST data:
        - object_pk
        - picture (UploadedFile id)
        - content_type
        - content_type_id
        - target_object
        - security_hash
        - timestamp
        - comment
        """
        user = User.objects.get(username=request.user.username)
        post = Post.objects.get(id=request.data.get('object_pk'))
        comment = None
        if request.method == 'POST':
            serializer = CommentSerializer(data=request.data)
            if serializer.is_valid():
                comment = serializer.save(site_id=1, content_object=post, user=request.user)
                # Check for image
                picture = request.data.get('picture', '')
                if picture != '':
                    picture = UploadedFile.objects.get(pk=picture)
                    comment.picture = picture
                comment.timestamp = timezone.now()
                comment.save()

                link_hashtags_to_model(comment.comment, comment, user)
                notify_on_mention(comment.comment, comment, user)
                return Response(
                    CommentSerializer(comment, context={'request': request}).data,
                    status.HTTP_201_CREATED
                )
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #8
0
    def create(self, request):
        """
        Creates a new post

        POST data:
        - text
        - pictures
        """
        user = request.user
        post = None
        # return Response(json.dumps(request.FILES))
        my_data = {
            'text': request.data.get('text', '')
        }
        # my_data.append(request.data['filename'])
        # my_data.append(request.data['object_content_type'])
        if request.method == 'POST':
            serializer = PostSerializer(
                data=my_data
            )
            if serializer.is_valid():
                post = serializer.save(user=request.user, pub_date=timezone.now())

                UploadedFile.objects.upload(request.user, request.data, post)

                link_hashtags_to_model(post.text, post, user)
                notify_on_mention(post.text, post, user)

                return Response(
                    PostSerializer(post, context={'request': request}).data,
                    status.HTTP_201_CREATED
                )
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST
            )