

from parse_rest.connection import API_ROOT
from parse_rest.datatypes import ParseResource
from parse_rest.query import QueryManager


class Role(ParseResource):
    '''
    A Role is like a regular Parse object (can be modified and saved) but
    it requires additional methods and functionality
    '''
    ENDPOINT_ROOT = '/'.join([API_ROOT, 'roles'])

    @property
    def className(self):
        return '_Role'

    def __repr__(self):
        return '<Role:%s (Id %s)>' % (getattr(self, 'name', None), self.objectId)


Role.Query = QueryManager(Role)



from parse_rest.connection import API_ROOT
from parse_rest.datatypes import ParseResource
from parse_rest.query import QueryManager


class Role(ParseResource):
    '''
    A Role is like a regular Parse object (can be modified and saved) but
    it requires additional methods and functionality
    '''
    ENDPOINT_ROOT = '/'.join([API_ROOT, 'roles'])

    @property
    def className(self):
        return '_Role'

    def __repr__(self):
        return '<Role:%s (Id %s)>' % (getattr(self, 'name', None), self.objectId)
    
    def removeRelation(self, key, className, objectsId):
        self.manageRelation('RemoveRelation', key, className, objectsId)

    def addRelation(self, key, className, objectsId):
        self.manageRelation('AddRelation', key, className, objectsId)

    def manageRelation(self, action, key, className, objectsId):
        objects = [{
                    "__type": "Pointer",
                    "className": className,
                    "objectId": objectId
                    } for objectId in objectsId]

        payload = {
            key: {
                 "__op": action,
                 "objects": objects
                }
            }
        self.__class__.PUT(self._absolute_url, **payload)
        self.__dict__[key] = ''


Role.Query = QueryManager(Role)

Handle adding and removing relations from Roles.
Handle adding and removing relations from Roles.

This adds addRelation and removeRelation capabilities to Role, making it possible to add users to the users column and roles to the roles column in a Role object, for example. This prevents the error of Role not having the attribute addRelation or removeRelation when trying to add users or roles to a Role, which is critical for Role functionality.
  
  
  from parse_rest.connection import API_ROOT
  from parse_rest.datatypes import ParseResource
  from parse_rest.query import QueryManager
  
  
  class Role(ParseResource):
      '''
      A Role is like a regular Parse object (can be modified and saved) but
      it requires additional methods and functionality
      '''
      ENDPOINT_ROOT = '/'.join([API_ROOT, 'roles'])
  
      @property
      def className(self):
          return '_Role'
  
      def __repr__(self):
          return '<Role:%s (Id %s)>' % (getattr(self, 'name', None), self.objectId)
+     
+     def removeRelation(self, key, className, objectsId):
+         self.manageRelation('RemoveRelation', key, className, objectsId)
+ 
+     def addRelation(self, key, className, objectsId):
+         self.manageRelation('AddRelation', key, className, objectsId)
+ 
+     def manageRelation(self, action, key, className, objectsId):
+         objects = [{
+                     "__type": "Pointer",
+                     "className": className,
+                     "objectId": objectId
+                     } for objectId in objectsId]
+ 
+         payload = {
+             key: {
+                  "__op": action,
+                  "objects": objects
+                 }
+             }
+         self.__class__.PUT(self._absolute_url, **payload)
+         self.__dict__[key] = ''
  
  
  Role.Query = QueryManager(Role)
  
Handle adding and removing relations from Roles.
## Code Before:


from parse_rest.connection import API_ROOT
from parse_rest.datatypes import ParseResource
from parse_rest.query import QueryManager


class Role(ParseResource):
    '''
    A Role is like a regular Parse object (can be modified and saved) but
    it requires additional methods and functionality
    '''
    ENDPOINT_ROOT = '/'.join([API_ROOT, 'roles'])

    @property
    def className(self):
        return '_Role'

    def __repr__(self):
        return '<Role:%s (Id %s)>' % (getattr(self, 'name', None), self.objectId)


Role.Query = QueryManager(Role)

## Instruction:
Handle adding and removing relations from Roles.
## Code After:


from parse_rest.connection import API_ROOT
from parse_rest.datatypes import ParseResource
from parse_rest.query import QueryManager


class Role(ParseResource):
    '''
    A Role is like a regular Parse object (can be modified and saved) but
    it requires additional methods and functionality
    '''
    ENDPOINT_ROOT = '/'.join([API_ROOT, 'roles'])

    @property
    def className(self):
        return '_Role'

    def __repr__(self):
        return '<Role:%s (Id %s)>' % (getattr(self, 'name', None), self.objectId)
    
    def removeRelation(self, key, className, objectsId):
        self.manageRelation('RemoveRelation', key, className, objectsId)

    def addRelation(self, key, className, objectsId):
        self.manageRelation('AddRelation', key, className, objectsId)

    def manageRelation(self, action, key, className, objectsId):
        objects = [{
                    "__type": "Pointer",
                    "className": className,
                    "objectId": objectId
                    } for objectId in objectsId]

        payload = {
            key: {
                 "__op": action,
                 "objects": objects
                }
            }
        self.__class__.PUT(self._absolute_url, **payload)
        self.__dict__[key] = ''


Role.Query = QueryManager(Role)
