def find_objects(uid=None): """Find the object by its UID 1. get the object from the given uid 2. fetch objects specified in the request parameters 3. fetch objects located in the request body :param uid: The UID of the object to find :type uid: string :returns: List of found objects :rtype: list """ # The objects to cut objects = [] # get the object by the given uid or try to find it by the request # parameters obj = get_object_by_uid(uid) or get_object_by_request() if obj: objects.append(obj) else: # no uid -> go through the record items records = req.get_request_data() for record in records: # try to get the object by the given record obj = get_object_by_record(record) # no object found for this record if obj is None: continue objects.append(obj) return objects
def create_items(portal_type=None, uid=None, endpoint=None, **kw): """ create items 1. If the uid is given, get the object and create the content in there (assumed that it is folderish) 2. If the uid is 0, the target folder is assumed the portal. 3. If there is no uid given, the payload is checked for either a key - `parent_uid` specifies the *uid* of the target folder - `parent_path` specifies the *physical path* of the target folder """ # import pdb;pdb.set_trace() # disable CSRF req.disable_csrf_protection() # destination where to create the content container = uid and api.get_object_by_uid(uid) or None # extract the data from the request records = req.get_request_data() results = [] for record in records: # get the portal_type if portal_type is None: # try to fetch the portal type out of the request data portal_type = record.pop("portal_type", None) # check if it is allowed to create the portal_type if not is_creation_allowed(portal_type): fail(401, "Creation of '{}' is not allowed".format(portal_type)) if container is None: # find the container for content creation container = find_target_container(portal_type, record) # Check if we have a container and a portal_type if not all([container, portal_type]): fail(400, "Please provide a container path/uid and portal_type") # create the object and pass in the record data obj = create_object(container, portal_type, **record) if type(obj) is list: results.extend(obj) else: results.append(obj) if not results: fail(400, "No Objects could be created") return make_items_for(results, endpoint=endpoint)
def create_items(portal_type=None, uid=None, endpoint=None, **kw): """ create items 1. If the uid is given, get the object and create the content in there (assumed that it is folderish) 2. If the uid is 0, the target folder is assumed the portal. 3. If there is no uid given, the payload is checked for either a key - `parent_uid` specifies the *uid* of the target folder - `parent_path` specifies the *physical path* of the target folder """ # disable CSRF req.disable_csrf_protection() # destination where to create the content container = uid and get_object_by_uid(uid) or None # extract the data from the request records = req.get_request_data() results = [] for record in records: # get the portal_type if portal_type is None: # try to fetch the portal type out of the request data portal_type = record.pop("portal_type", None) # check if it is allowed to create the portal_type if not is_creation_allowed(portal_type): fail(401, "Creation of '{}' is not allowed".format(portal_type)) if container is None: # find the container for content creation container = find_target_container(portal_type, record) # Check if we have a container and a portal_type if not all([container, portal_type]): fail(400, "Please provide a container path/uid and portal_type") # create the object and pass in the record data obj = create_object(container, portal_type, **record) results.append(obj) if not results: fail(400, "No Objects could be created") return make_items_for(results, endpoint=endpoint)
def update_items(portal_type=None, uid=None, endpoint=None, **kw): """ update items 1. If the uid is given, the user wants to update the object with the data given in request body 2. If no uid is given, the user wants to update a bunch of objects. -> each record contains either an UID, path or parent_path + id """ # disable CSRF req.disable_csrf_protection() # the data to update records = req.get_request_data() # we have an uid -> try to get an object for it obj = get_object_by_uid(uid) if obj: record = records[0] # ignore other records if we got an uid obj = update_object_with_data(obj, record) return make_items_for([obj], endpoint=endpoint) # no uid -> go through the record items results = [] for record in records: obj = get_object_by_record(record) # no object found for this record if obj is None: continue # update the object with the given record data obj = update_object_with_data(obj, record) results.append(obj) if not results: fail(400, "No Objects could be updated") return make_items_for(results, endpoint=endpoint)