def handle(self, *args, **options):
        Snippet.objects.all().delete()
        print(repr(SnippetSerializer()))

        snippet = Snippet(code='foo = "bar"\n')
        snippet.save()

        snippet = Snippet(code='print "hello, world"\n')
        snippet.save()

        serializer = SnippetSerializer(snippet)
        print('serializer.data')
        print(serializer.data)

        content = JSONRenderer().render(serializer.data)
        print('content')
        print(content)

        stream = BytesIO(content)
        print('stream')
        print(stream)
        data = JSONParser().parse(stream)
        print('data')
        print(data)

        serializer = SnippetSerializer(data=data)
        if serializer.is_valid():
            print('serializer.validated_data')
            print(serializer.validated_data)
            serializer.save()

        serializers = SnippetSerializer(Snippet.objects.all(), many=True)
        print('serializers.data')
        print(serializers.data)
    def setUp(self):
        snippet = Snippet(code='foo = "bar"\n')
        snippet.save()

        self.snippet = Snippet(code='print "hello, world"\n')
        self.snippet.save()

        self.serializer = SnippetSerializer(self.snippet)
Ejemplo n.º 3
0
    def test_save_one_test(self):
        snippet = Snippet(code='foo = "bar\n"')
        snippet.save()

        snippet = Snippet(code='print("hello world")\n')
        snippet.save()

        serializer = SnippetSerializer(snippet)
        print(serializer.data)
Ejemplo n.º 4
0
def index(request):
    user0 = User.objects.get(username='******')
    print(user0)
    # user = User(username='******', password='******', email='*****@*****.**')
    # user.save()
    snippet = Snippet(owner=user0, code='foo = "bar"\n')
    snippet.save()
    user2 = User.objects.get(username='******')
    snippet2 = Snippet(owner=user2, code='print("hello, world")\n')
    snippet2.save()
    serializer_context = {
        'request': request,
    }
    serializer = SnippetSerializer(snippet, context=serializer_context)
    print('#######################')
    print(type(serializer.data))
    print(serializer.data)
    """
    <class 'rest_framework.utils.serializer_helpers.ReturnDict'>
    {'id': 34, 'title': '', 'code': 'foo = "bar"\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}
    """
    content = JSONRenderer().render(serializer.data)  #把字典类型转化为字节流
    print('#######################')
    print(type(content))
    print(content)
    """
    <class 'bytes'>
    b'{"id":31,"title":"","code":"foo = \\"bar\\"\\n","linenos":false,"language":"python","style":"friendly"}'
    """
    import io
    stream = io.BytesIO(content)
    data = JSONParser().parse(stream)  #把字节流转换为字典类型
    print('#######################')
    print(type(data))
    print(data)
    """
    <class 'dict'>
    {'id': 31, 'title': '', 'code': 'foo = "bar"\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}
    """
    serializer_context2 = {
        'request': request,
    }
    serializer2 = SnippetSerializer(data=data, context=serializer_context2)
    if serializer2.is_valid():
        serializer2.save()
    serializer3 = SnippetSerializer(Snippet.objects.all(), many=True)
    print('#######################')
    print(type(serializer3)
          )  #<class 'rest_framework.serializers.ListSerializer'> 列出所有的值
    print(serializer3.data)
    #Snippet.objects.all().delete()
    return render(request, 'index.html')
Ejemplo n.º 5
0
 def test_validation_url_hash_is_unique(self):
     # pk is url_hash
     # alternatively, we can place another assert
     snippet = Snippet(pk='12345678')
     # save does not call full_clean; the model does not seem to care that text is empty (full_clean would)
     # even though by default blank=False and null=False
     snippet.save()
     snippet2_ = Snippet(pk='12345678', text='nothing', slug='nothing')
     with self.assertRaises(ValidationError) as ve:
         snippet2_.full_clean()
     self.assertEqual(
         ve.exception.message_dict,
         {'url_hash': ['Snippet with this Url hash already exists.']})
 def setUp(self):
     self.client = APIClient()
     self.user = User(username='******')
     self.user.set_password('test')
     self.user.save()
     self.snippetToDelete = Snippet(code='print(999)', id=100)
     self.snippetToDelete.save()
Ejemplo n.º 7
0
 def test_it_should_serialize(self):
     user = User(username="******")
     snippet = Snippet(title='title123',owner = user)
     serializer = SnippetSerializer(snippet, context={
         'request': None,
     })
     self.assertTrue(serializer.data["title"]=='title123') 
Ejemplo n.º 8
0
 def test_snippets(self):
     from snippets.models import Snippet
     s = Snippet(name='test1', snippet='my test snippet')
     s.save()
     tmpl = "{% load snippet_tags %}{% get_snippet test1 %}"
     ctxt = template.Context({})
     out = template.Template(tmpl).render(ctxt)
     self.assertEqual(out, 'my test snippet')
Ejemplo n.º 9
0
 def test_validation_visibilty_fails_with_wrong_input(self):
     # need to include text and slug because validation error
     # will be raised on those and we wouldn't know if its because of visibility
     snippet = Snippet(visibility='AS', text='nothing', slug='nothing')
     # fails django database validation, but error is not raised on database level
     # remember: snippet.save() does not auto call .full_clean
     with self.assertRaises(ValidationError):
         snippet.full_clean()
Ejemplo n.º 10
0
 def create_snippet(code, owner):
     snippet = Snippet(title='test',
                       code=code,
                       linenos=True,
                       language='python',
                       style='friendly',
                       owner=owner)
     snippet.save()
Ejemplo n.º 11
0
 def test_slugify_not_called_if_title_is_same(self):
     snippet = Snippet(title="My slug is brand new")
     snippet.save()
     with patch('snippets.models.slugify') as slugify_mock:
         slugify_mock.return_value = 'my-slug-is-changed'
         snippet.views = 0
         snippet.save()
     self.assertFalse(slugify_mock.called)
Ejemplo n.º 12
0
 def test_valid(self):
     params = {
         'title': 'hello world',
         'code': 'print("Hello World")',
         'description': 'Just printing "Hello World"',
     }
     snippet = Snippet()
     form = SnippetForm(params, instance=snippet)
     self.assertTrue(form.is_valid())
Ejemplo n.º 13
0
def create(request):
  if request.method == "GET":
    form = SnippetForm()  
  elif request.method == "POST":
    form = SnippetForm(request.POST)
    if form.is_valid():
      data = form.cleaned_data
      snippet = Snippet(title=data.get('title'), content=data.get('content'))
      snippet.save()
      return redirect('view',snippet.id)
  return render(request, 'snippets/create.html',{'form':form})
Ejemplo n.º 14
0
    def setUp(self):
        user = User()
        user.password = '******'
        user.email = '*****@*****.**'
        user.save()

        for snippet_id in range(self.number_of_snippets):
            snippet = Snippet()
            snippet.code = 'Snippet: #{snippet_id}'
            snippet.owner_id = user.pk
            snippet.save()
Ejemplo n.º 15
0
def working_with_serializers():
    from snippets.models import Snippet
    from snippets.serializers import SnippetSerializer
    from rest_framework.renderers import JSONRenderer
    from rest_framework.parsers import JSONParser

    code1 = '''foo = "bar"
    def display(var):
        print("var:", var)'''
    code2 = '''const foo = "bar"
    const display = var => console.log("var:", var)
    '''
    # create Snippet instances
    snippet1 = Snippet(code=code1)
    snippet2 = Snippet(code=code2)

    # save instances to the db
    snippet1.save()
    snippet2.save()

    # create serializer instance
    serializer = SnippetSerializer(snippet)
    serializer.data  # => in native types (not exactly but this will do)

    # render the data to json
    content = JSONRenderer().render(serializer.data)  # => bytes(string)

    # deserialization
    from django.utils.six import BytesIO

    stream = BytesIO(content)
    data = JSONParser().parse(stream)  # => absolute native types

    # restore native types to fully populated object instance
    serializer = SnippetSerializer(data=data)
    serializer.is_valid()  # => True
    serializer.validated_data  # => almost native types
    serializer.save()  # => save instance to db
Ejemplo n.º 16
0
def restore_object(attrs, instance=None):
    """
    Create or update a new snippet instance.
    """
    if instance:
        # Update existing instance
        instance.title = attrs['title']
        instance.code = attrs['code']
        instance.linenos = attrs['linenos']
        instance.language = attrs['language']
        instance.style = attrs['style']
        return instance

    # Create new instance
    return Snippet(**attrs)
Ejemplo n.º 17
0
    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        If we didn't define restore_object, then deserializing would
        simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.title = attrs.get('title', instance.title)
            instance.code = attrs.get('code', instance.code)
            instance.value = attrs.get('value', instance.value)
            return instance

        return Snippet(**attrs)
Ejemplo n.º 18
0
    def restore_object(self, attrs, instance=None):
        """
		Create or update a new snippet instance, given a dictionary
		of deserialized field values.

		Note that if we don't define this method, then deserializing
		data will simply return a dictionary of items.
		"""
        owner = serializers.Field(source='owner.username')
        if instance:
            instance.title = attrs.get('title', instance.title)
            instance.code = attrs.get('code', instance.code)
            instance.linenos = attrs.get('linenos', instance.linenos)
            instance.language = attrs.get('language', instance.language)
            instance.style = attrs.get('style', instance.style)
            return instance
        return Snippet(**attrs)
Ejemplo n.º 19
0
    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary of
        deserialized field values

        If this method isn't defined, deserializing data will simply return a
        dictionary of items
        """
        if instance:
            # update existing instance
            instance.title = attrs.get('title', instance.title)
            instance.code = attrs.get('code', instance.code)
            instance.linenos = attrs.get('language', instance.language)
            instance.style = attrs.get('style', instance.style)
            return instance

        # create a new instance
        return Snippet(**attrs)
Ejemplo n.º 20
0
    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dict
        of deserialized field values.

        Note that if we don't define this method, then 
        deserealizing data will simply return a dict of items.
        """
        if instance:
            # Update existing instance
            instance.title = attrs.get('title', instance.title)
            instance.code = attrs.get('code', instance.code)
            instance.linenos = attrs.get('linenos', instance.linenos)
            instance.language = attrs.get('language', instance.language)
            instance.style = attrs.get('style', instance.style)
            return instance

        # Create new instance
        return Snippet(**attrs)
Ejemplo n.º 21
0
def snippet_new(request):
	if request.method == 'POST':
		# Process Form Input
		title = request.POST.get('title', False)
		desc = request.POST.get('description', False)
		code = request.POST.get('code', False)
		language = request.POST.get('language', False)

		#Save created snippet
		snippet = Snippet()
		snippet.title = title
		snippet.description = desc
		snippet.code = code
		snippet.language = language
		snippet.creation_date = datetime.now()
		snippet.save()
		
		return redirect('snippets:list')
	elif request.method == 'GET':
		return TemplateResponse(request, 'snippets/snippet_new.html', {})
Ejemplo n.º 22
0
def snippet_list(request):
    """
    List all code snippets, or create a new snippet.
    """
    if request.method == 'GET':
        snippet = Snippet(code='foo = "bar"\n')
        snippet.save()
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'POST':
        data = json.loads(request.body)
        serializer = SnippetSerializer(data=data)
        logger = logging.getLogger("django")
        logger.info(serializer)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)
Ejemplo n.º 23
0
 def post(self, request, *args, **kwargs):
     # Si el usuario no estaba autenticado, no puede crear snippets. Lo redireccionamos al login
     if request.user.is_authenticated == False:
         return redirect('/login')
     # Usuario que va a crear el snippet
     snippet_user = User.objects.get(username=request.user.username)
     # Datos del formulario de creación del snippet
     form = SnippetForm(request.POST, instance=Snippet(user=snippet_user))
     # Si el formulario es válido
     if form.is_valid():
         # Nombre y descripción del snippet para enviar el mail
         snippet_name = form.cleaned_data['name']
         snippet_description = form.cleaned_data['description']
         # Creamos el snippet
         form.save()
         # Enviar mail al usuario avisando que se creó un snippet
         # Se usa celery para hacer el proceso de envío de mail de forma asincrónica
         sendEmailInSnippetCreation.delay(snippet_name, snippet_description,
                                          snippet_user.email)
     # Redirecciono al index
     return redirect('/')
Ejemplo n.º 24
0
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser

# 创建数据
snippet = Snippet(code='foo = "bar"\n')
snippet.save()

snippet = Snippet(code='print "hello, world"\n')
snippet.save()

serializer = SnippetSerializer(snippet)
serializer.data
# {'id': 2, 'title': u'', 'code': u'print "hello, world"\n', 'linenos': False, 'language': u'python', 'style': u'friendly'}

# 将字典转换成json格式
content = JSONRenderer().render(serializer.data)
content
# '{"id": 2, "title": "", "code": "print \\"hello, world\\"\\n", "linenos": false, "language": "python", "style": "friendly"}'
#反序列化是类似的。首先我们将一个流解析成Python支持数据类型。

# 将json转换成字典格式
from django.utils.six import BytesIO

stream = BytesIO(content)
data = JSONParser().parse(stream)
#然后我们将这些本机数据类型恢复到完全填充的对象实例中

serializer = SnippetSerializer(data=data)
serializer.is_valid()  # 验证数据是否符合要求
Ejemplo n.º 25
0
 def test_slugify_called_when_title_changes(self, slugify_mock):
     snippet = Snippet(title="My slug is brand new")
     snippet.title = "My slug just changed"
     slugify_mock.return_value = 'my-slug-is-changed'
     snippet.save()
     slugify_mock.assert_called_once_with("My slug just changed")
Ejemplo n.º 26
0
 def test_snippetstring_representation(self):
     snippet = Snippet(title='some text')
     self.assertEqual(str(snippet), 'some text')
Ejemplo n.º 27
0
 def test_slug_can_be_updated(self):
     snippet = Snippet(title="My slug is brand new")
     snippet.title = "My slug just changed"
     snippet.save()
     self.assertEqual(snippet.slug, 'my-slug-just-changed')
Ejemplo n.º 28
0
 def test_slug_is_automatically_generated(self):
     snippet = Snippet(title="My program is testing.")
     # will fail if .save() is not called since save adds a slug
     # and there is no default slug
     snippet.save()
     self.assertEqual(snippet.slug, "my-program-is-testing")
Ejemplo n.º 29
0
 def test_title_with_blank_is_not_default(self):
     snippet = Snippet(title='')
     self.assertEqual(snippet.title, '')
Ejemplo n.º 30
0
 def test_default_is_no_expiration(self):
     snippet = Snippet()
     self.assertEqual(snippet.expiration_date, None)