def __create_table(self, request, schema, table, column_definitions, constraint_definitions): context = { 'connection_id': actions.get_or_403(request.data, 'connection_id'), 'cursor_id': actions.get_or_403(request.data, 'cursor_id') } cursor = sessions.load_cursor_from_context(context) actions.table_create(schema, table, column_definitions, constraint_definitions, cursor)
def __create_table( self, request, schema, table, column_definitions, constraint_definitions, metadata=None ): self.validate_column_names(column_definitions) context = { "connection_id": actions.get_or_403(request.data, "connection_id"), "cursor_id": actions.get_or_403(request.data, "cursor_id"), } cursor = sessions.load_cursor_from_context(context) actions.table_create( schema, table, column_definitions, constraint_definitions, cursor, table_metadata=metadata )
def __create_table(self, request, schema, table, column_definitions, constraint_definitions, metadata=None): self.validate_column_names(column_definitions) context = { "connection_id": actions.get_or_403(request.data, "connection_id"), "cursor_id": actions.get_or_403(request.data, "cursor_id"), } cursor = sessions.load_cursor_from_context(context) actions.table_create(schema, table, column_definitions, constraint_definitions, cursor, table_metadata=metadata) schema_object, _ = DBSchema.objects.get_or_create(name=schema) table_object, _ = DBTable.objects.get_or_create(name=table, schema=schema_object) table_object.save()
def put(self, request, schema, table): """ Every request to unsave http methods have to contain a "csrftoken". This token is used to deny cross site reference forwarding. In every request the header had to contain "X-CSRFToken" with the actual csrftoken. The token can be requested at / and will be returned as cookie. :param request: :return: """ if schema not in ['model_draft', 'sandbox', 'test']: raise PermissionDenied if schema.startswith('_'): raise PermissionDenied if request.user.is_anonymous(): raise PermissionDenied if actions.has_table(dict(schema=schema, table=table), {}): raise APIError('Table already exists') json_data = request.data['query'] constraint_definitions = [] column_definitions = [] for constraint_definiton in json_data.get('constraints', []): constraint_definiton.update({ "action": "ADD", "c_table": table, "c_schema": schema }) constraint_definitions.append(constraint_definiton) if 'columns' not in json_data: raise actions.APIError("Table contains no columns") for column_definition in json_data['columns']: column_definition.update({"c_table": table, "c_schema": schema}) column_definitions.append(column_definition) result = actions.table_create(schema, table, column_definitions, constraint_definitions) perm, _ = login_models.UserPermission.objects.get_or_create( table=DBTable.load(schema, table), holder=request.user) perm.level = login_models.ADMIN_PERM perm.save() request.user.save() return JsonResponse(result, status=status.HTTP_201_CREATED)