import argparse
import datetime
import time
import threading
class ResourceSync:
def __init__(self, name="default"):
self.name = name
self.last_value = None
self.lock = threading.Lock()
def get_value(self):
with self.lock:
return self.last_value
def set_value(self, value):
with self.lock:
self.last_value = value
def sync(self, new_value):
with self.lock:
if self.last_value is None or self.last_value != new_value:
self.set_value(new_value)
print(f"Resource '{self.name}' synced to {new_value}")
class DiagnosticsSync:
def __init__(self):
self.resources = {}
def add_resource(self, name, initial_value=None):
if name in self.resources:
raise ValueError(f"Resource '{name}' already exists.")
self.resources[name] = ResourceSync(name)
if initial_value is not None:
self.resources[name].set_value(initial_value)
def get_resource(self, name):
if name not in self.resources:
raise ValueError(f"Resource '{name}' not found.")
return self.resources[name]
def sync_all(self, data):
for name, value in data.items():
self.get_resource(name).sync(value)
def get_all_values(self):
values = {}
for name, resource in self.resources.items():
values[name] = resource.get_value()
return values
def display_values(self):
values = self.get_all_values()
for name, value in values.items():
print(f"{name}: {value}")
def main():
parser = argparse.ArgumentParser(description="Sync and manage diagnostic resources.")
parser.add_argument("action", choices=["add", "sync", "display"])
parser.add_argument("--name", help="Resource name (required for add)")
parser.add_argument("--value", type=str, help="Resource value (required for sync)")
parser.add_argument("--initial_value", type=str, help="Initial value for a new resource")
parser.add_argument("--data", type=str, help="JSON data for syncing multiple resources")
parser.add_argument("--display", action="store_true", help="Display all resource values")
args = parser.parse_args()
sync = DiagnosticsSync()
if args.action == "add":
if not args.name:
print("Error: --name is required for 'add' action.")
return
try:
sync.add_resource(args.name, args.initial_value)
except ValueError as e:
print(e)
elif args.action == "sync":
if not args.value:
print("Error: --value is required for 'sync' action.")
return
sync.sync_all({args.name: args.value})
elif args.action == "display":
sync.display_values()
elif args.action == "data":
if not args.data:
print("Error: --data is required for 'data' action.")
return
try:
data = eval(args.data) #Use eval cautiously
sync.sync_all(data)
except (SyntaxError, NameError):
print("Error: Invalid JSON data.")
if __name__ == "__main__":
main()
Add your comment