gibson-cli 0.8.8__tar.gz → 0.8.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gibson_cli-0.8.10/.github/workflows/ci.yml +77 -0
- gibson_cli-0.8.10/.pre-commit-config.yaml +14 -0
- {gibson_cli-0.8.8/gibson_cli.egg-info → gibson_cli-0.8.10}/PKG-INFO +10 -8
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/README.md +4 -4
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/api/ProjectApi.py +9 -2
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/BaseCommand.py +1 -1
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Build.py +3 -4
- gibson_cli-0.8.10/gibson/command/Deploy.py +52 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Forget.py +2 -2
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Help.py +10 -0
- gibson_cli-0.8.10/gibson/command/Studio.py +58 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/auth/Login.py +0 -2
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/new/Module.py +2 -2
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Dev.py +0 -2
- gibson_cli-0.8.10/gibson/conf/tests/test_conf_Dependencies.py +11 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/CommandRouter.py +6 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Configuration.py +5 -1
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/PythonPath.py +1 -1
- gibson_cli-0.8.10/gibson/core/Select.py +270 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/table/tests/test_structure_postgresql_table_ForeignKey.py +0 -2
- {gibson_cli-0.8.8 → gibson_cli-0.8.10/gibson_cli.egg-info}/PKG-INFO +10 -8
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson_cli.egg-info/SOURCES.txt +5 -1
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson_cli.egg-info/requires.txt +5 -3
- gibson_cli-0.8.10/pyproject.toml +104 -0
- gibson_cli-0.8.10/ruff.toml +5 -0
- gibson_cli-0.8.8/.pre-commit-config.yaml +0 -21
- gibson_cli-0.8.8/gibson/conf/tests/test_conf_Dependencies.py +0 -5
- gibson_cli-0.8.8/pyproject.toml +0 -46
- gibson_cli-0.8.8/requirements.txt +0 -57
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/.gitignore +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/bin/build.sh +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/bin/clean.sh +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/bin/release.sh +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/api/BaseApi.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/api/Cli.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/api/DataApi.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/bin/gibson.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Conf.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Count.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Dev.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Merge.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Modify.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Question.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Remove.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Show.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Tree.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/Version.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/auth/Auth.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/auth/Logout.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Api.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Base.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Code.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Model.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Models.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Schema.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Schemas.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Test.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/code/Tests.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/importer/Import.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/importer/OpenApi.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/list/Entities.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/list/List.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/list/Projects.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/mcp/McpServer.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/new/New.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/new/Project.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/rename/Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/rename/Rename.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/rewrite/Rewrite.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/tests/test_command_BaseCommand.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/command/tests/test_command_Conf.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Api.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Code.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Custom.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Datastore.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Dependencies.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Frameworks.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Modeler.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Paths.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Platform.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Project.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/Version.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/dev/Api.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/dev/Base.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/dev/Model.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/dev/Schema.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/conf/tests/test_conf_Platform.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Colors.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Completions.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Conversation.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Diff.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Env.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Memory.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/Spinner.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/TimeKeeper.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/core/utils.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/data/bash-completion.tmpl +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/data/mysql/default-ref-table.tmpl +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/data/mysql/default-table.tmpl +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/data/postgresql/default-ref-table.tmpl +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/data/postgresql/default-table.tmpl +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/db/TableExceptions.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/db/tests/test_db_TableExceptions.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/dev/Dev.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/Header.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/WorkspaceFooter.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/WorkspaceHeader.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/tests/test_display_Header.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/tests/test_display_WorkspaceFooter.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/display/tests/test_display_WorkspaceHeader.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/lang/Python.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/lang/tests/test_lang_Python.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/auth/Server.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/DataDictionary.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/EntityKeys.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/Manager.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/tests/test_code_context_schema_DataDictionary.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/tests/test_code_context_schema_EntityKeys.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/context/schema/tests/test_code_context_schema_Manager.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/Authenticator.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/BaseCustomization.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/CustomizationManager.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/Index.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/tests/test_code_customization_Authenticator.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/code/customization/tests/test_code_customization_BaseCustomization.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/services/mcp/server.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/constraints/ReferenceConstraint.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/ForeignKey.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/Index.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/IndexAttribute.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_ForeignKey.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_Index.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_IndexAttribute.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/testing.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/mysql/tests/test_structure_mysql_Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/References.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/table/ForeignKey.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/testing.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/postgresql/tests/test_structure_postgresql_Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/structure/tests/test_structure_Entity.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/tests/test_Env.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/tests/test_Memory.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson/tests/test_utils.py +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson_cli.egg-info/dependency_links.txt +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson_cli.egg-info/entry_points.txt +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/gibson_cli.egg-info/top_level.txt +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/setup.cfg +0 -0
- {gibson_cli-0.8.8 → gibson_cli-0.8.10}/venv/bin/activate_this.py +0 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
branches:
|
6
|
+
- "*"
|
7
|
+
|
8
|
+
concurrency:
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
10
|
+
cancel-in-progress: true
|
11
|
+
|
12
|
+
env:
|
13
|
+
HOME: src/gibson/cli
|
14
|
+
PYTHONIOENCODING: UTF-8
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
lint:
|
18
|
+
name: Lint
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
steps:
|
21
|
+
- name: Checkout
|
22
|
+
uses: actions/checkout@v4
|
23
|
+
with:
|
24
|
+
path: ${{ env.HOME }}
|
25
|
+
|
26
|
+
- name: Lint with Ruff
|
27
|
+
uses: astral-sh/ruff-action@v3
|
28
|
+
|
29
|
+
install:
|
30
|
+
name: Install
|
31
|
+
runs-on: ${{ matrix.runner }}
|
32
|
+
strategy:
|
33
|
+
fail-fast: false
|
34
|
+
matrix:
|
35
|
+
runner: [ubuntu-latest, macos-latest, windows-latest]
|
36
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
37
|
+
|
38
|
+
steps:
|
39
|
+
- name: Checkout
|
40
|
+
uses: actions/checkout@v4
|
41
|
+
with:
|
42
|
+
path: ${{ env.HOME }}
|
43
|
+
|
44
|
+
- name: Install uv
|
45
|
+
uses: astral-sh/setup-uv@v5
|
46
|
+
|
47
|
+
- name: Set up Python
|
48
|
+
run: |
|
49
|
+
uv python install ${{ matrix.python-version }}
|
50
|
+
uv python pin ${{ matrix.python-version }}
|
51
|
+
|
52
|
+
- name: Install CLI as uv tool
|
53
|
+
run: uv tool install ${{ env.HOME }} -e
|
54
|
+
|
55
|
+
- name: Run CLI
|
56
|
+
run: gibson --version
|
57
|
+
|
58
|
+
- name: Uninstall CLI
|
59
|
+
run: uv tool uninstall gibson-cli
|
60
|
+
|
61
|
+
- name: Create venv
|
62
|
+
run: uv venv --python ${{ matrix.python-version }}
|
63
|
+
working-directory: ${{ env.HOME }}
|
64
|
+
|
65
|
+
- name: Activate venv (POSIX)
|
66
|
+
if: matrix.runner != 'windows-latest'
|
67
|
+
run: source .venv/bin/activate
|
68
|
+
working-directory: ${{ env.HOME }}
|
69
|
+
|
70
|
+
- name: Activate venv (Windows)
|
71
|
+
if: matrix.runner == 'windows-latest'
|
72
|
+
run: .venv\Scripts\activate
|
73
|
+
working-directory: ${{ env.HOME }}
|
74
|
+
|
75
|
+
- name: Install CLI via pip
|
76
|
+
run: uv pip install -e .
|
77
|
+
working-directory: ${{ env.HOME }}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
repos:
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
3
|
+
rev: v2.3.0
|
4
|
+
hooks:
|
5
|
+
- id: check-yaml
|
6
|
+
- id: end-of-file-fixer
|
7
|
+
- id: trailing-whitespace
|
8
|
+
|
9
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
10
|
+
rev: v0.9.6
|
11
|
+
hooks:
|
12
|
+
- id: ruff
|
13
|
+
args: [--fix]
|
14
|
+
- id: ruff-format
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: gibson-cli
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.10
|
4
4
|
Summary: Gibson Command Line Interface
|
5
5
|
Author-email: GibsonAI <noc@gibsonai.com>
|
6
6
|
Project-URL: Homepage, https://gibsonai.com/
|
@@ -27,6 +27,8 @@ Requires-Dist: faker-sqlalchemy==0.10.2208140
|
|
27
27
|
Requires-Dist: fastapi==0.115.12
|
28
28
|
Requires-Dist: fastapi-cli==0.0.2
|
29
29
|
Requires-Dist: h11==0.14.0
|
30
|
+
Requires-Dist: harlequin==2.1.2
|
31
|
+
Requires-Dist: harlequin-mysql==1.1.0
|
30
32
|
Requires-Dist: httpcore==1.0.5
|
31
33
|
Requires-Dist: httptools==0.6.4
|
32
34
|
Requires-Dist: httpx==0.27.0
|
@@ -38,7 +40,7 @@ Requires-Dist: markdown-it-py==3.0.0
|
|
38
40
|
Requires-Dist: markupsafe==2.1.5
|
39
41
|
Requires-Dist: mcp==1.6.0
|
40
42
|
Requires-Dist: mdurl==0.1.2
|
41
|
-
Requires-Dist: orjson==3.10.
|
43
|
+
Requires-Dist: orjson==3.10.18
|
42
44
|
Requires-Dist: packaging==24.2
|
43
45
|
Requires-Dist: pluggy==1.4.0
|
44
46
|
Requires-Dist: pydantic==2.11.0
|
@@ -60,7 +62,7 @@ Requires-Dist: sniffio==1.3.1
|
|
60
62
|
Requires-Dist: sqlalchemy==1.4.41
|
61
63
|
Requires-Dist: sse-starlette==2.2.1
|
62
64
|
Requires-Dist: starlette==0.46.1
|
63
|
-
Requires-Dist: textual==0.
|
65
|
+
Requires-Dist: textual==0.89.1
|
64
66
|
Requires-Dist: tomli==2.0.1
|
65
67
|
Requires-Dist: typer==0.12.3
|
66
68
|
Requires-Dist: typing-extensions==4.13.0
|
@@ -68,7 +70,7 @@ Requires-Dist: typing-inspection==0.4.0
|
|
68
70
|
Requires-Dist: ujson==5.9.0
|
69
71
|
Requires-Dist: urllib3==1.26.6
|
70
72
|
Requires-Dist: uvicorn==0.29.0
|
71
|
-
Requires-Dist: watchfiles==0.
|
73
|
+
Requires-Dist: watchfiles==1.0.5
|
72
74
|
Requires-Dist: websockets==12.0
|
73
75
|
Requires-Dist: yaspin==3.1.0
|
74
76
|
|
@@ -76,9 +78,9 @@ Requires-Dist: yaspin==3.1.0
|
|
76
78
|
|
77
79
|
# Gibson CLI
|
78
80
|
|
79
|
-
[](https://pypi.org/project/gibson-cli/)
|
80
|
-
](https://pypi.org/project/gibson-cli/)
|
82
|
+

|
83
|
+
[](https://docs.gibsonai.com)
|
82
84
|
|
83
85
|
## Prerequisites
|
84
86
|
|
@@ -178,7 +180,7 @@ All of Gibson's configuration files and caches are stored in `$HOME/.gibson`. Us
|
|
178
180
|
|
179
181
|
### For Windows Users
|
180
182
|
|
181
|
-
- Make sure that you have an environment variable called HOME set. Gibson will store its configuration files and caches in this directory. We recommend you keep this directory outside of any repository to which you might be committing.
|
183
|
+
- Make sure that you have an environment variable called `HOME` set. Gibson will store its configuration files and caches in this directory. We recommend you keep this directory outside of any repository to which you might be committing.
|
182
184
|
- To execute the `gibson` command, follow these instructions:
|
183
185
|
- Assuming the gibson executable is in `c:\Users\\[me]\projects\gibson\bin`
|
184
186
|
- Run `python c:\Users\\[me]\projects\gibson\bin\gibson`
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
# Gibson CLI
|
4
4
|
|
5
|
-
[](https://pypi.org/project/gibson-cli/)
|
6
|
-
](https://pypi.org/project/gibson-cli/)
|
6
|
+

|
7
|
+
[](https://docs.gibsonai.com)
|
8
8
|
|
9
9
|
## Prerequisites
|
10
10
|
|
@@ -104,7 +104,7 @@ All of Gibson's configuration files and caches are stored in `$HOME/.gibson`. Us
|
|
104
104
|
|
105
105
|
### For Windows Users
|
106
106
|
|
107
|
-
- Make sure that you have an environment variable called HOME set. Gibson will store its configuration files and caches in this directory. We recommend you keep this directory outside of any repository to which you might be committing.
|
107
|
+
- Make sure that you have an environment variable called `HOME` set. Gibson will store its configuration files and caches in this directory. We recommend you keep this directory outside of any repository to which you might be committing.
|
108
108
|
- To execute the `gibson` command, follow these instructions:
|
109
109
|
- Assuming the gibson executable is in `c:\Users\\[me]\projects\gibson\bin`
|
110
110
|
- Run `python c:\Users\\[me]\projects\gibson\bin\gibson`
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from typing import List
|
2
|
+
|
1
3
|
from gibson.api.BaseApi import BaseApi
|
2
4
|
from gibson.core.Configuration import Configuration
|
3
5
|
|
@@ -20,8 +22,13 @@ class ProjectApi(BaseApi):
|
|
20
22
|
def lookup(self, uuid: str):
|
21
23
|
return self.get(f"{uuid}")
|
22
24
|
|
23
|
-
def deploy(self, uuid: str):
|
24
|
-
return self.post(
|
25
|
+
def deploy(self, uuid: str, environments: List[str] | None = None):
|
26
|
+
return self.post(
|
27
|
+
f"{uuid}/deploy", {"environments": environments} if environments else None
|
28
|
+
)
|
29
|
+
|
30
|
+
def diff(self, uuid: str):
|
31
|
+
return self.get(f"{uuid}/diff")
|
25
32
|
|
26
33
|
def mcp(self, uuid: str):
|
27
34
|
return self.get(f"{uuid}/mcp")
|
@@ -10,7 +10,7 @@ class BaseCommand:
|
|
10
10
|
self.memory = Memory(self.configuration)
|
11
11
|
|
12
12
|
def customization_management_is_enabled(self):
|
13
|
-
return self.__enable_customization_management
|
13
|
+
return self.__enable_customization_management
|
14
14
|
|
15
15
|
def disable_customization_management(self):
|
16
16
|
self.__enable_customization_management = False
|
@@ -15,7 +15,7 @@ class Build(BaseCommand):
|
|
15
15
|
|
16
16
|
db = create_engine(self.configuration.project.datastore.uri)
|
17
17
|
session = sessionmaker(autocommit=False, autoflush=False, bind=db)()
|
18
|
-
|
18
|
+
TableExceptions().universal()
|
19
19
|
|
20
20
|
self.conversation.type("Connected to datastore...\n")
|
21
21
|
|
@@ -52,7 +52,7 @@ class Build(BaseCommand):
|
|
52
52
|
self.conversation.type(" foreign key checks have been enabled\n")
|
53
53
|
|
54
54
|
def __build_postgresql(self, session):
|
55
|
-
|
55
|
+
TableExceptions().postgresql()
|
56
56
|
|
57
57
|
schema = list(session.execute("select current_schema()"))[0][0]
|
58
58
|
self.conversation.type(f" current schema is {schema}\n")
|
@@ -83,12 +83,11 @@ class Build(BaseCommand):
|
|
83
83
|
while tables != {}:
|
84
84
|
remove = []
|
85
85
|
for name, definition in tables.items():
|
86
|
-
|
87
86
|
try:
|
88
87
|
session.execute(definition)
|
89
88
|
session.commit()
|
90
89
|
|
91
|
-
self.conversation.type(f
|
90
|
+
self.conversation.type(f" {name.split('.')[-1]}\n")
|
92
91
|
|
93
92
|
remove.append(name)
|
94
93
|
except sqlalchemy.exc.ProgrammingError:
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from rich.prompt import Confirm
|
2
|
+
|
3
|
+
from gibson.api.ProjectApi import ProjectApi
|
4
|
+
from gibson.command.BaseCommand import BaseCommand
|
5
|
+
from gibson.core.Select import MultiSelect
|
6
|
+
from gibson.core.Spinner import Spinner
|
7
|
+
|
8
|
+
|
9
|
+
class Deploy(BaseCommand):
|
10
|
+
def execute(self):
|
11
|
+
self.configuration.require_login()
|
12
|
+
project_id = self.configuration.require_project_id()
|
13
|
+
project = ProjectApi(self.configuration).lookup(project_id)
|
14
|
+
databases = [database["environment"] for database in project["databases"]]
|
15
|
+
|
16
|
+
selected = MultiSelect(
|
17
|
+
title="Select the database(s) to deploy",
|
18
|
+
options=databases,
|
19
|
+
).prompt()
|
20
|
+
|
21
|
+
if not selected:
|
22
|
+
self.conversation.type("No database selected\n")
|
23
|
+
exit(1)
|
24
|
+
|
25
|
+
for database in selected:
|
26
|
+
diff = ProjectApi(self.configuration).diff(project_id)
|
27
|
+
if diff:
|
28
|
+
self.conversation.type(f"\nDiff for {database} database:\n\n")
|
29
|
+
self.conversation.type(diff)
|
30
|
+
self.conversation.newline()
|
31
|
+
|
32
|
+
if Confirm.ask(
|
33
|
+
f"After reviewing the diff, are you sure you want to deploy the {database} database?"
|
34
|
+
):
|
35
|
+
self.conversation.newline()
|
36
|
+
with Spinner(
|
37
|
+
start_text=f"Deploying {database} database...",
|
38
|
+
success_text=f"Deployed {database} database",
|
39
|
+
fail_text=f"Deployment failed for {database} database",
|
40
|
+
):
|
41
|
+
ProjectApi(self.configuration).deploy(
|
42
|
+
project_id, environments=[database]
|
43
|
+
)
|
44
|
+
|
45
|
+
else:
|
46
|
+
self.conversation.type(
|
47
|
+
f"\nSkipping deployment for {database} database\n",
|
48
|
+
)
|
49
|
+
else:
|
50
|
+
self.conversation.type(
|
51
|
+
f"\nNo changes to deploy for {database} database\n",
|
52
|
+
)
|
@@ -14,11 +14,11 @@ class Forget(BaseCommand):
|
|
14
14
|
|
15
15
|
if sys.argv[2] in ["all", "last"]:
|
16
16
|
self.memory.forget_last()
|
17
|
-
self.conversation.type(
|
17
|
+
self.conversation.type("last memory is forgotten.\n")
|
18
18
|
|
19
19
|
if sys.argv[2] in ["all", "stored"]:
|
20
20
|
self.memory.forget_entities()
|
21
|
-
self.conversation.type(
|
21
|
+
self.conversation.type("stored memory is forgotten.\n")
|
22
22
|
|
23
23
|
self.conversation.newline()
|
24
24
|
|
@@ -47,6 +47,11 @@ class Help(BaseCommand):
|
|
47
47
|
"subcommands": ["last", "stored"],
|
48
48
|
"memory": "based on user selection",
|
49
49
|
},
|
50
|
+
"deploy": {
|
51
|
+
"description": "deploy the project database(s) with the current schema",
|
52
|
+
"subcommands": None,
|
53
|
+
"memory": None,
|
54
|
+
},
|
50
55
|
"dev": {
|
51
56
|
"description": Text.assemble(
|
52
57
|
"gibson will automatically write code for you",
|
@@ -111,6 +116,11 @@ class Help(BaseCommand):
|
|
111
116
|
"subcommands": None,
|
112
117
|
"memory": "last > stored",
|
113
118
|
},
|
119
|
+
"studio": {
|
120
|
+
"description": "connect to your database and launch the SQL studio",
|
121
|
+
"subcommands": None,
|
122
|
+
"memory": None,
|
123
|
+
},
|
114
124
|
"tree": {
|
115
125
|
"description": "illustrate the project layout in a tree view",
|
116
126
|
"subcommands": None,
|
@@ -0,0 +1,58 @@
|
|
1
|
+
from urllib.parse import urlparse
|
2
|
+
|
3
|
+
from harlequin.app import Harlequin
|
4
|
+
from harlequin.plugins import load_adapter_plugins
|
5
|
+
|
6
|
+
from gibson.api.ProjectApi import ProjectApi
|
7
|
+
from gibson.command.BaseCommand import BaseCommand
|
8
|
+
from gibson.core.Select import Select
|
9
|
+
from gibson.core.Spinner import DisappearingSpinner
|
10
|
+
|
11
|
+
|
12
|
+
class Studio(BaseCommand):
|
13
|
+
def execute(self):
|
14
|
+
self.configuration.require_login()
|
15
|
+
project_id = self.configuration.require_project_id()
|
16
|
+
|
17
|
+
project = ProjectApi(self.configuration).lookup(project_id)
|
18
|
+
|
19
|
+
choices = [database["environment"] for database in project["databases"]]
|
20
|
+
|
21
|
+
selected = Select(
|
22
|
+
title="Select a database",
|
23
|
+
options=choices,
|
24
|
+
).prompt()
|
25
|
+
|
26
|
+
if not selected:
|
27
|
+
self.conversation.type("No database selected\n")
|
28
|
+
exit(1)
|
29
|
+
|
30
|
+
database = next(
|
31
|
+
(db for db in project["databases"] if db["environment"] == selected), None
|
32
|
+
)
|
33
|
+
|
34
|
+
with DisappearingSpinner(
|
35
|
+
start_text=f"Connecting to {database['environment']} database...",
|
36
|
+
success_text=f"Connected to {database['environment']} database",
|
37
|
+
fail_text=f"Failed to connect to {database['environment']} database",
|
38
|
+
):
|
39
|
+
plugins = load_adapter_plugins()
|
40
|
+
adapter = plugins[database["datastore_type"]]
|
41
|
+
|
42
|
+
if database["datastore_type"] == "mysql":
|
43
|
+
connection = urlparse(database["connection_string"])
|
44
|
+
adapter = adapter(
|
45
|
+
conn_str=None,
|
46
|
+
host=connection.hostname,
|
47
|
+
port=connection.port,
|
48
|
+
user=connection.username,
|
49
|
+
password=connection.password,
|
50
|
+
database=connection.path.lstrip("/"),
|
51
|
+
)
|
52
|
+
else:
|
53
|
+
raise ValueError(
|
54
|
+
f"Unsupported database type: {database['datastore_type']}"
|
55
|
+
)
|
56
|
+
|
57
|
+
app = Harlequin(adapter=adapter)
|
58
|
+
app.run()
|
@@ -32,14 +32,14 @@ class Module(BaseCommand):
|
|
32
32
|
print(entity["definition"])
|
33
33
|
|
34
34
|
self.conversation.newline()
|
35
|
-
self.conversation.type(
|
35
|
+
self.conversation.type("If you want to persist these new entities run:\n")
|
36
36
|
self.conversation.type(
|
37
37
|
f"{Colors.command(self.configuration.command, 'merge')}\n"
|
38
38
|
)
|
39
39
|
|
40
40
|
self.conversation.newline()
|
41
41
|
self.conversation.type(
|
42
|
-
|
42
|
+
"Afterwards, you can modify any of these entities by running:\n"
|
43
43
|
)
|
44
44
|
self.conversation.type(
|
45
45
|
f"{Colors.command(self.configuration.command, 'modify', inputs=['[entity name]', '[instructions]'])}\n"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
from gibson.conf.Dependencies import Dependencies
|
2
|
+
|
3
|
+
|
4
|
+
def test_compute():
|
5
|
+
dependencies = Dependencies().compute()
|
6
|
+
|
7
|
+
assert dependencies.api == "fastapi==0.85"
|
8
|
+
assert dependencies.model == "sqlalchemy==1.4"
|
9
|
+
assert dependencies.revision == "alembic==1.12"
|
10
|
+
assert dependencies.schema == "pydantic==2.6"
|
11
|
+
assert dependencies.test == "pytest==7.1"
|
@@ -5,6 +5,7 @@ from gibson.command.Build import Build
|
|
5
5
|
from gibson.command.code.Code import Code
|
6
6
|
from gibson.command.Conf import Conf
|
7
7
|
from gibson.command.Count import Count
|
8
|
+
from gibson.command.Deploy import Deploy
|
8
9
|
from gibson.command.Dev import Dev
|
9
10
|
from gibson.command.Forget import Forget
|
10
11
|
from gibson.command.Help import Help
|
@@ -19,6 +20,7 @@ from gibson.command.Remove import Remove
|
|
19
20
|
from gibson.command.rename.Rename import Rename
|
20
21
|
from gibson.command.rewrite.Rewrite import Rewrite
|
21
22
|
from gibson.command.Show import Show
|
23
|
+
from gibson.command.Studio import Studio
|
22
24
|
from gibson.command.Tree import Tree
|
23
25
|
from gibson.command.Version import Version
|
24
26
|
from gibson.core.Configuration import Configuration
|
@@ -52,6 +54,8 @@ class CommandRouter:
|
|
52
54
|
command = Conf(self.configuration)
|
53
55
|
elif sys.argv[1] == "count":
|
54
56
|
command = Count(self.configuration)
|
57
|
+
elif sys.argv[1] == "deploy":
|
58
|
+
command = Deploy(self.configuration)
|
55
59
|
elif sys.argv[1] == "dev":
|
56
60
|
command = Dev(self.configuration)
|
57
61
|
elif sys.argv[1] == "forget":
|
@@ -78,6 +82,8 @@ class CommandRouter:
|
|
78
82
|
command = Rewrite(self.configuration, with_header=True)
|
79
83
|
elif sys.argv[1] == "show":
|
80
84
|
command = Show(self.configuration)
|
85
|
+
elif sys.argv[1] == "studio":
|
86
|
+
command = Studio(self.configuration)
|
81
87
|
elif sys.argv[1] == "tree":
|
82
88
|
command = Tree(self.configuration)
|
83
89
|
elif sys.argv[1] in ["q"]:
|
@@ -127,7 +127,7 @@ class Configuration:
|
|
127
127
|
test_file = f"{os.path.expandvars(path)}/gibsonai-test-file"
|
128
128
|
|
129
129
|
try:
|
130
|
-
with open(test_file, "w")
|
130
|
+
with open(test_file, "w"):
|
131
131
|
pass
|
132
132
|
|
133
133
|
os.remove(test_file)
|
@@ -237,6 +237,10 @@ class Configuration:
|
|
237
237
|
return self.settings[self.project.name]
|
238
238
|
|
239
239
|
def get_project_id(self):
|
240
|
+
project_id = os.getenv("GIBSONAI_PROJECT_ID")
|
241
|
+
if project_id:
|
242
|
+
return project_id
|
243
|
+
|
240
244
|
self.require_project()
|
241
245
|
return self.project.id
|
242
246
|
|