LATE.IO2 / backend /scripts /sync_script.py
AIEINC
Initial Hugging Face Space deployment
5e1dfdc
#!/usr/bin/env python3
import pandas as pd
import hashlib
from webdav3.client import Client
from datetime import datetime
# Nextcloud WebDAV config
WEBDAV_CONFIG = {
'webdav_hostname': "https://your-nextcloud.com/remote.php/dav/files/USERNAME/",
'webdav_login': "username",
'webdav_password': "password",
'webdav_root': "/agentic_deployment/tables/"
}
def calculate_diff(current_df, new_df):
"""Identify added/modified rows using MD5 hashes of row data"""
current_df['hash'] = current_df.apply(lambda x: hashlib.md5(x.to_string().encode()).hexdigest(), axis=1)
new_df['hash'] = new_df.apply(lambda x: hashlib.md5(x.to_string().encode()).hexdigest(), axis=1)
merged = pd.merge(current_df, new_df, on='hash', how='outer', indicator=True)
changes = merged[merged['_merge'] != 'both']
return changes
def sync_with_nextcloud():
client = Client(WEBDAV_CONFIG)
local_path = "master_plan_v3.2.csv"
remote_path = "master_plan_v3.2.csv"
# Download current version
client.download_file(remote_path, local_path)
current_df = pd.read_csv(local_path)
# Get new edits (simulated - in practice would watch filesystem/API)
new_df = pd.read_csv("local_edits.csv")
# Calculate & apply changes
diff = calculate_diff(current_df, new_df)
if not diff.empty:
updated_df = pd.concat([current_df, diff], ignore_index=True).drop_duplicates(subset='hash', keep='last')
updated_df.to_csv(local_path, index=False)
client.upload_file(local_path, remote_path)
log_change(diff.shape[0])
return diff.shape[0]
def log_change(num_updates):
with open("sync_log.txt", "a") as f:
f.write(f"{datetime.now()}: Synced {num_updates} changes\n")
if __name__ == "__main__":
changes_made = sync_with_nextcloud()
print(f"Sync complete. {changes_made} rows updated.")