def create(self): """POST /repository/images: Create a new item""" params = validate_new_image(request.params) if "file" not in params: abort(400, "400 Bad Request") # params.pop('file') # return json.dumps(params) g_uuid = h.group_uuid(params["group"]) group = meta.Session.query(Group).filter(Group.uuid == g_uuid).first() if not group: abort(400, "400 Bad Request - group not found") # TODO: setting these values is overly verbose. make it simple new_image = Image() # User settable values new_image.name = params["name"] new_image.os_variant = params["os_variant"] new_image.os_type = params["os_type"] new_image.os_arch = params["os_arch"] new_image.hypervisor = params["hypervisor"] new_image.owner_r = params["owner_r"] new_image.owner_w = params["owner_w"] new_image.group_r = params["group_r"] new_image.group_r = params["group_w"] new_image.group_w = params["other_r"] new_image.group_r = params["other_r"] new_image.desc = params["desc"] # Non-user settable values uuid = h.image_uuid(request.environ["REPOSITORY_USER_UUID"], params["name"]) current_time = datetime.utcfromtimestamp(time()) file_name = uuid + "_" + new_image.name new_image.owner_id = request.environ["REPOSITORY_USER_ID"] new_image.group_id = group.id new_image.uuid = uuid new_image.version = 1 new_image.uploaded = current_time new_image.modified = current_time new_image.url = "" new_image.previous = "" new_image.path = file_name # Deal with file upload try: image_file = params["file"] local_path = path.join(app_globals.image_storage, file_name) permanent_file = open(local_path, "w") shutil.copyfileobj(image_file.file, permanent_file) image_file.file.close() permanent_file.close() except Exception, e: abort(500, "500 Internal Error - Error uploading file %s" % e)
def create(self): """POST /repository/groups: Create a new item""" if not request.environ.get('REPOSITORY_USER_ADMIN'): abort(403, "403 Forbidden") params = validate_new_group(request.params) new_group = Group(name=params['name']) new_group.uuid = h.group_uuid(params['name']) users = params.get('users') if users: user_uuids = [u for u in users.split(',')] user_q = meta.Session.query(User) users = [user_q.filter(User.uuid==u).first() for u in user_uuids] if None in users: # abort if any specified user does not exist abort(400, '400 Bad Request - user does not exist') else: [new_group.repo_users.append(u) for u in users] meta.Session.add(new_group) meta.Session.commit()