recce-nightly 1.9.0.20250623__py3-none-any.whl → 1.10.0.20250625__py3-none-any.whl
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 recce-nightly might be problematic. Click here for more details.
- recce/VERSION +1 -1
- recce/cli.py +38 -2
- recce/config.py +1 -1
- recce/connect_to_cloud.py +138 -0
- recce/data/404.html +2 -2
- recce/data/_next/static/chunks/{92-7ab55ae02606193c.js → 92-607cd1af83c41f43.js} +1 -1
- recce/data/_next/static/chunks/app/page-da6e046a8235dbfc.js +1 -0
- recce/data/auth_callback.html +68 -0
- recce/data/index.html +2 -2
- recce/data/index.txt +3 -3
- recce/server.py +23 -3
- recce/state.py +3 -2
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/METADATA +2 -2
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/RECORD +21 -18
- tests/test_connect_to_cloud.py +82 -0
- recce/data/_next/static/chunks/app/page-59241c42b7dd4fcf.js +0 -1
- /recce/data/_next/static/{WrRUb3nV8BhAZG_R8kVma → abCX3x3UoIdRLEDWxx4xd}/_buildManifest.js +0 -0
- /recce/data/_next/static/{WrRUb3nV8BhAZG_R8kVma → abCX3x3UoIdRLEDWxx4xd}/_ssgManifest.js +0 -0
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/WHEEL +0 -0
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/entry_points.txt +0 -0
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/licenses/LICENSE +0 -0
- {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.10.0.20250625.dist-info}/top_level.txt +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
recce/VERSION,sha256=
|
|
1
|
+
recce/VERSION,sha256=OPRTyx2o-EC6wUdTSX8AunguCb0Km1k-wtrnviGPr_k,16
|
|
2
2
|
recce/__init__.py,sha256=yNb0QT-yoStex0VZALNJvUwtPLommoVCStcow31guqo,2392
|
|
3
3
|
recce/artifact.py,sha256=tKQAHSrLRjiR3ppOI4sym8SxYiiLTuD3DPMYh4DWQdA,6506
|
|
4
|
-
recce/cli.py,sha256=
|
|
5
|
-
recce/config.py,sha256=
|
|
4
|
+
recce/cli.py,sha256=sb9h1Wp48cjp7EWv-lnodmSk78twSJA5YAvJ7z6-dAw,40710
|
|
5
|
+
recce/config.py,sha256=A4CbKcIdwQ4A9Q2ba4riHUshVQw1D-qDelMOdlt2khU,4661
|
|
6
|
+
recce/connect_to_cloud.py,sha256=_SkX2pdyXa9FNyaHvItyYVPF2nZxy2JnCyd_o_psh2Y,4750
|
|
6
7
|
recce/core.py,sha256=3Nv2QWBGz3yj1QI0wyPNRaDj1rH80DsX2qRQn9ydpg0,10747
|
|
7
8
|
recce/diff.py,sha256=L2_bzQ3__PO-0aeir8PHF8FvSOUmQ8WcDXgML1-mHdY,748
|
|
8
9
|
recce/exceptions.py,sha256=SclQ678GrHGjw7p_ZFJ3vZaL_yMU5xABeIAm2u_W2bk,592
|
|
@@ -10,8 +11,8 @@ recce/git.py,sha256=8Eg-6NzL-KjA3rT-ibbAyaCwGlzV0JqH3yGikrJNMDA,2344
|
|
|
10
11
|
recce/github.py,sha256=PEpM6ZRiinsPbXSWj4aJCKbZrN1jUXzpzAfJq_CGah4,7420
|
|
11
12
|
recce/pull_request.py,sha256=aW0B1NE2LUKTam1S4TQ7smXB9KLE1DV8GnyBqNXA6j8,3832
|
|
12
13
|
recce/run.py,sha256=LAjbWUF8loZ9cL25d_maQELwROHHmfaFn7iqFRy5O1o,13567
|
|
13
|
-
recce/server.py,sha256=
|
|
14
|
-
recce/state.py,sha256=
|
|
14
|
+
recce/server.py,sha256=RFbZQP9RAsbtGEgtP-ltLc9ZvBZZM6T9qEn9nIwh3HY,20944
|
|
15
|
+
recce/state.py,sha256=fOzy09rn96XqOQuA0RcMW-k2KpjNVH9FQhihEXLvlA0,30634
|
|
15
16
|
recce/summary.py,sha256=Mbxvxr9KazR5o9icqhhjiGHsoAiWxQU4PdN7HytBJ1c,19154
|
|
16
17
|
recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
18
|
recce/adapter/base.py,sha256=T_JNeLHgiHSaegw-DbrvHOaYjMyZcjj2Qtg5cWh_fco,3548
|
|
@@ -23,12 +24,13 @@ recce/apis/check_api.py,sha256=KMCXSMl1qqzx2jQgRqCrD4j_cY3EHBbM3H2-t-6saAU,6227
|
|
|
23
24
|
recce/apis/check_func.py,sha256=gktbCcyk3WGvWRJJ-wDnwv7NrIny2nTHWLl1-kdiVRo,4183
|
|
24
25
|
recce/apis/run_api.py,sha256=eOaxOxXDkH59uqGCd4blld7edavUx7JU_DCd2WAYrL8,3416
|
|
25
26
|
recce/apis/run_func.py,sha256=6wC8TDU-h7TLr2VZH7HNsWaUVlQ9HBN5N_dwqfi4lMY,7440
|
|
26
|
-
recce/data/404.html,sha256=
|
|
27
|
+
recce/data/404.html,sha256=UdzrC9_oa4co5DMQq0RUcPz7DGbXKyqnSi6yVhwL9Do,26574
|
|
28
|
+
recce/data/auth_callback.html,sha256=2QnhHRc2eLPiaxCYl-HndNsGDGmM6jZAMbqoMlehal4,94783
|
|
27
29
|
recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
28
|
-
recce/data/index.html,sha256=
|
|
29
|
-
recce/data/index.txt,sha256=
|
|
30
|
-
recce/data/_next/static/
|
|
31
|
-
recce/data/_next/static/
|
|
30
|
+
recce/data/index.html,sha256=O9LAzdl-b1ys9yxjr2mVqFZ6D1zYc0fNZnegI5IhTu8,42155
|
|
31
|
+
recce/data/index.txt,sha256=gDl4Z1wxKosGQ_29sYbNzFLziX3C9ZDy84O5VoLG-XU,4462
|
|
32
|
+
recce/data/_next/static/abCX3x3UoIdRLEDWxx4xd/_buildManifest.js,sha256=sjy6FmOqWlkXWmod2oXwqKv7L582_MTycs9THCE6G-c,224
|
|
33
|
+
recce/data/_next/static/abCX3x3UoIdRLEDWxx4xd/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
32
34
|
recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js,sha256=2zRVkcaI906lYW_aM2mNqnt2HbLxmUaYFjft7eNcuTQ,310191
|
|
33
35
|
recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js,sha256=wTH-_PbE1XdP-wmGaQStF5y2yH6XcZXeYX_hDaGMfh4,153777
|
|
34
36
|
recce/data/_next/static/chunks/217-879a84d70f7a907c.js,sha256=kNJkLcwaIlWnQY7akbrFimbcHHdK6lMVTbTYCNKXIjc,124102
|
|
@@ -45,7 +47,7 @@ recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js,sha256=NfgBK9op5SzWm
|
|
|
45
47
|
recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js,sha256=ewMLioJbTUUDeqV0J9NDKE0Bj-XCFg8QqMLOmLPgpcc,777
|
|
46
48
|
recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js,sha256=qKkzgWsNqSrn-PUGBloZopIlacGCy8hH0BZA9tpqQoQ,172837
|
|
47
49
|
recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js,sha256=NPGWvqv8Y_rbNaKxYnoq16mi6FDoQHxOOjpH4tJnUkE,119972
|
|
48
|
-
recce/data/_next/static/chunks/92-
|
|
50
|
+
recce/data/_next/static/chunks/92-607cd1af83c41f43.js,sha256=0ThWZlPjuwxRRFkwB0qN9Q6QdMxJzdGhuIyLAOHO4lw,80466
|
|
49
51
|
recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js,sha256=lV-V6BYpd4HEt-pFtT03G6qQD2Wa-2L_jp6aH9VgoeM,4177
|
|
50
52
|
recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js,sha256=qzgyjrX5PdPKGeSwb-Gh0RfM_NEF2zjMvMK14ixq228,864
|
|
51
53
|
recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js,sha256=s2EZ59zDBJDmy2kh0cHkQ_pAWxiQr_yCPlnttCj0x_k,572
|
|
@@ -60,7 +62,7 @@ recce/data/_next/static/chunks/main-b5b3ae20a1405261.js,sha256=28hJH2VsiTdxZGZrQ
|
|
|
60
62
|
recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
61
63
|
recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js,sha256=lcK59Juk4EZqi3jIsY35lQqAlB5TLTPy-neri0BIZL0,3929
|
|
62
64
|
recce/data/_next/static/chunks/app/layout-177a410a97e0d018.js,sha256=Hmy6Lmrt4GPYYa0f1qhxTiMj4K47PCmkAkrm1Rbnd7w,1731
|
|
63
|
-
recce/data/_next/static/chunks/app/page-
|
|
65
|
+
recce/data/_next/static/chunks/app/page-da6e046a8235dbfc.js,sha256=pgWvu9fFwA7namOsi52ywwJQlJjjVNjG9-9F3iuTEAk,156424
|
|
64
66
|
recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js,sha256=_l3JSAaIJxInWqyqdDsobkhJ3JP6DZuwXkw-MsRakQA,1751
|
|
65
67
|
recce/data/_next/static/chunks/pages/_app-437c455677d62394.js,sha256=FaxURD1wuAmnMU1zJlsQKT9rRdfuspR7yx7BckcoCLY,284
|
|
66
68
|
recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js,sha256=0Vzx_hCqw4RcptsFzHfUigpI13sToBnFw38owTP7ruo,250
|
|
@@ -116,10 +118,11 @@ recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,
|
|
|
116
118
|
recce/util/recce_cloud.py,sha256=YgRs9PhER3EhESaJInJo6mf3uwvnp0OavHBY1OYHPXw,7958
|
|
117
119
|
recce/util/singleton.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
|
118
120
|
recce/yaml/__init__.py,sha256=EgXYlFeJZchatUClRDXbIC5Oqb2_nBvB2NqItYVihio,1292
|
|
119
|
-
recce_nightly-1.
|
|
121
|
+
recce_nightly-1.10.0.20250625.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
|
|
120
122
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
123
|
tests/test_cli.py,sha256=_ikuZW4bYEGyj5A_V7nDSyBa1tVZqc0TVm-TJ0rEYVo,5467
|
|
122
124
|
tests/test_config.py,sha256=ODDFe_XF6gphmSmmc422dGLBaCCmG-IjDzTkD5SJsJE,1557
|
|
125
|
+
tests/test_connect_to_cloud.py,sha256=b2fgV8L1iQBdEwh6RumMsIIyYg7GtMOMRz1dvE3WRPg,3059
|
|
123
126
|
tests/test_core.py,sha256=jfn9dV-k89O2TywUYHmMTSdvyfBUips1ful1cIY2oFY,799
|
|
124
127
|
tests/test_dbt.py,sha256=VzXvdoJNwwEmKNhJJDNB1N_qZYwp1aoJQ1sLcoyRBmk,1316
|
|
125
128
|
tests/test_pull_request.py,sha256=HmZo5MoDaoKSgPwbLxJ3Ur3ajZ7IxhkzJxaOmhg6bwE,3562
|
|
@@ -144,8 +147,8 @@ tests/tasks/test_row_count.py,sha256=21PaP2aq-x8-pqwzWHRT1sixhQ8g3CQNRWOZTTmbK0s
|
|
|
144
147
|
tests/tasks/test_schema.py,sha256=7ds4Vx8ixaiIWDR49Lvjem4xlPkRP1cXazDRY3roUak,3121
|
|
145
148
|
tests/tasks/test_top_k.py,sha256=YR_GS__DJsbDlQVaEEdJvNQ3fh1VmV5Nb3G7lb0r6YM,1779
|
|
146
149
|
tests/tasks/test_valuediff.py,sha256=_xQJGgxsXoy2NYk_Z6Hsw2FlVh6zk2nN_iUueyRN1e8,2046
|
|
147
|
-
recce_nightly-1.
|
|
148
|
-
recce_nightly-1.
|
|
149
|
-
recce_nightly-1.
|
|
150
|
-
recce_nightly-1.
|
|
151
|
-
recce_nightly-1.
|
|
150
|
+
recce_nightly-1.10.0.20250625.dist-info/METADATA,sha256=7mItLT4k75wBtKN04-E_OJX5gllsTv9iLmxFE8aI1OE,9367
|
|
151
|
+
recce_nightly-1.10.0.20250625.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
152
|
+
recce_nightly-1.10.0.20250625.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
|
|
153
|
+
recce_nightly-1.10.0.20250625.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
|
|
154
|
+
recce_nightly-1.10.0.20250625.dist-info/RECORD,,
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import unittest
|
|
3
|
+
from unittest.mock import patch
|
|
4
|
+
from urllib.parse import quote
|
|
5
|
+
|
|
6
|
+
from cryptography.hazmat.primitives import hashes
|
|
7
|
+
from cryptography.hazmat.primitives.asymmetric import padding
|
|
8
|
+
|
|
9
|
+
from recce.connect_to_cloud import (
|
|
10
|
+
connect_to_cloud_background_task,
|
|
11
|
+
decrypt_code,
|
|
12
|
+
generate_key_pair,
|
|
13
|
+
is_callback_server_running,
|
|
14
|
+
prepare_connection_url,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ConnectToCloudTests(unittest.TestCase):
|
|
19
|
+
|
|
20
|
+
def test_generate_key_pair(self):
|
|
21
|
+
private_key, public_key = generate_key_pair()
|
|
22
|
+
self.assertIsNotNone(private_key)
|
|
23
|
+
self.assertIsNotNone(public_key)
|
|
24
|
+
self.assertEqual(private_key.public_key().public_numbers(), public_key.public_numbers())
|
|
25
|
+
|
|
26
|
+
def test_prepare_connection_url(self):
|
|
27
|
+
_, public_key = generate_key_pair()
|
|
28
|
+
url, port = prepare_connection_url(public_key)
|
|
29
|
+
self.assertIn("connect?", url)
|
|
30
|
+
self.assertTrue(port >= 10000 and port <= 15000)
|
|
31
|
+
|
|
32
|
+
def test_decrypt_code(self):
|
|
33
|
+
private_key, public_key = generate_key_pair()
|
|
34
|
+
test_string = "recce-api-token-123"
|
|
35
|
+
ciphertext = public_key.encrypt(
|
|
36
|
+
test_string.encode(),
|
|
37
|
+
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None),
|
|
38
|
+
)
|
|
39
|
+
b64_ciphertext = base64.b64encode(ciphertext).decode()
|
|
40
|
+
result = decrypt_code(private_key, b64_ciphertext)
|
|
41
|
+
self.assertEqual(result, test_string)
|
|
42
|
+
|
|
43
|
+
@patch("recce.connect_to_cloud.update_recce_api_token")
|
|
44
|
+
@patch("recce.connect_to_cloud.update_onboarding_state")
|
|
45
|
+
@patch("recce.connect_to_cloud.RecceCloud")
|
|
46
|
+
def test_handle_callback_request_success(self, mock_recce_cloud, mock_update_state, mock_update_token):
|
|
47
|
+
private_key, public_key = generate_key_pair()
|
|
48
|
+
|
|
49
|
+
# Prepare encrypted token
|
|
50
|
+
test_token = "recce-api-token-xyz"
|
|
51
|
+
ciphertext = public_key.encrypt(
|
|
52
|
+
test_token.encode(),
|
|
53
|
+
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None),
|
|
54
|
+
)
|
|
55
|
+
encrypted_b64 = base64.b64encode(ciphertext).decode()
|
|
56
|
+
|
|
57
|
+
# Set up mocks
|
|
58
|
+
mock_recce_cloud.return_value.verify_token.return_value = True
|
|
59
|
+
|
|
60
|
+
from recce.connect_to_cloud import handle_callback_request
|
|
61
|
+
|
|
62
|
+
result = handle_callback_request(f"code={quote(encrypted_b64)}", private_key)
|
|
63
|
+
|
|
64
|
+
assert result == test_token
|
|
65
|
+
mock_update_token.assert_called_once_with(test_token)
|
|
66
|
+
mock_update_state.assert_called_once_with(test_token, False)
|
|
67
|
+
|
|
68
|
+
def test_is_callback_server_running(self):
|
|
69
|
+
# Should return False by default
|
|
70
|
+
self.assertFalse(is_callback_server_running())
|
|
71
|
+
|
|
72
|
+
@patch("recce.connect_to_cloud.run_one_time_http_server")
|
|
73
|
+
def test_connect_to_cloud_background_task_runs(self, mock_server):
|
|
74
|
+
private_key, public_key = generate_key_pair()
|
|
75
|
+
url, port = prepare_connection_url(public_key)
|
|
76
|
+
|
|
77
|
+
connect_to_cloud_background_task(private_key, port, url)
|
|
78
|
+
mock_server.assert_called_once()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
unittest.main()
|