#
tokens: 24864/50000 12/12 files
lines: on (toggle) GitHub
raw markdown copy reset
# Directory Structure

```
├── .editorconfig
├── .gitignore
├── .gitlab-ci.yml
├── .pre-commit-config.yaml
├── .python-version
├── LICENSE.md
├── pyproject.toml
├── README.md
├── RELEASING.md
├── src
│   └── waldur_mcp_server
│       ├── __init__.py
│       ├── meta.yaml
│       └── server.py
└── uv.lock
```

# Files

--------------------------------------------------------------------------------
/.python-version:
--------------------------------------------------------------------------------

```
1 | 3.13
2 | 
```

--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------

```
 1 | [*]
 2 | indent_style = space
 3 | indent_size = 4
 4 | insert_final_newline = true
 5 | trim_trailing_whitespace = true
 6 | end_of_line = lf
 7 | charset = utf-8
 8 | 
 9 | [*.py]
10 | max_line_length = 88
11 | 
12 | [*.yaml]
13 | indent_size = 2
14 | 
```

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
 1 | # Python
 2 | __pycache__/
 3 | *.py[cod]
 4 | *$py.class
 5 | *.so
 6 | .Python
 7 | build/
 8 | develop-eggs/
 9 | dist/
10 | downloads/
11 | eggs/
12 | .eggs/
13 | lib/
14 | lib64/
15 | parts/
16 | sdist/
17 | var/
18 | wheels/
19 | *.egg-info/
20 | .installed.cfg
21 | *.egg
22 | 
23 | # Virtual Environment
24 | venv/
25 | env/
26 | ENV/
27 | .env
28 | 
29 | # IDE
30 | .idea/
31 | .vscode/
32 | *.swp
33 | *.swo
34 | .DS_Store
35 | 
36 | # Project specific
37 | *.log
38 | .coverage
39 | htmlcov/
40 | .pytest_cache/
41 | .env.local
42 | .env.*.local
43 | 
44 | # Environment variables file that might contain sensitive data
45 | .env
46 | .env.prod
47 | .env.staging
48 | 
```

--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | repos:
 2 |   - repo: https://github.com/pre-commit/pre-commit-hooks
 3 |     rev: v5.0.0
 4 |     hooks:
 5 |       - id: trailing-whitespace
 6 |       - id: end-of-file-fixer
 7 | 
 8 |   - repo: https://github.com/charliermarsh/ruff-pre-commit
 9 |     rev: v0.12.0
10 |     hooks:
11 |       - id: ruff-format
12 |       - id: ruff
13 |         args:
14 |           - --fix
15 |           - --exit-non-zero-on-fix
16 | 
17 |   - repo: https://github.com/pre-commit/mirrors-mypy
18 |     rev: v1.15.0
19 |     hooks:
20 |       - id: mypy
21 | 
```

--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------

```yaml
 1 | include:
 2 |   - project: "waldur/waldur-pipelines"
 3 |     file: "/templates/stages.yml"
 4 |   - project: "waldur/waldur-pipelines"
 5 |     file: "/templates/test/check-merge-compatibility.yml"
 6 |   - project: "waldur/waldur-pipelines"
 7 |     file: "/templates/test/python-linters.yml"
 8 |   - project: "waldur/waldur-pipelines"
 9 |     file: "/templates/release/python-module-release-uv.yml"
10 | 
11 | Run python v3.11 linters:
12 |   image: "registry.hpc.ut.ee/mirror/library/python:3.11"
13 |   extends: .Run linters template
14 |   before_script:
15 |     - |
16 |       echo 'default_language_version:' >> .pre-commit-config.yaml
17 |       echo '  python: python3.11' >> .pre-commit-config.yaml
18 |     - cat .pre-commit-config.yaml
19 | 
20 | Upload docs:
21 |   image:
22 |     name: registry.hpc.ut.ee/mirror/alpine/git:v2.30.2
23 |     entrypoint: [""]
24 |   stage: deploy
25 |   interruptible: true
26 |   rules:
27 |     - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
28 |   script:
29 |     - cd /tmp/
30 |     - git clone "https://gitlab-ci-token:$GITLAB_TOKEN@$CI_SERVER_HOST/waldur/waldur-docs.git"
31 |     - git config --global user.name "$GITLAB_USER_NAME"
32 |     - git config --global user.email "$GITLAB_USER_EMAIL"
33 |     - cd waldur-docs/
34 |     - mkdir -p docs/integrations/waldur-mcp-server
35 |     - cp -vf $CI_PROJECT_DIR/README.md docs/integrations/waldur-mcp-server/README.md
36 |     - git add docs/integrations/waldur-mcp-server/
37 |     - git commit -m 'Update Waldur MCP Server docs' || exit 0
38 |     - git branch new-mcp-server-docs
39 |     - git push --set-upstream origin new-mcp-server-docs:master
40 | 
```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Waldur MCP server
  2 | 
  3 | Waldur MCP server enables integration between Waldur instance and Claude Desktop by implementing the Model Context Protocol (MCP). This allows Claude to interact with your Waldur instance directly.
  4 | 
  5 | ## Quickstart
  6 | 
  7 | 1. Install Claude Desktop for your platform from the [Claude Desktop releases page](https://claude.ai/download)
  8 | 
  9 | 2. Install Python 3.13 or higher.
 10 | 
 11 | 3. Install uv package manager.
 12 | 
 13 | ### Installation
 14 | 
 15 | To install the package:
 16 | 
 17 | ```bash
 18 | pip install waldur-mcp-server
 19 | ```
 20 | 
 21 | Or with uv:
 22 | 
 23 | ```bash
 24 | uv pip install waldur-mcp-server
 25 | ```
 26 | 
 27 | ### Generate Waldur Token
 28 | 
 29 | 1. Log in to your Waldur instance
 30 | 2. Navigate to Username > Credentials > API Token
 31 | 3. Generate a new token with appropriate token lifetime - you'll need it for configuration
 32 | 
 33 | ### Claude Desktop MCP Server Configuration
 34 | 
 35 | On Windows: `%APPDATA%\Claude\claude_desktop_config.json`
 36 | 
 37 | On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
 38 | 
 39 | <details>
 40 |   <summary>Development/Unpublished Servers Configuration</summary>
 41 | 
 42 | ```json
 43 | {
 44 |   "mcpServers": {
 45 |     "waldur-mcp-server": {
 46 |       "command": "uv",
 47 |       "args": [
 48 |         "--directory",
 49 |         "C:\\waldur_service",
 50 |         "run",
 51 |         "waldur-mcp-server"
 52 |       ],
 53 |       "env": {
 54 |         "WALDUR_API_URL": "https://your-waldur-instance",
 55 |         "WALDUR_TOKEN": "your-token"
 56 |       }
 57 |     }
 58 |   }
 59 | }
 60 | ```
 61 | 
 62 | </details>
 63 | 
 64 | <details>
 65 |   <summary>Published Servers Configuration</summary>
 66 | 
 67 | ```json
 68 | {
 69 |   "mcpServers": {
 70 |     "waldur-mcp-server": {
 71 |       "command": "uvx",
 72 |       "args": [
 73 |         "waldur-mcp-server"
 74 |       ],
 75 |       "env": {
 76 |         "WALDUR_API_URL": "https://your-waldur-instance",
 77 |         "WALDUR_TOKEN": "your-token"
 78 |       }
 79 |     }
 80 |   }
 81 | }
 82 | ```
 83 | 
 84 | </details>
 85 | 
 86 | ### Debugging
 87 | 
 88 | On macOS, log files are located at `~/Library/Logs/Claude/mcp.log`
 89 | 
 90 | If you encounter a `spawn uvx ENOENT` error, verify that your PATH environment variable includes the Python installation directory where `uv` is installed. Alternatively, you can specify the full path to `uvx` in the configuration file, for example:
 91 | `~/Library/Frameworks/Python.framework/Versions/3.13/bin/uvx`
 92 | 
 93 | Since MCP servers run over stdio, debugging can be challenging. For the best debugging
 94 | experience, we strongly recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector).
 95 | 
 96 | You can launch the MCP Inspector via [`npm`](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) with this command:
 97 | 
 98 | ```bash
 99 | npx @modelcontextprotocol/inspector uv --directory C:\\waldur_service run waldur-mcp-server
100 | ```
101 | 
102 | When debugging, you'll need to set the required environment variables. Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
103 | 
104 | ### Common issues
105 | 
106 | - Invalid token: Verify token permissions and expiration
107 | - Connection issues: Check WALDUR_API_URL is accessible
108 | 
```

--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2016-2025 OpenNode LLC
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy
 6 | of this software and associated documentation files (the "Software"), to deal
 7 | in the Software without restriction, including without limitation the rights
 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 | 
```

--------------------------------------------------------------------------------
/src/waldur_mcp_server/__init__.py:
--------------------------------------------------------------------------------

```python
 1 | from . import server
 2 | import asyncio
 3 | 
 4 | 
 5 | def main():
 6 |     """Main entry point for the package."""
 7 |     asyncio.run(server.main())
 8 | 
 9 | 
10 | # Optionally expose other important items at package level
11 | __all__ = ["main", "server"]
12 | 
```

--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------

```toml
 1 | [project]
 2 | name = "waldur-mcp-server"
 3 | version = "0.1.0"
 4 | description = "Waldur MCP server project"
 5 | readme = "README.md"
 6 | requires-python = ">=3.13"
 7 | dependencies = [
 8 |  "httpx>=0.28.1",
 9 |  "mcp>=1.6.0",
10 |  "waldur-api-client==0.2.0",
11 | ]
12 | 
13 | [build-system]
14 | requires = [ "hatchling",]
15 | build-backend = "hatchling.build"
16 | 
17 | [project.scripts]
18 | waldur-mcp-server = "waldur_mcp_server:main"
19 | 
```

--------------------------------------------------------------------------------
/RELEASING.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Releasing Waldur MCP Server
 2 | 
 3 | ## Releasing a New Version via GitLab CI
 4 | 
 5 | To deploy a new release:
 6 | 
 7 | 1. Create and push a new tag:
 8 |     ```bash
 9 |     git tag 0.1.0
10 |     git push origin 0.1.0
11 |     ```
12 | 
13 | 2. The CI pipeline will automatically build and publish the package to PyPI.
14 | 
15 | ## Building and Publishing manually
16 | 
17 | To prepare the package for distribution:
18 | 
19 | 1. Sync dependencies and update lockfile:
20 |     ```bash
21 |     uv sync
22 |     ```
23 | 
24 | 2. Build package distributions:
25 |     ```bash
26 |     uv build
27 |     ```
28 | 
29 |     This will create source and wheel distributions in the `dist/` directory.
30 | 
31 | 3. Publish to PyPI:
32 |     ```bash
33 |     uv publish
34 |     ```
35 | 
36 | Note: You'll need to set PyPI credentials via environment variables or command flags:
37 | - Token: `--token` or `UV_PUBLISH_TOKEN`
38 | - Or username/password: `--username`/`UV_PUBLISH_USERNAME` and `--password`/`UV_PUBLISH_PASSWORD`
39 | 
```

--------------------------------------------------------------------------------
/src/waldur_mcp_server/server.py:
--------------------------------------------------------------------------------

```python
  1 | import os
  2 | from typing import Any, Literal
  3 | 
  4 | from mcp.server.fastmcp import FastMCP
  5 | from waldur_api_client.api.customers import customers_list
  6 | from waldur_api_client.api.invoices import invoices_list
  7 | from waldur_api_client.api.marketplace_public_offerings import (
  8 |     marketplace_public_offerings_list,
  9 | )
 10 | from waldur_api_client.api.marketplace_resources import marketplace_resources_list
 11 | from waldur_api_client.api.projects import projects_list
 12 | from waldur_api_client.api.query import query as api_query
 13 | from waldur_api_client.api.roles import roles_list
 14 | from waldur_api_client.api.user_invitations import user_invitations_create
 15 | from waldur_api_client.client import AuthenticatedClient
 16 | from waldur_api_client.models.invitation import Invitation
 17 | from waldur_api_client.models.public_offering_details import PublicOfferingDetails
 18 | from waldur_api_client.models.invitation_request import InvitationRequest
 19 | from waldur_api_client.models.customer import Customer
 20 | from waldur_api_client.models.invoice import Invoice
 21 | from waldur_api_client.models.resource import Resource
 22 | from waldur_api_client.models.project import Project
 23 | from waldur_api_client.models.query_request import QueryRequest
 24 | 
 25 | # Get credentials from environment variables
 26 | api_url = os.getenv("WALDUR_API_URL")
 27 | token = os.getenv("WALDUR_TOKEN")
 28 | 
 29 | if not api_url or not token:
 30 |     raise ValueError(
 31 |         "WALDUR_API_URL and WALDUR_TOKEN environment variables must be set"
 32 |     )
 33 | 
 34 | client = AuthenticatedClient(base_url=api_url, token=token)
 35 | 
 36 | # Create an MCP server
 37 | mcp = FastMCP("Waldur", dependencies=["httpx"])
 38 | 
 39 | 
 40 | @mcp.resource("schema://main")
 41 | async def get_schema() -> list[str]:
 42 |     """Provide the database schema as a resource"""
 43 |     result = await api_query.asyncio(
 44 |         client=client,
 45 |         body=QueryRequest(
 46 |             query="SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"
 47 |         ),
 48 |     )
 49 |     if isinstance(result, list):
 50 |         return [row[0] for row in result]
 51 |     return []
 52 | 
 53 | 
 54 | @mcp.tool()
 55 | async def query(sql: str) -> list[Any]:
 56 |     """Run a read-only SQL query"""
 57 |     return await api_query.asyncio(client=client, body=QueryRequest(query=sql))
 58 | 
 59 | 
 60 | @mcp.prompt()
 61 | async def schema_aware_query() -> str:
 62 |     with open(os.path.join(os.path.dirname(__file__), "meta.yaml")) as f:
 63 |         schema = f.read()
 64 |         return f"Given the following PostgreSQL database structure:\n {schema}\n compose SQL query for the following analytical query:\n"
 65 | 
 66 | 
 67 | @mcp.tool()
 68 | async def list_customers() -> list[Customer]:
 69 |     """List all customers"""
 70 |     return await customers_list.asyncio(client=client)
 71 | 
 72 | 
 73 | @mcp.tool()
 74 | async def list_projects() -> list[Project]:
 75 |     """List all projects"""
 76 |     return await projects_list.asyncio(client=client)
 77 | 
 78 | 
 79 | @mcp.tool()
 80 | async def list_resources() -> list[Resource]:
 81 |     """List all resources"""
 82 |     return await marketplace_resources_list.asyncio(client=client)
 83 | 
 84 | 
 85 | @mcp.tool()
 86 | async def list_invoices() -> list[Invoice]:
 87 |     """List all invoices"""
 88 |     return await invoices_list.asyncio(client=client)
 89 | 
 90 | 
 91 | @mcp.tool()
 92 | async def list_offerings() -> list[PublicOfferingDetails]:
 93 |     """List all offerings"""
 94 |     return await marketplace_public_offerings_list.asyncio(client=client)
 95 | 
 96 | 
 97 | @mcp.tool()
 98 | async def create_invitation(
 99 |     scope_type: Literal["customer", "project"],
100 |     scope_name: str,
101 |     role: str,
102 |     emails: list[str],
103 |     extra_invitation_text: str = "",
104 | ) -> list[Invitation]:
105 |     """Invite users to project or organization by email
106 | 
107 |     Args:
108 |         scope_type: Whether to invite users to organization or project
109 |         scope_name: Name of the organization or project to invite users to
110 |         role: Role to assign to invited users
111 |         emails: List of email addresses to invite
112 |         extra_invitation_text: Custom message to include in the invitation
113 |     """
114 | 
115 |     matching_roles = await roles_list.asyncio(client=client, description=role)
116 |     if not matching_roles:
117 |         raise ValueError(f"Role '{role}' not found")
118 |     role_uuid = matching_roles[0]["uuid"]
119 | 
120 |     if scope_type == "customer":
121 |         matching_customers = await customers_list.asyncio(
122 |             client=client, name=scope_name
123 |         )
124 |         if not matching_customers:
125 |             raise ValueError(f"Customer '{scope_name}' not found")
126 |         scope_url = matching_customers[0]["url"]
127 |     elif scope_type == "project":
128 |         matching_projects = await projects_list.asyncio(client=client, name=scope_name)
129 |         if not matching_projects:
130 |             raise ValueError(f"Project '{scope_name}' not found")
131 |         scope_url = matching_projects[0]["url"]
132 | 
133 |     if not scope_url:
134 |         raise ValueError(f"Invalid scope type: {scope_type}")
135 | 
136 |     results = []
137 |     for email in emails:
138 |         result = await user_invitations_create.asyncio(
139 |             client=client,
140 |             body=InvitationRequest(
141 |                 scope=scope_url,
142 |                 role=role_uuid,
143 |                 email=email,
144 |                 extra_invitation_text=extra_invitation_text,
145 |             ),
146 |         )
147 |         results.append(result)
148 | 
149 |     return results
150 | 
151 | 
152 | def main() -> None:
153 |     mcp.run()
154 | 
155 | 
156 | if __name__ == "__main__":
157 |     main()
158 | 
```

--------------------------------------------------------------------------------
/src/waldur_mcp_server/meta.yaml:
--------------------------------------------------------------------------------

```yaml
   1 | core_changeemailrequest:
   2 |   app_label: core
   3 |   columns:
   4 |     created:
   5 |       type: DateTime
   6 |     email:
   7 |       type: Email
   8 |     id:
   9 |       type: PositiveInteger
  10 |     modified:
  11 |       type: DateTime
  12 |     user_id:
  13 |       db_table: core_user
  14 |       type: OneToOne
  15 |     uuid:
  16 |       type: UUID
  17 |   model: changeemailrequest
  18 |   type: Table
  19 | core_feature:
  20 |   app_label: core
  21 |   columns:
  22 |     id:
  23 |       type: PositiveInteger
  24 |     key:
  25 |       type: Text
  26 |     value:
  27 |       type: Boolean
  28 |   model: feature
  29 |   type: Table
  30 | core_notification:
  31 |   app_label: core
  32 |   columns:
  33 |     created:
  34 |       type: DateTime
  35 |     description:
  36 |       type: Char
  37 |     enabled:
  38 |       type: Boolean
  39 |     id:
  40 |       type: PositiveInteger
  41 |     key:
  42 |       type: Char
  43 |     modified:
  44 |       type: DateTime
  45 |     uuid:
  46 |       type: UUID
  47 |   model: notification
  48 |   type: Table
  49 | core_notification_templates:
  50 |   columns:
  51 |     id:
  52 |       type: PositiveInteger
  53 |     notification_id:
  54 |       db_table: core_notification
  55 |       type: ForeignKey
  56 |     notificationtemplate_id:
  57 |       db_table: core_notificationtemplate
  58 |       type: ForeignKey
  59 |   type: ManyToManyTable
  60 | core_notificationtemplate:
  61 |   app_label: core
  62 |   columns:
  63 |     created:
  64 |       type: DateTime
  65 |     id:
  66 |       type: PositiveInteger
  67 |     modified:
  68 |       type: DateTime
  69 |     name:
  70 |       type: Char
  71 |     path:
  72 |       type: Char
  73 |     uuid:
  74 |       type: UUID
  75 |   model: notificationtemplate
  76 |   type: Table
  77 | core_sshpublickey:
  78 |   app_label: core
  79 |   columns:
  80 |     created:
  81 |       type: DateTime
  82 |     fingerprint_md5:
  83 |       type: Char
  84 |     fingerprint_sha256:
  85 |       type: Char
  86 |     fingerprint_sha512:
  87 |       type: Char
  88 |     id:
  89 |       type: PositiveInteger
  90 |     is_shared:
  91 |       type: Boolean
  92 |     modified:
  93 |       type: DateTime
  94 |     name:
  95 |       type: Char
  96 |     public_key:
  97 |       type: Text
  98 |     user_id:
  99 |       db_table: core_user
 100 |       type: ForeignKey
 101 |     uuid:
 102 |       type: UUID
 103 |   model: sshpublickey
 104 |   type: Table
 105 | core_user:
 106 |   app_label: core
 107 |   columns:
 108 |     affiliations:
 109 |       type: JSON
 110 |     agreement_date:
 111 |       type: DateTime
 112 |     backend_id:
 113 |       type: Char
 114 |     birth_date:
 115 |       type: Date
 116 |     civil_number:
 117 |       type: Char
 118 |     date_joined:
 119 |       type: DateTime
 120 |     description:
 121 |       type: Char
 122 |     details:
 123 |       type: JSON
 124 |     email:
 125 |       type: Email
 126 |     first_name:
 127 |       type: Char
 128 |     id:
 129 |       type: PositiveInteger
 130 |     identity_source:
 131 |       type: Char
 132 |     image:
 133 |       type: Image
 134 |     is_active:
 135 |       type: Boolean
 136 |     is_identity_manager:
 137 |       type: Boolean
 138 |     is_staff:
 139 |       type: Boolean
 140 |     is_superuser:
 141 |       type: Boolean
 142 |     is_support:
 143 |       type: Boolean
 144 |     job_title:
 145 |       type: Char
 146 |     last_login:
 147 |       type: DateTime
 148 |     last_name:
 149 |       type: Char
 150 |     last_sync:
 151 |       type: DateTime
 152 |     modified:
 153 |       type: DateTime
 154 |     native_name:
 155 |       type: Char
 156 |     notifications_enabled:
 157 |       type: Boolean
 158 |     organization:
 159 |       type: Char
 160 |     password:
 161 |       type: Char
 162 |     phone_number:
 163 |       type: Char
 164 |     preferred_language:
 165 |       type: Char
 166 |     query_field:
 167 |       type: Char
 168 |     registration_method:
 169 |       type: Char
 170 |     slug:
 171 |       type: Slug
 172 |     token_lifetime:
 173 |       type: PositiveInteger
 174 |     username:
 175 |       type: Char
 176 |     uuid:
 177 |       type: UUID
 178 |   model: user
 179 |   type: Table
 180 | core_user_groups:
 181 |   columns:
 182 |     group_id:
 183 |       db_table: auth_group
 184 |       type: ForeignKey
 185 |     id:
 186 |       type: PositiveInteger
 187 |     user_id:
 188 |       db_table: core_user
 189 |       type: ForeignKey
 190 |   type: ManyToManyTable
 191 | core_user_user_permissions:
 192 |   columns:
 193 |     id:
 194 |       type: PositiveInteger
 195 |     permission_id:
 196 |       db_table: auth_permission
 197 |       type: ForeignKey
 198 |     user_id:
 199 |       db_table: core_user
 200 |       type: ForeignKey
 201 |   type: ManyToManyTable
 202 | django_content_type:
 203 |   app_label: contenttypes
 204 |   columns:
 205 |     app_label:
 206 |       type: Char
 207 |     id:
 208 |       type: PositiveInteger
 209 |     model:
 210 |       type: Char
 211 |   model: contenttype
 212 |   type: Table
 213 | invoices_customercredit:
 214 |   app_label: invoices
 215 |   columns:
 216 |     apply_as_minimal_consumption:
 217 |       type: Boolean
 218 |     created:
 219 |       type: DateTime
 220 |     customer_id:
 221 |       db_table: structure_customer
 222 |       type: OneToOne
 223 |     end_date:
 224 |       type: Date
 225 |     expected_consumption:
 226 |       type: Decimal
 227 |     grace_coefficient:
 228 |       type: Decimal
 229 |     id:
 230 |       type: PositiveInteger
 231 |     minimal_consumption_logic:
 232 |       type: Char
 233 |     modified:
 234 |       type: DateTime
 235 |     uuid:
 236 |       type: UUID
 237 |     value:
 238 |       type: Decimal
 239 |   model: customercredit
 240 |   type: Table
 241 | invoices_customercredit_offerings:
 242 |   columns:
 243 |     customercredit_id:
 244 |       db_table: invoices_customercredit
 245 |       type: ForeignKey
 246 |     id:
 247 |       type: PositiveInteger
 248 |     offering_id:
 249 |       db_table: marketplace_offering
 250 |       type: ForeignKey
 251 |   type: ManyToManyTable
 252 | invoices_invoice:
 253 |   app_label: invoices
 254 |   columns:
 255 |     backend_id:
 256 |       type: Char
 257 |     created:
 258 |       type: Date
 259 |     customer_id:
 260 |       db_table: structure_customer
 261 |       type: ForeignKey
 262 |     id:
 263 |       type: PositiveInteger
 264 |     invoice_date:
 265 |       type: Date
 266 |     month:
 267 |       type: PositiveSmallInteger
 268 |     payment_url:
 269 |       type: URL
 270 |     reference_number:
 271 |       type: Char
 272 |     state:
 273 |       type: Char
 274 |     tax_percent:
 275 |       type: Decimal
 276 |     total_cost:
 277 |       type: Decimal
 278 |     total_price:
 279 |       type: Decimal
 280 |     uuid:
 281 |       type: UUID
 282 |     year:
 283 |       type: PositiveSmallInteger
 284 |   model: invoice
 285 |   type: Table
 286 | invoices_invoiceitem:
 287 |   app_label: invoices
 288 |   columns:
 289 |     article_code:
 290 |       type: Char
 291 |     backend_uuid:
 292 |       type: UUID
 293 |     credit_id:
 294 |       db_table: invoices_customercredit
 295 |       type: ForeignKey
 296 |     details:
 297 |       type: JSON
 298 |     end:
 299 |       type: DateTime
 300 |     id:
 301 |       type: PositiveInteger
 302 |     invoice_id:
 303 |       db_table: invoices_invoice
 304 |       type: ForeignKey
 305 |     measured_unit:
 306 |       type: Char
 307 |     name:
 308 |       type: Text
 309 |     project_id:
 310 |       db_table: structure_project
 311 |       type: ForeignKey
 312 |     project_name:
 313 |       type: Char
 314 |     project_uuid:
 315 |       type: Char
 316 |     quantity:
 317 |       type: Decimal
 318 |     resource_id:
 319 |       db_table: marketplace_resource
 320 |       type: ForeignKey
 321 |     start:
 322 |       type: DateTime
 323 |     unit:
 324 |       type: Char
 325 |     unit_price:
 326 |       type: Decimal
 327 |     uuid:
 328 |       type: UUID
 329 |   model: invoiceitem
 330 |   type: Table
 331 | invoices_payment:
 332 |   app_label: invoices
 333 |   columns:
 334 |     created:
 335 |       type: DateTime
 336 |     date_of_payment:
 337 |       type: Date
 338 |     id:
 339 |       type: PositiveInteger
 340 |     invoice_id:
 341 |       db_table: invoices_invoice
 342 |       type: ForeignKey
 343 |     modified:
 344 |       type: DateTime
 345 |     profile_id:
 346 |       db_table: invoices_paymentprofile
 347 |       type: ForeignKey
 348 |     proof:
 349 |       type: File
 350 |     sum:
 351 |       type: Decimal
 352 |     uuid:
 353 |       type: UUID
 354 |   model: payment
 355 |   type: Table
 356 | invoices_paymentprofile:
 357 |   app_label: invoices
 358 |   columns:
 359 |     attributes:
 360 |       type: JSON
 361 |     id:
 362 |       type: PositiveInteger
 363 |     is_active:
 364 |       type: Boolean
 365 |     name:
 366 |       type: Char
 367 |     organization_id:
 368 |       db_table: structure_customer
 369 |       type: ForeignKey
 370 |     payment_type:
 371 |       choices:
 372 |       - display: Fixed-price contract
 373 |         value: fixed_price
 374 |       - display: Monthly invoices
 375 |         value: invoices
 376 |       - display: Payment gateways (monthly)
 377 |         value: payment_gw_monthly
 378 |       type: PaymentType
 379 |     uuid:
 380 |       type: UUID
 381 |   model: paymentprofile
 382 |   type: Table
 383 | invoices_projectcredit:
 384 |   app_label: invoices
 385 |   columns:
 386 |     apply_as_minimal_consumption:
 387 |       type: Boolean
 388 |     created:
 389 |       type: DateTime
 390 |     end_date:
 391 |       type: Date
 392 |     expected_consumption:
 393 |       type: Decimal
 394 |     grace_coefficient:
 395 |       type: Decimal
 396 |     id:
 397 |       type: PositiveInteger
 398 |     mark_unused_credit_as_spent_on_project_termination:
 399 |       type: Boolean
 400 |     minimal_consumption_logic:
 401 |       type: Char
 402 |     modified:
 403 |       type: DateTime
 404 |     project_id:
 405 |       db_table: structure_project
 406 |       type: OneToOne
 407 |     uuid:
 408 |       type: UUID
 409 |     value:
 410 |       type: Decimal
 411 |   model: projectcredit
 412 |   type: Table
 413 | marketplace_attribute:
 414 |   app_label: marketplace
 415 |   columns:
 416 |     created:
 417 |       type: DateTime
 418 |     default:
 419 |       type: JSON
 420 |     key:
 421 |       type: Char
 422 |     modified:
 423 |       type: DateTime
 424 |     required:
 425 |       type: Boolean
 426 |     section_id:
 427 |       db_table: marketplace_section
 428 |       type: ForeignKey
 429 |     title:
 430 |       type: Char
 431 |     type:
 432 |       type: Char
 433 |   model: attribute
 434 |   type: Table
 435 | marketplace_attributeoption:
 436 |   app_label: marketplace
 437 |   columns:
 438 |     attribute_id:
 439 |       db_table: marketplace_attribute
 440 |       type: ForeignKey
 441 |     id:
 442 |       type: PositiveInteger
 443 |     key:
 444 |       type: Char
 445 |     title:
 446 |       type: Char
 447 |   model: attributeoption
 448 |   type: Table
 449 | marketplace_backendresource:
 450 |   app_label: marketplace
 451 |   columns:
 452 |     backend_id:
 453 |       type: Char
 454 |     backend_metadata:
 455 |       type: JSON
 456 |     created:
 457 |       type: DateTime
 458 |     id:
 459 |       type: PositiveInteger
 460 |     modified:
 461 |       type: DateTime
 462 |     name:
 463 |       type: Char
 464 |     offering_id:
 465 |       db_table: marketplace_offering
 466 |       type: ForeignKey
 467 |     project_id:
 468 |       db_table: structure_project
 469 |       type: ForeignKey
 470 |     uuid:
 471 |       type: UUID
 472 |   model: backendresource
 473 |   type: Table
 474 | marketplace_backendresourcerequest:
 475 |   app_label: marketplace
 476 |   columns:
 477 |     created:
 478 |       type: DateTime
 479 |     error_message:
 480 |       type: Text
 481 |     error_traceback:
 482 |       type: Text
 483 |     finished:
 484 |       type: DateTime
 485 |     id:
 486 |       type: PositiveInteger
 487 |     modified:
 488 |       type: DateTime
 489 |     offering_id:
 490 |       db_table: marketplace_offering
 491 |       type: ForeignKey
 492 |     started:
 493 |       type: DateTime
 494 |     state:
 495 |       type: FSM
 496 |     uuid:
 497 |       type: UUID
 498 |   model: backendresourcerequest
 499 |   type: Table
 500 | marketplace_category:
 501 |   app_label: marketplace
 502 |   columns:
 503 |     backend_id:
 504 |       type: Char
 505 |     created:
 506 |       type: DateTime
 507 |     default_tenant_category:
 508 |       type: Boolean
 509 |     default_vm_category:
 510 |       type: Boolean
 511 |     default_volume_category:
 512 |       type: Boolean
 513 |     description:
 514 |       type: Text
 515 |     group_id:
 516 |       db_table: marketplace_categorygroup
 517 |       type: ForeignKey
 518 |     icon:
 519 |       type: File
 520 |     id:
 521 |       type: PositiveInteger
 522 |     modified:
 523 |       type: DateTime
 524 |     title:
 525 |       type: Char
 526 |     uuid:
 527 |       type: UUID
 528 |   model: category
 529 |   type: Table
 530 | marketplace_categorycolumn:
 531 |   app_label: marketplace
 532 |   columns:
 533 |     attribute:
 534 |       type: Char
 535 |     category_id:
 536 |       db_table: marketplace_category
 537 |       type: ForeignKey
 538 |     id:
 539 |       type: PositiveInteger
 540 |     index:
 541 |       type: PositiveSmallInteger
 542 |     title:
 543 |       type: Char
 544 |     uuid:
 545 |       type: UUID
 546 |     widget:
 547 |       type: Char
 548 |   model: categorycolumn
 549 |   type: Table
 550 | marketplace_categorycomponent:
 551 |   app_label: marketplace
 552 |   columns:
 553 |     category_id:
 554 |       db_table: marketplace_category
 555 |       type: ForeignKey
 556 |     description:
 557 |       type: Char
 558 |     id:
 559 |       type: PositiveInteger
 560 |     measured_unit:
 561 |       type: Char
 562 |     name:
 563 |       type: Char
 564 |     type:
 565 |       type: Char
 566 |     uuid:
 567 |       type: UUID
 568 |   model: categorycomponent
 569 |   type: Table
 570 | marketplace_categorycomponentusage:
 571 |   app_label: marketplace
 572 |   columns:
 573 |     component_id:
 574 |       db_table: marketplace_categorycomponent
 575 |       type: ForeignKey
 576 |     content_type_id:
 577 |       db_table: django_content_type
 578 |       type: ForeignKey
 579 |     date:
 580 |       type: Date
 581 |     fixed_usage:
 582 |       type: BigInteger
 583 |     id:
 584 |       type: PositiveInteger
 585 |     object_id:
 586 |       type: PositiveInteger
 587 |     reported_usage:
 588 |       type: BigInteger
 589 |   model: categorycomponentusage
 590 |   type: Table
 591 | marketplace_categorygroup:
 592 |   app_label: marketplace
 593 |   columns:
 594 |     created:
 595 |       type: DateTime
 596 |     description:
 597 |       type: Text
 598 |     icon:
 599 |       type: File
 600 |     id:
 601 |       type: PositiveInteger
 602 |     modified:
 603 |       type: DateTime
 604 |     title:
 605 |       type: Char
 606 |     uuid:
 607 |       type: UUID
 608 |   model: categorygroup
 609 |   type: Table
 610 | marketplace_categoryhelparticle:
 611 |   app_label: marketplace
 612 |   columns:
 613 |     id:
 614 |       type: PositiveInteger
 615 |     title:
 616 |       type: Char
 617 |     url:
 618 |       type: URL
 619 |   model: categoryhelparticle
 620 |   type: Table
 621 | marketplace_categoryhelparticle_categories:
 622 |   columns:
 623 |     category_id:
 624 |       db_table: marketplace_category
 625 |       type: ForeignKey
 626 |     categoryhelparticle_id:
 627 |       db_table: marketplace_categoryhelparticle
 628 |       type: ForeignKey
 629 |     id:
 630 |       type: PositiveInteger
 631 |   type: ManyToManyTable
 632 | marketplace_componentquota:
 633 |   app_label: marketplace
 634 |   columns:
 635 |     component_id:
 636 |       db_table: marketplace_offeringcomponent
 637 |       type: ForeignKey
 638 |     created:
 639 |       type: DateTime
 640 |     id:
 641 |       type: PositiveInteger
 642 |     limit:
 643 |       type: Decimal
 644 |     modified:
 645 |       type: DateTime
 646 |     resource_id:
 647 |       db_table: marketplace_resource
 648 |       type: ForeignKey
 649 |     usage:
 650 |       type: Decimal
 651 |   model: componentquota
 652 |   type: Table
 653 | marketplace_componentusage:
 654 |   app_label: marketplace
 655 |   columns:
 656 |     backend_id:
 657 |       type: Char
 658 |     billing_period:
 659 |       type: Date
 660 |     component_id:
 661 |       db_table: marketplace_offeringcomponent
 662 |       type: ForeignKey
 663 |     created:
 664 |       type: DateTime
 665 |     date:
 666 |       type: DateTime
 667 |     description:
 668 |       type: Char
 669 |     id:
 670 |       type: PositiveInteger
 671 |     modified:
 672 |       type: DateTime
 673 |     modified_by_id:
 674 |       db_table: core_user
 675 |       type: ForeignKey
 676 |     plan_period_id:
 677 |       db_table: marketplace_resourceplanperiod
 678 |       type: ForeignKey
 679 |     recurring:
 680 |       type: Boolean
 681 |     resource_id:
 682 |       db_table: marketplace_resource
 683 |       type: ForeignKey
 684 |     usage:
 685 |       type: Decimal
 686 |     uuid:
 687 |       type: UUID
 688 |   model: componentusage
 689 |   type: Table
 690 | marketplace_componentuserusage:
 691 |   app_label: marketplace
 692 |   columns:
 693 |     backend_id:
 694 |       type: Char
 695 |     component_usage_id:
 696 |       db_table: marketplace_componentusage
 697 |       type: ForeignKey
 698 |     created:
 699 |       type: DateTime
 700 |     description:
 701 |       type: Char
 702 |     id:
 703 |       type: PositiveInteger
 704 |     modified:
 705 |       type: DateTime
 706 |     usage:
 707 |       type: Decimal
 708 |     user_id:
 709 |       db_table: marketplace_offeringuser
 710 |       type: ForeignKey
 711 |     username:
 712 |       type: Char
 713 |     uuid:
 714 |       type: UUID
 715 |   model: componentuserusage
 716 |   type: Table
 717 | marketplace_componentuserusagelimit:
 718 |   app_label: marketplace
 719 |   columns:
 720 |     component_id:
 721 |       db_table: marketplace_offeringcomponent
 722 |       type: ForeignKey
 723 |     created:
 724 |       type: DateTime
 725 |     id:
 726 |       type: PositiveInteger
 727 |     limit:
 728 |       type: Decimal
 729 |     modified:
 730 |       type: DateTime
 731 |     resource_id:
 732 |       db_table: marketplace_resource
 733 |       type: ForeignKey
 734 |     user_id:
 735 |       db_table: marketplace_offeringuser
 736 |       type: ForeignKey
 737 |     uuid:
 738 |       type: UUID
 739 |   model: componentuserusagelimit
 740 |   type: Table
 741 | marketplace_courseaccount:
 742 |   app_label: marketplace
 743 |   columns:
 744 |     created:
 745 |       type: DateTime
 746 |     description:
 747 |       type: Char
 748 |     email:
 749 |       type: Email
 750 |     error_message:
 751 |       type: Text
 752 |     error_traceback:
 753 |       type: Text
 754 |     id:
 755 |       type: PositiveInteger
 756 |     modified:
 757 |       type: DateTime
 758 |     project_id:
 759 |       db_table: structure_project
 760 |       type: ForeignKey
 761 |     state:
 762 |       choices:
 763 |       - display: OK
 764 |         value: 1
 765 |       - display: Closed
 766 |         value: 2
 767 |       - display: Erred
 768 |         value: 3
 769 |       type: PositiveInteger
 770 |     user_id:
 771 |       db_table: core_user
 772 |       type: ForeignKey
 773 |     uuid:
 774 |       type: UUID
 775 |   model: courseaccount
 776 |   type: Table
 777 | marketplace_customerserviceaccount:
 778 |   app_label: marketplace
 779 |   columns:
 780 |     created:
 781 |       type: DateTime
 782 |     customer_id:
 783 |       db_table: structure_customer
 784 |       type: ForeignKey
 785 |     description:
 786 |       type: Text
 787 |     email:
 788 |       type: Email
 789 |     error_message:
 790 |       type: Text
 791 |     error_traceback:
 792 |       type: Text
 793 |     id:
 794 |       type: PositiveInteger
 795 |     modified:
 796 |       type: DateTime
 797 |     preferred_identifier:
 798 |       type: Char
 799 |     state:
 800 |       choices:
 801 |       - display: OK
 802 |         value: 1
 803 |       - display: Closed
 804 |         value: 2
 805 |       - display: Erred
 806 |         value: 3
 807 |       type: PositiveInteger
 808 |     username:
 809 |       type: Char
 810 |     uuid:
 811 |       type: UUID
 812 |   model: customerserviceaccount
 813 |   type: Table
 814 | marketplace_integrationstatus:
 815 |   app_label: marketplace
 816 |   columns:
 817 |     agent_type:
 818 |       type: Char
 819 |     id:
 820 |       type: PositiveInteger
 821 |     last_request_timestamp:
 822 |       type: DateTime
 823 |     offering_id:
 824 |       db_table: marketplace_offering
 825 |       type: ForeignKey
 826 |     service_name:
 827 |       type: Char
 828 |     status:
 829 |       choices:
 830 |       - display: Unknown
 831 |         value: 1
 832 |       - display: Active
 833 |         value: 2
 834 |       - display: Disconnected
 835 |         value: 3
 836 |       type: PositiveInteger
 837 |     uuid:
 838 |       type: UUID
 839 |   model: integrationstatus
 840 |   type: Table
 841 | marketplace_maintenanceannouncement:
 842 |   app_label: marketplace
 843 |   columns:
 844 |     actual_end:
 845 |       type: DateTime
 846 |     actual_start:
 847 |       type: DateTime
 848 |     backend_id:
 849 |       type: Char
 850 |     created:
 851 |       type: DateTime
 852 |     created_by_id:
 853 |       db_table: core_user
 854 |       type: ForeignKey
 855 |     external_reference_url:
 856 |       type: URL
 857 |     id:
 858 |       type: PositiveInteger
 859 |     maintenance_type:
 860 |       choices:
 861 |       - display: Scheduled maintenance
 862 |         value: 1
 863 |       - display: Emergency maintenance
 864 |         value: 2
 865 |       - display: Security maintenance
 866 |         value: 3
 867 |       - display: System upgrade
 868 |         value: 4
 869 |       - display: Patch deployment
 870 |         value: 5
 871 |       type: PositiveSmallInteger
 872 |     message:
 873 |       type: Char
 874 |     modified:
 875 |       type: DateTime
 876 |     name:
 877 |       type: Char
 878 |     scheduled_end:
 879 |       type: DateTime
 880 |     scheduled_start:
 881 |       type: DateTime
 882 |     service_provider_id:
 883 |       db_table: marketplace_serviceprovider
 884 |       type: ForeignKey
 885 |     state:
 886 |       choices:
 887 |       - display: Draft
 888 |         value: 1
 889 |       - display: Scheduled
 890 |         value: 2
 891 |       - display: In progress
 892 |         value: 3
 893 |       - display: Completed
 894 |         value: 4
 895 |       - display: Cancelled
 896 |         value: 5
 897 |       type: PositiveInteger
 898 |     uuid:
 899 |       type: UUID
 900 |   model: maintenanceannouncement
 901 |   type: Table
 902 | marketplace_maintenanceannouncementoffering:
 903 |   app_label: marketplace
 904 |   columns:
 905 |     created:
 906 |       type: DateTime
 907 |     id:
 908 |       type: PositiveInteger
 909 |     impact_description:
 910 |       type: Text
 911 |     impact_level:
 912 |       choices:
 913 |       - display: No impact
 914 |         value: 1
 915 |       - display: Degraded performance
 916 |         value: 2
 917 |       - display: Partial outage
 918 |         value: 3
 919 |       - display: Full outage
 920 |         value: 4
 921 |       type: PositiveSmallInteger
 922 |     maintenance_id:
 923 |       db_table: marketplace_maintenanceannouncement
 924 |       type: ForeignKey
 925 |     modified:
 926 |       type: DateTime
 927 |     offering_id:
 928 |       db_table: marketplace_offering
 929 |       type: ForeignKey
 930 |     uuid:
 931 |       type: UUID
 932 |   model: maintenanceannouncementoffering
 933 |   type: Table
 934 | marketplace_maintenanceannouncementofferingtemplate:
 935 |   app_label: marketplace
 936 |   columns:
 937 |     created:
 938 |       type: DateTime
 939 |     id:
 940 |       type: PositiveInteger
 941 |     impact_description:
 942 |       type: Text
 943 |     impact_level:
 944 |       choices:
 945 |       - display: No impact
 946 |         value: 1
 947 |       - display: Degraded performance
 948 |         value: 2
 949 |       - display: Partial outage
 950 |         value: 3
 951 |       - display: Full outage
 952 |         value: 4
 953 |       type: PositiveSmallInteger
 954 |     maintenance_template_id:
 955 |       db_table: marketplace_maintenanceannouncementtemplate
 956 |       type: ForeignKey
 957 |     modified:
 958 |       type: DateTime
 959 |     offering_id:
 960 |       db_table: marketplace_offering
 961 |       type: ForeignKey
 962 |     uuid:
 963 |       type: UUID
 964 |   model: maintenanceannouncementofferingtemplate
 965 |   type: Table
 966 | marketplace_maintenanceannouncementtemplate:
 967 |   app_label: marketplace
 968 |   columns:
 969 |     created:
 970 |       type: DateTime
 971 |     id:
 972 |       type: PositiveInteger
 973 |     maintenance_type:
 974 |       choices:
 975 |       - display: Scheduled maintenance
 976 |         value: 1
 977 |       - display: Emergency maintenance
 978 |         value: 2
 979 |       - display: Security maintenance
 980 |         value: 3
 981 |       - display: System upgrade
 982 |         value: 4
 983 |       - display: Patch deployment
 984 |         value: 5
 985 |       type: PositiveSmallInteger
 986 |     message:
 987 |       type: Char
 988 |     modified:
 989 |       type: DateTime
 990 |     name:
 991 |       type: Char
 992 |     service_provider_id:
 993 |       db_table: marketplace_serviceprovider
 994 |       type: ForeignKey
 995 |     uuid:
 996 |       type: UUID
 997 |   model: maintenanceannouncementtemplate
 998 |   type: Table
 999 | marketplace_offering:
1000 |   app_label: marketplace
1001 |   columns:
1002 |     access_url:
1003 |       type: URL
1004 |     attributes:
1005 |       type: JSON
1006 |     backend_id:
1007 |       type: Char
1008 |     backend_metadata:
1009 |       type: JSON
1010 |     billable:
1011 |       type: Boolean
1012 |     category_id:
1013 |       db_table: marketplace_category
1014 |       type: ForeignKey
1015 |     citation_count:
1016 |       type: Integer
1017 |     content_type_id:
1018 |       db_table: django_content_type
1019 |       type: ForeignKey
1020 |     country:
1021 |       type: Char
1022 |     created:
1023 |       type: DateTime
1024 |     customer_id:
1025 |       db_table: structure_customer
1026 |       type: ForeignKey
1027 |     datacite_doi:
1028 |       type: Char
1029 |     description:
1030 |       type: Char
1031 |     error_message:
1032 |       type: Text
1033 |     full_description:
1034 |       type: Text
1035 |     getting_started:
1036 |       type: Text
1037 |     id:
1038 |       type: PositiveInteger
1039 |     image:
1040 |       type: Image
1041 |     integration_guide:
1042 |       type: Text
1043 |     latitude:
1044 |       type: Float
1045 |     longitude:
1046 |       type: Float
1047 |     modified:
1048 |       type: DateTime
1049 |     name:
1050 |       type: Char
1051 |     object_id:
1052 |       type: PositiveInteger
1053 |     options:
1054 |       type: JSON
1055 |     parent_id:
1056 |       db_table: marketplace_offering
1057 |       type: ForeignKey
1058 |     paused_reason:
1059 |       type: Text
1060 |     plugin_options:
1061 |       type: JSON
1062 |     privacy_policy_link:
1063 |       type: URL
1064 |     project_id:
1065 |       db_table: structure_project
1066 |       type: ForeignKey
1067 |     remote_image_uuid:
1068 |       type: UUID
1069 |     resource_options:
1070 |       type: JSON
1071 |     secret_options:
1072 |       type: JSON
1073 |     shared:
1074 |       type: Boolean
1075 |     slug:
1076 |       type: Slug
1077 |     state:
1078 |       choices:
1079 |       - display: Draft
1080 |         value: 1
1081 |       - display: Active
1082 |         value: 2
1083 |       - display: Paused
1084 |         value: 3
1085 |       - display: Archived
1086 |         value: 4
1087 |       type: PositiveInteger
1088 |     support_per_user_consumption_limitation:
1089 |       type: Boolean
1090 |     thumbnail:
1091 |       type: File
1092 |     type:
1093 |       type: Char
1094 |     uuid:
1095 |       type: UUID
1096 |     vendor_details:
1097 |       type: Text
1098 |   model: offering
1099 |   type: Table
1100 | marketplace_offering_organization_groups:
1101 |   columns:
1102 |     id:
1103 |       type: PositiveInteger
1104 |     offering_id:
1105 |       db_table: marketplace_offering
1106 |       type: ForeignKey
1107 |     organizationgroup_id:
1108 |       db_table: structure_organizationgroup
1109 |       type: ForeignKey
1110 |   type: ManyToManyTable
1111 | marketplace_offeringaccessendpoint:
1112 |   app_label: marketplace
1113 |   columns:
1114 |     id:
1115 |       type: PositiveInteger
1116 |     name:
1117 |       type: Char
1118 |     offering_id:
1119 |       db_table: marketplace_offering
1120 |       type: ForeignKey
1121 |     url:
1122 |       type: BackendURL
1123 |     uuid:
1124 |       type: UUID
1125 |   model: offeringaccessendpoint
1126 |   type: Table
1127 | marketplace_offeringcomponent:
1128 |   app_label: marketplace
1129 |   columns:
1130 |     article_code:
1131 |       type: Char
1132 |     backend_id:
1133 |       type: Char
1134 |     billing_type:
1135 |       type: Char
1136 |     content_type_id:
1137 |       db_table: django_content_type
1138 |       type: ForeignKey
1139 |     default_limit:
1140 |       type: Integer
1141 |     description:
1142 |       type: Char
1143 |     id:
1144 |       type: PositiveInteger
1145 |     is_boolean:
1146 |       type: Boolean
1147 |     is_prepaid:
1148 |       type: Boolean
1149 |     limit_amount:
1150 |       type: Integer
1151 |     limit_period:
1152 |       type: Char
1153 |     max_available_limit:
1154 |       type: Integer
1155 |     max_prepaid_duration:
1156 |       type: Integer
1157 |     max_value:
1158 |       type: Integer
1159 |     measured_unit:
1160 |       type: Char
1161 |     min_prepaid_duration:
1162 |       type: Integer
1163 |     min_value:
1164 |       type: Integer
1165 |     name:
1166 |       type: Char
1167 |     object_id:
1168 |       type: PositiveInteger
1169 |     offering_id:
1170 |       db_table: marketplace_offering
1171 |       type: ForeignKey
1172 |     overage_component_id:
1173 |       db_table: marketplace_offeringcomponent
1174 |       type: ForeignKey
1175 |     parent_id:
1176 |       db_table: marketplace_categorycomponent
1177 |       type: ForeignKey
1178 |     type:
1179 |       type: Char
1180 |     unit_factor:
1181 |       type: Integer
1182 |     uuid:
1183 |       type: UUID
1184 |   model: offeringcomponent
1185 |   type: Table
1186 | marketplace_offeringfile:
1187 |   app_label: marketplace
1188 |   columns:
1189 |     created:
1190 |       type: DateTime
1191 |     file:
1192 |       type: File
1193 |     id:
1194 |       type: PositiveInteger
1195 |     modified:
1196 |       type: DateTime
1197 |     name:
1198 |       type: Char
1199 |     offering_id:
1200 |       db_table: marketplace_offering
1201 |       type: ForeignKey
1202 |     uuid:
1203 |       type: UUID
1204 |   model: offeringfile
1205 |   type: Table
1206 | marketplace_offeringpartition:
1207 |   app_label: marketplace
1208 |   columns:
1209 |     cpu_bind:
1210 |       type: PositiveInteger
1211 |     created:
1212 |       type: DateTime
1213 |     def_cpu_per_gpu:
1214 |       type: PositiveInteger
1215 |     def_mem_per_cpu:
1216 |       type: PositiveBigInteger
1217 |     def_mem_per_gpu:
1218 |       type: PositiveBigInteger
1219 |     def_mem_per_node:
1220 |       type: PositiveBigInteger
1221 |     default_time:
1222 |       type: PositiveInteger
1223 |     exclusive_topo:
1224 |       type: Boolean
1225 |     exclusive_user:
1226 |       type: Boolean
1227 |     grace_time:
1228 |       type: PositiveInteger
1229 |     id:
1230 |       type: PositiveInteger
1231 |     max_cpus_per_node:
1232 |       type: PositiveInteger
1233 |     max_cpus_per_socket:
1234 |       type: PositiveInteger
1235 |     max_mem_per_cpu:
1236 |       type: PositiveBigInteger
1237 |     max_mem_per_node:
1238 |       type: PositiveBigInteger
1239 |     max_nodes:
1240 |       type: PositiveInteger
1241 |     max_time:
1242 |       type: PositiveInteger
1243 |     min_nodes:
1244 |       type: PositiveInteger
1245 |     modified:
1246 |       type: DateTime
1247 |     offering_id:
1248 |       db_table: marketplace_offering
1249 |       type: ForeignKey
1250 |     partition_name:
1251 |       type: Char
1252 |     priority_tier:
1253 |       type: PositiveSmallInteger
1254 |     qos:
1255 |       type: Char
1256 |     req_resv:
1257 |       type: Boolean
1258 |     uuid:
1259 |       type: UUID
1260 |   model: offeringpartition
1261 |   type: Table
1262 | marketplace_offeringsoftwarecatalog:
1263 |   app_label: marketplace
1264 |   columns:
1265 |     catalog_id:
1266 |       db_table: marketplace_softwarecatalog
1267 |       type: ForeignKey
1268 |     created:
1269 |       type: DateTime
1270 |     enabled_cpu_family:
1271 |       type: JSON
1272 |     enabled_cpu_microarchitectures:
1273 |       type: JSON
1274 |     id:
1275 |       type: PositiveInteger
1276 |     modified:
1277 |       type: DateTime
1278 |     offering_id:
1279 |       db_table: marketplace_offering
1280 |       type: ForeignKey
1281 |     partition_id:
1282 |       db_table: marketplace_offeringpartition
1283 |       type: ForeignKey
1284 |     uuid:
1285 |       type: UUID
1286 |   model: offeringsoftwarecatalog
1287 |   type: Table
1288 | marketplace_offeringtermsofservice:
1289 |   app_label: marketplace
1290 |   columns:
1291 |     created:
1292 |       type: DateTime
1293 |     id:
1294 |       type: PositiveInteger
1295 |     is_active:
1296 |       type: Boolean
1297 |     modified:
1298 |       type: DateTime
1299 |     offering_id:
1300 |       db_table: marketplace_offering
1301 |       type: ForeignKey
1302 |     requires_reconsent:
1303 |       type: Boolean
1304 |     terms_of_service:
1305 |       type: Text
1306 |     terms_of_service_link:
1307 |       type: URL
1308 |     uuid:
1309 |       type: UUID
1310 |     version:
1311 |       type: Char
1312 |   model: offeringtermsofservice
1313 |   type: Table
1314 | marketplace_offeringuser:
1315 |   app_label: marketplace
1316 |   columns:
1317 |     backend_metadata:
1318 |       type: JSON
1319 |     created:
1320 |       type: DateTime
1321 |     id:
1322 |       type: PositiveInteger
1323 |     is_restricted:
1324 |       type: Boolean
1325 |     modified:
1326 |       type: DateTime
1327 |     offering_id:
1328 |       db_table: marketplace_offering
1329 |       type: ForeignKey
1330 |     service_provider_comment:
1331 |       type: Text
1332 |     service_provider_comment_url:
1333 |       type: URL
1334 |     state:
1335 |       choices:
1336 |       - display: Requested
1337 |         value: 1
1338 |       - display: Creating
1339 |         value: 2
1340 |       - display: Pending account linking
1341 |         value: 3
1342 |       - display: Pending additional validation
1343 |         value: 4
1344 |       - display: OK
1345 |         value: 5
1346 |       - display: Requested deletion
1347 |         value: 6
1348 |       - display: Deleting
1349 |         value: 7
1350 |       - display: Deleted
1351 |         value: 8
1352 |       - display: Error creating
1353 |         value: 9
1354 |       - display: Error deleting
1355 |         value: 10
1356 |       type: PositiveInteger
1357 |     user_id:
1358 |       db_table: core_user
1359 |       type: ForeignKey
1360 |     username:
1361 |       type: Char
1362 |     uuid:
1363 |       type: UUID
1364 |   model: offeringuser
1365 |   type: Table
1366 | marketplace_offeringusergroup:
1367 |   app_label: marketplace
1368 |   columns:
1369 |     backend_metadata:
1370 |       type: JSON
1371 |     created:
1372 |       type: DateTime
1373 |     id:
1374 |       type: PositiveInteger
1375 |     modified:
1376 |       type: DateTime
1377 |     offering_id:
1378 |       db_table: marketplace_offering
1379 |       type: ForeignKey
1380 |   model: offeringusergroup
1381 |   type: Table
1382 | marketplace_offeringusergroup_projects:
1383 |   columns:
1384 |     id:
1385 |       type: PositiveInteger
1386 |     offeringusergroup_id:
1387 |       db_table: marketplace_offeringusergroup
1388 |       type: ForeignKey
1389 |     project_id:
1390 |       db_table: structure_project
1391 |       type: ForeignKey
1392 |   type: ManyToManyTable
1393 | marketplace_offeringuserrole:
1394 |   app_label: marketplace
1395 |   columns:
1396 |     id:
1397 |       type: PositiveInteger
1398 |     name:
1399 |       type: Char
1400 |     offering_id:
1401 |       db_table: marketplace_offering
1402 |       type: ForeignKey
1403 |     uuid:
1404 |       type: UUID
1405 |   model: offeringuserrole
1406 |   type: Table
1407 | marketplace_order:
1408 |   app_label: marketplace
1409 |   columns:
1410 |     attachment:
1411 |       type: File
1412 |     attributes:
1413 |       type: JSON
1414 |     backend_id:
1415 |       type: Char
1416 |     callback_url:
1417 |       type: URL
1418 |     completed_at:
1419 |       type: DateTime
1420 |     consumer_reviewed_at:
1421 |       type: DateTime
1422 |     consumer_reviewed_by_id:
1423 |       db_table: core_user
1424 |       type: ForeignKey
1425 |     cost:
1426 |       type: Decimal
1427 |     created:
1428 |       type: DateTime
1429 |     created_by_id:
1430 |       db_table: core_user
1431 |       type: ForeignKey
1432 |     error_message:
1433 |       type: Text
1434 |     error_traceback:
1435 |       type: Text
1436 |     id:
1437 |       type: PositiveInteger
1438 |     limits:
1439 |       type: JSON
1440 |     modified:
1441 |       type: DateTime
1442 |     offering_id:
1443 |       db_table: marketplace_offering
1444 |       type: ForeignKey
1445 |     old_plan_id:
1446 |       db_table: marketplace_plan
1447 |       type: ForeignKey
1448 |     output:
1449 |       type: Text
1450 |     plan_id:
1451 |       db_table: marketplace_plan
1452 |       type: ForeignKey
1453 |     project_id:
1454 |       db_table: structure_project
1455 |       type: ForeignKey
1456 |     provider_reviewed_at:
1457 |       type: DateTime
1458 |     provider_reviewed_by_id:
1459 |       db_table: core_user
1460 |       type: ForeignKey
1461 |     request_comment:
1462 |       type: Char
1463 |     resource_id:
1464 |       db_table: marketplace_resource
1465 |       type: ForeignKey
1466 |     slug:
1467 |       type: Slug
1468 |     start_date:
1469 |       type: Date
1470 |     state:
1471 |       choices:
1472 |       - display: pending-consumer
1473 |         value: 1
1474 |       - display: pending-provider
1475 |         value: 7
1476 |       - display: pending-project
1477 |         value: 8
1478 |       - display: pending-start-date
1479 |         value: 9
1480 |       - display: executing
1481 |         value: 2
1482 |       - display: done
1483 |         value: 3
1484 |       - display: erred
1485 |         value: 4
1486 |       - display: canceled
1487 |         value: 5
1488 |       - display: rejected
1489 |         value: 6
1490 |       type: PositiveInteger
1491 |     termination_comment:
1492 |       type: Char
1493 |     type:
1494 |       choices:
1495 |       - display: Create
1496 |         value: 1
1497 |       - display: Update
1498 |         value: 2
1499 |       - display: Terminate
1500 |         value: 3
1501 |       type: PositiveSmallInteger
1502 |     uuid:
1503 |       type: UUID
1504 |   model: order
1505 |   type: Table
1506 | marketplace_plan:
1507 |   app_label: marketplace
1508 |   columns:
1509 |     archived:
1510 |       type: Boolean
1511 |     article_code:
1512 |       type: Char
1513 |     backend_id:
1514 |       type: Char
1515 |     content_type_id:
1516 |       db_table: django_content_type
1517 |       type: ForeignKey
1518 |     created:
1519 |       type: DateTime
1520 |     description:
1521 |       type: Char
1522 |     id:
1523 |       type: PositiveInteger
1524 |     max_amount:
1525 |       type: PositiveSmallInteger
1526 |     modified:
1527 |       type: DateTime
1528 |     name:
1529 |       type: Char
1530 |     object_id:
1531 |       type: PositiveInteger
1532 |     offering_id:
1533 |       db_table: marketplace_offering
1534 |       type: ForeignKey
1535 |     unit:
1536 |       type: Char
1537 |     unit_price:
1538 |       type: Decimal
1539 |     uuid:
1540 |       type: UUID
1541 |   model: plan
1542 |   type: Table
1543 | marketplace_plan_organization_groups:
1544 |   columns:
1545 |     id:
1546 |       type: PositiveInteger
1547 |     organizationgroup_id:
1548 |       db_table: structure_organizationgroup
1549 |       type: ForeignKey
1550 |     plan_id:
1551 |       db_table: marketplace_plan
1552 |       type: ForeignKey
1553 |   type: ManyToManyTable
1554 | marketplace_plancomponent:
1555 |   app_label: marketplace
1556 |   columns:
1557 |     amount:
1558 |       type: PositiveInteger
1559 |     component_id:
1560 |       db_table: marketplace_offeringcomponent
1561 |       type: ForeignKey
1562 |     discount_rate:
1563 |       type: PositiveInteger
1564 |     discount_threshold:
1565 |       type: PositiveInteger
1566 |     future_price:
1567 |       type: Decimal
1568 |     id:
1569 |       type: PositiveInteger
1570 |     plan_id:
1571 |       db_table: marketplace_plan
1572 |       type: ForeignKey
1573 |     price:
1574 |       type: Decimal
1575 |   model: plancomponent
1576 |   type: Table
1577 | marketplace_projectserviceaccount:
1578 |   app_label: marketplace
1579 |   columns:
1580 |     created:
1581 |       type: DateTime
1582 |     description:
1583 |       type: Text
1584 |     email:
1585 |       type: Email
1586 |     error_message:
1587 |       type: Text
1588 |     error_traceback:
1589 |       type: Text
1590 |     id:
1591 |       type: PositiveInteger
1592 |     modified:
1593 |       type: DateTime
1594 |     preferred_identifier:
1595 |       type: Char
1596 |     project_id:
1597 |       db_table: structure_project
1598 |       type: ForeignKey
1599 |     state:
1600 |       choices:
1601 |       - display: OK
1602 |         value: 1
1603 |       - display: Closed
1604 |         value: 2
1605 |       - display: Erred
1606 |         value: 3
1607 |       type: PositiveInteger
1608 |     username:
1609 |       type: Char
1610 |     uuid:
1611 |       type: UUID
1612 |   model: projectserviceaccount
1613 |   type: Table
1614 | marketplace_resource:
1615 |   app_label: marketplace
1616 |   columns:
1617 |     attributes:
1618 |       type: JSON
1619 |     backend_id:
1620 |       type: Char
1621 |     backend_metadata:
1622 |       type: JSON
1623 |     content_type_id:
1624 |       db_table: django_content_type
1625 |       type: ForeignKey
1626 |     cost:
1627 |       type: Decimal
1628 |     created:
1629 |       type: DateTime
1630 |     current_usages:
1631 |       type: JSON
1632 |     description:
1633 |       type: Char
1634 |     downscaled:
1635 |       type: Boolean
1636 |     effective_id:
1637 |       type: Char
1638 |     end_date:
1639 |       type: Date
1640 |     end_date_requested_by_id:
1641 |       db_table: core_user
1642 |       type: ForeignKey
1643 |     error_message:
1644 |       type: Text
1645 |     error_traceback:
1646 |       type: Text
1647 |     id:
1648 |       type: PositiveInteger
1649 |     last_sync:
1650 |       type: DateTime
1651 |     limits:
1652 |       type: JSON
1653 |     modified:
1654 |       type: DateTime
1655 |     name:
1656 |       type: Char
1657 |     object_id:
1658 |       type: PositiveInteger
1659 |     offering_id:
1660 |       db_table: marketplace_offering
1661 |       type: ForeignKey
1662 |     options:
1663 |       type: JSON
1664 |     parent_id:
1665 |       db_table: marketplace_resource
1666 |       type: ForeignKey
1667 |     paused:
1668 |       type: Boolean
1669 |     plan_id:
1670 |       db_table: marketplace_plan
1671 |       type: ForeignKey
1672 |     project_id:
1673 |       db_table: structure_project
1674 |       type: ForeignKey
1675 |     report:
1676 |       type: JSON
1677 |     restrict_member_access:
1678 |       type: Boolean
1679 |     slug:
1680 |       type: Slug
1681 |     state:
1682 |       choices:
1683 |       - display: Creating
1684 |         value: 1
1685 |       - display: OK
1686 |         value: 2
1687 |       - display: Erred
1688 |         value: 3
1689 |       - display: Updating
1690 |         value: 4
1691 |       - display: Terminating
1692 |         value: 5
1693 |       - display: Terminated
1694 |         value: 6
1695 |       type: PositiveInteger
1696 |     uuid:
1697 |       type: UUID
1698 |   model: resource
1699 |   type: Table
1700 | marketplace_resourceaccessendpoint:
1701 |   app_label: marketplace
1702 |   columns:
1703 |     id:
1704 |       type: PositiveInteger
1705 |     name:
1706 |       type: Char
1707 |     resource_id:
1708 |       db_table: marketplace_resource
1709 |       type: ForeignKey
1710 |     url:
1711 |       type: BackendURL
1712 |     uuid:
1713 |       type: UUID
1714 |   model: resourceaccessendpoint
1715 |   type: Table
1716 | marketplace_resourceplanperiod:
1717 |   app_label: marketplace
1718 |   columns:
1719 |     created:
1720 |       type: DateTime
1721 |     end:
1722 |       type: DateTime
1723 |     id:
1724 |       type: PositiveInteger
1725 |     modified:
1726 |       type: DateTime
1727 |     plan_id:
1728 |       db_table: marketplace_plan
1729 |       type: ForeignKey
1730 |     resource_id:
1731 |       db_table: marketplace_resource
1732 |       type: ForeignKey
1733 |     start:
1734 |       type: DateTime
1735 |     uuid:
1736 |       type: UUID
1737 |   model: resourceplanperiod
1738 |   type: Table
1739 | marketplace_resourceuser:
1740 |   app_label: marketplace
1741 |   columns:
1742 |     created:
1743 |       type: DateTime
1744 |     id:
1745 |       type: PositiveInteger
1746 |     modified:
1747 |       type: DateTime
1748 |     resource_id:
1749 |       db_table: marketplace_resource
1750 |       type: ForeignKey
1751 |     role_id:
1752 |       db_table: marketplace_offeringuserrole
1753 |       type: ForeignKey
1754 |     user_id:
1755 |       db_table: core_user
1756 |       type: ForeignKey
1757 |     uuid:
1758 |       type: UUID
1759 |   model: resourceuser
1760 |   type: Table
1761 | marketplace_robotaccount:
1762 |   app_label: marketplace
1763 |   columns:
1764 |     backend_id:
1765 |       type: Char
1766 |     backend_metadata:
1767 |       type: JSON
1768 |     created:
1769 |       type: DateTime
1770 |     description:
1771 |       type: Text
1772 |     error_message:
1773 |       type: Text
1774 |     error_traceback:
1775 |       type: Text
1776 |     id:
1777 |       type: PositiveInteger
1778 |     keys:
1779 |       type: JSON
1780 |     modified:
1781 |       type: DateTime
1782 |     resource_id:
1783 |       db_table: marketplace_resource
1784 |       type: ForeignKey
1785 |     responsible_user_id:
1786 |       db_table: core_user
1787 |       type: ForeignKey
1788 |     state:
1789 |       choices:
1790 |       - display: Requested
1791 |         value: 1
1792 |       - display: Creating
1793 |         value: 2
1794 |       - display: OK
1795 |         value: 3
1796 |       - display: Requested deletion
1797 |         value: 4
1798 |       - display: Deleted
1799 |         value: 5
1800 |       - display: Error
1801 |         value: 6
1802 |       type: PositiveInteger
1803 |     type:
1804 |       type: Char
1805 |     username:
1806 |       type: Char
1807 |     uuid:
1808 |       type: UUID
1809 |   model: robotaccount
1810 |   type: Table
1811 | marketplace_robotaccount_users:
1812 |   columns:
1813 |     id:
1814 |       type: PositiveInteger
1815 |     robotaccount_id:
1816 |       db_table: marketplace_robotaccount
1817 |       type: ForeignKey
1818 |     user_id:
1819 |       db_table: core_user
1820 |       type: ForeignKey
1821 |   type: ManyToManyTable
1822 | marketplace_screenshot:
1823 |   app_label: marketplace
1824 |   columns:
1825 |     backend_id:
1826 |       type: Char
1827 |     created:
1828 |       type: DateTime
1829 |     description:
1830 |       type: Char
1831 |     id:
1832 |       type: PositiveInteger
1833 |     image:
1834 |       type: Image
1835 |     modified:
1836 |       type: DateTime
1837 |     name:
1838 |       type: Char
1839 |     offering_id:
1840 |       db_table: marketplace_offering
1841 |       type: ForeignKey
1842 |     thumbnail:
1843 |       type: Image
1844 |     uuid:
1845 |       type: UUID
1846 |   model: screenshot
1847 |   type: Table
1848 | marketplace_section:
1849 |   app_label: marketplace
1850 |   columns:
1851 |     category_id:
1852 |       db_table: marketplace_category
1853 |       type: ForeignKey
1854 |     created:
1855 |       type: DateTime
1856 |     is_standalone:
1857 |       type: Boolean
1858 |     key:
1859 |       type: Char
1860 |     modified:
1861 |       type: DateTime
1862 |     title:
1863 |       type: Char
1864 |   model: section
1865 |   type: Table
1866 | marketplace_serviceprovider:
1867 |   app_label: marketplace
1868 |   columns:
1869 |     api_secret_code:
1870 |       type: Char
1871 |     created:
1872 |       type: DateTime
1873 |     customer_id:
1874 |       db_table: structure_customer
1875 |       type: OneToOne
1876 |     description:
1877 |       type: Char
1878 |     enable_notifications:
1879 |       type: Boolean
1880 |     id:
1881 |       type: PositiveInteger
1882 |     image:
1883 |       type: Image
1884 |     lead_body:
1885 |       type: Text
1886 |     lead_email:
1887 |       type: Email
1888 |     lead_subject:
1889 |       type: Char
1890 |     modified:
1891 |       type: DateTime
1892 |     uuid:
1893 |       type: UUID
1894 |   model: serviceprovider
1895 |   type: Table
1896 | marketplace_softwarecatalog:
1897 |   app_label: marketplace
1898 |   columns:
1899 |     created:
1900 |       type: DateTime
1901 |     description:
1902 |       type: Text
1903 |     id:
1904 |       type: PositiveInteger
1905 |     modified:
1906 |       type: DateTime
1907 |     name:
1908 |       type: Char
1909 |     source_url:
1910 |       type: URL
1911 |     uuid:
1912 |       type: UUID
1913 |     version:
1914 |       type: Char
1915 |   model: softwarecatalog
1916 |   type: Table
1917 | marketplace_softwarepackage:
1918 |   app_label: marketplace
1919 |   columns:
1920 |     catalog_id:
1921 |       db_table: marketplace_softwarecatalog
1922 |       type: ForeignKey
1923 |     created:
1924 |       type: DateTime
1925 |     description:
1926 |       type: Text
1927 |     homepage:
1928 |       type: URL
1929 |     id:
1930 |       type: PositiveInteger
1931 |     modified:
1932 |       type: DateTime
1933 |     name:
1934 |       type: Char
1935 |     uuid:
1936 |       type: UUID
1937 |   model: softwarepackage
1938 |   type: Table
1939 | marketplace_softwaretarget:
1940 |   app_label: marketplace
1941 |   columns:
1942 |     cpu_family:
1943 |       type: Char
1944 |     cpu_microarchitecture:
1945 |       type: Char
1946 |     created:
1947 |       type: DateTime
1948 |     id:
1949 |       type: PositiveInteger
1950 |     modified:
1951 |       type: DateTime
1952 |     path:
1953 |       type: Char
1954 |     uuid:
1955 |       type: UUID
1956 |     version_id:
1957 |       db_table: marketplace_softwareversion
1958 |       type: ForeignKey
1959 |   model: softwaretarget
1960 |   type: Table
1961 | marketplace_softwareversion:
1962 |   app_label: marketplace
1963 |   columns:
1964 |     created:
1965 |       type: DateTime
1966 |     id:
1967 |       type: PositiveInteger
1968 |     metadata:
1969 |       type: JSON
1970 |     modified:
1971 |       type: DateTime
1972 |     package_id:
1973 |       db_table: marketplace_softwarepackage
1974 |       type: ForeignKey
1975 |     release_date:
1976 |       type: Date
1977 |     uuid:
1978 |       type: UUID
1979 |     version:
1980 |       type: Char
1981 |   model: softwareversion
1982 |   type: Table
1983 | marketplace_userofferingconsent:
1984 |   app_label: marketplace
1985 |   columns:
1986 |     agreement_date:
1987 |       type: DateTime
1988 |     created:
1989 |       type: DateTime
1990 |     id:
1991 |       type: PositiveInteger
1992 |     modified:
1993 |       type: DateTime
1994 |     offering_id:
1995 |       db_table: marketplace_offering
1996 |       type: ForeignKey
1997 |     revocation_date:
1998 |       type: DateTime
1999 |     user_id:
2000 |       db_table: core_user
2001 |       type: ForeignKey
2002 |     uuid:
2003 |       type: UUID
2004 |     version:
2005 |       type: Char
2006 |   model: userofferingconsent
2007 |   type: Table
2008 | permissions_role:
2009 |   app_label: permissions
2010 |   columns:
2011 |     content_type_id:
2012 |       db_table: django_content_type
2013 |       type: ForeignKey
2014 |     description:
2015 |       type: Char
2016 |     id:
2017 |       type: PositiveInteger
2018 |     is_active:
2019 |       type: Boolean
2020 |     is_system_role:
2021 |       type: Boolean
2022 |     name:
2023 |       type: Char
2024 |     uuid:
2025 |       type: UUID
2026 |   model: role
2027 |   type: Table
2028 | permissions_rolepermission:
2029 |   app_label: permissions
2030 |   columns:
2031 |     id:
2032 |       type: PositiveInteger
2033 |     permission:
2034 |       type: Char
2035 |     role_id:
2036 |       db_table: permissions_role
2037 |       type: ForeignKey
2038 |   model: rolepermission
2039 |   type: Table
2040 | permissions_userrole:
2041 |   app_label: permissions
2042 |   columns:
2043 |     content_type_id:
2044 |       db_table: django_content_type
2045 |       type: ForeignKey
2046 |     created:
2047 |       type: DateTime
2048 |     created_by_id:
2049 |       db_table: core_user
2050 |       type: ForeignKey
2051 |     expiration_time:
2052 |       type: DateTime
2053 |     id:
2054 |       type: PositiveInteger
2055 |     is_active:
2056 |       type: Boolean
2057 |     modified:
2058 |       type: DateTime
2059 |     object_id:
2060 |       type: PositiveInteger
2061 |     role_id:
2062 |       db_table: permissions_role
2063 |       type: ForeignKey
2064 |     user_id:
2065 |       db_table: core_user
2066 |       type: ForeignKey
2067 |     uuid:
2068 |       type: UUID
2069 |   model: userrole
2070 |   type: Table
2071 | structure_accesssubnet:
2072 |   app_label: structure
2073 |   columns:
2074 |     customer_id:
2075 |       db_table: structure_customer
2076 |       type: ForeignKey
2077 |     description:
2078 |       type: Char
2079 |     id:
2080 |       type: PositiveInteger
2081 |     inet:
2082 |       type: CidrAddress
2083 |     uuid:
2084 |       type: UUID
2085 |   model: accesssubnet
2086 |   type: Table
2087 | structure_customer:
2088 |   app_label: structure
2089 |   columns:
2090 |     abbreviation:
2091 |       type: Char
2092 |     access_subnets:
2093 |       type: Text
2094 |     accounting_start_date:
2095 |       type: DateTime
2096 |     address:
2097 |       type: Char
2098 |     agreement_number:
2099 |       type: Char
2100 |     archived:
2101 |       type: Boolean
2102 |     backend_id:
2103 |       type: Char
2104 |     bank_account:
2105 |       type: Char
2106 |     bank_name:
2107 |       type: Char
2108 |     blocked:
2109 |       type: Boolean
2110 |     contact_details:
2111 |       type: Text
2112 |     country:
2113 |       type: Char
2114 |     created:
2115 |       type: DateTime
2116 |     default_tax_percent:
2117 |       type: Decimal
2118 |     description:
2119 |       type: Char
2120 |     display_billing_info_in_projects:
2121 |       type: Boolean
2122 |     domain:
2123 |       type: Char
2124 |     email:
2125 |       type: Email
2126 |     homepage:
2127 |       type: URL
2128 |     id:
2129 |       type: PositiveInteger
2130 |     image:
2131 |       type: Image
2132 |     latitude:
2133 |       type: Float
2134 |     longitude:
2135 |       type: Float
2136 |     max_service_accounts:
2137 |       type: PositiveSmallInteger
2138 |     modified:
2139 |       type: DateTime
2140 |     name:
2141 |       type: Char
2142 |     native_name:
2143 |       type: Char
2144 |     notification_emails:
2145 |       type: Char
2146 |     phone_number:
2147 |       type: Char
2148 |     postal:
2149 |       type: Char
2150 |     registration_code:
2151 |       type: Char
2152 |     slug:
2153 |       type: Slug
2154 |     sponsor_number:
2155 |       type: PositiveInteger
2156 |     uuid:
2157 |       type: UUID
2158 |     vat_address:
2159 |       type: Char
2160 |     vat_code:
2161 |       type: Char
2162 |     vat_name:
2163 |       type: Char
2164 |   model: customer
2165 |   type: Table
2166 | structure_customer_organization_groups:
2167 |   columns:
2168 |     customer_id:
2169 |       db_table: structure_customer
2170 |       type: ForeignKey
2171 |     id:
2172 |       type: PositiveInteger
2173 |     organizationgroup_id:
2174 |       db_table: structure_organizationgroup
2175 |       type: ForeignKey
2176 |   type: ManyToManyTable
2177 | structure_customerpermissionreview:
2178 |   app_label: structure
2179 |   columns:
2180 |     closed:
2181 |       type: DateTime
2182 |     created:
2183 |       type: DateTime
2184 |     customer_id:
2185 |       db_table: structure_customer
2186 |       type: ForeignKey
2187 |     id:
2188 |       type: PositiveInteger
2189 |     is_pending:
2190 |       type: Boolean
2191 |     reviewer_id:
2192 |       db_table: core_user
2193 |       type: ForeignKey
2194 |     uuid:
2195 |       type: UUID
2196 |   model: customerpermissionreview
2197 |   type: Table
2198 | structure_externallink:
2199 |   app_label: structure
2200 |   columns:
2201 |     created:
2202 |       type: DateTime
2203 |     description:
2204 |       type: Char
2205 |     id:
2206 |       type: PositiveInteger
2207 |     image:
2208 |       type: Image
2209 |     link:
2210 |       type: URL
2211 |     modified:
2212 |       type: DateTime
2213 |     name:
2214 |       type: Char
2215 |     uuid:
2216 |       type: UUID
2217 |   model: externallink
2218 |   type: Table
2219 | structure_organizationgroup:
2220 |   app_label: structure
2221 |   columns:
2222 |     id:
2223 |       type: PositiveInteger
2224 |     name:
2225 |       type: Char
2226 |     parent_id:
2227 |       db_table: structure_organizationgroup
2228 |       type: ForeignKey
2229 |     uuid:
2230 |       type: UUID
2231 |   model: organizationgroup
2232 |   type: Table
2233 | structure_project:
2234 |   app_label: structure
2235 |   columns:
2236 |     backend_id:
2237 |       type: Char
2238 |     created:
2239 |       type: DateTime
2240 |     customer_id:
2241 |       db_table: structure_customer
2242 |       type: ForeignKey
2243 |     description:
2244 |       type: Char
2245 |     end_date:
2246 |       type: Date
2247 |     end_date_requested_by_id:
2248 |       db_table: core_user
2249 |       type: ForeignKey
2250 |     id:
2251 |       type: PositiveInteger
2252 |     image:
2253 |       type: Image
2254 |     is_industry:
2255 |       type: Boolean
2256 |     is_removed:
2257 |       type: Boolean
2258 |     kind:
2259 |       type: Char
2260 |     max_service_accounts:
2261 |       type: PositiveSmallInteger
2262 |     modified:
2263 |       type: DateTime
2264 |     name:
2265 |       type: Char
2266 |     oecd_fos_2007_code:
2267 |       type: Char
2268 |     slug:
2269 |       type: Slug
2270 |     staff_notes:
2271 |       type: Char
2272 |     start_date:
2273 |       type: Date
2274 |     termination_metadata:
2275 |       type: JSON
2276 |     type_id:
2277 |       db_table: structure_projecttype
2278 |       type: ForeignKey
2279 |     uuid:
2280 |       type: UUID
2281 |   model: project
2282 |   type: Table
2283 | structure_projectpermissionreview:
2284 |   app_label: structure
2285 |   columns:
2286 |     closed:
2287 |       type: DateTime
2288 |     created:
2289 |       type: DateTime
2290 |     id:
2291 |       type: PositiveInteger
2292 |     is_pending:
2293 |       type: Boolean
2294 |     project_id:
2295 |       db_table: structure_project
2296 |       type: ForeignKey
2297 |     reviewer_id:
2298 |       db_table: core_user
2299 |       type: ForeignKey
2300 |     uuid:
2301 |       type: UUID
2302 |   model: projectpermissionreview
2303 |   type: Table
2304 | structure_projecttype:
2305 |   app_label: structure
2306 |   columns:
2307 |     description:
2308 |       type: Char
2309 |     id:
2310 |       type: PositiveInteger
2311 |     name:
2312 |       type: Char
2313 |     uuid:
2314 |       type: UUID
2315 |   model: projecttype
2316 |   type: Table
2317 | structure_servicesettings:
2318 |   app_label: structure
2319 |   columns:
2320 |     backend_url:
2321 |       type: BackendURL
2322 |     certificate:
2323 |       type: File
2324 |     content_type_id:
2325 |       db_table: django_content_type
2326 |       type: ForeignKey
2327 |     customer_id:
2328 |       db_table: structure_customer
2329 |       type: ForeignKey
2330 |     domain:
2331 |       type: Char
2332 |     error_message:
2333 |       type: Text
2334 |     error_traceback:
2335 |       type: Text
2336 |     id:
2337 |       type: PositiveInteger
2338 |     is_active:
2339 |       type: Boolean
2340 |     name:
2341 |       type: Char
2342 |     object_id:
2343 |       type: PositiveInteger
2344 |     options:
2345 |       type: JSON
2346 |     password:
2347 |       type: Char
2348 |     shared:
2349 |       type: Boolean
2350 |     state:
2351 |       choices:
2352 |       - display: CREATION_SCHEDULED
2353 |         value: 5
2354 |       - display: CREATING
2355 |         value: 6
2356 |       - display: UPDATE_SCHEDULED
2357 |         value: 1
2358 |       - display: UPDATING
2359 |         value: 2
2360 |       - display: DELETION_SCHEDULED
2361 |         value: 7
2362 |       - display: DELETING
2363 |         value: 8
2364 |       - display: OK
2365 |         value: 3
2366 |       - display: ERRED
2367 |         value: 4
2368 |       type: PositiveInteger
2369 |     terms_of_services:
2370 |       type: URL
2371 |     token:
2372 |       type: Char
2373 |     type:
2374 |       type: Char
2375 |     username:
2376 |       type: Char
2377 |     uuid:
2378 |       type: UUID
2379 |   model: servicesettings
2380 |   type: Table
2381 | structure_useragreement:
2382 |   app_label: structure
2383 |   columns:
2384 |     agreement_type:
2385 |       type: Char
2386 |     content:
2387 |       type: Text
2388 |     created:
2389 |       type: DateTime
2390 |     id:
2391 |       type: PositiveInteger
2392 |     modified:
2393 |       type: DateTime
2394 |     uuid:
2395 |       type: UUID
2396 |   model: useragreement
2397 |   type: Table
2398 | users_groupinvitation:
2399 |   app_label: users
2400 |   columns:
2401 |     auto_create_project:
2402 |       type: Boolean
2403 |     content_type_id:
2404 |       db_table: django_content_type
2405 |       type: ForeignKey
2406 |     created:
2407 |       type: DateTime
2408 |     created_by_id:
2409 |       db_table: core_user
2410 |       type: ForeignKey
2411 |     customer_id:
2412 |       db_table: structure_customer
2413 |       type: ForeignKey
2414 |     id:
2415 |       type: PositiveInteger
2416 |     is_active:
2417 |       type: Boolean
2418 |     is_public:
2419 |       type: Boolean
2420 |     modified:
2421 |       type: DateTime
2422 |     object_id:
2423 |       type: PositiveInteger
2424 |     project_name_template:
2425 |       type: Char
2426 |     project_role_id:
2427 |       db_table: permissions_role
2428 |       type: ForeignKey
2429 |     role_id:
2430 |       db_table: permissions_role
2431 |       type: ForeignKey
2432 |     user_affiliations:
2433 |       type: JSON
2434 |     user_email_patterns:
2435 |       type: JSON
2436 |     uuid:
2437 |       type: UUID
2438 |   model: groupinvitation
2439 |   type: Table
2440 | users_invitation:
2441 |   app_label: users
2442 |   columns:
2443 |     affiliations:
2444 |       type: JSON
2445 |     approved_by_id:
2446 |       db_table: core_user
2447 |       type: ForeignKey
2448 |     civil_number:
2449 |       type: Char
2450 |     content_type_id:
2451 |       db_table: django_content_type
2452 |       type: ForeignKey
2453 |     created:
2454 |       type: DateTime
2455 |     created_by_id:
2456 |       db_table: core_user
2457 |       type: ForeignKey
2458 |     customer_id:
2459 |       db_table: structure_customer
2460 |       type: ForeignKey
2461 |     email:
2462 |       type: Email
2463 |     error_message:
2464 |       type: Text
2465 |     error_traceback:
2466 |       type: Text
2467 |     execution_state:
2468 |       type: FSM
2469 |     extra_invitation_text:
2470 |       type: Text
2471 |     full_name:
2472 |       type: Char
2473 |     id:
2474 |       type: PositiveInteger
2475 |     job_title:
2476 |       type: Char
2477 |     modified:
2478 |       type: DateTime
2479 |     native_name:
2480 |       type: Char
2481 |     object_id:
2482 |       type: PositiveInteger
2483 |     organization:
2484 |       type: Char
2485 |     phone_number:
2486 |       type: Char
2487 |     role_id:
2488 |       db_table: permissions_role
2489 |       type: ForeignKey
2490 |     state:
2491 |       type: Char
2492 |     uuid:
2493 |       type: UUID
2494 |   model: invitation
2495 |   type: Table
2496 | users_permissionrequest:
2497 |   app_label: users
2498 |   columns:
2499 |     created:
2500 |       type: DateTime
2501 |     created_by_id:
2502 |       db_table: core_user
2503 |       type: ForeignKey
2504 |     id:
2505 |       type: PositiveInteger
2506 |     invitation_id:
2507 |       db_table: users_groupinvitation
2508 |       type: ForeignKey
2509 |     modified:
2510 |       type: DateTime
2511 |     review_comment:
2512 |       type: Text
2513 |     reviewed_at:
2514 |       type: DateTime
2515 |     reviewed_by_id:
2516 |       db_table: core_user
2517 |       type: ForeignKey
2518 |     state:
2519 |       choices:
2520 |       - display: draft
2521 |         value: 1
2522 |       - display: pending
2523 |         value: 2
2524 |       - display: approved
2525 |         value: 3
2526 |       - display: rejected
2527 |         value: 4
2528 |       - display: canceled
2529 |         value: 5
2530 |       type: PositiveInteger
2531 |     uuid:
2532 |       type: UUID
2533 |   model: permissionrequest
2534 |   type: Table
2535 | 
```