Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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
        )
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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)