Backup automatico script del 2026-08-23 12:04

This commit is contained in:
daniele committed 2026-08-23 12:04:16 +02:00
1 parent 11823447a2
commit 795a15a7b6
66 files changed
+8546

No files matched your search

@@ -0,0 +1,94 @@
#!/usr/bin/env python3
"""Grant view permissions on non-personal Paperless documents to family users."""
import os
import sys
import httpx
PAPERLESS_URL = os.environ.get("PAPERLESS_URL", "https://docs.loogle.it").rstrip("/")
ADMIN_TOKEN = os.environ.get("PAPERLESS_API_TOKEN_DANIELE") or os.environ.get("PAPERLESS_API_TOKEN", "")
FAMILY_USER_IDS = [4, 5, 6] # lucia, davide, luca
PERSONAL_TAG_NAMES = {"personal", "privato", "private"}
BATCH_SIZE = 50
def main() -> int:
if not ADMIN_TOKEN:
print("Missing PAPERLESS_API_TOKEN_DANIELE", file=sys.stderr)
return 1
headers = {"Authorization": f"Token {ADMIN_TOKEN}", "Content-Type": "application/json"}
tags_resp = httpx.get(f"{PAPERLESS_URL}/api/tags/", headers=headers, timeout=60)
tags_resp.raise_for_status()
personal_tag_ids = {
t["id"]
for t in tags_resp.json().get("results", [])
if (t.get("name") or "").lower() in PERSONAL_TAG_NAMES
}
doc_ids: list[int] = []
page = 1
while True:
resp = httpx.get(
f"{PAPERLESS_URL}/api/documents/",
headers=headers,
params={"page": page, "page_size": 100},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
for doc in data.get("results", []):
if set(doc.get("tags") or []) & personal_tag_ids:
continue
doc_ids.append(doc["id"])
if not data.get("next"):
break
page += 1
print(f"Documenti da condividere (senza tag personali): {len(doc_ids)}")
updated = 0
for i in range(0, len(doc_ids), BATCH_SIZE):
chunk = doc_ids[i : i + BATCH_SIZE]
payload = {
"documents": chunk,
"method": "set_permissions",
"parameters": {
"set_permissions": {
"view": {"users": FAMILY_USER_IDS, "groups": []},
"change": {"users": [], "groups": []},
},
"merge": True,
},
}
resp = httpx.post(
f"{PAPERLESS_URL}/api/documents/bulk_edit/",
headers=headers,
json=payload,
timeout=120,
)
resp.raise_for_status()
updated += len(chunk)
print(f" Aggiornati {updated}/{len(doc_ids)}")
for name, env_key in [
("lucia", "PAPERLESS_API_TOKEN_LUCIA"),
("davide", "PAPERLESS_API_TOKEN_DAVIDE"),
("luca", "PAPERLESS_API_TOKEN_LUCA"),
]:
token = os.environ.get(env_key, "")
if not token:
continue
count = httpx.get(
f"{PAPERLESS_URL}/api/documents/?page_size=1",
headers={"Authorization": f"Token {token}"},
timeout=30,
).json().get("count", 0)
print(f"{name}: documenti visibili = {count}")
return 0
if __name__ == "__main__":
raise SystemExit(main())