arcade-core 4.2.0__py3-none-any.whl → 4.2.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.
@@ -6,7 +6,6 @@ supporting pre-login anonymous tracking, post-login identity stitching,
6
6
  and logout identity rotation.
7
7
  """
8
8
 
9
- import fcntl
10
9
  import json
11
10
  import os
12
11
  import tempfile
@@ -14,6 +13,7 @@ import uuid
14
13
  from typing import Any
15
14
 
16
15
  import httpx
16
+ import portalocker
17
17
  import yaml
18
18
 
19
19
  from arcade_core.constants import ARCADE_CONFIG_PATH, CREDENTIALS_FILE_PATH
@@ -46,18 +46,16 @@ class UsageIdentity:
46
46
  if os.path.exists(self.usage_file_path):
47
47
  try:
48
48
  with open(self.usage_file_path) as f:
49
- # lock file
50
- if os.name != "nt": # Unix-like systems
51
- fcntl.flock(f.fileno(), fcntl.LOCK_SH)
49
+ # Lock file for reading (shared lock)
50
+ portalocker.lock(f, portalocker.LOCK_SH)
52
51
  try:
53
52
  data = json.load(f)
54
53
  if isinstance(data, dict) and KEY_ANON_ID in data:
55
54
  self._data = data
56
55
  return self._data
57
56
  finally:
58
- # unlock file
59
- if os.name != "nt":
60
- fcntl.flock(f.fileno(), fcntl.LOCK_UN)
57
+ # Unlock file
58
+ portalocker.unlock(f)
61
59
  except Exception: # noqa: S110
62
60
  pass
63
61
 
@@ -80,18 +78,18 @@ class UsageIdentity:
80
78
 
81
79
  try:
82
80
  with os.fdopen(temp_fd, "w") as f:
83
- # lock file
84
- if os.name != "nt": # Unix-like systems
85
- fcntl.flock(f.fileno(), fcntl.LOCK_EX)
81
+ # Lock file for writing (exclusive lock)
82
+ portalocker.lock(f, portalocker.LOCK_EX)
86
83
  try:
87
84
  json.dump(data, f, indent=2)
88
85
  f.flush()
89
86
  os.fsync(f.fileno()) # ensure data is written to disk
90
87
  finally:
91
- if os.name != "nt":
92
- fcntl.flock(f.fileno(), fcntl.LOCK_UN)
88
+ portalocker.unlock(f)
93
89
 
94
- os.rename(temp_path, self.usage_file_path)
90
+ # Use os.replace() for cross-platform atomic file replacement
91
+ # os.replace() is atomic on both Unix and Windows (Python 3.3+)
92
+ os.replace(temp_path, self.usage_file_path)
95
93
  except Exception:
96
94
  # clean up
97
95
  import contextlib
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arcade-core
3
- Version: 4.2.0
3
+ Version: 4.2.1
4
4
  Summary: Arcade Core - Core library for Arcade platform
5
5
  Author-email: Arcade <dev@arcade.dev>
6
6
  License: MIT
@@ -16,6 +16,7 @@ Requires-Python: >=3.10
16
16
  Requires-Dist: httpx>=0.27.0
17
17
  Requires-Dist: loguru>=0.7.0
18
18
  Requires-Dist: packaging>=24.1
19
+ Requires-Dist: portalocker>=2.10.0
19
20
  Requires-Dist: pydantic>=2.7.0
20
21
  Requires-Dist: pyjwt>=2.8.0
21
22
  Requires-Dist: pyyaml>=6.0
@@ -26,9 +26,9 @@ arcade_core/network/org_transport.py,sha256=DZdIYdldtYZ6gtmWA1C8dXmsNuOv7tePhlpB
26
26
  arcade_core/usage/__init__.py,sha256=SUR5mqF-bjdbl-P-OOHN6OFAjXZu4agXyPhr7xdVXCw,234
27
27
  arcade_core/usage/__main__.py,sha256=rSJkE1G9hlV3HRRA6EJE5Lmy3wKyan7rAxBXHX9A1cI,1577
28
28
  arcade_core/usage/constants.py,sha256=1FQIhkFFMZUhU-H4A7GvMb7KQ3qLFrNAZb2-LEvSF3k,1052
29
- arcade_core/usage/identity.py,sha256=egclRR26jGP1vVvoOoaaZdcS4AtSTZ8fLHpBq1HRgHw,8452
29
+ arcade_core/usage/identity.py,sha256=h_THm-cN3j8nqW7_Lew7OdBRA70valCKJ7zvhDvja_E,8416
30
30
  arcade_core/usage/usage_service.py,sha256=xzWWSEktm58liiNYugBHRactSru8V5foriHcsoH0j1A,3407
31
31
  arcade_core/usage/utils.py,sha256=FqBOmlhwT68cbnpI5Vx9ZW6vLRYPVg4FJ0GaMEp8qEM,398
32
- arcade_core-4.2.0.dist-info/METADATA,sha256=9MoBNcEU1QcYlpXatMEe6Lj_OhbJUKCuyaCuZ0FQ52E,2412
33
- arcade_core-4.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
- arcade_core-4.2.0.dist-info/RECORD,,
32
+ arcade_core-4.2.1.dist-info/METADATA,sha256=5lFJ1C5vqqBXHLC51RdiGvHFsddE-JbG69wt8MFydlM,2447
33
+ arcade_core-4.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
+ arcade_core-4.2.1.dist-info/RECORD,,