Skip to content

Examples

This page contains practical examples showing how to use ToolOS SDK in real-world scenarios.

Complete Application Example

import json
from toolos.api import Api

class TaskManager:
    def __init__(self):
        self.api = Api("settings.json")
        self.tasks = []
        self.load_tasks()

    def load_tasks(self):
        """Load tasks from cache"""
        if self.api.Cache.CacheExists("tasks.json"):
            data = self.api.Cache.ReadCacheFile("tasks.json")
            self.tasks = json.loads(data)
            self.api.Log.WriteLog("app.log", f"Loaded {len(self.tasks)} tasks")

    def save_tasks(self):
        """Save tasks to cache"""
        data = json.dumps(self.tasks, indent=2)
        self.api.Cache.WriteCacheFile("tasks.json", data)
        self.api.Log.WriteLog("app.log", "Tasks saved")

    def run(self):
        """Main application loop"""
        print(self.api.Language.Translate("welcome"))
        self.api.StateMachine.SetState(self.api.StateMachine.MAINMENU)

        while True:
            # Check for settings updates
            if self.api.Settings.CheckIfUpdate():
                self.api.Settings.Update()
                self.api.Language.Reload()
                print(self.api.Language.Translate("settings_updated"))

            # State machine logic
            if self.api.StateMachine.IsState(self.api.StateMachine.MAINMENU):
                choice = self.show_menu()
                self.handle_choice(choice)
            elif self.api.StateMachine.IsState(self.api.StateMachine.EXIT):
                break

        self.cleanup()

    def show_menu(self):
        """Display main menu"""
        print("\n" + "="*30)
        print(self.api.Language.Translate("task_manager"))
        print("="*30)

        options = [
            "add_task",
            "list_tasks", 
            "complete_task",
            "settings",
            "exit"
        ]

        for i, option in enumerate(options, 1):
            print(f"{i}. {self.api.Language.Translate(option)}")

        try:
            choice = int(input(self.api.Language.Translate("input_prompt")))
            return choice
        except ValueError:
            print(self.api.Language.Translate("invalid_input"))
            return 0

    def handle_choice(self, choice):
        """Handle menu selection"""
        if choice == 1:
            self.add_task()
        elif choice == 2:
            self.list_tasks()
        elif choice == 3:
            self.complete_task()
        elif choice == 4:
            self.settings_menu()
        elif choice == 5:
            self.api.StateMachine.SetState(self.api.StateMachine.EXIT)
        else:
            print(self.api.Language.Translate("invalid_option"))

    def add_task(self):
        """Add new task"""
        title = input(self.api.Language.Translate("enter_task_title"))
        task = {
            "id": len(self.tasks) + 1,
            "title": title,
            "completed": False,
            "created": datetime.now().isoformat()
        }
        self.tasks.append(task)
        self.save_tasks()
        print(self.api.Language.Translate("task_added"))

    def cleanup(self):
        """Cleanup before exit"""
        self.api.Temp.RemoveTempFile()  # Clean temp files
        self.api.Log.WriteLog("app.log", "Application closed")
        print(self.api.Language.Translate("goodbye"))

if __name__ == "__main__":
    app = TaskManager()
    app.run()

Multi-Language Settings Manager

from toolos.api import Api

class LanguageManager:
    def __init__(self):
        self.api = Api("settings.json")

    def show_language_menu(self):
        """Display available languages"""
        languages = self.api.Language.GetAvailableLanguages()

        print(self.api.Language.Translate("select_language"))
        for i, lang in enumerate(languages, 1):
            current = " *" if lang == self.api.Settings.LANGUAGE else ""
            print(f"{i}. {self.get_language_name(lang)}{current}")

    def get_language_name(self, code):
        """Get display name for language code"""
        names = {
            'de': 'Deutsch',
            'en': 'English', 
            'es': 'Español',
            'fr': 'Français',
            'ru': 'Русский',
            'sv': 'Svenska',
            'tr': 'Türkçe'
        }
        return names.get(code, code)

    def change_language(self, new_lang):
        """Change application language"""
        old_lang = self.api.Settings.LANGUAGE

        # Update settings
        self.api.Settings.LANGUAGE = new_lang
        self.api.Settings.SetUpdate()

        # Reload language
        self.api.Language.Reload()

        # Log change
        self.api.Log.WriteLog("language.log", 
            f"Language changed: {old_lang} -> {new_lang}")

        print(self.api.Language.Translate("language_changed"))

Caching System Example

import json
import time
from toolos.api import Api

class DataCache:
    def __init__(self):
        self.api = Api("settings.json")
        self.cache_timeout = 300  # 5 minutes

    def get_cached_data(self, cache_key):
        """Get data from cache with timeout check"""
        cache_file = f"{cache_key}.json"

        if not self.api.Cache.CacheExists(cache_file):
            return None

        try:
            data = self.api.Cache.ReadCacheFile(cache_file)
            cached = json.loads(data)

            # Check if cache is expired
            if time.time() - cached['timestamp'] > self.cache_timeout:
                self.api.Cache.RemoveCacheFile(cache_file)
                return None

            return cached['data']
        except (json.JSONDecodeError, KeyError):
            return None

    def set_cached_data(self, cache_key, data):
        """Store data in cache with timestamp"""
        cache_file = f"{cache_key}.json"
        cached = {
            'timestamp': time.time(),
            'data': data
        }

        self.api.Cache.WriteCacheFile(cache_file, json.dumps(cached))
        self.api.Log.WriteLog("cache.log", f"Cached data: {cache_key}")

    def expensive_operation(self, params):
        """Simulate expensive operation with caching"""
        cache_key = f"operation_{hash(str(params))}"

        # Try to get from cache first
        cached_result = self.get_cached_data(cache_key)
        if cached_result:
            self.api.Log.WriteLog("cache.log", f"Cache hit: {cache_key}")
            return cached_result

        # Perform expensive operation
        self.api.Log.WriteLog("cache.log", f"Cache miss: {cache_key}")
        result = self.simulate_work(params)

        # Cache the result
        self.set_cached_data(cache_key, result)
        return result

    def simulate_work(self, params):
        """Simulate time-consuming work"""
        time.sleep(2)  # Simulate processing time
        return f"Result for {params}"

State Machine Workflow

from toolos.api import Api

class WizardApp:
    def __init__(self):
        self.api = Api("settings.json")
        self.user_data = {}

    def run(self):
        """Run wizard with state machine"""
        while True:
            current_state = self.api.StateMachine.GetState()

            if self.api.StateMachine.IsState(self.api.StateMachine.FIRST_ENTRY):
                self.welcome_step()
                self.api.StateMachine.SetState(self.api.StateMachine.STEP_1)

            elif self.api.StateMachine.IsState(self.api.StateMachine.STEP_1):
                if self.personal_info_step():
                    self.api.StateMachine.SetState(self.api.StateMachine.STEP_2)

            elif self.api.StateMachine.IsState(self.api.StateMachine.STEP_2):
                if self.preferences_step():
                    self.api.StateMachine.SetState(self.api.StateMachine.STEP_3)

            elif self.api.StateMachine.IsState(self.api.StateMachine.STEP_3):
                self.confirmation_step()
                self.api.StateMachine.SetState(self.api.StateMachine.EXIT)

            elif self.api.StateMachine.IsState(self.api.StateMachine.EXIT):
                break

    def welcome_step(self):
        """Welcome screen"""
        print(self.api.Language.Translate("setup_wizard"))
        print(self.api.Language.Translate("welcome_message"))
        input(self.api.Language.Translate("press_enter"))

    def personal_info_step(self):
        """Collect personal information"""
        print(f"\n{self.api.Language.Translate('step')} 1: {self.api.Language.Translate('personal_info')}")

        name = input(self.api.Language.Translate("enter_name"))
        if not name:
            return False

        self.user_data['name'] = name
        self.api.Log.WriteLog("wizard.log", f"Name entered: {name}")
        return True

    def preferences_step(self):
        """Collect preferences"""
        print(f"\n{self.api.Language.Translate('step')} 2: {self.api.Language.Translate('preferences')}")

        # Language selection
        self.show_language_options()
        return True

    def confirmation_step(self):
        """Show confirmation and save"""
        print(f"\n{self.api.Language.Translate('step')} 3: {self.api.Language.Translate('confirmation')}")

        # Save user data
        self.api.Cache.WriteCacheFile("user_profile.json", 
                                     json.dumps(self.user_data, indent=2))

        print(self.api.Language.Translate("setup_complete"))
        self.api.Log.WriteLog("wizard.log", "Setup wizard completed")

Error Handling Best Practices

from toolos.api import Api
import json

class RobustApp:
    def __init__(self):
        try:
            self.api = Api("settings.json")
        except FileNotFoundError:
            print("Settings file not found, creating default...")
            self.create_default_settings()
            self.api = Api("settings.json")
        except json.JSONDecodeError:
            print("Invalid settings file format")
            raise

    def create_default_settings(self):
        """Create default settings file"""
        default_settings = {
            "version": "1.0.0",
            "language": "en",
            "mods_enabled": False,
            "cachepath": "data/cache",
            "temppath": "data/temp", 
            "logpath": "data/logs",
            "languagepath": "data/lang"
        }

        with open("settings.json", 'w') as f:
            json.dump(default_settings, f, indent=2)

    def safe_cache_operation(self, filename, data=None):
        """Safely perform cache operations"""
        try:
            if data:
                self.api.Cache.WriteCacheFile(filename, data)
                return True
            else:
                if self.api.Cache.CacheExists(filename):
                    return self.api.Cache.ReadCacheFile(filename)
                return None
        except (IOError, OSError) as e:
            self.api.Log.WriteLog("error.log", f"Cache error: {e}")
            return None

    def safe_translation(self, key, fallback=None):
        """Get translation with fallback"""
        try:
            translation = self.api.Language.Translate(key)
            return translation if translation != key else (fallback or key)
        except Exception as e:
            self.api.Log.WriteLog("error.log", f"Translation error: {e}")
            return fallback or key