restiny 0.5.0__py3-none-any.whl → 0.6.1__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.
@@ -0,0 +1,270 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ from textual import on
4
+ from textual.app import ComposeResult
5
+ from textual.binding import Binding
6
+ from textual.containers import Horizontal, Vertical
7
+ from textual.screen import ModalScreen
8
+ from textual.widgets import Button, Label, ListItem, ListView, Rule
9
+
10
+ from restiny.entities import Environment
11
+ from restiny.widgets import DynamicFields, TextDynamicField
12
+ from restiny.widgets.custom_input import CustomInput
13
+
14
+ if TYPE_CHECKING:
15
+ from restiny.ui.app import RESTinyApp
16
+
17
+
18
+ class EnvironmentsScreen(ModalScreen):
19
+ app: 'RESTinyApp'
20
+
21
+ DEFAULT_CSS = """
22
+ EnvironmentsScreen {
23
+ align: center middle;
24
+ }
25
+
26
+ #modal-content {
27
+ width: 70%;
28
+ height: 80%;
29
+ border: heavy black;
30
+ border-title-color: gray;
31
+ background: $surface;
32
+ }
33
+
34
+ Label {
35
+ padding-left: 4;
36
+ }
37
+ """
38
+ AUTO_FOCUS = '#environments-list'
39
+
40
+ BINDINGS = [
41
+ Binding(
42
+ key='escape',
43
+ action='dismiss',
44
+ description='Quit the screen',
45
+ show=False,
46
+ ),
47
+ ]
48
+
49
+ def __init__(self) -> None:
50
+ super().__init__()
51
+
52
+ def compose(self) -> ComposeResult:
53
+ with Vertical(id='modal-content'):
54
+ with Horizontal(classes='w-auto p-1'):
55
+ with Vertical(classes='w-1fr h-auto'):
56
+ yield ListView(
57
+ classes='',
58
+ id='environments-list',
59
+ )
60
+ with Horizontal(classes='w-auto h-auto mt-1'):
61
+ yield CustomInput(
62
+ placeholder='Environment name',
63
+ classes='w-4fr',
64
+ id='environment-name',
65
+ )
66
+ yield Button(
67
+ label='➕',
68
+ tooltip='Add environment',
69
+ classes='',
70
+ id='add-environment',
71
+ )
72
+
73
+ yield Rule(orientation='vertical')
74
+
75
+ with Vertical(classes='w-2fr h-auto'):
76
+ with Horizontal(classes='w-auto h-auto'):
77
+ yield CustomInput(
78
+ placeholder='Environment name',
79
+ classes='w-5fr',
80
+ id='environment-rename',
81
+ )
82
+ yield Button(
83
+ '💾',
84
+ tooltip='Save environment',
85
+ classes='w-1fr',
86
+ id='save-environment',
87
+ )
88
+ yield Button(
89
+ '➖',
90
+ tooltip='Delete environment',
91
+ classes='w-1fr',
92
+ id='delete-environment',
93
+ )
94
+ yield DynamicFields(
95
+ fields=[
96
+ TextDynamicField(enabled=False, key='', value='')
97
+ ],
98
+ classes='mt-1',
99
+ id='variables',
100
+ )
101
+ yield Label(
102
+ "[i]Tip: You can use [b]'{{var}}'[/] or [b]'${var}'[/] in requests to reference variables.[/]",
103
+ classes='mt-1',
104
+ )
105
+ with Horizontal(classes='w-auto h-auto'):
106
+ yield Button(label='Close', classes='w-1fr', id='close')
107
+
108
+ async def on_mount(self) -> None:
109
+ self.modal_content = self.query_one('#modal-content', Vertical)
110
+ self.environments_list = self.query_one('#environments-list', ListView)
111
+ self.environment_name_input = self.query_one(
112
+ '#environment-name', CustomInput
113
+ )
114
+ self.add_environment_button = self.query_one(
115
+ '#add-environment', Button
116
+ )
117
+ self.environment_rename_input = self.query_one(
118
+ '#environment-rename', CustomInput
119
+ )
120
+ self.save_environment_button = self.query_one(
121
+ '#save-environment', Button
122
+ )
123
+ self.delete_environment_button = self.query_one(
124
+ '#delete-environment', Button
125
+ )
126
+ self.variables_dynamic_fields = self.query_one(
127
+ '#variables', DynamicFields
128
+ )
129
+ self.close_button = self.query_one('#close', Button)
130
+
131
+ self.modal_content.border_title = 'Environments'
132
+
133
+ await self._populate_environments()
134
+
135
+ @property
136
+ def _selected_env_id(self) -> int | None:
137
+ if self.environments_list.index is None:
138
+ return None
139
+
140
+ return int(
141
+ self.environments_list.children[
142
+ self.environments_list.index
143
+ ].id.rsplit('-', 1)[1]
144
+ )
145
+
146
+ @property
147
+ def _selected_env_name(self) -> str | None:
148
+ if self.environments_list.index is None:
149
+ return None
150
+
151
+ return (
152
+ self.environments_list.children[self.environments_list.index]
153
+ .children[0]
154
+ .content
155
+ )
156
+
157
+ @on(ListView.Selected, '#environments-list')
158
+ async def _on_select_environment(self) -> None:
159
+ self.environment_rename_input.value = self._selected_env_name
160
+ is_global = self._selected_env_name == 'global'
161
+ self.environment_rename_input.disabled = is_global
162
+ self.delete_environment_button.disabled = is_global
163
+
164
+ for field in self.variables_dynamic_fields.fields:
165
+ self.variables_dynamic_fields.remove_field(field=field)
166
+
167
+ environment = self.app.environments_repo.get_by_id(
168
+ self._selected_env_id
169
+ ).data
170
+ for variable in environment.variables:
171
+ await self.variables_dynamic_fields.add_field(
172
+ field=TextDynamicField(
173
+ enabled=variable.enabled,
174
+ key=variable.key,
175
+ value=variable.value,
176
+ ),
177
+ before_last=True,
178
+ )
179
+
180
+ @on(Button.Pressed, '#add-environment')
181
+ @on(CustomInput.Submitted, '#environment-name')
182
+ async def _on_add_environment(self) -> None:
183
+ if not self.environment_name_input.value.strip():
184
+ self.notify('Environment name is required', severity='error')
185
+ return
186
+
187
+ create_resp = self.app.environments_repo.create(
188
+ Environment(name=self.environment_name_input.value, variables=[])
189
+ )
190
+ if not create_resp.ok:
191
+ self.notify(
192
+ f'Failed to create environment ({create_resp.status})',
193
+ severity='error',
194
+ )
195
+ return
196
+
197
+ await self._add_environment(
198
+ name=create_resp.data.name, id=create_resp.data.id
199
+ )
200
+ self.environment_name_input.value = ''
201
+ self.environments_list.index = len(self.environments_list.children) - 1
202
+ await self._on_select_environment()
203
+ self.notify('Environment added', severity='information')
204
+
205
+ @on(Button.Pressed, '#save-environment')
206
+ @on(CustomInput.Submitted, '#environment-rename')
207
+ async def _on_save_environment(self) -> None:
208
+ if not self.environment_rename_input.value.strip():
209
+ self.notify('Environment name is required', severity='error')
210
+ return
211
+
212
+ update_resp = self.app.environments_repo.update(
213
+ Environment(
214
+ id=self._selected_env_id,
215
+ name=self.environment_rename_input.value,
216
+ variables=[
217
+ Environment.Variable(
218
+ enabled=variable.enabled,
219
+ key=variable.key,
220
+ value=variable.value,
221
+ )
222
+ for variable in self.variables_dynamic_fields.filled_fields
223
+ ],
224
+ )
225
+ )
226
+ if not update_resp.ok:
227
+ self.notify(
228
+ f'Failed to update environment ({update_resp.status})',
229
+ severity='error',
230
+ )
231
+ return
232
+
233
+ self.environments_list.children[self.environments_list.index].children[
234
+ 0
235
+ ].update(update_resp.data.name)
236
+ self.notify('Environment updated', severity='information')
237
+
238
+ @on(Button.Pressed, '#delete-environment')
239
+ async def _on_remove_environment(self) -> None:
240
+ if self.environments_list.index is None:
241
+ self.notify('No environment selected', severity='error')
242
+ return
243
+
244
+ self.app.environments_repo.delete_by_id(self._selected_env_id)
245
+ focus_target_index = max(0, self.environments_list.index - 1)
246
+ await self.environments_list.children[
247
+ self.environments_list.index
248
+ ].remove()
249
+ self.environments_list.index = focus_target_index
250
+ await self._on_select_environment()
251
+ self.notify('Environment removed', severity='information')
252
+
253
+ @on(Button.Pressed, '#close')
254
+ async def _on_close(self, message: Button.Pressed) -> None:
255
+ self.dismiss(result=None)
256
+
257
+ async def _populate_environments(self) -> None:
258
+ environments = self.app.environments_repo.list().data
259
+ for environment in environments:
260
+ await self._add_environment(
261
+ name=environment.name, id=environment.id
262
+ )
263
+
264
+ self.environments_list.index = 0
265
+ await self._on_select_environment()
266
+
267
+ async def _add_environment(self, name: str, id: int) -> None:
268
+ await self.environments_list.mount(
269
+ ListItem(Label(name), id=f'env-{id}')
270
+ )
@@ -514,7 +514,7 @@ class RequestArea(Static):
514
514
 
515
515
  @option_timeout.setter
516
516
  def option_timeout(self, value: float | None) -> None:
517
- self.options_timeout_input.value = value
517
+ self.options_timeout_input.value = '' if value is None else str(value)
518
518
 
519
519
  @property
520
520
  def option_follow_redirects(self) -> bool:
@@ -532,6 +532,33 @@ class RequestArea(Static):
532
532
  def option_verify_ssl(self, value: bool) -> None:
533
533
  self.options_verify_ssl_switch.value = value
534
534
 
535
+ def clear(self) -> None:
536
+ self.headers = []
537
+ self.params = []
538
+
539
+ self.auth_enabled = False
540
+ self.auth_mode = AuthMode.BASIC
541
+ self.auth_basic_username = ''
542
+ self.auth_basic_password = ''
543
+ self.auth_bearer_token = ''
544
+ self.auth_api_key_key = ''
545
+ self.auth_api_key_value = ''
546
+ self.auth_api_key_where = 'header'
547
+ self.auth_digest_username = ''
548
+ self.auth_digest_password = ''
549
+
550
+ self.body_enabled = False
551
+ self.body_mode = BodyMode.RAW
552
+ self.body_raw_language = BodyRawLanguage.PLAIN
553
+ self.body_raw = ''
554
+ self.body_file = None
555
+ self.body_form_urlencoded = []
556
+ self.body_form_multipart = []
557
+
558
+ self.option_timeout = None
559
+ self.option_follow_redirects = False
560
+ self.option_verify_ssl = False
561
+
535
562
  @on(Select.Changed, '#auth-mode')
536
563
  def _on_change_auth_mode(self, message: Select.Changed) -> None:
537
564
  if message.value == 'basic':
@@ -92,13 +92,16 @@ class ResponseArea(Static):
92
92
 
93
93
  self.headers_data_table.add_columns('Key', 'Value')
94
94
 
95
- def set_data(self, data: ResponseAreaData | None) -> None:
95
+ def clear(self) -> None:
96
96
  self.border_title = self.BORDER_TITLE
97
97
  self.border_subtitle = ''
98
98
  self.headers_data_table.clear()
99
99
  self.body_raw_language_select.value = BodyRawLanguage.PLAIN
100
100
  self.body_raw_editor.clear()
101
101
 
102
+ def set_data(self, data: ResponseAreaData | None) -> None:
103
+ self.clear()
104
+
102
105
  if data is None:
103
106
  return
104
107
 
@@ -7,13 +7,14 @@ from textual.containers import Horizontal, Vertical
7
7
  from textual.screen import ModalScreen
8
8
  from textual.widgets import Button, Label, Select
9
9
 
10
+ from restiny.enums import CustomThemes
11
+
10
12
  if TYPE_CHECKING:
11
13
  from restiny.ui.app import RESTinyApp
12
14
 
13
15
 
14
16
  class SettingsScreen(ModalScreen):
15
- if TYPE_CHECKING:
16
- app: RESTinyApp
17
+ app: 'RESTinyApp'
17
18
 
18
19
  DEFAULT_CSS = """
19
20
  SettingsScreen {
@@ -40,22 +41,14 @@ class SettingsScreen(ModalScreen):
40
41
  ),
41
42
  ]
42
43
 
43
- def __init__(
44
- self,
45
- themes: list[str],
46
- theme: str,
47
- ) -> None:
48
- super().__init__()
49
- self._themes = themes
50
- self._theme = theme
51
-
52
44
  def compose(self) -> ComposeResult:
45
+ settings = self.app.settings_repo.get().data
53
46
  with Vertical(id='modal-content'):
54
47
  with Horizontal(classes='w-auto h-auto mt-1 px-1'):
55
48
  yield Label('theme', classes='mt-1')
56
49
  yield Select(
57
- ((theme, theme) for theme in self._themes),
58
- value=self._theme,
50
+ [(theme.value, theme.value) for theme in CustomThemes],
51
+ value=settings.theme,
59
52
  allow_blank=False,
60
53
  id='theme',
61
54
  )
@@ -0,0 +1,60 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ from textual.app import ComposeResult
4
+ from textual.containers import Horizontal
5
+ from textual.widget import Widget
6
+ from textual.widgets import Select
7
+
8
+ if TYPE_CHECKING:
9
+ from restiny.ui.app import RESTinyApp
10
+
11
+
12
+ class TopBarArea(Widget):
13
+ app: 'RESTinyApp'
14
+
15
+ DEFAULT_CSS = """
16
+ TopBarArea {
17
+ width: 1fr;
18
+ height: auto;
19
+ align: right middle;
20
+ }
21
+
22
+ Select {
23
+ width: 24;
24
+ }
25
+ """
26
+
27
+ def compose(self) -> ComposeResult:
28
+ with Horizontal(classes='w-auto h-auto'):
29
+ yield Select(
30
+ [],
31
+ prompt='No environment',
32
+ allow_blank=True,
33
+ compact=True,
34
+ id='environment',
35
+ )
36
+
37
+ def on_mount(self) -> None:
38
+ self.environment_select = self.query_one('#environment', Select)
39
+
40
+ self.populate()
41
+
42
+ @property
43
+ def environment(self) -> str:
44
+ if self.environment_select.value == Select.BLANK:
45
+ return None
46
+
47
+ return self.environment_select.value
48
+
49
+ def populate(self) -> None:
50
+ prev_selected_environment = self.environment_select.value
51
+ environments = [
52
+ environment.name
53
+ for environment in self.app.environments_repo.list().data
54
+ if environment.name != 'global'
55
+ ]
56
+ self.environment_select.set_options(
57
+ (environment, environment) for environment in environments
58
+ )
59
+ if prev_selected_environment in environments:
60
+ self.environment_select.value = prev_selected_environment
restiny/ui/url_area.py CHANGED
@@ -110,6 +110,10 @@ class URLArea(Static):
110
110
  def url(self, value: str) -> None:
111
111
  self.url_input.value = value
112
112
 
113
+ def clear(self) -> None:
114
+ self.method = HTTPMethod.GET
115
+ self.url = ''
116
+
113
117
  @on(Button.Pressed, '#send-request')
114
118
  @on(CustomInput.Submitted, '#url')
115
119
  def _on_send_request(
@@ -60,7 +60,7 @@ class CollectionsTree(Tree):
60
60
  }
61
61
  node = parent_node.add_leaf(
62
62
  label=f'[{method_to_color[method]}]{method}[/] {name}'
63
- ) # noqa
63
+ )
64
64
  node.data = {
65
65
  'method': method,
66
66
  'name': name,
@@ -68,3 +68,7 @@ class CollectionsTree(Tree):
68
68
  }
69
69
  self.node_by_id[id] = node
70
70
  return node
71
+
72
+ def remove(self, node: TreeNode) -> None:
73
+ del self.node_by_id[node.data['id']]
74
+ node.remove()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: restiny
3
- Version: 0.5.0
3
+ Version: 0.6.1
4
4
  Summary: A minimalist HTTP client, no bullshit
5
5
  Author-email: Kalebe Chimanski de Almeida <kalebe.chi.almeida@gmail.com>
6
6
  License: Apache License
@@ -0,0 +1,38 @@
1
+ restiny/__about__.py,sha256=gd3s3RotD0_KL90Tua-YkOr60Jm2C2_wvlEhAT08068,22
2
+ restiny/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ restiny/__main__.py,sha256=XkZbw04fLAFImx-T5me4CcZRsKdr33eUaWUKZ2kZPR8,1165
4
+ restiny/consts.py,sha256=LMwWVmOrOwZAKcnpZkBs-duMDE6QWTWD4un9y6hcVEc,11319
5
+ restiny/entities.py,sha256=ibQLSNxBj_mqTPyrkI_VnOVCpUETK6sZMAXhNKBDo4c,14232
6
+ restiny/enums.py,sha256=57KQPeY1YFNr15Ykr8ZglkEKdez6Djqnfzm0YaBPGfQ,996
7
+ restiny/httpx_auths.py,sha256=FqwO6W2AYNhmG5OEbQBusumH-zVvel4A8Oa7c4cbm-4,1295
8
+ restiny/utils.py,sha256=ktXrnlujBYxrPi-nDYor94r1cmJ07xyezesuZESswOc,4493
9
+ restiny/assets/__init__.py,sha256=JL1KARlToF6ZR7KeUjlDAHgwwVM2qXYaIl4wHeFW2zU,93
10
+ restiny/assets/style.tcss,sha256=bpPEiBcKFE5eREae_f4VbGrhdObqrtiYcDROROGiLCI,978
11
+ restiny/data/db.py,sha256=aRYrjv0ecFWToj5Y0XBJ_o4QPLPY2qzRKvgUgbzG98E,1990
12
+ restiny/data/models.py,sha256=BlwQNS2X6t5Fkt9ioowXpWYKgm3_joYvOWgp69BILJ0,3392
13
+ restiny/data/repos.py,sha256=Bn-zH2UwNG_hbxnPfZzyiCg3O7nMe5O__b37pRtXsoY,15840
14
+ restiny/data/sql/__init__.py,sha256=4Erfs-MC_ctZ53lXqe_FQwJDRd8SrxGrZ3_rG8o7VCU,81
15
+ restiny/ui/__init__.py,sha256=ak-HZ1y5w5E1s2ojBAicdP2GwBwjz9PRDdegusf5ZpE,439
16
+ restiny/ui/app.py,sha256=nhE7kp9_SP2TifVGmFTzJVmk0L3kWYqXt0TTo9h95xw,20931
17
+ restiny/ui/collections_area.py,sha256=Vk8WSP8zP0hRj4K46zPxziDqMK2kpc2pr87_b8uAFwk,19451
18
+ restiny/ui/environments_screen.py,sha256=rcKymFxWYP9vxLIPwwq2cxPnI1idueDVB3fLQMClHeA,9573
19
+ restiny/ui/request_area.py,sha256=xHsyaJ2P5CsMDRspuNjefJCI3KNdZxWs0ir9eLoZXjA,21668
20
+ restiny/ui/response_area.py,sha256=3KHqFADeCWttd5WKbqA4l_6q9AiKTKbQXt2FMAUvsw4,4246
21
+ restiny/ui/settings_screen.py,sha256=L_i2WFqqrCFkucZLXeg-kVXLzP7jZ-CTS65T1bdq3ZU,2249
22
+ restiny/ui/top_bar_area.py,sha256=6vKhlx_eJpgpH3EeConKxky03RRmGizMGwgPrG0DkkU,1583
23
+ restiny/ui/url_area.py,sha256=PIcH9ef0q7gEfLZ149CNtTr2NgAeKESLuIl0e5Pt4hg,3868
24
+ restiny/widgets/__init__.py,sha256=RaU2JkRWAoJULG3rpPtMNUarPU6Yu6gJwzAsSad2hgg,895
25
+ restiny/widgets/collections_tree.py,sha256=UVtG6km49G-DjklpXHoADaTvj0L1-FWOLkz7gijGU2g,2144
26
+ restiny/widgets/confirm_prompt.py,sha256=1xdCaJZUDzV4-fQ1ztbe7uX9hJ6ZZUBghtwgReBHz9w,2147
27
+ restiny/widgets/custom_directory_tree.py,sha256=sNTaI0DBAO56MyOy6qMZPgWXiTUQbBrJdn1GtOdxrDc,1268
28
+ restiny/widgets/custom_input.py,sha256=W6gE9jbTl_R1uLSA5Dz9eBX7aNID2-rYZP3j2oNi4SA,466
29
+ restiny/widgets/custom_text_area.py,sha256=ykmG-6MiMhz6BqNzP8f14jUTWWKjsCOIEhgciP-01Y8,14032
30
+ restiny/widgets/dynamic_fields.py,sha256=S2epm-_QOsHEGhVFwDlOvIqOQkUgpGnh6pK3_JoTQ1g,16104
31
+ restiny/widgets/password_input.py,sha256=xXOfiStcUCbP_cnrS2Rz0-GmsvmOsen4G41zOpmjLD8,4057
32
+ restiny/widgets/path_chooser.py,sha256=FdG9fdgY2qD8o-7aBn8F005f8H91kbYtyF99RRGLRas,9273
33
+ restiny-0.6.1.dist-info/licenses/LICENSE,sha256=Z190MKguypkrjaCldiorEbMmBQp7ylvx09oyE4oDCTs,11361
34
+ restiny-0.6.1.dist-info/METADATA,sha256=OO4PshKvwwwyCx62RfI112o1qnIiP7bE1lLWde0E_H8,16137
35
+ restiny-0.6.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
+ restiny-0.6.1.dist-info/entry_points.txt,sha256=F9zW8bAPAwIihltqjzYow4ahmH_B6VkAHzQFA-8QOn4,50
37
+ restiny-0.6.1.dist-info/top_level.txt,sha256=1MQ_Q-fV1Dwbu4zU3g1Eg-CfRgC412X-mvMIrEdrlbk,8
38
+ restiny-0.6.1.dist-info/RECORD,,
@@ -1,36 +0,0 @@
1
- restiny/__about__.py,sha256=0PaI2eSOCp5kkNcpKpUSbLHf66rL9xQzFpYyLGpEtyM,22
2
- restiny/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- restiny/__main__.py,sha256=uUVIpbnk2nzWV5ZSEDuUUEJPKeAZW8arDl2mbekUKKU,1066
4
- restiny/consts.py,sha256=LMwWVmOrOwZAKcnpZkBs-duMDE6QWTWD4un9y6hcVEc,11319
5
- restiny/entities.py,sha256=hCNoy2tNQjAz6czHmTF4Ee10tqTjxNVycL1ENZry_yc,10040
6
- restiny/enums.py,sha256=57KQPeY1YFNr15Ykr8ZglkEKdez6Djqnfzm0YaBPGfQ,996
7
- restiny/httpx_auths.py,sha256=FqwO6W2AYNhmG5OEbQBusumH-zVvel4A8Oa7c4cbm-4,1295
8
- restiny/utils.py,sha256=ktXrnlujBYxrPi-nDYor94r1cmJ07xyezesuZESswOc,4493
9
- restiny/assets/__init__.py,sha256=JL1KARlToF6ZR7KeUjlDAHgwwVM2qXYaIl4wHeFW2zU,93
10
- restiny/assets/style.tcss,sha256=LCszWlsdR_4GqwmR9C8aea_RojfCY-JyV-nA3NidF9s,925
11
- restiny/data/db.py,sha256=aRYrjv0ecFWToj5Y0XBJ_o4QPLPY2qzRKvgUgbzG98E,1990
12
- restiny/data/models.py,sha256=QInN6uLapn55eeWcPnq13Jkd88RKobiq69XwZjexkhM,2585
13
- restiny/data/repos.py,sha256=ySeXrFuqmSV_Q_nIZWPBj8TY-RjKzumcId6vE1m6jZM,12105
14
- restiny/data/sql/__init__.py,sha256=4Erfs-MC_ctZ53lXqe_FQwJDRd8SrxGrZ3_rG8o7VCU,81
15
- restiny/ui/__init__.py,sha256=AaxD5x6SdlMMxce0hbtAWw5V2hy1zoTfy9EzcaHKMgI,374
16
- restiny/ui/app.py,sha256=c-cLV15J9SPLcXkbmHWS11L9es5oWOoRkV3HCySqR7g,18060
17
- restiny/ui/collections_area.py,sha256=UwK255demkwEw5uh0_XuZpjdQaR091STcV22zDZ6ukc,18501
18
- restiny/ui/request_area.py,sha256=bxtl0g2cBgRDxMFVAu0ocdLi-a4OeQTpxOsJTkdbW_8,20795
19
- restiny/ui/response_area.py,sha256=Rzq82muK9gXWHIHdLqetFG403n7JdE65Rka0Siw339I,4195
20
- restiny/ui/settings_screen.py,sha256=wN--I4KY87Pe0UUaBZmDZN091jHac-7YAr8GeDbXjy8,2345
21
- restiny/ui/url_area.py,sha256=Cc6AF9g_dRgC5TsK9ORE8As1hFq4zfG_rWp77NrrdJg,3779
22
- restiny/widgets/__init__.py,sha256=RaU2JkRWAoJULG3rpPtMNUarPU6Yu6gJwzAsSad2hgg,895
23
- restiny/widgets/collections_tree.py,sha256=X-wm_bkUHK9E9XDGjJE-bjeQWEqwfNyZNFTA25nDQe4,2038
24
- restiny/widgets/confirm_prompt.py,sha256=1xdCaJZUDzV4-fQ1ztbe7uX9hJ6ZZUBghtwgReBHz9w,2147
25
- restiny/widgets/custom_directory_tree.py,sha256=sNTaI0DBAO56MyOy6qMZPgWXiTUQbBrJdn1GtOdxrDc,1268
26
- restiny/widgets/custom_input.py,sha256=W6gE9jbTl_R1uLSA5Dz9eBX7aNID2-rYZP3j2oNi4SA,466
27
- restiny/widgets/custom_text_area.py,sha256=ykmG-6MiMhz6BqNzP8f14jUTWWKjsCOIEhgciP-01Y8,14032
28
- restiny/widgets/dynamic_fields.py,sha256=S2epm-_QOsHEGhVFwDlOvIqOQkUgpGnh6pK3_JoTQ1g,16104
29
- restiny/widgets/password_input.py,sha256=xXOfiStcUCbP_cnrS2Rz0-GmsvmOsen4G41zOpmjLD8,4057
30
- restiny/widgets/path_chooser.py,sha256=FdG9fdgY2qD8o-7aBn8F005f8H91kbYtyF99RRGLRas,9273
31
- restiny-0.5.0.dist-info/licenses/LICENSE,sha256=Z190MKguypkrjaCldiorEbMmBQp7ylvx09oyE4oDCTs,11361
32
- restiny-0.5.0.dist-info/METADATA,sha256=_W4JXRugmt8LSFdTuwp46BF5T-xlI9goHEJSVwf0OsU,16137
33
- restiny-0.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
34
- restiny-0.5.0.dist-info/entry_points.txt,sha256=F9zW8bAPAwIihltqjzYow4ahmH_B6VkAHzQFA-8QOn4,50
35
- restiny-0.5.0.dist-info/top_level.txt,sha256=1MQ_Q-fV1Dwbu4zU3g1Eg-CfRgC412X-mvMIrEdrlbk,8
36
- restiny-0.5.0.dist-info/RECORD,,