ferp 0.7.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.
Files changed (87) hide show
  1. ferp/__init__.py +3 -0
  2. ferp/__main__.py +4 -0
  3. ferp/__version__.py +1 -0
  4. ferp/app.py +9 -0
  5. ferp/cli.py +160 -0
  6. ferp/core/__init__.py +0 -0
  7. ferp/core/app.py +1312 -0
  8. ferp/core/bundle_installer.py +245 -0
  9. ferp/core/command_provider.py +77 -0
  10. ferp/core/dependency_manager.py +59 -0
  11. ferp/core/fs_controller.py +70 -0
  12. ferp/core/fs_watcher.py +144 -0
  13. ferp/core/messages.py +49 -0
  14. ferp/core/path_actions.py +124 -0
  15. ferp/core/paths.py +3 -0
  16. ferp/core/protocols.py +8 -0
  17. ferp/core/script_controller.py +515 -0
  18. ferp/core/script_protocol.py +35 -0
  19. ferp/core/script_runner.py +421 -0
  20. ferp/core/settings.py +16 -0
  21. ferp/core/settings_store.py +69 -0
  22. ferp/core/state.py +156 -0
  23. ferp/core/task_store.py +164 -0
  24. ferp/core/transcript_logger.py +95 -0
  25. ferp/domain/__init__.py +0 -0
  26. ferp/domain/scripts.py +29 -0
  27. ferp/fscp/host/__init__.py +11 -0
  28. ferp/fscp/host/host.py +439 -0
  29. ferp/fscp/host/managed_process.py +113 -0
  30. ferp/fscp/host/process_registry.py +124 -0
  31. ferp/fscp/protocol/__init__.py +13 -0
  32. ferp/fscp/protocol/errors.py +2 -0
  33. ferp/fscp/protocol/messages.py +55 -0
  34. ferp/fscp/protocol/schemas/__init__.py +0 -0
  35. ferp/fscp/protocol/schemas/fscp/1.0/cancel.json +16 -0
  36. ferp/fscp/protocol/schemas/fscp/1.0/definitions.json +29 -0
  37. ferp/fscp/protocol/schemas/fscp/1.0/discriminator.json +14 -0
  38. ferp/fscp/protocol/schemas/fscp/1.0/envelope.json +13 -0
  39. ferp/fscp/protocol/schemas/fscp/1.0/exit.json +20 -0
  40. ferp/fscp/protocol/schemas/fscp/1.0/init.json +36 -0
  41. ferp/fscp/protocol/schemas/fscp/1.0/input_response.json +21 -0
  42. ferp/fscp/protocol/schemas/fscp/1.0/log.json +21 -0
  43. ferp/fscp/protocol/schemas/fscp/1.0/message.json +23 -0
  44. ferp/fscp/protocol/schemas/fscp/1.0/progress.json +23 -0
  45. ferp/fscp/protocol/schemas/fscp/1.0/request_input.json +47 -0
  46. ferp/fscp/protocol/schemas/fscp/1.0/result.json +16 -0
  47. ferp/fscp/protocol/schemas/fscp/__init__.py +0 -0
  48. ferp/fscp/protocol/state.py +16 -0
  49. ferp/fscp/protocol/validator.py +123 -0
  50. ferp/fscp/scripts/__init__.py +0 -0
  51. ferp/fscp/scripts/runtime/__init__.py +4 -0
  52. ferp/fscp/scripts/runtime/__main__.py +40 -0
  53. ferp/fscp/scripts/runtime/errors.py +14 -0
  54. ferp/fscp/scripts/runtime/io.py +64 -0
  55. ferp/fscp/scripts/runtime/script.py +149 -0
  56. ferp/fscp/scripts/runtime/state.py +17 -0
  57. ferp/fscp/scripts/runtime/worker.py +13 -0
  58. ferp/fscp/scripts/sdk.py +548 -0
  59. ferp/fscp/transcript/__init__.py +3 -0
  60. ferp/fscp/transcript/events.py +14 -0
  61. ferp/resources/__init__.py +0 -0
  62. ferp/services/__init__.py +3 -0
  63. ferp/services/file_listing.py +120 -0
  64. ferp/services/monday_sync.py +155 -0
  65. ferp/services/releases.py +214 -0
  66. ferp/services/scripts.py +90 -0
  67. ferp/services/update_check.py +130 -0
  68. ferp/styles/index.tcss +638 -0
  69. ferp/themes/themes.py +238 -0
  70. ferp/widgets/__init__.py +17 -0
  71. ferp/widgets/dialogs.py +167 -0
  72. ferp/widgets/file_tree.py +991 -0
  73. ferp/widgets/forms.py +146 -0
  74. ferp/widgets/output_panel.py +244 -0
  75. ferp/widgets/panels.py +13 -0
  76. ferp/widgets/process_list.py +158 -0
  77. ferp/widgets/readme_modal.py +59 -0
  78. ferp/widgets/scripts.py +192 -0
  79. ferp/widgets/task_capture.py +74 -0
  80. ferp/widgets/task_list.py +493 -0
  81. ferp/widgets/top_bar.py +110 -0
  82. ferp-0.7.1.dist-info/METADATA +128 -0
  83. ferp-0.7.1.dist-info/RECORD +87 -0
  84. ferp-0.7.1.dist-info/WHEEL +5 -0
  85. ferp-0.7.1.dist-info/entry_points.txt +2 -0
  86. ferp-0.7.1.dist-info/licenses/LICENSE +21 -0
  87. ferp-0.7.1.dist-info/top_level.txt +1 -0
ferp/styles/index.tcss ADDED
@@ -0,0 +1,638 @@
1
+ /* ============================================================================
2
+ Layout
3
+ ============================================================================ */
4
+ * {
5
+ scrollbar-size: 0 1;
6
+ }
7
+
8
+ Button {
9
+ color: $text;
10
+ }
11
+
12
+ #ok:hover, #ok:focus, #yes:hover, #yes:focus {
13
+ background: $primary;
14
+ border: inner $primary;
15
+ }
16
+
17
+ #cancel:hover, #cancel:focus {
18
+ background: $error-darken-2;
19
+ border: inner $error-darken-2;
20
+ }
21
+
22
+ Input .input--cursor {
23
+ background: transparent;
24
+ color: $text-muted;
25
+ opacity: 0.6;
26
+ text-style: underline;
27
+ }
28
+
29
+ #prompt_input .input--suggestion {
30
+ color: $text-muted;
31
+ opacity: 0.6;
32
+ text-style: italic;
33
+ }
34
+
35
+
36
+ TopBar {
37
+ layout: horizontal;
38
+ height: 1;
39
+ padding: 0 1 0 1;
40
+ margin-bottom: 1;
41
+ color: $text;
42
+ background: $primary;
43
+
44
+ #app_meta_container {
45
+ width: 1fr;
46
+
47
+ #topbar_app_name {
48
+ text-style: bold;
49
+ }
50
+
51
+ #topbar_app_version {
52
+ text-style: italic;
53
+ opacity: 0.6;
54
+ margin-left: 1;
55
+ }
56
+ }
57
+
58
+ #topbar_script_status {
59
+ width: 4fr;
60
+ text-align: center;
61
+ }
62
+
63
+ #topbar_cache {
64
+ width: 1fr;
65
+ text-align: right;
66
+ }
67
+
68
+ }
69
+
70
+ #app_main_container {
71
+ #main_pane {
72
+ layout: horizontal;
73
+ height: 1fr;
74
+ background: $background;
75
+
76
+ /* ============================================================================
77
+ ListView General
78
+ ============================================================================ */
79
+
80
+ .dimmed {
81
+ opacity: 0.4;
82
+ }
83
+
84
+ ListItem.-highlight {
85
+ color: $text !important;
86
+ }
87
+
88
+ ListItem:focus ListItem.-highlight {
89
+ background: $secondary;
90
+ }
91
+
92
+ ListItem Horizontal {
93
+ color: $text-primary;
94
+ }
95
+
96
+ ListItem.-highlight Horizontal {
97
+ color: $text;
98
+ }
99
+
100
+ .file_tree_header {
101
+ text-style: bold;
102
+ }
103
+
104
+ /* ============================================================================
105
+ File Tree
106
+ ============================================================================ */
107
+ #file_list_container {
108
+ width: 2fr;
109
+ height: 1fr;
110
+ min-height: 1;
111
+ max-width: 100%;
112
+ padding: 0 1;
113
+ border: round $secondary;
114
+ border-title-align: right;
115
+ background: $background;
116
+ layout: vertical;
117
+ }
118
+
119
+ #file_list_container:focus-within {
120
+ border: $secondary-lighten-3;
121
+ background: transparent;
122
+ }
123
+
124
+ #file_list {
125
+ height: 1fr;
126
+ min-height: 1;
127
+ background: transparent;
128
+ scrollbar-gutter: stable;
129
+ }
130
+
131
+ #file_list_header {
132
+ height: 1;
133
+ color: $text;
134
+ padding-right: 1;
135
+ }
136
+
137
+ .file_tree_header {
138
+ text-style: bold underline;
139
+ }
140
+
141
+ .file_tree_type_dir {
142
+ color: $text-primary;
143
+ text-style: bold;
144
+ }
145
+
146
+ .file_tree_type_file {
147
+ color: $text-accent;
148
+ }
149
+
150
+ .file_tree_row {
151
+ width: 100%;
152
+ height: 1;
153
+ }
154
+
155
+ .file_tree_name {
156
+ width: 1fr;
157
+ }
158
+
159
+ .file_tree_chars, .file_tree_type {
160
+ width: 8;
161
+ }
162
+
163
+ .file_tree_modified {
164
+ width: 18;
165
+ }
166
+ }
167
+
168
+ #details_pane {
169
+ layout: vertical;
170
+ width: 1fr;
171
+ background: $background;
172
+
173
+ /* ============================================================================
174
+ Scripts Panel
175
+ ============================================================================ */
176
+ #scripts_panel {
177
+ height: 2fr;
178
+ border: round $secondary;
179
+ border-title-align: right;
180
+ background: $background;
181
+ }
182
+
183
+ #scripts_panel:focus {
184
+ border: $secondary-lighten-3;
185
+ background: transparent;
186
+ }
187
+
188
+ #script_item {
189
+ height: 1;
190
+ padding: 0 1;
191
+ }
192
+
193
+ .script_category {
194
+ color: $text-accent;
195
+ }
196
+
197
+ ScriptItem.-highlight .script_category {
198
+ color: $text;
199
+ }
200
+
201
+ .script_name {
202
+ width: 1fr;
203
+ background: transparent;
204
+ }
205
+
206
+ .script_version {
207
+ color: $text;
208
+ text-style: italic;
209
+ opacity: 0.5;
210
+ }
211
+
212
+ /* ============================================================================
213
+ Output Panel
214
+ ============================================================================ */
215
+ #output_panel_container {
216
+ height: 1fr;
217
+ border: round $secondary;
218
+ border-title-align: right;
219
+ color: $text;
220
+ }
221
+
222
+ #output_panel {
223
+ width: 100%;
224
+ padding: 0 1;
225
+ }
226
+
227
+ #output_panel_container:focus {
228
+ border: $secondary-lighten-3;
229
+ }
230
+ }
231
+
232
+ /* ============================================================================
233
+ Filter Bar
234
+ ============================================================================ */
235
+ #file_tree_filter {
236
+ display: none;
237
+ padding: 0 1;
238
+ background: $panel;
239
+ height: 3;
240
+
241
+ Input {
242
+ width: 100%;
243
+ border: round $secondary;
244
+ background: transparent;
245
+ }
246
+
247
+ Input:focus {
248
+ background: transparent;
249
+ }
250
+ }
251
+
252
+ }
253
+
254
+
255
+
256
+ /* ============================================================================
257
+ Dialogs & Prompt Forms
258
+ ============================================================================ */
259
+ #prompt_dialog {
260
+ align: center middle;
261
+ }
262
+
263
+ #input_dialog {
264
+ align: center middle;
265
+ }
266
+
267
+ #confirm_dialog {
268
+ align: center middle;
269
+ }
270
+
271
+ #select_dialog {
272
+ align: center middle;
273
+ }
274
+
275
+ #bulk_rename_confirm_dialog {
276
+ align: center middle;
277
+ }
278
+
279
+ #bulk_rename_confirm_dialog .dialog_buttons {
280
+ dock: bottom;
281
+ height: auto;
282
+ align: center middle;
283
+ }
284
+
285
+ #bulk_rename_confirm_dialog .dialog_buttons Button {
286
+ width: 25%;
287
+ }
288
+
289
+ #dialog_container {
290
+ align: center middle;
291
+ height: auto;
292
+ width: 110;
293
+ padding: 1 2;
294
+ border: round $secondary;
295
+ background: $panel;
296
+ }
297
+
298
+ #bulk_rename_dialog_container {
299
+ align: center middle;
300
+ max-height: 20;
301
+ max-width: 160;
302
+ padding: 1 1;
303
+ border: round $secondary;
304
+ background: $panel;
305
+ }
306
+
307
+ #bulk_rename_dialog_container #bulk_rename_dialog_message {
308
+ width: 100%;
309
+ content-align: left middle;
310
+ padding: 0 1;
311
+ }
312
+
313
+ #bulk_rename_dialog_container #bulk_rename_preview_table {
314
+ height: auto;
315
+ max-height: 12;
316
+ width: 100%;
317
+ margin: 0 1;
318
+ }
319
+
320
+ #bulk_rename_preview_table {
321
+ background: $surface-darken-1;
322
+ color: $text;
323
+ }
324
+
325
+ /* header */
326
+ #bulk_rename_preview_table .datatable--header {
327
+ background: $background-lighten-3;
328
+ color: $text;
329
+ }
330
+
331
+ #bulk_rename_preview_table .from-col {
332
+ color: $error;
333
+ }
334
+
335
+ #bulk_rename_preview_table .to-col {
336
+ color: $success;
337
+ }
338
+
339
+ #bulk_rename_dialog_container #bulk_rename_dialog_title {
340
+ width: 100%;
341
+ content-align: center middle;
342
+ text-style: bold;
343
+ margin-bottom: 1;
344
+ }
345
+
346
+ #dialog_container #dialog_message {
347
+ width: 100%;
348
+ content-align: center middle;
349
+ }
350
+
351
+ #select_dialog #dialog_container {
352
+ height: 15;
353
+ width: 50;
354
+ background: transparent;
355
+
356
+ #select_container {
357
+ margin: 1 0 0 0;
358
+ }
359
+ }
360
+
361
+ #dialog_container #prompt_input, #dialog_container #input_container {
362
+ height: 3;
363
+ margin: 1 5 0 5;
364
+ border: round $secondary;
365
+ background: transparent;
366
+
367
+ /* dialogs/InputDialog */
368
+ #input {
369
+ border: none;
370
+ background: transparent;
371
+ }
372
+ }
373
+
374
+ #dialog_container #prompt_flags {
375
+ height: 1;
376
+ align: center middle;
377
+ margin-top: 1;
378
+ }
379
+
380
+ #dialog_container #prompt_flags Checkbox {
381
+ border: none;
382
+ background: transparent;
383
+ }
384
+
385
+ #dialog_container #prompt_flags Checkbox .toggle--button {
386
+ border: round $primary;
387
+ background: $surface;
388
+ }
389
+
390
+ #dialog_container #prompt_flags Checkbox.-on > .toggle--button {
391
+ color: $text-primary;
392
+ }
393
+
394
+ #dialog_container #prompt_flags Checkbox:focus .toggle--label {
395
+ text-style: bold;
396
+ }
397
+
398
+ /* ============================================================================
399
+ Prompt SelectionList
400
+ ============================================================================ */
401
+ #dialog_container .prompt_selection_list {
402
+ height: 10;
403
+ margin: 0 5 0 5;
404
+ border: round $secondary;
405
+ background: transparent;
406
+ }
407
+
408
+ .selection_list_subtitle {
409
+ width: 100%;
410
+ margin: 1 0 0 0;
411
+ align: center middle;
412
+ text-align: center;
413
+ }
414
+
415
+ SelectionList .selection-list--button-selected,
416
+ SelectionList .selection-list--button-selected-highlighted {
417
+ color: $text-primary;
418
+ background: $surface;
419
+ }
420
+
421
+ SelectionList .selection-list--button,
422
+ SelectionList .selection-list--button-highlighted {
423
+ background: $surface;
424
+ }
425
+
426
+ #dialog_container .dialog_buttons {
427
+ dock: bottom;
428
+ height: auto;
429
+ margin-top: 1;
430
+ align: center middle;
431
+ }
432
+
433
+ #dialog_container .dialog_buttons Button {
434
+ height: 3;
435
+ width: 25%;
436
+ }
437
+
438
+ #dialog_container .hidden {
439
+ display: none;
440
+ }
441
+
442
+ /* ============================================================================
443
+ README Modal
444
+ ============================================================================ */
445
+
446
+ #readme_screen {
447
+ align: center middle;
448
+ background: $background 70%;
449
+ }
450
+
451
+ #readme_modal{
452
+ max-width: 150;
453
+ max-height: 50;
454
+ }
455
+
456
+ #readme_content {
457
+ border: round $secondary;
458
+ }
459
+
460
+ /* ============================================================================
461
+ Task Capture & Edit Modals
462
+ ============================================================================ */
463
+ TaskEditModal, TaskCaptureModal {
464
+ align: center middle;
465
+
466
+ Footer {
467
+ background: transparent;
468
+ }
469
+ }
470
+
471
+ #task_capture_modal,
472
+ #task_edit_modal {
473
+ align: center middle;
474
+ max-height: 10;
475
+ max-width: 130;
476
+ padding: 1 1;
477
+ border: round $secondary;
478
+ background: $panel;
479
+ }
480
+
481
+ #task_capture_input,
482
+ #task_edit_input {
483
+ width: 100%;
484
+ height: 3;
485
+ border: round $secondary;
486
+ background: transparent;
487
+ }
488
+
489
+ /* ============================================================================
490
+ Task List Screen
491
+ ============================================================================ */
492
+ TaskListScreen {
493
+ background: $background 70%;
494
+ align: center middle;
495
+ }
496
+
497
+ #task_list_modal {
498
+ align: center middle;
499
+ max-height: 35;
500
+ max-width: 130;
501
+ padding: 0;
502
+ background: $surface;
503
+ }
504
+
505
+ #task_list_view {
506
+ height: 1fr;
507
+ margin: 0 0;
508
+ border: round $secondary;
509
+ background: $background;
510
+ }
511
+
512
+ #task_filter_container {
513
+ width: 1fr;
514
+ padding: 0 0 0 0;
515
+ height: 3;
516
+ }
517
+
518
+ #task_filter_input {
519
+ width: 1fr;
520
+ border: round $secondary;
521
+ background: $background;
522
+ padding: 0 1;
523
+ height: auto;
524
+ margin-bottom: 1;
525
+ }
526
+
527
+ .task_item {
528
+ padding: 0 1;
529
+ height: 1;
530
+ }
531
+
532
+ .task_item--completed {
533
+ opacity: 0.55;
534
+ }
535
+
536
+ .task_item--loading {
537
+ height: 1fr;
538
+ }
539
+
540
+ .task_item--priority {
541
+ border-left: tall $error;
542
+ }
543
+
544
+ .task_item_text {
545
+ width: 1fr;
546
+ layout: horizontal;
547
+ color: $text;
548
+ }
549
+
550
+ .task_item_meta {
551
+ width: auto;
552
+ min-width: 16;
553
+ text-align: right;
554
+ color: $text-muted;
555
+ padding-left: 1;
556
+ }
557
+
558
+ #task_list_footer {
559
+ background: $background;
560
+ }
561
+
562
+ /* ============================================================================
563
+ Script Progress
564
+ ============================================================================ */
565
+ #progress-container {
566
+ align: center middle;
567
+ content-align: center middle;
568
+ }
569
+
570
+ #script_progress_bar {
571
+ width: 100%;
572
+ align: center middle;
573
+ }
574
+
575
+ #script_progress_bar #bar {
576
+ width: 90%;
577
+ }
578
+
579
+ #script_progress_bar #bar > .bar--bar, Bar > .bar--indeterminate {
580
+ color: $secondary;
581
+ background: $panel;
582
+ }
583
+
584
+ #progress_status {
585
+ text-align: center;
586
+ }
587
+
588
+ #progress_message {
589
+ text-align: center;
590
+ opacity: 0.5
591
+ }
592
+
593
+ /* ============================================================================
594
+ Process List
595
+ ============================================================================ */
596
+ #process_list_modal {
597
+ align: center middle;
598
+ height: 100%;
599
+ margin: 5 40;
600
+ padding: 0;
601
+ background: $surface;
602
+ }
603
+
604
+ #process_list_view {
605
+ height: 1fr;
606
+ margin: 0;
607
+ border: round $secondary;
608
+ background: $background;
609
+ }
610
+
611
+ #process_list_status {
612
+ height: 1;
613
+ padding: 0 1;
614
+ color: $text-muted;
615
+ }
616
+
617
+ .process_row {
618
+ height: 2;
619
+ padding: 0 1;
620
+ }
621
+
622
+ .process_row--empty {
623
+ color: $text-muted;
624
+ }
625
+
626
+ .process_row_title {
627
+ color: $text-primary;
628
+ text-style: bold;
629
+ }
630
+
631
+ .process_row_meta {
632
+ color: $text-muted;
633
+ }
634
+
635
+ .process_row.-highlight .process_row_title,
636
+ .process_row.-highlight .process_row_meta {
637
+ color: $text;
638
+ }