From ac09648a5badb08e8e544666652f9c81d3d074ea Mon Sep 17 00:00:00 2001 From: Mahmoud-Emad Date: Wed, 5 Nov 2025 16:08:56 +0200 Subject: [PATCH] feat: Add Atlas Export and AtlasClient example - Add example for exporting Atlas collections - Demonstrate using AtlasClient to read exported content - Include examples for listing collections and pages - Show reading page content and metadata via AtlasClient --- examples/data/atlas/example.vsh | 98 +++++++++++++++++++++++ examples/data/atlas/example_save_load.vsh | 83 ------------------- 2 files changed, 98 insertions(+), 83 deletions(-) create mode 100755 examples/data/atlas/example.vsh delete mode 100755 examples/data/atlas/example_save_load.vsh diff --git a/examples/data/atlas/example.vsh b/examples/data/atlas/example.vsh new file mode 100755 index 00000000..e419b59d --- /dev/null +++ b/examples/data/atlas/example.vsh @@ -0,0 +1,98 @@ +#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run + +import incubaid.herolib.data.atlas +import incubaid.herolib.core.pathlib +import incubaid.herolib.web.atlas_client +import os + +// Example: Atlas Export and AtlasClient Usage + +println('Atlas Export & Client Example') +println('============================================================') + +// Setup test directory +test_dir := '/tmp/atlas_example' +export_dir := '/tmp/atlas_export' +os.rmdir_all(test_dir) or {} +os.rmdir_all(export_dir) or {} +os.mkdir_all(test_dir)! + +// Create a collection with some content +col_path := '${test_dir}/docs' +os.mkdir_all(col_path)! + +mut cfile := pathlib.get_file(path: '${col_path}/.collection', create: true)! +cfile.write('name:docs')! + +mut page1 := pathlib.get_file(path: '${col_path}/intro.md', create: true)! +page1.write('# Introduction\n\nWelcome to the docs!')! + +mut page2 := pathlib.get_file(path: '${col_path}/guide.md', create: true)! +page2.write('# Guide\n\n!!include docs:intro\n\nMore content here.')! + +// Create and scan atlas +println('\n1. Creating Atlas and scanning...') +mut a := atlas.new(name: 'my_docs')! +a.scan(path: test_dir)! + +println(' Found ${a.collections.len} collection(s)') + +// Validate links +println('\n2. Validating links...') +a.validate_links()! + +col := a.get_collection('docs')! +if col.has_errors() { + println(' Errors found:') + col.print_errors() +} else { + println(' No errors found!') +} + +// Export collections +println('\n3. Exporting collections to ${export_dir}...') +a.export( + destination: export_dir + include: true // Process includes during export + redis: false // Don't use Redis for this example +)! +println(' āœ“ Export complete') + +// Use AtlasClient to access exported content +println('\n4. Using AtlasClient to read exported content...') +mut client := atlas_client.new(export_dir: export_dir)! + +// List collections +collections := client.list_collections()! +println(' Collections: ${collections}') + +// List pages in docs collection +pages := client.list_pages('docs')! +println(' Pages in docs: ${pages}') + +// Read page content +println('\n5. Reading page content via AtlasClient...') +intro_content := client.get_page_content('docs', 'intro')! +println(' intro.md content:') +println(' ${intro_content}') + +guide_content := client.get_page_content('docs', 'guide')! +println('\n guide.md content (with includes processed):') +println(' ${guide_content}') + +// Get metadata +println('\n6. Accessing metadata...') +metadata := client.get_collection_metadata('docs')! +println(' Collection name: ${metadata.name}') +println(' Collection path: ${metadata.path}') +println(' Number of pages: ${metadata.pages.len}') + +println('\nāœ“ Example completed successfully!') +println('\nExported files are in: ${export_dir}') +println(' - content/docs/intro.md') +println(' - content/docs/guide.md') +println(' - meta/docs.json') + +// Cleanup (commented out so you can inspect the files) +// os.rmdir_all(test_dir) or {} +// os.rmdir_all(export_dir) or {} diff --git a/examples/data/atlas/example_save_load.vsh b/examples/data/atlas/example_save_load.vsh deleted file mode 100755 index 11252ee2..00000000 --- a/examples/data/atlas/example_save_load.vsh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals run - -import incubaid.herolib.data.atlas -import incubaid.herolib.core.pathlib -import os - -// Example: Save and Load Atlas Collections - -println('Atlas Save/Load Example') -println('============================================================') - -// Setup test directory -test_dir := '/tmp/atlas_example' -os.rmdir_all(test_dir) or {} -os.mkdir_all(test_dir)! - -// Create a collection with some content -col_path := '${test_dir}/docs' -os.mkdir_all(col_path)! - -mut cfile := pathlib.get_file(path: '${col_path}/.collection', create: true)! -cfile.write('name:docs')! - -mut page1 := pathlib.get_file(path: '${col_path}/intro.md', create: true)! -page1.write('# Introduction\n\nWelcome to the docs!')! - -mut page2 := pathlib.get_file(path: '${col_path}/guide.md', create: true)! -page2.write('# Guide\n\n!!include docs:intro\n\nMore content here.')! - -// Create and scan atlas -println('\n1. Creating Atlas and scanning...') -mut a := atlas.new(name: 'my_docs')! -a.scan(path: test_dir)! - -println(' Found ${a.collections.len} collection(s)') - -// Validate links -println('\n2. Validating links...') -a.validate_links()! - -col := a.get_collection('docs')! -if col.has_errors() { - println(' Errors found:') - col.print_errors() -} else { - println(' No errors found!') -} - -// Save all collections -println('\n3. Saving collections to .collection.json...') -a.save_all()! -println(' Saved to ${col_path}/.collection.json') - -// Load in a new atlas -println('\n4. Loading collections in new Atlas...') -mut a2 := atlas.new(name: 'loaded_docs')! -a2.load_from_directory(test_dir)! - -println(' Loaded ${a2.collections.len} collection(s)') - -// Access loaded data -println('\n5. Accessing loaded data...') -loaded_col := a2.get_collection('docs')! -println(' Collection: ${loaded_col.name}') -println(' Pages: ${loaded_col.pages.len}') - -for name, page in loaded_col.pages { - println(' - ${name}: ${page.path.path}') -} - -// Read page content -println('\n6. Reading page content...') -mut intro_page := loaded_col.page_get('intro')! -content := intro_page.read_content()! -println(' intro.md content:') -println(' ${content}') - -println('\nāœ“ Example completed successfully!') -println('\nNow you can use the Python loader:') -println(' python3 lib/data/atlas/atlas_loader.py') - -// Cleanup -os.rmdir_all(test_dir) or {}