scylla-cqlsh 6.0.21__tar.gz → 6.0.24__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.
Potentially problematic release.
This version of scylla-cqlsh might be problematic. Click here for more details.
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/.github/workflows/build-push.yml +20 -18
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/.github/workflows/dockerhub-description.yml +1 -1
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/.gitignore +3 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/Dockerfile +2 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/PKG-INFO +15 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/README.md +10 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/SCYLLA-VERSION-GEN +1 -1
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/bin/cqlsh.py +67 -41
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlsh/cqlsh.py +67 -41
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/_version.py +2 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/copyutil.c +2070 -1963
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/control.template +2 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/redhat/scylla-cqlsh.spec +4 -3
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/install.sh +1 -3
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/run_cqlsh.py +3 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_cqlsh_output.py +2 -2
- scylla_cqlsh-6.0.24/pylib/cqlshlib/test/test_formatting.py +69 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/setup.py +3 -5
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/reloc/build_reloc.sh +3 -16
- scylla_cqlsh-6.0.24/renovate.json +6 -0
- scylla_cqlsh-6.0.24/requirements.txt +3 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scripts/create-relocatable-package.py +32 -4
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/PKG-INFO +15 -2
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/SOURCES.txt +2 -4
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/setup.py +3 -5
- scylla_cqlsh-6.0.21/bin/cqlsh +0 -99
- scylla_cqlsh-6.0.21/pylib/Dockerfile.ubuntu.py3 +0 -2
- scylla_cqlsh-6.0.21/pylib/Dockerfile.ubuntu.py37 +0 -2
- scylla_cqlsh-6.0.21/pylib/Dockerfile.ubuntu.py38 +0 -2
- scylla_cqlsh-6.0.21/requirements.txt +0 -5
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/.dockerignore +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/LICENSE.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlsh/__init__.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlsh/__main__.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/__init__.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/copyutil.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/cql3handling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/cqlhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/cqlshhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/displaying.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/formatting.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/helptopics.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/pylexotron.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/saferscanner.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/sslhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/tracing.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/util.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/cqlshlib/wcwidth.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/changelog.template +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian/compat +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian/copyright +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian/rules +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian/source/format +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian/source/options +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/dist/debian/debian_files_gen.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/install-dependencies.sh +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/README.asc +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cassandra-cqlsh-tests.sh +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/__init__.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/copyutil.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/cql3handling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/cqlhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/cqlshhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/displaying.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/formatting.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/helptopics.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/pylexotron.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/saferscanner.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/sslhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/__init__.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/ansi_colors.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/basecase.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/cassconnect.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/reserved_keywords.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider_creds +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider_with_pass +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/empty_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/full_plain_text_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/illegal_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/no_classname_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/partial_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_full_creds +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_legacy +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_partial_creds +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_partial_example +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_constants.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_copyutil.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_cql_parsing.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_cqlsh_completion.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_keyspace_init.cql +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_legacy_auth.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/test_unicode.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/test/winpty.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/tracing.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/util.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/cqlshlib/wcwidth.py +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pylib/requirements.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/pyproject.toml +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/reloc/build_deb.sh +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/reloc/build_rpm.sh +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/dependency_links.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/entry_points.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/requires.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/scylla_cqlsh.egg-info/top_level.txt +0 -0
- {scylla_cqlsh-6.0.21 → scylla_cqlsh-6.0.24}/setup.cfg +0 -0
|
@@ -20,16 +20,17 @@ jobs:
|
|
|
20
20
|
runs-on: ${{ matrix.os }}
|
|
21
21
|
strategy:
|
|
22
22
|
matrix:
|
|
23
|
-
os: [ubuntu-20.04, windows-2019, macos-
|
|
23
|
+
os: [ubuntu-20.04, windows-2019, macos-13, macos-14]
|
|
24
24
|
|
|
25
25
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
27
|
|
|
28
28
|
- name: Build wheels
|
|
29
|
-
uses: pypa/cibuildwheel@v2.
|
|
29
|
+
uses: pypa/cibuildwheel@v2.22.0
|
|
30
30
|
|
|
31
|
-
- uses: actions/upload-artifact@
|
|
31
|
+
- uses: actions/upload-artifact@v4
|
|
32
32
|
with:
|
|
33
|
+
name: wheels-${{ matrix.os }}
|
|
33
34
|
path: ./wheelhouse/*.whl
|
|
34
35
|
|
|
35
36
|
build_sdist:
|
|
@@ -37,14 +38,15 @@ jobs:
|
|
|
37
38
|
if: contains(github.event.pull_request.labels.*.name, 'test-build') || github.event_name == 'push' && endsWith(github.event.ref, 'scylla')
|
|
38
39
|
runs-on: ubuntu-latest
|
|
39
40
|
steps:
|
|
40
|
-
- uses: actions/checkout@
|
|
41
|
+
- uses: actions/checkout@v4
|
|
41
42
|
|
|
42
43
|
- name: Build sdist
|
|
43
44
|
run: |
|
|
44
45
|
pipx run build --sdist
|
|
45
46
|
|
|
46
|
-
- uses: actions/upload-artifact@
|
|
47
|
+
- uses: actions/upload-artifact@v4
|
|
47
48
|
with:
|
|
49
|
+
name: source-dist
|
|
48
50
|
path: dist/*.tar.gz
|
|
49
51
|
|
|
50
52
|
integration_test_scylla:
|
|
@@ -52,7 +54,7 @@ jobs:
|
|
|
52
54
|
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
53
55
|
runs-on: ubuntu-latest
|
|
54
56
|
steps:
|
|
55
|
-
- uses: actions/checkout@
|
|
57
|
+
- uses: actions/checkout@v4
|
|
56
58
|
|
|
57
59
|
- name: Start Scylla
|
|
58
60
|
run: |
|
|
@@ -67,6 +69,7 @@ jobs:
|
|
|
67
69
|
- name: pytest
|
|
68
70
|
run: |
|
|
69
71
|
pip install -r ./pylib/requirements.txt
|
|
72
|
+
./reloc/build_reloc.sh
|
|
70
73
|
pytest ./cqlshlib/test
|
|
71
74
|
|
|
72
75
|
integration_test_scylla_enterprise:
|
|
@@ -74,7 +77,7 @@ jobs:
|
|
|
74
77
|
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
75
78
|
runs-on: ubuntu-latest
|
|
76
79
|
steps:
|
|
77
|
-
- uses: actions/checkout@
|
|
80
|
+
- uses: actions/checkout@v4
|
|
78
81
|
|
|
79
82
|
- name: Start Scylla
|
|
80
83
|
run: |
|
|
@@ -89,6 +92,7 @@ jobs:
|
|
|
89
92
|
- name: pytest
|
|
90
93
|
run: |
|
|
91
94
|
pip install -r ./pylib/requirements.txt
|
|
95
|
+
./reloc/build_reloc.sh
|
|
92
96
|
pytest ./cqlshlib/test
|
|
93
97
|
|
|
94
98
|
integration_test_scylla_cloud_bundle:
|
|
@@ -96,17 +100,13 @@ jobs:
|
|
|
96
100
|
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
97
101
|
runs-on: ubuntu-latest
|
|
98
102
|
steps:
|
|
99
|
-
- uses: actions/checkout@
|
|
103
|
+
- uses: actions/checkout@v4
|
|
100
104
|
|
|
101
105
|
- name: Start Scylla cloud bundle setup with CCM
|
|
102
106
|
run: |
|
|
103
|
-
# install python2 is needed for scylla < 5.3, cause it bundle with old cqlsh
|
|
104
|
-
sudo apt update -y
|
|
105
|
-
sudo apt install -y python2
|
|
106
|
-
|
|
107
107
|
python3 -m pip install https://github.com/scylladb/scylla-ccm/archive/master.zip
|
|
108
108
|
|
|
109
|
-
ccm create test_sni -i 127.0.1. -n 1 --scylla --version release:
|
|
109
|
+
ccm create test_sni -i 127.0.1. -n 1 --scylla --version release:6.2
|
|
110
110
|
ccm start --sni-proxy --sni-port=8443
|
|
111
111
|
|
|
112
112
|
export CQL_TEST_BUNDLE_PATH=$(realpath ~/.ccm/test_sni/config_data.yaml)
|
|
@@ -116,6 +116,7 @@ jobs:
|
|
|
116
116
|
- name: pytest
|
|
117
117
|
run: |
|
|
118
118
|
pip install -r ./pylib/requirements.txt
|
|
119
|
+
./reloc/build_reloc.sh
|
|
119
120
|
pytest ./cqlshlib/test
|
|
120
121
|
|
|
121
122
|
integration_test_cassandra:
|
|
@@ -123,7 +124,7 @@ jobs:
|
|
|
123
124
|
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
124
125
|
runs-on: ubuntu-latest
|
|
125
126
|
steps:
|
|
126
|
-
- uses: actions/checkout@
|
|
127
|
+
- uses: actions/checkout@v4
|
|
127
128
|
|
|
128
129
|
- name: Start Scylla
|
|
129
130
|
run: |
|
|
@@ -138,6 +139,7 @@ jobs:
|
|
|
138
139
|
- name: pytest
|
|
139
140
|
run: |
|
|
140
141
|
pip install -r ./pylib/requirements.txt
|
|
142
|
+
./reloc/build_reloc.sh
|
|
141
143
|
pytest ./cqlshlib/test
|
|
142
144
|
|
|
143
145
|
docker:
|
|
@@ -145,7 +147,7 @@ jobs:
|
|
|
145
147
|
if: github.event_name == 'push'
|
|
146
148
|
steps:
|
|
147
149
|
- name: Checkout
|
|
148
|
-
uses: actions/checkout@
|
|
150
|
+
uses: actions/checkout@v4
|
|
149
151
|
|
|
150
152
|
- name: Set up QEMU
|
|
151
153
|
uses: docker/setup-qemu-action@v2
|
|
@@ -198,10 +200,10 @@ jobs:
|
|
|
198
200
|
# alternatively, to publish when a GitHub Release is created, use the following rule:
|
|
199
201
|
# if: github.event_name == 'release' && github.event.action == 'published'
|
|
200
202
|
steps:
|
|
201
|
-
- uses: actions/download-artifact@
|
|
203
|
+
- uses: actions/download-artifact@v4.1.8
|
|
202
204
|
with:
|
|
203
|
-
name: artifact
|
|
204
205
|
path: dist
|
|
206
|
+
merge-multiple: true
|
|
205
207
|
|
|
206
208
|
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
207
209
|
with:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
FROM python:3.
|
|
1
|
+
FROM python:3.13-slim-bullseye AS compile-image
|
|
2
2
|
|
|
3
3
|
WORKDIR /usr/src/app
|
|
4
4
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y install --no-install-recommends git gcc libc6-dev
|
|
@@ -7,7 +7,7 @@ COPY . .
|
|
|
7
7
|
RUN pip install --user .
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
FROM python:3.
|
|
10
|
+
FROM python:3.13-slim-bullseye AS build-image
|
|
11
11
|
|
|
12
12
|
# Upgrade packages to the latest, pip as well.
|
|
13
13
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y upgrade && apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: scylla-cqlsh
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.24
|
|
4
4
|
Summary: cqlsh is a Python-based command-line client for running CQL commands on a scylla cluster.
|
|
5
5
|
Home-page: https://github.com/scylladb/scylla-cqlsh
|
|
6
6
|
Author: Israel Fruchter
|
|
@@ -18,6 +18,9 @@ Requires-Python: >=3.6
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE.txt
|
|
20
20
|
Requires-Dist: scylla-driver>=3.25.10
|
|
21
|
+
Dynamic: classifier
|
|
22
|
+
Dynamic: license
|
|
23
|
+
Dynamic: requires-dist
|
|
21
24
|
|
|
22
25
|
# scylla-cqlsh
|
|
23
26
|
|
|
@@ -81,6 +84,16 @@ ccm start
|
|
|
81
84
|
pytest
|
|
82
85
|
```
|
|
83
86
|
|
|
87
|
+
## Build from source
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
pip install build
|
|
91
|
+
# optionally can disable the usage of cython
|
|
92
|
+
# export CQLSH_NO_CYTHON=true
|
|
93
|
+
python -m build -w
|
|
94
|
+
...
|
|
95
|
+
Successfully built scylla_cqlsh-6.0.24.dev0+gb09bc79361.d20240910-py3-none-any.whl
|
|
96
|
+
```
|
|
84
97
|
|
|
85
98
|
## Creation of the repo
|
|
86
99
|
|
|
@@ -60,6 +60,16 @@ ccm start
|
|
|
60
60
|
pytest
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
## Build from source
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install build
|
|
67
|
+
# optionally can disable the usage of cython
|
|
68
|
+
# export CQLSH_NO_CYTHON=true
|
|
69
|
+
python -m build -w
|
|
70
|
+
...
|
|
71
|
+
Successfully built scylla_cqlsh-6.0.24.dev0+gb09bc79361.d20240910-py3-none-any.whl
|
|
72
|
+
```
|
|
63
73
|
|
|
64
74
|
## Creation of the repo
|
|
65
75
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/python3
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
3
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
4
4
|
# or more contributor license agreements. See the NOTICE file
|
|
@@ -32,6 +32,7 @@ import sys
|
|
|
32
32
|
import traceback
|
|
33
33
|
import warnings
|
|
34
34
|
import webbrowser
|
|
35
|
+
import logging
|
|
35
36
|
from contextlib import contextmanager
|
|
36
37
|
from glob import glob
|
|
37
38
|
from io import StringIO
|
|
@@ -201,6 +202,8 @@ parser.add_option('-k', '--keyspace', help='Authenticate to the given keyspace.'
|
|
|
201
202
|
parser.add_option("-f", "--file", help="Execute commands from FILE, then exit")
|
|
202
203
|
parser.add_option('--debug', action='store_true',
|
|
203
204
|
help='Show additional debugging information')
|
|
205
|
+
parser.add_option('--driver-debug', action='store_true',
|
|
206
|
+
help='Show additional driver debugging information')
|
|
204
207
|
parser.add_option('--coverage', action='store_true',
|
|
205
208
|
help='Collect coverage data')
|
|
206
209
|
parser.add_option("--encoding", help="Specify a non-default encoding for output."
|
|
@@ -488,7 +491,7 @@ class Shell(cmd.Cmd):
|
|
|
488
491
|
if os.path.exists(self.hostname) and stat.S_ISSOCK(os.stat(self.hostname).st_mode):
|
|
489
492
|
kwargs['contact_points'] = (UnixSocketEndPoint(self.hostname),)
|
|
490
493
|
self.profiles[EXEC_PROFILE_DEFAULT].load_balancing_policy = WhiteListRoundRobinPolicy([UnixSocketEndPoint(self.hostname)])
|
|
491
|
-
else:
|
|
494
|
+
else:
|
|
492
495
|
kwargs['contact_points'] = (self.hostname,)
|
|
493
496
|
self.profiles[EXEC_PROFILE_DEFAULT].load_balancing_policy = WhiteListRoundRobinPolicy([self.hostname])
|
|
494
497
|
kwargs['port'] = self.port
|
|
@@ -1008,6 +1011,21 @@ class Shell(cmd.Cmd):
|
|
|
1008
1011
|
cmdword = tokens[0][1]
|
|
1009
1012
|
if cmdword == '?':
|
|
1010
1013
|
cmdword = 'help'
|
|
1014
|
+
|
|
1015
|
+
cmdword_lower = cmdword.lower()
|
|
1016
|
+
|
|
1017
|
+
# Describe statements get special treatment: we first want to
|
|
1018
|
+
# send the request to the server and only when it fails will
|
|
1019
|
+
# we attempt to perform it locally. That's why we don't want
|
|
1020
|
+
# to follow the logic below that starts with parsing.
|
|
1021
|
+
#
|
|
1022
|
+
# The reason for that is changes in Scylla may need to be reflected
|
|
1023
|
+
# in the grammar used in cqlsh. We want Scylla to be "independent"
|
|
1024
|
+
# in that regard, so unless necessary, we don't want to do the parsing
|
|
1025
|
+
# here.
|
|
1026
|
+
if cmdword_lower == 'describe' or cmdword_lower == 'desc':
|
|
1027
|
+
return self.perform_describe(cmdword, tokens, srcstr)
|
|
1028
|
+
|
|
1011
1029
|
custom_handler = getattr(self, 'do_' + cmdword.lower(), None)
|
|
1012
1030
|
if custom_handler:
|
|
1013
1031
|
parsed = cqlruleset.cql_whole_parse_tokens(tokens, srcstr=srcstr,
|
|
@@ -1497,8 +1515,8 @@ class Shell(cmd.Cmd):
|
|
|
1497
1515
|
self.print_recreate_keyspace(k, sys.stdout)
|
|
1498
1516
|
print('')
|
|
1499
1517
|
|
|
1500
|
-
|
|
1501
|
-
|
|
1518
|
+
# Precondition: the first token in `srcstr.lower()` is either `describe` or `desc`.
|
|
1519
|
+
def perform_describe(self, cmdword, tokens, srcstr):
|
|
1502
1520
|
"""
|
|
1503
1521
|
DESCRIBE [cqlsh only]
|
|
1504
1522
|
|
|
@@ -1589,10 +1607,8 @@ class Shell(cmd.Cmd):
|
|
|
1589
1607
|
where object can be either a keyspace or a table or an index or a materialized
|
|
1590
1608
|
view (in this order).
|
|
1591
1609
|
"""
|
|
1592
|
-
self._do_describe(parsed, force_client_side_describe=False)
|
|
1593
1610
|
|
|
1594
|
-
|
|
1595
|
-
if force_client_side_describe:
|
|
1611
|
+
def perform_describe_locally(parsed):
|
|
1596
1612
|
what = parsed.matched[1][1].lower()
|
|
1597
1613
|
if what == 'functions':
|
|
1598
1614
|
self.describe_functions_client(self.current_keyspace)
|
|
@@ -1650,40 +1666,45 @@ class Shell(cmd.Cmd):
|
|
|
1650
1666
|
if not name:
|
|
1651
1667
|
name = self.cql_unprotect_name(parsed.get_binding('mvname', None))
|
|
1652
1668
|
self.describe_object_client(ks, name)
|
|
1653
|
-
else:
|
|
1654
|
-
stmt = SimpleStatement(parsed.extract_orig(), consistency_level=cassandra.ConsistencyLevel.LOCAL_ONE,
|
|
1655
|
-
fetch_size=self.page_size if self.use_paging else None)
|
|
1656
|
-
future = self.session.execute_async(stmt)
|
|
1657
|
-
try:
|
|
1658
|
-
result = future.result()
|
|
1659
|
-
|
|
1660
|
-
what = parsed.matched[1][1].lower()
|
|
1661
|
-
|
|
1662
|
-
if what in ('columnfamilies', 'tables', 'types', 'functions', 'aggregates'):
|
|
1663
|
-
self.describe_list(result)
|
|
1664
|
-
elif what == 'keyspaces':
|
|
1665
|
-
self.describe_keyspaces(result)
|
|
1666
|
-
elif what == 'cluster':
|
|
1667
|
-
self.describe_cluster(result)
|
|
1668
|
-
elif what:
|
|
1669
|
-
self.describe_element(result)
|
|
1670
|
-
|
|
1671
|
-
except cassandra.protocol.SyntaxException:
|
|
1672
|
-
# Server doesn't support DESCRIBE query, retry with
|
|
1673
|
-
# client-side DESCRIBE implementation
|
|
1674
|
-
self._do_describe(parsed, force_client_side_describe=True)
|
|
1675
|
-
except CQL_ERRORS as err:
|
|
1676
|
-
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1677
|
-
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
1678
|
-
except Exception:
|
|
1679
|
-
import traceback
|
|
1680
|
-
self.printerr(traceback.format_exc())
|
|
1681
1669
|
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1670
|
+
stmt = SimpleStatement(srcstr, consistency_level=cassandra.ConsistencyLevel.LOCAL_ONE,
|
|
1671
|
+
fetch_size=self.page_size if self.use_paging else None)
|
|
1672
|
+
future = self.session.execute_async(stmt)
|
|
1673
|
+
try:
|
|
1674
|
+
result = future.result()
|
|
1675
|
+
|
|
1676
|
+
# The second token in the statement indicates which
|
|
1677
|
+
# kind of DESCRIBE we're performing.
|
|
1678
|
+
what = srcstr.split()[1].lower().rstrip(';')
|
|
1679
|
+
|
|
1680
|
+
if what in ('columnfamilies', 'tables', 'types', 'functions', 'aggregates'):
|
|
1681
|
+
self.describe_list(result)
|
|
1682
|
+
elif what == 'keyspaces':
|
|
1683
|
+
self.describe_keyspaces(result)
|
|
1684
|
+
elif what == 'cluster':
|
|
1685
|
+
self.describe_cluster(result)
|
|
1686
|
+
elif what:
|
|
1687
|
+
self.describe_element(result)
|
|
1688
|
+
|
|
1689
|
+
except cassandra.protocol.SyntaxException:
|
|
1690
|
+
# Server doesn't support DESCRIBE query, retry with
|
|
1691
|
+
# client-side DESCRIBE implementation
|
|
1692
|
+
parsed = cqlruleset.cql_whole_parse_tokens(tokens, srcstr=srcstr,
|
|
1693
|
+
startsymbol='cqlshCommand')
|
|
1694
|
+
if parsed and not parsed.remainder:
|
|
1695
|
+
return perform_describe_locally(parsed)
|
|
1696
|
+
else:
|
|
1697
|
+
return self.handle_parse_error(cmdword, tokens, parsed, srcstr)
|
|
1698
|
+
except CQL_ERRORS as err:
|
|
1699
|
+
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1700
|
+
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
1701
|
+
except Exception:
|
|
1702
|
+
import traceback
|
|
1703
|
+
self.printerr(traceback.format_exc())
|
|
1685
1704
|
|
|
1686
|
-
|
|
1705
|
+
if future:
|
|
1706
|
+
if future.warnings:
|
|
1707
|
+
self.print_warnings(future.warnings)
|
|
1687
1708
|
|
|
1688
1709
|
def describe_keyspaces(self, rows):
|
|
1689
1710
|
"""
|
|
@@ -2454,7 +2475,7 @@ def read_options(cmdlineargs, environment):
|
|
|
2454
2475
|
optvalues.timezone = option_with_default(configs.get, 'ui', 'timezone', None)
|
|
2455
2476
|
|
|
2456
2477
|
optvalues.debug = False
|
|
2457
|
-
|
|
2478
|
+
optvalues.driver_debug = False
|
|
2458
2479
|
optvalues.coverage = False
|
|
2459
2480
|
if 'CQLSH_COVERAGE' in environment.keys():
|
|
2460
2481
|
optvalues.coverage = True
|
|
@@ -2520,7 +2541,7 @@ def read_options(cmdlineargs, environment):
|
|
|
2520
2541
|
parser.error("Cannot use --cloudconf with hostname or port")
|
|
2521
2542
|
if options.ssl:
|
|
2522
2543
|
parser.error("Cannot use --cloudconf with --ssl. Cloud connection encryption parameters are provided by cloud config bundle.")
|
|
2523
|
-
|
|
2544
|
+
|
|
2524
2545
|
|
|
2525
2546
|
hostname = option_with_default(configs.get, 'connection', 'hostname', DEFAULT_HOST)
|
|
2526
2547
|
port = option_with_default(configs.get, 'connection', 'port', DEFAULT_PORT)
|
|
@@ -2607,6 +2628,11 @@ def save_history():
|
|
|
2607
2628
|
|
|
2608
2629
|
|
|
2609
2630
|
def main(options, hostname, port):
|
|
2631
|
+
if options.driver_debug:
|
|
2632
|
+
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
2633
|
+
stream=sys.stdout)
|
|
2634
|
+
logging.getLogger("cassandra").setLevel(logging.DEBUG)
|
|
2635
|
+
|
|
2610
2636
|
setup_cqlruleset(options.cqlmodule)
|
|
2611
2637
|
setup_cqldocs(options.cqlmodule)
|
|
2612
2638
|
init_history()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/python3
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
3
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
4
4
|
# or more contributor license agreements. See the NOTICE file
|
|
@@ -32,6 +32,7 @@ import sys
|
|
|
32
32
|
import traceback
|
|
33
33
|
import warnings
|
|
34
34
|
import webbrowser
|
|
35
|
+
import logging
|
|
35
36
|
from contextlib import contextmanager
|
|
36
37
|
from glob import glob
|
|
37
38
|
from io import StringIO
|
|
@@ -201,6 +202,8 @@ parser.add_option('-k', '--keyspace', help='Authenticate to the given keyspace.'
|
|
|
201
202
|
parser.add_option("-f", "--file", help="Execute commands from FILE, then exit")
|
|
202
203
|
parser.add_option('--debug', action='store_true',
|
|
203
204
|
help='Show additional debugging information')
|
|
205
|
+
parser.add_option('--driver-debug', action='store_true',
|
|
206
|
+
help='Show additional driver debugging information')
|
|
204
207
|
parser.add_option('--coverage', action='store_true',
|
|
205
208
|
help='Collect coverage data')
|
|
206
209
|
parser.add_option("--encoding", help="Specify a non-default encoding for output."
|
|
@@ -488,7 +491,7 @@ class Shell(cmd.Cmd):
|
|
|
488
491
|
if os.path.exists(self.hostname) and stat.S_ISSOCK(os.stat(self.hostname).st_mode):
|
|
489
492
|
kwargs['contact_points'] = (UnixSocketEndPoint(self.hostname),)
|
|
490
493
|
self.profiles[EXEC_PROFILE_DEFAULT].load_balancing_policy = WhiteListRoundRobinPolicy([UnixSocketEndPoint(self.hostname)])
|
|
491
|
-
else:
|
|
494
|
+
else:
|
|
492
495
|
kwargs['contact_points'] = (self.hostname,)
|
|
493
496
|
self.profiles[EXEC_PROFILE_DEFAULT].load_balancing_policy = WhiteListRoundRobinPolicy([self.hostname])
|
|
494
497
|
kwargs['port'] = self.port
|
|
@@ -1008,6 +1011,21 @@ class Shell(cmd.Cmd):
|
|
|
1008
1011
|
cmdword = tokens[0][1]
|
|
1009
1012
|
if cmdword == '?':
|
|
1010
1013
|
cmdword = 'help'
|
|
1014
|
+
|
|
1015
|
+
cmdword_lower = cmdword.lower()
|
|
1016
|
+
|
|
1017
|
+
# Describe statements get special treatment: we first want to
|
|
1018
|
+
# send the request to the server and only when it fails will
|
|
1019
|
+
# we attempt to perform it locally. That's why we don't want
|
|
1020
|
+
# to follow the logic below that starts with parsing.
|
|
1021
|
+
#
|
|
1022
|
+
# The reason for that is changes in Scylla may need to be reflected
|
|
1023
|
+
# in the grammar used in cqlsh. We want Scylla to be "independent"
|
|
1024
|
+
# in that regard, so unless necessary, we don't want to do the parsing
|
|
1025
|
+
# here.
|
|
1026
|
+
if cmdword_lower == 'describe' or cmdword_lower == 'desc':
|
|
1027
|
+
return self.perform_describe(cmdword, tokens, srcstr)
|
|
1028
|
+
|
|
1011
1029
|
custom_handler = getattr(self, 'do_' + cmdword.lower(), None)
|
|
1012
1030
|
if custom_handler:
|
|
1013
1031
|
parsed = cqlruleset.cql_whole_parse_tokens(tokens, srcstr=srcstr,
|
|
@@ -1497,8 +1515,8 @@ class Shell(cmd.Cmd):
|
|
|
1497
1515
|
self.print_recreate_keyspace(k, sys.stdout)
|
|
1498
1516
|
print('')
|
|
1499
1517
|
|
|
1500
|
-
|
|
1501
|
-
|
|
1518
|
+
# Precondition: the first token in `srcstr.lower()` is either `describe` or `desc`.
|
|
1519
|
+
def perform_describe(self, cmdword, tokens, srcstr):
|
|
1502
1520
|
"""
|
|
1503
1521
|
DESCRIBE [cqlsh only]
|
|
1504
1522
|
|
|
@@ -1589,10 +1607,8 @@ class Shell(cmd.Cmd):
|
|
|
1589
1607
|
where object can be either a keyspace or a table or an index or a materialized
|
|
1590
1608
|
view (in this order).
|
|
1591
1609
|
"""
|
|
1592
|
-
self._do_describe(parsed, force_client_side_describe=False)
|
|
1593
1610
|
|
|
1594
|
-
|
|
1595
|
-
if force_client_side_describe:
|
|
1611
|
+
def perform_describe_locally(parsed):
|
|
1596
1612
|
what = parsed.matched[1][1].lower()
|
|
1597
1613
|
if what == 'functions':
|
|
1598
1614
|
self.describe_functions_client(self.current_keyspace)
|
|
@@ -1650,40 +1666,45 @@ class Shell(cmd.Cmd):
|
|
|
1650
1666
|
if not name:
|
|
1651
1667
|
name = self.cql_unprotect_name(parsed.get_binding('mvname', None))
|
|
1652
1668
|
self.describe_object_client(ks, name)
|
|
1653
|
-
else:
|
|
1654
|
-
stmt = SimpleStatement(parsed.extract_orig(), consistency_level=cassandra.ConsistencyLevel.LOCAL_ONE,
|
|
1655
|
-
fetch_size=self.page_size if self.use_paging else None)
|
|
1656
|
-
future = self.session.execute_async(stmt)
|
|
1657
|
-
try:
|
|
1658
|
-
result = future.result()
|
|
1659
|
-
|
|
1660
|
-
what = parsed.matched[1][1].lower()
|
|
1661
|
-
|
|
1662
|
-
if what in ('columnfamilies', 'tables', 'types', 'functions', 'aggregates'):
|
|
1663
|
-
self.describe_list(result)
|
|
1664
|
-
elif what == 'keyspaces':
|
|
1665
|
-
self.describe_keyspaces(result)
|
|
1666
|
-
elif what == 'cluster':
|
|
1667
|
-
self.describe_cluster(result)
|
|
1668
|
-
elif what:
|
|
1669
|
-
self.describe_element(result)
|
|
1670
|
-
|
|
1671
|
-
except cassandra.protocol.SyntaxException:
|
|
1672
|
-
# Server doesn't support DESCRIBE query, retry with
|
|
1673
|
-
# client-side DESCRIBE implementation
|
|
1674
|
-
self._do_describe(parsed, force_client_side_describe=True)
|
|
1675
|
-
except CQL_ERRORS as err:
|
|
1676
|
-
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1677
|
-
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
1678
|
-
except Exception:
|
|
1679
|
-
import traceback
|
|
1680
|
-
self.printerr(traceback.format_exc())
|
|
1681
1669
|
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1670
|
+
stmt = SimpleStatement(srcstr, consistency_level=cassandra.ConsistencyLevel.LOCAL_ONE,
|
|
1671
|
+
fetch_size=self.page_size if self.use_paging else None)
|
|
1672
|
+
future = self.session.execute_async(stmt)
|
|
1673
|
+
try:
|
|
1674
|
+
result = future.result()
|
|
1675
|
+
|
|
1676
|
+
# The second token in the statement indicates which
|
|
1677
|
+
# kind of DESCRIBE we're performing.
|
|
1678
|
+
what = srcstr.split()[1].lower().rstrip(';')
|
|
1679
|
+
|
|
1680
|
+
if what in ('columnfamilies', 'tables', 'types', 'functions', 'aggregates'):
|
|
1681
|
+
self.describe_list(result)
|
|
1682
|
+
elif what == 'keyspaces':
|
|
1683
|
+
self.describe_keyspaces(result)
|
|
1684
|
+
elif what == 'cluster':
|
|
1685
|
+
self.describe_cluster(result)
|
|
1686
|
+
elif what:
|
|
1687
|
+
self.describe_element(result)
|
|
1688
|
+
|
|
1689
|
+
except cassandra.protocol.SyntaxException:
|
|
1690
|
+
# Server doesn't support DESCRIBE query, retry with
|
|
1691
|
+
# client-side DESCRIBE implementation
|
|
1692
|
+
parsed = cqlruleset.cql_whole_parse_tokens(tokens, srcstr=srcstr,
|
|
1693
|
+
startsymbol='cqlshCommand')
|
|
1694
|
+
if parsed and not parsed.remainder:
|
|
1695
|
+
return perform_describe_locally(parsed)
|
|
1696
|
+
else:
|
|
1697
|
+
return self.handle_parse_error(cmdword, tokens, parsed, srcstr)
|
|
1698
|
+
except CQL_ERRORS as err:
|
|
1699
|
+
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1700
|
+
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
1701
|
+
except Exception:
|
|
1702
|
+
import traceback
|
|
1703
|
+
self.printerr(traceback.format_exc())
|
|
1685
1704
|
|
|
1686
|
-
|
|
1705
|
+
if future:
|
|
1706
|
+
if future.warnings:
|
|
1707
|
+
self.print_warnings(future.warnings)
|
|
1687
1708
|
|
|
1688
1709
|
def describe_keyspaces(self, rows):
|
|
1689
1710
|
"""
|
|
@@ -2454,7 +2475,7 @@ def read_options(cmdlineargs, environment):
|
|
|
2454
2475
|
optvalues.timezone = option_with_default(configs.get, 'ui', 'timezone', None)
|
|
2455
2476
|
|
|
2456
2477
|
optvalues.debug = False
|
|
2457
|
-
|
|
2478
|
+
optvalues.driver_debug = False
|
|
2458
2479
|
optvalues.coverage = False
|
|
2459
2480
|
if 'CQLSH_COVERAGE' in environment.keys():
|
|
2460
2481
|
optvalues.coverage = True
|
|
@@ -2520,7 +2541,7 @@ def read_options(cmdlineargs, environment):
|
|
|
2520
2541
|
parser.error("Cannot use --cloudconf with hostname or port")
|
|
2521
2542
|
if options.ssl:
|
|
2522
2543
|
parser.error("Cannot use --cloudconf with --ssl. Cloud connection encryption parameters are provided by cloud config bundle.")
|
|
2523
|
-
|
|
2544
|
+
|
|
2524
2545
|
|
|
2525
2546
|
hostname = option_with_default(configs.get, 'connection', 'hostname', DEFAULT_HOST)
|
|
2526
2547
|
port = option_with_default(configs.get, 'connection', 'port', DEFAULT_PORT)
|
|
@@ -2607,6 +2628,11 @@ def save_history():
|
|
|
2607
2628
|
|
|
2608
2629
|
|
|
2609
2630
|
def main(options, hostname, port):
|
|
2631
|
+
if options.driver_debug:
|
|
2632
|
+
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
2633
|
+
stream=sys.stdout)
|
|
2634
|
+
logging.getLogger("cassandra").setLevel(logging.DEBUG)
|
|
2635
|
+
|
|
2610
2636
|
setup_cqlruleset(options.cqlmodule)
|
|
2611
2637
|
setup_cqldocs(options.cqlmodule)
|
|
2612
2638
|
init_history()
|