def get_age(model): from crowdsourcing.utils import get_relative_time if model.status == models.Project.STATUS_DRAFT: return get_relative_time(model.updated_at) else: return get_relative_time(model.published_at)
def create(self, request, *args, **kwargs): serializer = RedisMessageSerializer(data=request.data) provider = RedisProvider() conversation_key = provider.build_key('conversation', request.data['conversation']) conversation_raw = provider.get_list(conversation_key) if len(conversation_raw): recipients = ast.literal_eval(conversation_raw[0]) if request.user.username not in recipients or request.data[ 'recipient'] not in recipients: raise serializers.ValidationError( detail=daemo_error("Invalid recipient for this thread")) else: raise serializers.ValidationError( detail=daemo_error("Invalid conversation")) if serializer.is_valid(): redis_publisher = RedisPublisher(facility='notifications', users=[request.data['recipient']]) message = RedisMessage( json.dumps({ "body": request.data['message'], "time_relative": get_relative_time(timezone.now()), "conversation": request.data['conversation'], "sender": request.user.username })) redis_publisher.publish_message(message) message_data = { "conversation": request.data['conversation'], "body": request.data['message'] } serializer = MessageSerializer(data=message_data, context={'request': request}) if serializer.is_valid(): obj = serializer.create(sender=request.user) response_data = MessageSerializer(instance=obj, context={ "request": request }).data return Response(data=response_data, status=status.HTTP_201_CREATED) raise serializers.ValidationError(detail=serializer.errors) else: raise serializers.ValidationError(detail=serializer.errors)
def create(self, request, *args, **kwargs): serializer = RedisMessageSerializer(data=request.data) provider = RedisProvider() conversation_key = provider.build_key('conversation', request.data['conversation']) conversation_raw = provider.get_list(conversation_key) if len(conversation_raw): recipients = ast.literal_eval(conversation_raw[0]) if request.user.username not in recipients or request.data['recipient'] not in recipients: return Response(data={"message": "Invalid recipient for this thread"}, status=status.HTTP_400_BAD_REQUEST) else: return Response(data={"message": "Invalid conversation"}, status=status.HTTP_400_BAD_REQUEST) if serializer.is_valid(): redis_publisher = RedisPublisher(facility='inbox', users=[request.data['recipient']]) message = RedisMessage(json.dumps({"body": request.data['message'], "time_relative": get_relative_time(timezone.now()), "conversation": request.data['conversation'], "sender": request.user.username})) redis_publisher.publish_message(message) message_data = { "conversation": request.data['conversation'], "body": request.data['message'] } serializer = MessageSerializer(data=message_data, context={'request': request}) if serializer.is_valid(): obj = serializer.create(sender=request.user) response_data = MessageSerializer(instance=obj, context={"request": request}).data return Response(data=response_data, status=status.HTTP_201_CREATED) return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_time_relative(self, obj): return get_relative_time(obj.created_at)