# -*- coding: utf-8 -*- # django-jsonrpc-django | (c) 2022-present Tomek Wójcik | MIT License from bthlabs_jsonrpc_core import JSONRPCAccessDeniedError, register_method from bthlabs_jsonrpc_django_example.things.models import Thing @register_method('things.list') def list_things(request): return Thing.objects.filter( is_active=True, owner__isnull=True, ) @register_method('things.list', namespace='private') def private_list_things(request): return Thing.objects.filter( is_active=True, owner=request.user, ) @register_method('things.create', namespace='private') def private_create_thing(request, name, content): return Thing.objects.create( name=name, content=content, is_active=True, owner=request.user, ) @register_method('things.update', namespace='private') def private_update_thing(request, thing_id, name=None, content=None): thing = Thing.objects.get(pk=thing_id, is_active=True) if thing.owner != request.user: raise JSONRPCAccessDeniedError("You can't access this thing.") if name is not None: thing.name = name if content is not None: thing.content = content thing.save() return thing @register_method('things.list', namespace='admin') def admin_list_things(request): return Thing.objects.all() @register_method('things.create', namespace='admin') def admin_create_thing(request, name, content, is_active, owner_id): return Thing.objects.create( name=name, content=content, is_active=is_active, owner_id=owner_id, ) @register_method('things.update', namespace='admin') def admin_update_thing(request, thing_id, name=None, content=None, is_active=None, owner_id=None): thing = Thing.objects.get(pk=thing_id) if name is not None: thing.name = name if content is not None: thing.content = content if is_active is not None: thing.is_active = is_active if owner_id is not None: thing.owner_id = owner_id thing.save() return thing