remoteRF-server 0.1.68__tar.gz → 0.1.69__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 (42) hide show
  1. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/PKG-INFO +1 -1
  2. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/pyproject.toml +1 -1
  3. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_tunnel_server.py +31 -66
  4. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
  5. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/README.md +0 -0
  6. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/setup.cfg +0 -0
  7. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/__init__.py +0 -0
  8. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/__init__.py +0 -0
  9. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  10. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  11. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  12. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  13. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  14. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/__init__.py +0 -0
  15. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  16. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/api_token.py +0 -0
  17. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  18. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_location.py +0 -0
  19. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/list_string.py +0 -0
  20. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  21. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/__init__.py +0 -0
  22. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  23. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  24. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/__init__.py +0 -0
  25. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_directory_store.py +0 -0
  26. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/__init__.py +0 -0
  27. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/acc_perms.py +0 -0
  28. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/cert_provider.py +0 -0
  29. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/device_manager.py +0 -0
  30. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/grpc_server.py +0 -0
  31. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/reservation.py +0 -0
  32. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/rpc_manager.py +0 -0
  33. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_cli.py +0 -0
  34. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_handler.py +0 -0
  35. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/serverrf_cli.py +0 -0
  36. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/tools/__init__.py +0 -0
  37. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/tools/gen_certs.py +0 -0
  38. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  39. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  40. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  41. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/requires.txt +0 -0
  42. {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.68
3
+ Version: 0.1.69
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "0.1.68"
7
+ version = "0.1.69"
8
8
  dependencies = [
9
9
  "grpcio",
10
10
  "protobuf",
@@ -10,6 +10,7 @@ import secrets
10
10
  import traceback
11
11
  import hashlib
12
12
  import re
13
+ import os
13
14
 
14
15
  from dataclasses import dataclass
15
16
  from typing import Dict, Optional, Tuple, Any, List, Set, Iterator
@@ -18,7 +19,6 @@ from concurrent.futures import Future
18
19
  from concurrent import futures
19
20
 
20
21
  import grpc
21
- import os
22
22
 
23
23
  # Your existing GenericRPC schema compiled to python.
24
24
  from ..common.grpc import grpc_pb2 as generic_pb2 # type: ignore
@@ -39,58 +39,18 @@ from .host_directory_store import (
39
39
  )
40
40
 
41
41
  # =============================================================================
42
- # Always-on logging with lightweight toggles (env + runtime)
42
+ # Hardcoded logging mode (NO env vars)
43
+ #
44
+ # Pick ONE:
45
+ # LOG_MODE = "OFF" -> show nothing
46
+ # LOG_MODE = "WARN" -> show only WARN + ERROR
47
+ # LOG_MODE = "ALL" -> show everything (INFO + WARN + ERROR)
43
48
  # =============================================================================
44
49
 
45
- _LOG_LOCK = threading.Lock()
46
- _LOG_LEVELS: set[str] = set() # {"INFO","WARN","ERROR"}
47
- _LOG_SUPPRESS: set[str] = set() # {"HEARTBEAT","OUTBOUND","INBOUND"}
48
-
49
- def _init_log_state_from_env() -> None:
50
- """
51
- Env knobs:
52
- REMOTERF_LOG_LEVELS="INFO,WARN,ERROR" (default: WARN,ERROR)
53
- REMOTERF_LOG_SUPPRESS="HEARTBEAT" (default: HEARTBEAT)
54
- """
55
- global _LOG_LEVELS, _LOG_SUPPRESS
56
-
57
- levels = os.getenv("REMOTERF_LOG_LEVELS", "").strip()
58
- suppress = os.getenv("REMOTERF_LOG_SUPPRESS", "").strip()
59
-
60
- if not levels:
61
- _LOG_LEVELS = {"WARN", "ERROR"}
62
- else:
63
- _LOG_LEVELS = {x.strip().upper() for x in levels.split(",") if x.strip()}
64
-
65
- if not suppress:
66
- _LOG_SUPPRESS = {"HEARTBEAT"} # sane default: avoid spam
67
- else:
68
- _LOG_SUPPRESS = {x.strip().upper() for x in suppress.split(",") if x.strip()}
50
+ LOG_MODE = "WARN" # <-- change this
69
51
 
70
- _init_log_state_from_env()
71
-
72
- def set_log_levels(levels: str) -> None:
73
- """Runtime: set levels, e.g. set_log_levels('INFO,WARN,ERROR')"""
74
- global _LOG_LEVELS
75
- with _LOG_LOCK:
76
- _LOG_LEVELS = {x.strip().upper() for x in (levels or "").split(",") if x.strip()}
77
-
78
- def set_log_suppress(tags: str) -> None:
79
- """Runtime: set suppressed tags, e.g. set_log_suppress('HEARTBEAT,OUTBOUND')"""
80
- global _LOG_SUPPRESS
81
- with _LOG_LOCK:
82
- _LOG_SUPPRESS = {x.strip().upper() for x in (tags or "").split(",") if x.strip()}
52
+ _LOG_LOCK = threading.Lock()
83
53
 
84
- def _should_log(level: str, tag: str = "") -> bool:
85
- lvl = (level or "").upper()
86
- tg = (tag or "").upper()
87
- with _LOG_LOCK:
88
- if lvl not in _LOG_LEVELS:
89
- return False
90
- if tg and tg in _LOG_SUPPRESS:
91
- return False
92
- return True
93
-
94
54
  def _ts() -> str:
95
55
  t = time.time()
96
56
  sec = int(t)
@@ -98,23 +58,35 @@ def _ts() -> str:
98
58
  lt = time.localtime(sec)
99
59
  return time.strftime("%H:%M:%S", lt) + f".{ms:03d}"
100
60
 
101
- def _log(level: str, msg: str, *, tag: str = "") -> None:
102
- if not _should_log(level, tag):
61
+ def _should_log(level: str) -> bool:
62
+ lvl = (level or "").upper()
63
+ mode = (LOG_MODE or "").upper()
64
+ if mode == "OFF":
65
+ return False
66
+ if mode == "WARN":
67
+ return lvl in ("WARN", "ERROR")
68
+ if mode == "ALL":
69
+ return lvl in ("INFO", "WARN", "ERROR")
70
+ # safe default if mis-set
71
+ return lvl in ("WARN", "ERROR")
72
+
73
+ def _log(level: str, msg: str) -> None:
74
+ if not _should_log(level):
103
75
  return
104
76
  tn = threading.current_thread().name
105
77
  print(f"{_ts()} {level:<5} [{tn}] hostrf.host_tunnel_server: {msg}", file=sys.stderr, flush=True)
106
78
 
107
- def info(msg: str, *, tag: str = "") -> None:
108
- _log("INFO", msg, tag=tag)
79
+ def info(msg: str) -> None:
80
+ _log("INFO", msg)
109
81
 
110
- def warn(msg: str, *, tag: str = "") -> None:
111
- _log("WARN", msg, tag=tag)
82
+ def warn(msg: str) -> None:
83
+ _log("WARN", msg)
112
84
 
113
- def error(msg: str, *, tag: str = "") -> None:
114
- _log("ERROR", msg, tag=tag)
85
+ def error(msg: str) -> None:
86
+ _log("ERROR", msg)
115
87
 
116
- def exception(msg: str, *, tag: str = "") -> None:
117
- _log("ERROR", msg, tag=tag)
88
+ def exception(msg: str) -> None:
89
+ _log("ERROR", msg)
118
90
  traceback.print_exc(limit=80, file=sys.stderr)
119
91
 
120
92
  # =============================================================================
@@ -139,7 +111,6 @@ def _copy_argument_map(dst_map: Any, src_map: Any) -> None:
139
111
  for k, v in dict(src_map).items():
140
112
  dst_map[str(k)].CopyFrom(v)
141
113
 
142
-
143
114
  # =============================================================================
144
115
  # Types
145
116
  # =============================================================================
@@ -163,7 +134,6 @@ class DeviceStatus:
163
134
  online: bool = False
164
135
  last_seen_ms: int = 0
165
136
 
166
-
167
137
  # =============================================================================
168
138
  # Session
169
139
  # =============================================================================
@@ -221,7 +191,6 @@ class HostSession:
221
191
 
222
192
  info(f"[session] closed host_id={self.host_id!r}")
223
193
 
224
-
225
194
  # =============================================================================
226
195
  # Registry
227
196
  # =============================================================================
@@ -771,7 +740,6 @@ class HostTunnelRegistry:
771
740
  cancel_on_timeout=cancel_on_timeout,
772
741
  )
773
742
 
774
-
775
743
  # =============================================================================
776
744
  # Convenience forwarders
777
745
  # =============================================================================
@@ -818,7 +786,6 @@ def handle_host_device_request(
818
786
  cancel_on_timeout=True,
819
787
  )
820
788
 
821
-
822
789
  # =============================================================================
823
790
  # Servicer
824
791
  # =============================================================================
@@ -1036,7 +1003,6 @@ class HostTunnelServicer(host_tunnel_pb2_grpc.HostTunnelServicer):
1036
1003
 
1037
1004
  info(f"[Connect] stream ended peer={peer} host_id={host_id or '?'}")
1038
1005
 
1039
-
1040
1006
  # =============================================================================
1041
1007
  # Credentials + server start
1042
1008
  # =============================================================================
@@ -1057,7 +1023,6 @@ def build_server_credentials(
1057
1023
  )
1058
1024
  return grpc.ssl_server_credentials(((private_key_pem, certificate_chain_pem),))
1059
1025
 
1060
-
1061
1026
  def start_host_tunnel_server(
1062
1027
  *,
1063
1028
  host: str,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.68
3
+ Version: 0.1.69
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf