atlas is working

This commit is contained in:
2025-10-23 16:41:48 +02:00
parent 581ae4808c
commit 5cdac4d7fd
8 changed files with 64 additions and 64 deletions

View File

@@ -0,0 +1,10 @@
#!/usr/bin/env hero
!!atlas.scan
path: '~/code/git.ourworld.tf/geomind/extranet_geomind'
meta_path: '/tmp/atlas_export_meta'
!!atlas.export
destination: '/tmp/atlas_export_test'
include: true
redis: true

View File

@@ -1,21 +0,0 @@
#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run
import incubaid.herolib.core.playbook
import incubaid.herolib.data.atlas
heroscript := "
!!atlas.scan
path: '~/code/github/incubaid/herolib/lib/data/atlas/testdata'
!!atlas.validate
!!atlas.export
destination: '/tmp/atlas_export_test'
include: true
redis: false
"
mut plbook := playbook.new(text: heroscript)!
atlas.play(mut plbook)!
println(' Atlas HeroScript processing complete!')

View File

@@ -39,6 +39,15 @@ pub fn cmd_atlas(mut cmdroot Command) Command {
description: 'Path where atlas collections are located.'
})
cmd_run.add_flag(Flag{
flag: .string
required: false
name: 'path_meta'
abbrev: 'pm'
description: 'Path where collection.json... will be saved too.'
})
cmd_run.add_flag(Flag{
flag: .string
required: false
@@ -111,6 +120,7 @@ fn cmd_atlas_execute(cmd Command) ! {
// ---------- PATH LOGIC ----------
mut path := cmd.flags.get_string('path') or { '' }
mut path_meta := cmd.flags.get_string('path_meta') or { '' }
mut url := cmd.flags.get_string('url') or { '' }
mut name := cmd.flags.get_string('name') or { 'default' }
mut destination := cmd.flags.get_string('destination') or { '' }
@@ -150,7 +160,7 @@ fn cmd_atlas_execute(cmd Command) ! {
// Execute operations
if scan {
console.print_header('Scanning collections...')
a.scan(path: atlas_path.path, save: true)!
a.scan(path: atlas_path.path, meta_path: path_meta)!
console.print_green(' Scan complete: ${a.collections.len} collection(s) found')
}

View File

@@ -2,6 +2,7 @@ module playcmds
import incubaid.herolib.core.playbook { PlayBook }
import incubaid.herolib.data.doctree
import incubaid.herolib.data.atlas
import incubaid.herolib.biz.bizmodel
import incubaid.herolib.threefold.incatokens
import incubaid.herolib.web.site
@@ -59,7 +60,7 @@ pub fn run(args_ PlayArgs) ! {
doctree.play(mut plbook)!
incatokens.play(mut plbook)!
atlas.play(mut plbook)!
docusaurus.play(mut plbook)!
hetznermanager.play(mut plbook)!
hetznermanager.play2(mut plbook)!

View File

@@ -85,13 +85,21 @@ pub fn (mut a Atlas) add_collection(args AddCollectionArgs) ! {
}
// Scan a path for collections
@[params]
pub struct ScanArgs {
pub mut:
path string @[required]
meta_path string // where collection json files will be stored
}
pub fn (mut a Atlas) scan(args ScanArgs) ! {
mut path := pathlib.get_dir(path: args.path)!
a.scan_directory(mut path)!
a.validate_links()!
a.fix_links()!
if args.save {
a.save()!
if args.meta_path.len > 0 {
a.save(args.meta_path)!
}
}

View File

@@ -24,7 +24,8 @@ pub fn play(mut plbook PlayBook) ! {
}
path := p.get('path')!
atlas_instance.scan(path: path, save: true)!
meta_path := p.get_default('meta_path', '')!
atlas_instance.scan(path: path, meta_path: meta_path)!
action.done = true
atlas_set(atlas_instance)
}

View File

@@ -4,50 +4,48 @@ import json
import incubaid.herolib.core.pathlib
// Save collection to .collection.json in the collection directory
pub fn (c Collection) save() ! {
pub fn (c Collection) save(path string) ! {
// json.encode automatically skips fields marked with [skip]
json_str := json.encode(c)
json_str := json.encode_pretty(c)
mut json_file := pathlib.get_file(
path: '${c.path.path}/.collection.json'
path: '${path}/${c.name}.json'
create: true
)!
json_file.write(json_str)!
}
// Save all collections in atlas to their respective directories
pub fn (a Atlas) save() ! {
pub fn (a Atlas) save(path string) ! {
for _, col in a.collections {
col.save()!
col.save(path)!
}
}
// Load collection from .collection.json file
pub fn (mut a Atlas) load_collection(path string) !&Collection {
mut json_file := pathlib.get_file(path: '${path}/.collection.json')!
json_str := json_file.read()!
// // Load collection from .collection.json file
// pub fn (mut a Atlas) load_meta(path string) !&Collection {
// mut json_file := pathlib.get_file(path: '${path}/.collection.json')!
// json_str := json_file.read()!
mut col := json.decode(Collection, json_str)!
// mut col := json.decode(Collection, json_str)!
// Fix circular references that were skipped during encode
col.atlas = &a
// // Fix circular references that were skipped during encode
// col.atlas = &a
// Rebuild error cache from errors
col.error_cache = map[string]bool{}
for err in col.errors {
col.error_cache[err.hash()] = true
}
// // Rebuild error cache from errors
// col.error_cache = map[string]bool{}
// for err in col.errors {
// col.error_cache[err.hash()] = true
// }
// Fix page references to collection
for name, mut page in col.pages {
page.collection = &col
col.pages[name] = page
}
// // Fix page references to collection
// for name, mut page in col.pages {
// page.collection = &col
// col.pages[name] = page
// }
a.collections[col.name] = &col
return &col
}
// a.collections[col.name] = &col
// return &col
// }
// Load all collections from a directory tree
pub fn (mut a Atlas) load_from_directory(path string) ! {
@@ -58,10 +56,10 @@ pub fn (mut a Atlas) load_from_directory(path string) ! {
// Scan directory for .collection.json files and load them
fn (mut a Atlas) scan_and_load(mut dir pathlib.Path) ! {
// Check if this directory has .collection.json
if dir.file_exists('.collection.json') {
a.load_collection(dir.path)!
return
}
// if dir.file_exists('.collection.json') {
// a.load_collection(dir.path)!
// return
// }
// Scan subdirectories
mut entries := dir.list(recursive: false)!

View File

@@ -5,13 +5,6 @@ import incubaid.herolib.data.paramsparser
import incubaid.herolib.core.texttools
import os
@[params]
pub struct ScanArgs {
pub mut:
path string @[required]
save bool = true // save atlas after scan
}
// Scan a directory for collections
fn (mut a Atlas) scan_directory(mut dir pathlib.Path) ! {
if !dir.is_dir() {