winipedia-utils 0.1.61__tar.gz → 0.1.63__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.

Potentially problematic release.


This version of winipedia-utils might be problematic. Click here for more details.

Files changed (100) hide show
  1. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/pyproject.toml +1 -1
  3. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/django/__init__.py +0 -3
  4. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/django/bulk.py +6 -4
  5. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/django/database.py +4 -4
  6. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/widgets/media_player.py +9 -2
  7. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/LICENSE +0 -0
  8. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/README.md +0 -0
  9. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/__init__.py +0 -0
  10. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/concurrent/__init__.py +0 -0
  11. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/concurrent/concurrent.py +0 -0
  12. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  13. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/concurrent/multithreading.py +0 -0
  14. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/consts.py +0 -0
  15. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/data/__init__.py +0 -0
  16. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/data/dataframe.py +0 -0
  17. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/django/command.py +0 -0
  18. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/__init__.py +0 -0
  19. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/gitignore/__init__.py +0 -0
  20. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  21. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  22. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/pre_commit/config.py +0 -0
  23. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  24. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  25. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/iterating/__init__.py +0 -0
  26. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/iterating/iterate.py +0 -0
  27. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/logging/__init__.py +0 -0
  28. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/logging/ansi.py +0 -0
  29. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/logging/config.py +0 -0
  30. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/logging/logger.py +0 -0
  31. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/modules/__init__.py +0 -0
  32. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/modules/class_.py +0 -0
  33. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/modules/function.py +0 -0
  34. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/modules/module.py +0 -0
  35. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/modules/package.py +0 -0
  36. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/oop/__init__.py +0 -0
  37. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/oop/mixins/__init__.py +0 -0
  38. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/oop/mixins/meta.py +0 -0
  39. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/oop/mixins/mixin.py +0 -0
  40. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/os/__init__.py +0 -0
  41. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/os/os.py +0 -0
  42. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/projects/__init__.py +0 -0
  43. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/projects/poetry/__init__.py +0 -0
  44. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/projects/poetry/config.py +0 -0
  45. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/projects/poetry/poetry.py +0 -0
  46. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/projects/project.py +0 -0
  47. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/py.typed +0 -0
  48. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/__init__.py +0 -0
  49. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/core/__init__.py +0 -0
  50. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/core/py_qiodevice.py +0 -0
  51. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/__init__.py +0 -0
  52. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  53. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/base/base.py +0 -0
  54. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  55. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  56. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  57. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  58. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  59. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  60. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  61. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/widgets/clickable_widget.py +0 -0
  62. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/widgets/notification.py +0 -0
  63. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  64. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  65. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  66. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/__init__.py +0 -0
  67. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/__init__.py +0 -0
  68. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/delete_garbage_can.svg +0 -0
  69. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  70. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  71. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  72. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/menu_icon.svg +0 -0
  73. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  74. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  75. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/plus_icon.svg +0 -0
  76. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/resources/svgs/svg.py +0 -0
  77. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/security/__init__.py +0 -0
  78. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/security/cryptography.py +0 -0
  79. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/security/keyring.py +0 -0
  80. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/setup.py +0 -0
  81. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/__init__.py +0 -0
  82. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/assertions.py +0 -0
  83. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/convention.py +0 -0
  84. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/create_tests.py +0 -0
  85. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/fixtures.py +0 -0
  86. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/__init__.py +0 -0
  87. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  88. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  89. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  90. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  91. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  92. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  93. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  94. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  95. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  96. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  97. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  98. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/testing/tests/conftest.py +0 -0
  99. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/text/__init__.py +0 -0
  100. {winipedia_utils-0.1.61 → winipedia_utils-0.1.63}/winipedia_utils/text/string.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: winipedia-utils
3
- Version: 0.1.61
3
+ Version: 0.1.63
4
4
  Summary: A package with many utility functions
5
5
  License: MIT
6
6
  Author: Winipedia
@@ -1,7 +1,7 @@
1
1
  # Project section
2
2
  [project]
3
3
  name = "winipedia-utils"
4
- version = "0.1.61"
4
+ version = "0.1.63"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12,<3.14"
@@ -14,9 +14,6 @@ logger.info("Monkeypatched django-stubs")
14
14
  if not settings.configured:
15
15
  logger.info("Configuring minimal django settings")
16
16
  settings.configure(
17
- INSTALLED_APPS=[
18
- "django.contrib.contenttypes",
19
- ],
20
17
  DATABASES={
21
18
  "default": {
22
19
  "ENGINE": "django.db.backends.sqlite3",
@@ -9,9 +9,8 @@ from collections import defaultdict
9
9
  from collections.abc import Callable, Generator, Iterable
10
10
  from functools import partial
11
11
  from itertools import islice
12
- from typing import Any, Literal, cast, get_args
12
+ from typing import TYPE_CHECKING, Any, Literal, cast, get_args
13
13
 
14
- from django.contrib.contenttypes.fields import GenericForeignKey
15
14
  from django.db import router, transaction
16
15
  from django.db.models import (
17
16
  Field,
@@ -19,7 +18,6 @@ from django.db.models import (
19
18
  QuerySet,
20
19
  )
21
20
  from django.db.models.deletion import Collector
22
- from django.db.models.fields.related import ForeignObjectRel
23
21
 
24
22
  from winipedia_utils.concurrent.multithreading import multithread_loop
25
23
  from winipedia_utils.django.database import (
@@ -28,6 +26,10 @@ from winipedia_utils.django.database import (
28
26
  )
29
27
  from winipedia_utils.logging.logger import get_logger
30
28
 
29
+ if TYPE_CHECKING:
30
+ from django.contrib.contenttypes.fields import GenericForeignKey
31
+ from django.db.models.fields.related import ForeignObjectRel
32
+
31
33
  logger = get_logger(__name__)
32
34
 
33
35
  MODE_TYPES = Literal["create", "update", "delete"]
@@ -389,7 +391,7 @@ def bulk_create_bulks_in_steps(
389
391
  def get_differences_between_bulks(
390
392
  bulk1: list[Model],
391
393
  bulk2: list[Model],
392
- fields: list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey],
394
+ fields: "list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]",
393
395
  ) -> tuple[list[Model], list[Model], list[Model], list[Model]]:
394
396
  """Compare two bulks and return their differences and intersections.
395
397
 
@@ -9,7 +9,6 @@ from datetime import datetime
9
9
  from graphlib import TopologicalSorter
10
10
  from typing import TYPE_CHECKING, Any, Self
11
11
 
12
- from django.contrib.contenttypes.fields import GenericForeignKey
13
12
  from django.db import connection
14
13
  from django.db.models import DateTimeField, Field, Model
15
14
  from django.db.models.fields.related import ForeignKey, ForeignObjectRel
@@ -18,6 +17,7 @@ from django.forms.models import model_to_dict
18
17
  from winipedia_utils.logging.logger import get_logger
19
18
 
20
19
  if TYPE_CHECKING:
20
+ from django.contrib.contenttypes.fields import GenericForeignKey
21
21
  from django.db.models.options import Options
22
22
 
23
23
  logger = get_logger(__name__)
@@ -51,7 +51,7 @@ def get_model_meta(model: type[Model]) -> "Options[Model]":
51
51
 
52
52
  def get_fields(
53
53
  model: type[Model],
54
- ) -> list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]:
54
+ ) -> "list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]":
55
55
  """Get all fields from a Django model including relationships.
56
56
 
57
57
  Retrieves all field objects from a Django model, including regular fields,
@@ -83,7 +83,7 @@ def get_fields(
83
83
 
84
84
 
85
85
  def get_field_names(
86
- fields: list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey],
86
+ fields: "list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]",
87
87
  ) -> list[str]:
88
88
  """Get the names of all fields from a Django model including relationships.
89
89
 
@@ -222,7 +222,7 @@ def execute_sql(
222
222
 
223
223
  def hash_model_instance(
224
224
  instance: Model,
225
- fields: list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey],
225
+ fields: "list[Field[Any, Any] | ForeignObjectRel | GenericForeignKey]",
226
226
  ) -> int:
227
227
  """Hash a model instance based on its field values.
228
228
 
@@ -44,6 +44,7 @@ class MediaPlayer(QMediaPlayer):
44
44
  """
45
45
  super().__init__(*args, **kwargs)
46
46
  self.parent_layout = parent_layout
47
+ self.io_device: PyQIODevice | None = None
47
48
  self.make_widget()
48
49
 
49
50
  def make_widget(self) -> None:
@@ -342,12 +343,12 @@ class MediaPlayer(QMediaPlayer):
342
343
  source_url: The QUrl representing the source location.
343
344
  position: The position to start playback from in milliseconds.
344
345
  """
345
- self.stop()
346
+ self.stop_and_close_io_device()
346
347
 
347
348
  self.resume_func = partial(self.resume_to_position, position=position)
348
349
  self.mediaStatusChanged.connect(self.resume_func)
349
350
 
350
- # prevents freezing when starting a new video while another is playing
351
+ # SingleShot prevents freezing when starting new video while another is playing
351
352
  QTimer.singleShot(
352
353
  100,
353
354
  partial(
@@ -355,6 +356,12 @@ class MediaPlayer(QMediaPlayer):
355
356
  ),
356
357
  )
357
358
 
359
+ def stop_and_close_io_device(self) -> None:
360
+ """Stop playback and close the IO device."""
361
+ self.stop()
362
+ if self.io_device is not None:
363
+ self.io_device.close()
364
+
358
365
  def resume_to_position(
359
366
  self, status: QMediaPlayer.MediaStatus, position: int
360
367
  ) -> None: