pyqt-code-editor 0.0.38__tar.gz → 0.0.40__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.
Files changed (79) hide show
  1. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/PKG-INFO +1 -1
  2. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/__init__.py +1 -1
  3. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/_settings.py +2 -2
  4. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/base.py +3 -0
  5. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/manager.py +25 -1
  6. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/COPYING +0 -0
  7. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyproject.toml +0 -0
  8. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/app.py +0 -0
  9. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/__init__.py +0 -0
  10. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/code_editors.py +0 -0
  11. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/languages/__init__.py +0 -0
  12. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/languages/generic.py +0 -0
  13. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/languages/markdown.py +0 -0
  14. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/languages/python.py +0 -0
  15. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/code_editors/languages/text.py +0 -0
  16. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/__init__.py +0 -0
  17. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/editor_panel.py +0 -0
  18. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/find_in_files.py +0 -0
  19. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/jupyter_console.py +0 -0
  20. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/project_explorer.py +0 -0
  21. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/settings_panel.py +0 -0
  22. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/sigmund.py +0 -0
  23. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/components/workspace_explorer.py +0 -0
  24. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/environment_manager.py +0 -0
  25. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/__init__.py +0 -0
  26. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/auto_indent.py +0 -0
  27. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/auto_pair.py +0 -0
  28. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/check.py +0 -0
  29. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/comment.py +0 -0
  30. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/complete.py +0 -0
  31. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/execute.py +0 -0
  32. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/file_link.py +0 -0
  33. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/line_number.py +0 -0
  34. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/python_auto_indent.py +0 -0
  35. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/search_replace.py +0 -0
  36. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/shortcuts.py +0 -0
  37. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/smart_backspace_delete.py +0 -0
  38. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/symbols.py +0 -0
  39. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/theme.py +0 -0
  40. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/widgets/__init__.py +0 -0
  41. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/mixins/zoom.py +0 -0
  42. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/sigmund-analyst.png +0 -0
  43. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/signal_router.py +0 -0
  44. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/syntax_highlighters/__init__.py +0 -0
  45. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/syntax_highlighters/languages/__init__.py +0 -0
  46. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/syntax_highlighters/languages/generic.py +0 -0
  47. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/syntax_highlighters/languages/python.py +0 -0
  48. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/syntax_highlighters/syntax_highlighter.py +0 -0
  49. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/themes.py +0 -0
  50. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/__init__.py +0 -0
  51. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/languages/__init__.py +0 -0
  52. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/languages/python/__init__.py +0 -0
  53. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/languages/python/_auto_indent.py +0 -0
  54. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/languages/python/_extract_cells.py +0 -0
  55. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/utils/languages/python/_mask_str_in_code.py +0 -0
  56. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/watchdog.py +0 -0
  57. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/__init__.py +0 -0
  58. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/calltip_widget.py +0 -0
  59. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/completion_popup.py +0 -0
  60. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/dock.py +0 -0
  61. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/quick_open_dialog.py +0 -0
  62. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/quick_open_file_dialog.py +0 -0
  63. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/quick_symbol_dialog.py +0 -0
  64. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/search_replace_frame.py +0 -0
  65. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/tab_splitter.py +0 -0
  66. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/widgets/tabbed_editor.py +0 -0
  67. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/__init__.py +0 -0
  68. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/languages/__init__.py +0 -0
  69. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/languages/generic.py +0 -0
  70. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/languages/python.py +0 -0
  71. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/process.py +0 -0
  72. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/__init__.py +0 -0
  73. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/codestral.py +0 -0
  74. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/jedi.py +0 -0
  75. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/ruff.py +0 -0
  76. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/sigmund.py +0 -0
  77. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/providers/symbol.py +0 -0
  78. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/pyqt_code_editor/worker/settings.py +0 -0
  79. {pyqt_code_editor-0.0.38 → pyqt_code_editor-0.0.40}/readme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqt_code_editor
3
- Version: 0.0.38
3
+ Version: 0.0.40
4
4
  Summary: Fully featured code-editor widgets for PyQt
5
5
  Keywords: code editor,pyqt,ide
6
6
  Author-email: Sebastiaan Mathôt <s.mathot@cogsci.nl>
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._settings import settings
4
4
 
5
- __version__ = '0.0.38'
5
+ __version__ = '0.0.40'
@@ -230,8 +230,8 @@ class Settings(QObject):
230
230
  from .utils import get_first_available_font
231
231
 
232
232
  self.font_family = get_first_available_font(
233
- ['Ubuntu Mono', 'Liberation Mono', 'DejaVu Sans Mono', 'Courier New',
234
- 'monospace'])
233
+ ['Ubuntu Mono', 'Liberation Mono', 'DejaVu Sans Mono', 'Consolas',
234
+ 'Menlo', 'Courier New', 'monospace'])
235
235
 
236
236
  # Fallback if no font was found
237
237
  if self.font_family is None:
@@ -74,6 +74,9 @@ class Base:
74
74
  so we can handle multiple concurrent requests.
75
75
  """
76
76
  result_queue, pid = manager.send_worker_request(**data)
77
+ if result_queue is None:
78
+ logger.info('Request ignored')
79
+ return
77
80
  self._active_requests[pid] = result_queue
78
81
  logger.info(f"Sent request to worker {pid}, now tracking {len(self._active_requests)} active requests.")
79
82
 
@@ -7,6 +7,7 @@ logger = logging.getLogger(__name__)
7
7
  STOP_UNUSED_INTERVAL = 10
8
8
  _last_stop_unused_time = 0
9
9
  _workers = {} # pid -> {"process", "request_queue", "result_queue", "is_free"}
10
+ suspended = False
10
11
 
11
12
 
12
13
  def send_worker_request(**data) -> (Queue, int):
@@ -16,7 +17,11 @@ def send_worker_request(**data) -> (Queue, int):
16
17
 
17
18
  The caller can poll the result_queue for responses, and once done,
18
19
  call mark_worker_as_free(pid) to release this worker for future use.
20
+
21
+ If workers are suspended, return (None, None).
19
22
  """
23
+ if suspended:
24
+ return None, None
20
25
  # 1. Look for an existing free worker
21
26
  for pid, w in list(_workers.items()):
22
27
  if w["is_free"] and w["process"].is_alive():
@@ -100,7 +105,7 @@ def stop_all_workers():
100
105
  """
101
106
  Cleanly shut down all worker processes.
102
107
  """
103
- logger.info("Stopping all worker processes...")
108
+ logger.info(f"Stopping {len(_workers)} worker processes...")
104
109
  for pid, w in list(_workers.items()):
105
110
  if w["process"].is_alive():
106
111
  logger.info(f"Stopping worker {pid}.")
@@ -116,4 +121,23 @@ def update_setting(name, value):
116
121
  for pid, w in _workers.items():
117
122
  if w["process"].is_alive():
118
123
  w["request_queue"].put(settings_action)
124
+
125
+
126
+ def suspend():
127
+ """Stops all worker processes and ignores all requests until resume() is
128
+ called.
129
+ """
130
+ global suspended
131
+ suspended = True
132
+ logger.info("Suspending worker processes...")
133
+ stop_all_workers()
134
+
135
+
136
+ def resume():
137
+ """Resumes accepting requests."""
138
+ global suspended
139
+ suspended = False
140
+ logger.info("Resuming worker processes...")
141
+
142
+
119
143
  settings.setting_changed.connect(update_setting)