roksta 0.2.7__cp311-cp311-win_amd64.whl → 0.3.2__cp311-cp311-win_amd64.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 roksta might be problematic. Click here for more details.
- roksta/__init__.cp311-win_amd64.pyd +0 -0
- roksta/ai/__init__.cp311-win_amd64.pyd +0 -0
- roksta/ai/call_ai.cp311-win_amd64.pyd +0 -0
- roksta/ai/gemini.cp311-win_amd64.pyd +0 -0
- roksta/ai/generic.cp311-win_amd64.pyd +0 -0
- roksta/ai/llm.cp311-win_amd64.pyd +0 -0
- roksta/ai/openai.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/__init__.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/delete_file.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/edit_file.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/final_response.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/get_file_summaries.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/read_file.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/regex_replace.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/shell_any.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/shell_limited.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/tool_defs.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/tool_utils.cp311-win_amd64.pyd +0 -0
- roksta/ai/tools/write_file.cp311-win_amd64.pyd +0 -0
- roksta/analytics.cp311-win_amd64.pyd +0 -0
- roksta/balance.cp311-win_amd64.pyd +0 -0
- roksta/build_project.cp311-win_amd64.pyd +0 -0
- roksta/chat_workflow.cp311-win_amd64.pyd +0 -0
- roksta/check_for_updates.cp311-win_amd64.pyd +0 -0
- roksta/checkpoints.cp311-win_amd64.pyd +0 -0
- roksta/clarify_goal.cp311-win_amd64.pyd +0 -0
- roksta/codebase_listing.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/__init__.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_activate_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_add_funds_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_auto_charge_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_auto_commit_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_building_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_chat_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_dev_rate_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_feedback_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_goal_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_help_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_init_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_linting_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_login_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_logout_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_payment_details_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_quit_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_redeem_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_request_activation_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_testing_command.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers/handle_usage_command.cp311-win_amd64.pyd +0 -0
- roksta/create_default_config.cp311-win_amd64.pyd +0 -0
- roksta/default_config.cp311-win_amd64.pyd +0 -0
- roksta/enums.cp311-win_amd64.pyd +0 -0
- roksta/env.cp311-win_amd64.pyd +0 -0
- roksta/extended_text_area.cp311-win_amd64.pyd +0 -0
- roksta/firebase.cp311-win_amd64.pyd +0 -0
- roksta/firebase_auth_web.cp311-win_amd64.pyd +0 -0
- roksta/firebase_config.cp311-win_amd64.pyd +0 -0
- roksta/fix_tests.cp311-win_amd64.pyd +0 -0
- roksta/gen_codebase_summaries.cp311-win_amd64.pyd +0 -0
- roksta/gen_one_line_goal.cp311-win_amd64.pyd +0 -0
- roksta/get_codebase_structure.cp311-win_amd64.pyd +0 -0
- roksta/get_failing_tests.cp311-win_amd64.pyd +0 -0
- roksta/goal_workflow.cp311-win_amd64.pyd +0 -0
- roksta/init_codebase.cp311-win_amd64.pyd +0 -0
- roksta/lint_code.cp311-win_amd64.pyd +0 -0
- roksta/logger.cp311-win_amd64.pyd +0 -0
- roksta/main.cp311-win_amd64.pyd +0 -0
- roksta/make_issue.cp311-win_amd64.pyd +0 -0
- roksta/new_features.cp311-win_amd64.pyd +0 -0
- roksta/parse_readme.cp311-win_amd64.pyd +0 -0
- roksta/propose_solution.cp311-win_amd64.pyd +0 -0
- roksta/response_formats.cp311-win_amd64.pyd +0 -0
- roksta/rewrite_goal.cp311-win_amd64.pyd +0 -0
- roksta/roksta.cp311-win_amd64.pyd +0 -0
- roksta/run_cli_goal.cp311-win_amd64.pyd +0 -0
- roksta/select_files.cp311-win_amd64.pyd +0 -0
- roksta/tips.cp311-win_amd64.pyd +0 -0
- roksta/utils.cp311-win_amd64.pyd +0 -0
- roksta/write_code.cp311-win_amd64.pyd +0 -0
- {roksta-0.2.7.dist-info → roksta-0.3.2.dist-info}/METADATA +2 -1
- roksta-0.3.2.dist-info/RECORD +121 -0
- tests/conftest.py +42 -0
- tests/functions/{api_v0_01 → api_v1_01}/__init__.py +1 -1
- tests/functions/{api_v0_01 → api_v1_01}/test__analytics.py +2 -3
- tests/functions/{api_v0_01 → api_v1_01}/test__gemini_proxy.py +51 -6
- tests/functions/{api_v0_01 → api_v1_01}/test__generic_proxy.py +31 -2
- tests/functions/{api_v0_01 → api_v1_01}/test__get_payment_details.py +2 -2
- tests/functions/{api_v0_01 → api_v1_01}/test__openai_proxy.py +50 -14
- tests/functions/{api_v0_01 → api_v1_01}/test__redeem_credit_code.py +2 -2
- tests/functions/{api_v0_01 → api_v1_01}/test__sync_emails.py +3 -2
- tests/functions/{api_v0_01 → api_v1_01}/test__take_payment.py +2 -2
- tests/functions/{api_v0_01 → api_v1_01}/test__use_activation_code.py +3 -2
- tests/functions/api_v1_02/__init__.py +2 -0
- tests/functions/api_v1_02/test__analytics.py +416 -0
- tests/functions/api_v1_02/test__gemini_proxy.py +352 -0
- tests/functions/api_v1_02/test__generic_proxy.py +428 -0
- tests/functions/api_v1_02/test__get_payment_details.py +356 -0
- tests/functions/api_v1_02/test__openai_proxy.py +449 -0
- tests/functions/api_v1_02/test__redeem_credit_code.py +167 -0
- tests/functions/api_v1_02/test__sync_emails.py +325 -0
- tests/functions/api_v1_02/test__take_payment.py +491 -0
- tests/functions/api_v1_02/test__use_activation_code.py +438 -0
- tests/functions/api_v1_02/test_proxy_keyword_replacement.py +557 -0
- tests/functions/api_v1_02/test_replace_keywords.py +74 -0
- tests/functions/test_utils.py +484 -0
- roksta/ai/tools.cp311-win_amd64.pyd +0 -0
- roksta/command_handlers.cp311-win_amd64.pyd +0 -0
- roksta-0.2.7.dist-info/RECORD +0 -78
- tests/functions/test_utils_functions.py +0 -222
- {roksta-0.2.7.dist-info → roksta-0.3.2.dist-info}/WHEEL +0 -0
- {roksta-0.2.7.dist-info → roksta-0.3.2.dist-info}/entry_points.txt +0 -0
- {roksta-0.2.7.dist-info → roksta-0.3.2.dist-info}/top_level.txt +0 -0
- /tests/functions/{test_main_functions.py → test_main.py} +0 -0
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import importlib
|
|
2
|
-
import sys
|
|
3
|
-
import types
|
|
4
|
-
import json
|
|
5
|
-
import pytest
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def _setup_basic_stubs(secret_data=b'MY_SECRET', secret_side_effect=None, auth_verify=lambda token: {'uid': 'u1'}):
|
|
9
|
-
"""Install minimal stub modules for google.cloud.secretmanager, firebase_functions and firebase_admin.
|
|
10
|
-
Returns a dict of original sys.modules entries for cleanup.
|
|
11
|
-
"""
|
|
12
|
-
orig = {}
|
|
13
|
-
names = [
|
|
14
|
-
'google',
|
|
15
|
-
'google.cloud',
|
|
16
|
-
'google.cloud.secretmanager',
|
|
17
|
-
'firebase_functions',
|
|
18
|
-
'firebase_admin',
|
|
19
|
-
'firebase_admin.auth',
|
|
20
|
-
]
|
|
21
|
-
for name in names:
|
|
22
|
-
orig[name] = sys.modules.get(name)
|
|
23
|
-
|
|
24
|
-
# google package and submodules
|
|
25
|
-
google_mod = types.ModuleType('google')
|
|
26
|
-
cloud_mod = types.ModuleType('google.cloud')
|
|
27
|
-
secretmanager_mod = types.ModuleType('google.cloud.secretmanager')
|
|
28
|
-
|
|
29
|
-
class _Payload:
|
|
30
|
-
def __init__(self, data):
|
|
31
|
-
self.data = data
|
|
32
|
-
|
|
33
|
-
class _Response:
|
|
34
|
-
def __init__(self, data):
|
|
35
|
-
self.payload = _Payload(data)
|
|
36
|
-
|
|
37
|
-
class SecretManagerServiceClient:
|
|
38
|
-
def access_secret_version(self, request=None):
|
|
39
|
-
if secret_side_effect:
|
|
40
|
-
# raise the provided exception instance for testing
|
|
41
|
-
raise secret_side_effect
|
|
42
|
-
return _Response(secret_data)
|
|
43
|
-
|
|
44
|
-
secretmanager_mod.SecretManagerServiceClient = SecretManagerServiceClient
|
|
45
|
-
cloud_mod.secretmanager = secretmanager_mod
|
|
46
|
-
google_mod.cloud = cloud_mod
|
|
47
|
-
|
|
48
|
-
sys.modules['google'] = google_mod
|
|
49
|
-
sys.modules['google.cloud'] = cloud_mod
|
|
50
|
-
sys.modules['google.cloud.secretmanager'] = secretmanager_mod
|
|
51
|
-
|
|
52
|
-
# firebase_functions stub with a Response type expected by utils.create_json_response
|
|
53
|
-
firebase_functions_mod = types.ModuleType('firebase_functions')
|
|
54
|
-
|
|
55
|
-
class FakeResponse:
|
|
56
|
-
def __init__(self, response=None, mimetype=None, status=200, **kwargs):
|
|
57
|
-
self.status_code = status
|
|
58
|
-
if isinstance(response, (dict, list)):
|
|
59
|
-
self._body_text = json.dumps(response)
|
|
60
|
-
else:
|
|
61
|
-
self._body_text = '' if response is None else response
|
|
62
|
-
self.headers = kwargs.get('headers', {})
|
|
63
|
-
|
|
64
|
-
def get_data(self, as_text=False):
|
|
65
|
-
if as_text:
|
|
66
|
-
return self._body_text
|
|
67
|
-
return self._body_text.encode('utf-8')
|
|
68
|
-
|
|
69
|
-
firebase_functions_mod.https_fn = types.SimpleNamespace(Request=object, Response=FakeResponse)
|
|
70
|
-
sys.modules['firebase_functions'] = firebase_functions_mod
|
|
71
|
-
|
|
72
|
-
# firebase_admin + auth stub
|
|
73
|
-
firebase_admin_mod = types.ModuleType('firebase_admin')
|
|
74
|
-
auth_mod = types.ModuleType('firebase_admin.auth')
|
|
75
|
-
|
|
76
|
-
def _verify_id_token(token):
|
|
77
|
-
return auth_verify(token)
|
|
78
|
-
|
|
79
|
-
auth_mod.verify_id_token = _verify_id_token
|
|
80
|
-
firebase_admin_mod.auth = auth_mod
|
|
81
|
-
sys.modules['firebase_admin'] = firebase_admin_mod
|
|
82
|
-
sys.modules['firebase_admin.auth'] = auth_mod
|
|
83
|
-
|
|
84
|
-
return orig
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def _restore_orig(orig):
|
|
88
|
-
for name, val in orig.items():
|
|
89
|
-
if val is None:
|
|
90
|
-
if name in sys.modules:
|
|
91
|
-
del sys.modules[name]
|
|
92
|
-
else:
|
|
93
|
-
sys.modules[name] = val
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def test_get_secret_key_returns_decoded_string_on_success():
|
|
97
|
-
orig = _setup_basic_stubs(secret_data=b'MY_SECRET')
|
|
98
|
-
try:
|
|
99
|
-
if 'utils' in sys.modules:
|
|
100
|
-
del sys.modules['utils']
|
|
101
|
-
utils = importlib.import_module('utils')
|
|
102
|
-
res = utils.get_secret_key('any')
|
|
103
|
-
assert res == 'MY_SECRET'
|
|
104
|
-
finally:
|
|
105
|
-
_restore_orig(orig)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def test_get_secret_key_raises_exception_on_client_error():
|
|
109
|
-
orig = _setup_basic_stubs(secret_side_effect=Exception('boom'))
|
|
110
|
-
try:
|
|
111
|
-
if 'utils' in sys.modules:
|
|
112
|
-
del sys.modules['utils']
|
|
113
|
-
utils = importlib.import_module('utils')
|
|
114
|
-
with pytest.raises(Exception) as exc:
|
|
115
|
-
utils.get_secret_key('any')
|
|
116
|
-
assert 'Failed to retrieve secret key' in str(exc.value)
|
|
117
|
-
assert 'boom' in str(exc.value)
|
|
118
|
-
finally:
|
|
119
|
-
_restore_orig(orig)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
def test_verify_firebase_token_raises_when_header_missing_or_invalid():
|
|
123
|
-
orig = _setup_basic_stubs()
|
|
124
|
-
try:
|
|
125
|
-
if 'utils' in sys.modules:
|
|
126
|
-
del sys.modules['utils']
|
|
127
|
-
utils = importlib.import_module('utils')
|
|
128
|
-
|
|
129
|
-
class DummyRequest:
|
|
130
|
-
def __init__(self, headers=None):
|
|
131
|
-
self.headers = headers or {}
|
|
132
|
-
|
|
133
|
-
# Missing header
|
|
134
|
-
req = DummyRequest(headers={})
|
|
135
|
-
with pytest.raises(Exception) as exc:
|
|
136
|
-
utils.verify_firebase_token(req)
|
|
137
|
-
assert 'Missing or invalid Authorization header' in str(exc.value)
|
|
138
|
-
|
|
139
|
-
# Header present but not starting with 'Bearer '
|
|
140
|
-
req2 = DummyRequest(headers={'Authorization': 'Token abc'})
|
|
141
|
-
with pytest.raises(Exception) as exc2:
|
|
142
|
-
utils.verify_firebase_token(req2)
|
|
143
|
-
assert 'Missing or invalid Authorization header' in str(exc2.value)
|
|
144
|
-
finally:
|
|
145
|
-
_restore_orig(orig)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
def test_verify_firebase_token_calls_auth_verify_and_returns_payload():
|
|
149
|
-
orig = _setup_basic_stubs(auth_verify=lambda token: {'uid': 'user_1'})
|
|
150
|
-
try:
|
|
151
|
-
if 'utils' in sys.modules:
|
|
152
|
-
del sys.modules['utils']
|
|
153
|
-
utils = importlib.import_module('utils')
|
|
154
|
-
|
|
155
|
-
class DummyRequest:
|
|
156
|
-
def __init__(self, headers=None):
|
|
157
|
-
self.headers = headers or {}
|
|
158
|
-
|
|
159
|
-
req = DummyRequest(headers={'Authorization': 'Bearer TOK'})
|
|
160
|
-
res = utils.verify_firebase_token(req)
|
|
161
|
-
assert res == {'uid': 'user_1'}
|
|
162
|
-
finally:
|
|
163
|
-
_restore_orig(orig)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def test_verify_firebase_token_wraps_auth_exceptions():
|
|
167
|
-
def _raiser(token):
|
|
168
|
-
raise Exception('bad token')
|
|
169
|
-
|
|
170
|
-
orig = _setup_basic_stubs(auth_verify=_raiser)
|
|
171
|
-
try:
|
|
172
|
-
if 'utils' in sys.modules:
|
|
173
|
-
del sys.modules['utils']
|
|
174
|
-
utils = importlib.import_module('utils')
|
|
175
|
-
|
|
176
|
-
class DummyRequest:
|
|
177
|
-
def __init__(self, headers=None):
|
|
178
|
-
self.headers = headers or {}
|
|
179
|
-
|
|
180
|
-
req = DummyRequest(headers={'Authorization': 'Bearer TOK'})
|
|
181
|
-
with pytest.raises(Exception) as exc:
|
|
182
|
-
utils.verify_firebase_token(req)
|
|
183
|
-
assert 'Authentication failed' in str(exc.value)
|
|
184
|
-
assert 'bad token' in str(exc.value)
|
|
185
|
-
finally:
|
|
186
|
-
_restore_orig(orig)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
def test_get_api_key_uses_lowercase_family_name_and_get_secret_key(monkeypatch):
|
|
190
|
-
orig = _setup_basic_stubs()
|
|
191
|
-
try:
|
|
192
|
-
if 'utils' in sys.modules:
|
|
193
|
-
del sys.modules['utils']
|
|
194
|
-
utils = importlib.import_module('utils')
|
|
195
|
-
|
|
196
|
-
called = {}
|
|
197
|
-
|
|
198
|
-
def fake_get_secret_key(name):
|
|
199
|
-
called['name'] = name
|
|
200
|
-
return 'THE_KEY'
|
|
201
|
-
|
|
202
|
-
monkeypatch.setattr(utils, 'get_secret_key', fake_get_secret_key)
|
|
203
|
-
from enums import LlmFamily
|
|
204
|
-
res = utils.get_api_key(LlmFamily.OPENAI)
|
|
205
|
-
assert res == 'THE_KEY'
|
|
206
|
-
assert called['name'] == 'openai-api-key'
|
|
207
|
-
finally:
|
|
208
|
-
_restore_orig(orig)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
def test_create_json_response_returns_formatted_response():
|
|
212
|
-
orig = _setup_basic_stubs()
|
|
213
|
-
try:
|
|
214
|
-
if 'utils' in sys.modules:
|
|
215
|
-
del sys.modules['utils']
|
|
216
|
-
utils = importlib.import_module('utils')
|
|
217
|
-
resp = utils.create_json_response(True, {'a': 1}, 201)
|
|
218
|
-
assert getattr(resp, 'status_code', None) == 201
|
|
219
|
-
data = json.loads(resp.get_data(as_text=True))
|
|
220
|
-
assert data == {"success": True, "payload": {"a": 1}}
|
|
221
|
-
finally:
|
|
222
|
-
_restore_orig(orig)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|