remoteRF-server 0.1.74__tar.gz → 0.1.75__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.
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/PKG-INFO +1 -1
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/pyproject.toml +1 -1
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/grpc_server.py +213 -69
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/README.md +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/setup.cfg +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/api_token.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/db_connection.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/db_location.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/list_string.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/process_arg.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/drivers/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/host/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/host/host_directory_store.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/acc_perms.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/cert_provider.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/device_manager.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/reservation.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/rpc_manager.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/user_group_cli.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/user_group_handler.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/serverrf_cli.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/tools/__init__.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/tools/gen_certs.py +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/requires.txt +0 -0
- {remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/top_level.txt +0 -0
|
@@ -461,24 +461,96 @@ def _repo_root_guess() -> Path:
|
|
|
461
461
|
# fallback
|
|
462
462
|
return p.parents[3] if len(p.parents) >= 4 else p.parent
|
|
463
463
|
|
|
464
|
+
from __future__ import annotations
|
|
465
|
+
from pathlib import Path
|
|
466
|
+
import os
|
|
467
|
+
import re
|
|
468
|
+
import time
|
|
469
|
+
from typing import Any
|
|
470
|
+
|
|
471
|
+
# Optional: if you later add "kick" support (see section 2)
|
|
472
|
+
HOST_TUNNEL_EPOCH = 0
|
|
473
|
+
|
|
474
|
+
def _read_env_kv_file(path: Path) -> dict[str, str]:
|
|
475
|
+
out: dict[str, str] = {}
|
|
476
|
+
if not path.exists():
|
|
477
|
+
return out
|
|
478
|
+
for raw in path.read_text(encoding="utf-8").splitlines():
|
|
479
|
+
line = raw.strip()
|
|
480
|
+
if not line or line.startswith("#") or "=" not in line:
|
|
481
|
+
continue
|
|
482
|
+
k, v = line.split("=", 1)
|
|
483
|
+
out[k.strip()] = v.strip().strip('"').strip("'")
|
|
484
|
+
return out
|
|
485
|
+
|
|
486
|
+
def _env_values_as_paths(env_path: Path) -> list[Path]:
|
|
487
|
+
"""
|
|
488
|
+
Parse an env file and treat values that look like filesystem paths as candidate dirs.
|
|
489
|
+
Relative paths are resolved relative to the env file's directory.
|
|
490
|
+
"""
|
|
491
|
+
kv = _read_env_kv_file(env_path)
|
|
492
|
+
base = env_path.parent
|
|
493
|
+
out: list[Path] = []
|
|
494
|
+
|
|
495
|
+
for _, v in kv.items():
|
|
496
|
+
if not v:
|
|
497
|
+
continue
|
|
498
|
+
# heuristics: looks like a path
|
|
499
|
+
if ("/" not in v) and ("\\" not in v) and (not v.startswith(".")) and (not v.startswith("~")):
|
|
500
|
+
continue
|
|
501
|
+
|
|
502
|
+
p = Path(v).expanduser()
|
|
503
|
+
if not p.is_absolute():
|
|
504
|
+
p = (base / p).resolve()
|
|
505
|
+
out.append(p)
|
|
506
|
+
|
|
507
|
+
return out
|
|
508
|
+
|
|
464
509
|
def _host_state_dirs() -> list[Path]:
|
|
465
510
|
"""
|
|
466
|
-
|
|
467
|
-
-
|
|
468
|
-
-
|
|
469
|
-
-
|
|
511
|
+
Aggressive candidate list:
|
|
512
|
+
- user config (~/.config/remoterf or REMOTERF_CONFIG_DIR)
|
|
513
|
+
- repo/.config
|
|
514
|
+
- repo/config (+ common subdirs)
|
|
515
|
+
- src/remoteRF_server/config
|
|
516
|
+
- plus env overrides + paths referenced by .env.host_directory (if present)
|
|
470
517
|
"""
|
|
471
|
-
|
|
518
|
+
repo = _repo_root_guess()
|
|
519
|
+
|
|
520
|
+
cands: list[Path] = [
|
|
472
521
|
_cfg_dir(),
|
|
473
|
-
|
|
474
|
-
|
|
522
|
+
repo / ".config",
|
|
523
|
+
repo / "config",
|
|
524
|
+
repo / "config" / "remoteRF_server",
|
|
525
|
+
repo / "config" / "remoteRF_host",
|
|
526
|
+
repo / "src" / "remoteRF_server" / "config",
|
|
527
|
+
(Path(__file__).resolve().parent.parent / "config"),
|
|
475
528
|
]
|
|
476
529
|
|
|
530
|
+
# Environment overrides (add any you might plausibly use)
|
|
531
|
+
for k in (
|
|
532
|
+
"REMOTERF_HOSTDIR_DIR",
|
|
533
|
+
"REMOTERF_HOST_DIRECTORY_DIR",
|
|
534
|
+
"REMOTERF_HOST_DIR",
|
|
535
|
+
"HOST_DIRECTORY_DIR",
|
|
536
|
+
"HOST_DIRECTORY_PATH",
|
|
537
|
+
"REMOTERF_STATE_DIR",
|
|
538
|
+
):
|
|
539
|
+
v = os.getenv(k)
|
|
540
|
+
if v:
|
|
541
|
+
cands.append(Path(v).expanduser())
|
|
542
|
+
|
|
543
|
+
# If you have a .env.host_directory file, harvest any path-like values from it
|
|
544
|
+
env_host_dir = repo / "src" / "remoteRF_server" / "config" / ".env.host_directory"
|
|
545
|
+
if env_host_dir.exists():
|
|
546
|
+
cands.extend(_env_values_as_paths(env_host_dir))
|
|
547
|
+
|
|
548
|
+
# de-dupe + keep only dirs (or dirs that could exist)
|
|
477
549
|
out: list[Path] = []
|
|
478
550
|
seen: set[str] = set()
|
|
479
551
|
for d in cands:
|
|
480
552
|
try:
|
|
481
|
-
rp = str(d.resolve())
|
|
553
|
+
rp = str(d.expanduser().resolve())
|
|
482
554
|
except Exception:
|
|
483
555
|
rp = str(d)
|
|
484
556
|
if rp not in seen:
|
|
@@ -488,20 +560,42 @@ def _host_state_dirs() -> list[Path]:
|
|
|
488
560
|
|
|
489
561
|
def _host_state_files() -> list[Path]:
|
|
490
562
|
"""
|
|
491
|
-
|
|
492
|
-
|
|
563
|
+
Broader scan than just host_directory.env:
|
|
564
|
+
We only match filenames that clearly look like host/tunnel/registry state.
|
|
493
565
|
"""
|
|
566
|
+
patterns = [
|
|
567
|
+
"host_directory*.env",
|
|
568
|
+
"host_directory*.json",
|
|
569
|
+
"host_directory*.db",
|
|
570
|
+
"host_directory*.sqlite*",
|
|
571
|
+
"host_directory*.pkl",
|
|
572
|
+
"host_tunnel*.env",
|
|
573
|
+
"host_tunnel*.json",
|
|
574
|
+
"tunnel_registry*.env",
|
|
575
|
+
"tunnel_registry*.json",
|
|
576
|
+
"*host*registry*.json",
|
|
577
|
+
"*host*registry*.db",
|
|
578
|
+
"*host*registry*.sqlite*",
|
|
579
|
+
"*host*state*.json",
|
|
580
|
+
"*host*state*.db",
|
|
581
|
+
"*host*state*.sqlite*",
|
|
582
|
+
]
|
|
583
|
+
|
|
494
584
|
files: list[Path] = []
|
|
495
585
|
for d in _host_state_dirs():
|
|
496
|
-
files.append(d / "host_directory.env")
|
|
497
|
-
files.append(d / "host_directory_meta.env")
|
|
498
|
-
# If you later add more persisted host-dir files, keep them discoverable.
|
|
499
586
|
try:
|
|
500
|
-
|
|
501
|
-
|
|
587
|
+
if not d.exists() or not d.is_dir():
|
|
588
|
+
continue
|
|
502
589
|
except Exception:
|
|
503
|
-
|
|
590
|
+
continue
|
|
591
|
+
|
|
592
|
+
for pat in patterns:
|
|
593
|
+
try:
|
|
594
|
+
files.extend(sorted(d.glob(pat)))
|
|
595
|
+
except Exception:
|
|
596
|
+
pass
|
|
504
597
|
|
|
598
|
+
# de-dupe
|
|
505
599
|
out: list[Path] = []
|
|
506
600
|
seen: set[str] = set()
|
|
507
601
|
for p in files:
|
|
@@ -514,27 +608,67 @@ def _host_state_files() -> list[Path]:
|
|
|
514
608
|
out.append(p)
|
|
515
609
|
return out
|
|
516
610
|
|
|
517
|
-
def
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
611
|
+
def _deep_clear_state(obj: Any) -> list[str]:
|
|
612
|
+
"""
|
|
613
|
+
Best-effort: clear dict/list/set fields on an object, recursively,
|
|
614
|
+
but only for fields that look like state (host/device/route/session/cache/store/etc).
|
|
615
|
+
"""
|
|
616
|
+
cleared: list[str] = []
|
|
617
|
+
seen: set[int] = set()
|
|
618
|
+
|
|
619
|
+
state_name = re.compile(r"(host|device|route|session|dir|store|cache|meta|seen|status)", re.I)
|
|
620
|
+
|
|
621
|
+
def walk(x: Any, prefix: str) -> None:
|
|
622
|
+
oid = id(x)
|
|
623
|
+
if oid in seen:
|
|
624
|
+
return
|
|
625
|
+
seen.add(oid)
|
|
626
|
+
|
|
627
|
+
# containers
|
|
628
|
+
if isinstance(x, dict):
|
|
629
|
+
x.clear()
|
|
630
|
+
cleared.append(prefix)
|
|
631
|
+
return
|
|
632
|
+
if isinstance(x, list):
|
|
633
|
+
x.clear()
|
|
634
|
+
cleared.append(prefix)
|
|
635
|
+
return
|
|
636
|
+
if isinstance(x, set):
|
|
637
|
+
x.clear()
|
|
638
|
+
cleared.append(prefix)
|
|
639
|
+
return
|
|
640
|
+
|
|
641
|
+
# objects with __dict__
|
|
642
|
+
d = getattr(x, "__dict__", None)
|
|
643
|
+
if not isinstance(d, dict):
|
|
644
|
+
return
|
|
645
|
+
|
|
646
|
+
for k, v in list(d.items()):
|
|
647
|
+
# never touch locks/threads/etc
|
|
648
|
+
if k in ("_lock", "lock", "_thread", "thread", "_executor", "executor"):
|
|
649
|
+
continue
|
|
650
|
+
if not state_name.search(k):
|
|
651
|
+
continue
|
|
652
|
+
|
|
653
|
+
if isinstance(v, (dict, list, set)):
|
|
654
|
+
try:
|
|
655
|
+
v.clear()
|
|
656
|
+
cleared.append(f"{prefix}.{k}")
|
|
657
|
+
except Exception:
|
|
658
|
+
pass
|
|
659
|
+
else:
|
|
660
|
+
# recurse into nested state objects (EnvStore, etc.)
|
|
661
|
+
walk(v, f"{prefix}.{k}")
|
|
662
|
+
|
|
663
|
+
walk(obj, obj.__class__.__name__)
|
|
664
|
+
return cleared
|
|
533
665
|
|
|
534
666
|
def _try_clear_registry_in_memory(reg: object) -> list[str]:
|
|
535
667
|
"""
|
|
536
|
-
|
|
537
|
-
|
|
668
|
+
Stronger in-memory clear:
|
|
669
|
+
- calls obvious reset/clear methods if present
|
|
670
|
+
- clears common containers
|
|
671
|
+
- recursively clears state-like fields (even if names differ)
|
|
538
672
|
"""
|
|
539
673
|
cleared: list[str] = []
|
|
540
674
|
|
|
@@ -545,31 +679,18 @@ def _try_clear_registry_in_memory(reg: object) -> list[str]:
|
|
|
545
679
|
lock.acquire()
|
|
546
680
|
acquired = True
|
|
547
681
|
|
|
548
|
-
#
|
|
549
|
-
for
|
|
550
|
-
"
|
|
551
|
-
"
|
|
552
|
-
"
|
|
553
|
-
"
|
|
554
|
-
"
|
|
555
|
-
"
|
|
556
|
-
"
|
|
557
|
-
"
|
|
682
|
+
# Prefer explicit APIs if you have them
|
|
683
|
+
for meth in (
|
|
684
|
+
"clear",
|
|
685
|
+
"reset",
|
|
686
|
+
"wipe",
|
|
687
|
+
"wipe_all",
|
|
688
|
+
"wipe_state",
|
|
689
|
+
"clear_state",
|
|
690
|
+
"reset_state",
|
|
691
|
+
"prune",
|
|
692
|
+
"gc",
|
|
558
693
|
):
|
|
559
|
-
d = getattr(reg, attr, None)
|
|
560
|
-
if isinstance(d, dict):
|
|
561
|
-
d.clear()
|
|
562
|
-
cleared.append(attr)
|
|
563
|
-
|
|
564
|
-
# common private sets/lists
|
|
565
|
-
for attr in ("_connected", "_online_hosts"):
|
|
566
|
-
s = getattr(reg, attr, None)
|
|
567
|
-
if isinstance(s, set):
|
|
568
|
-
s.clear()
|
|
569
|
-
cleared.append(attr)
|
|
570
|
-
|
|
571
|
-
# if there is an explicit method, prefer it (won’t hurt if absent)
|
|
572
|
-
for meth in ("clear", "reset", "wipe", "wipe_all", "wipe_state"):
|
|
573
694
|
fn = getattr(reg, meth, None)
|
|
574
695
|
if callable(fn):
|
|
575
696
|
try:
|
|
@@ -578,6 +699,18 @@ def _try_clear_registry_in_memory(reg: object) -> list[str]:
|
|
|
578
699
|
except Exception:
|
|
579
700
|
pass
|
|
580
701
|
|
|
702
|
+
# Clear obvious containers by direct attribute scan
|
|
703
|
+
for attr, v in list(getattr(reg, "__dict__", {}).items()):
|
|
704
|
+
if isinstance(v, (dict, list, set)):
|
|
705
|
+
try:
|
|
706
|
+
v.clear()
|
|
707
|
+
cleared.append(attr)
|
|
708
|
+
except Exception:
|
|
709
|
+
pass
|
|
710
|
+
|
|
711
|
+
# Recursive targeted clear (for EnvStore etc.)
|
|
712
|
+
cleared.extend(_deep_clear_state(reg))
|
|
713
|
+
|
|
581
714
|
finally:
|
|
582
715
|
if acquired:
|
|
583
716
|
try:
|
|
@@ -585,13 +718,19 @@ def _try_clear_registry_in_memory(reg: object) -> list[str]:
|
|
|
585
718
|
except Exception:
|
|
586
719
|
pass
|
|
587
720
|
|
|
588
|
-
|
|
721
|
+
# de-dupe
|
|
722
|
+
out: list[str] = []
|
|
723
|
+
seen: set[str] = set()
|
|
724
|
+
for x in cleared:
|
|
725
|
+
if x not in seen:
|
|
726
|
+
seen.add(x)
|
|
727
|
+
out.append(x)
|
|
728
|
+
return out
|
|
589
729
|
|
|
590
730
|
def _cmd_hosts_wipe(*, yes: bool = False) -> None:
|
|
591
|
-
# confirm
|
|
592
731
|
if not yes:
|
|
593
732
|
try:
|
|
594
|
-
resp = session.prompt(stylize("Type 'wipe-hosts' to confirm wiping
|
|
733
|
+
resp = session.prompt(stylize("Type 'wipe-hosts' to confirm wiping host state: ", Sty.RED))
|
|
595
734
|
except KeyboardInterrupt:
|
|
596
735
|
printf("Cancelled.", Sty.GRAY)
|
|
597
736
|
return
|
|
@@ -599,10 +738,10 @@ def _cmd_hosts_wipe(*, yes: bool = False) -> None:
|
|
|
599
738
|
printf("Wipe aborted.", Sty.GRAY)
|
|
600
739
|
return
|
|
601
740
|
|
|
602
|
-
# delete persisted files
|
|
741
|
+
# 1) delete persisted files (if any)
|
|
603
742
|
files = [p for p in _host_state_files() if p.exists()]
|
|
604
743
|
if not files:
|
|
605
|
-
printf("No persisted host directory files found
|
|
744
|
+
printf("No persisted host directory files found (searched common dirs/patterns).", Sty.YELLOW)
|
|
606
745
|
else:
|
|
607
746
|
for p in files:
|
|
608
747
|
try:
|
|
@@ -612,20 +751,25 @@ def _cmd_hosts_wipe(*, yes: bool = False) -> None:
|
|
|
612
751
|
printf("ERROR deleting: ", Sty.RED, f"{p} -> {e}", Sty.DEFAULT)
|
|
613
752
|
return
|
|
614
753
|
|
|
615
|
-
# clear in-memory registry (
|
|
754
|
+
# 2) clear in-memory registry (THIS is what drives `hosts status`)
|
|
616
755
|
global TUNNEL_REGISTRY
|
|
617
756
|
reg = TUNNEL_REGISTRY
|
|
618
757
|
if reg is None:
|
|
619
|
-
printf("Host tunnel registry not initialized; persisted
|
|
758
|
+
printf("Host tunnel registry not initialized; only persisted wipe attempted.", Sty.GRAY)
|
|
620
759
|
else:
|
|
621
760
|
cleared = _try_clear_registry_in_memory(reg)
|
|
622
761
|
if cleared:
|
|
623
|
-
printf("Cleared in-memory registry
|
|
762
|
+
printf("Cleared in-memory registry state:", Sty.GREEN)
|
|
763
|
+
# keep output short-ish
|
|
764
|
+
for item in cleared[:20]:
|
|
765
|
+
printf(" - ", Sty.DEFAULT, item, Sty.GRAY)
|
|
766
|
+
if len(cleared) > 20:
|
|
767
|
+
printf(" ...", Sty.GRAY)
|
|
624
768
|
else:
|
|
625
|
-
printf("WARNING:
|
|
769
|
+
printf("WARNING: in-memory wipe could not confirm any cleared fields.", Sty.YELLOW)
|
|
770
|
+
printf("If `hosts status` still shows data, it is almost certainly being repopulated by live connections.", Sty.YELLOW)
|
|
626
771
|
|
|
627
|
-
printf("Host
|
|
628
|
-
printf("NOTE: If hosts reconnect, persisted files will be recreated.", Sty.GRAY)
|
|
772
|
+
printf("Host wipe complete.", Sty.GREEN)
|
|
629
773
|
|
|
630
774
|
# def help():
|
|
631
775
|
# printf("/------- HELP -------/", Sty.BOLD)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_host_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_pb2.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/ansi_codes.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/api_token.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/db_connection.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/db_location.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/list_string.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/common/utils/process_arg.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/host/host_directory_store.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/host/host_tunnel_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/cert_provider.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/device_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/user_group_cli.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server/server/user_group_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.74 → remoterf_server-0.1.75}/src/remoteRF_server.egg-info/top_level.txt
RENAMED
|
File without changes
|