Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
import os, json, uuid, re
|
||||
from datetime import datetime
|
||||
|
||||
PDF_DIR = "/opt/hub/pdfs/files"
|
||||
META = os.path.join(PDF_DIR, ".metadata.json")
|
||||
|
||||
TAG_RULES = [
|
||||
(r'fm[-_ ]?\d|atp[-_ ]?\d|tm[-_ ]?\d|tc[-_ ]?\d|army|military|combat|tactical|sniper|infantry|guerrilla|special.forces', 'defense'),
|
||||
(r'medic|first.aid|surgery|trauma|nursing|hesperian|midwif|dentist|disease|emergency.med|tccc|where.there.is.no.doctor', 'medical'),
|
||||
(r'survival|prepper|shtf|bug.out|wilderness|evasion', 'survival'),
|
||||
(r'radio|ham|antenna|arrl|fcc|comms|aprs|signal', 'comms'),
|
||||
(r'food|cook|cann|preserv|recipe|kitchen|baking|ferment', 'food'),
|
||||
(r'farm|garden|crop|seed|livestock|chicken|poultry|cattle|sheep|goat|beekeep|honey|agriculture|permaculture', 'agriculture'),
|
||||
(r'vet|animal|dog|cat|horse|pig|pet', 'veterinary'),
|
||||
(r'navig|map|compass|gps|bowditch|topo', 'navigation'),
|
||||
(r'solar|wind|battery|grid|power|nrel|energy|generator', 'energy'),
|
||||
(r'electric|plumb|carpent|hvac|welding|machinist|trade|repair|audel', 'trades'),
|
||||
(r'chem|biolog|physic|crc.handbook|merck.index', 'chemistry'),
|
||||
(r'engineer|mechanic|machine|handbook', 'engineering'),
|
||||
(r'law|legal|constitution|statute|code|court|right', 'law'),
|
||||
(r'finance|tax|irs|money|invest|insurance', 'finance'),
|
||||
(r'history|war|civil|world.war|geopolit', 'history'),
|
||||
]
|
||||
|
||||
def infer_tag(filename):
|
||||
name = filename.lower()
|
||||
for pattern, tag in TAG_RULES:
|
||||
if re.search(pattern, name):
|
||||
return tag
|
||||
return 'general'
|
||||
|
||||
def clean_title(filename):
|
||||
name = filename.rsplit('.', 1)[0]
|
||||
name = re.sub(r'[_-]+', ' ', name).strip()
|
||||
return name[:200]
|
||||
|
||||
def main():
|
||||
if os.path.exists(META):
|
||||
with open(META) as f:
|
||||
meta = json.load(f)
|
||||
else:
|
||||
meta = {}
|
||||
|
||||
registered = {info['filename'] for info in meta.values()}
|
||||
added = 0
|
||||
skipped = 0
|
||||
for fname in sorted(os.listdir(PDF_DIR)):
|
||||
if not fname.lower().endswith('.pdf'): continue
|
||||
if fname.startswith('.'): continue
|
||||
if fname in registered:
|
||||
skipped += 1
|
||||
continue
|
||||
path = os.path.join(PDF_DIR, fname)
|
||||
if os.path.getsize(path) < 50000: continue
|
||||
fid = uuid.uuid4().hex[:12]
|
||||
meta[fid] = {
|
||||
'filename': fname,
|
||||
'title': clean_title(fname),
|
||||
'tag': infer_tag(fname),
|
||||
'uploaded': datetime.utcnow().isoformat(),
|
||||
}
|
||||
added += 1
|
||||
|
||||
with open(META, 'w') as f:
|
||||
json.dump(meta, f, indent=2)
|
||||
|
||||
print(f"Added: {added} Already registered: {skipped} Total in library: {len(meta)}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user