Workspace Configuration

Workspace configuration manages settings that apply across your entire DASL workspace. This includes system table locations, default SQL warehouses, export configurations, and other workspace-wide preferences.

Overview

Workspace configuration controls:

  • System tables: Where DASL stores metadata and operational data

  • Default SQL warehouse: Default compute for queries

  • Export settings: How to send notables and alerts to external systems

  • Storage paths: Where DASL stores internal files and custom presets

  • Detection settings: Default schedules and categories for rules

Getting Configuration

Retrieve the current workspace configuration:

from dasl_client import Client

client = Client.for_workspace()

# Get current configuration
config = client.get_config()

print(f"System catalog: {config.system_tables_config.catalog_name}")
print(f"System schema: {config.system_tables_config.var_schema}")
print(f"Default warehouse: {config.default_sql_warehouse}")
print(f"Storage path: {config.dasl_storage_path}")

Understanding Configuration Structure

The WorkspaceConfig has a flat structure with these main components:

from dasl_client import WorkspaceConfig, SystemTablesConfig

# Example configuration structure
config = WorkspaceConfig(
    system_tables_config=SystemTablesConfig(
        catalog_name="dasl_system",
        var_schema="metadata"
    ),
    default_sql_warehouse="my-warehouse-id",
    dasl_storage_path="/Volumes/catalog/schema/volume",
    dasl_custom_presets_path="/Volumes/catalog/schema/presets"
)

Storage Configuration

Configure where DASL stores internal files and custom presets:

# Configure storage paths
config.dasl_storage_path = "/Volumes/my_catalog/my_schema/dasl_storage"
config.dasl_custom_presets_path = "/Volumes/my_catalog/my_schema/custom_presets"

Detection Rule Configuration

Configure default settings for detection rules:

from dasl_client import DetectionRuleMetadata, Schedule

# Configure detection categories
config.detection_rule_metadata = DetectionRuleMetadata(
    detection_categories=[
        "Authentication",
        "Network Activity",
        "Data Access",
        "System Events",
        "Compliance"
    ]
)

# Set default rule schedule (must be a Schedule object, not a string)
config.default_rule_schedule = Schedule(
    at_least_every="1h",  # Rules run hourly by default
    enabled=True
)

Updating Configuration

Modify workspace settings:

# Get current config
config = client.get_config()

# Update storage path
config.dasl_storage_path = "/Volumes/new_catalog/new_schema/dasl_storage"

# Update default rule schedule (must be a Schedule object)
config.default_rule_schedule = Schedule(
    at_least_every="30m",  # More frequent
    enabled=True
)

# Apply changes
client.put_config(config)
print("Configuration updated successfully")

Custom Notebook Configuration

Configure storage for custom user notebooks:

# Set custom notebook location. This is the location where custom notebooks
# will be stored such as those created for custom functions executed by a datasource.
config.default_custom_notebook_location = "/Volumes/catalog/schema/volume/notebooks"

Datasource-Specific Configuration

Configure default settings for datasources:

from dasl_client import DatasourcesConfig

# Configure datasource defaults
config.datasources = DatasourcesConfig(
    catalog_name="my_catalog",
    bronze_schema="bronze",
    silver_schema="silver",
    gold_schema="gold",
    checkpoint_location="/Volumes/my_catalog/my_schema/checkpoints",
    default_compute_mode="automatic"
)

Rules-Specific Configuration

Configure default settings for rules:

from dasl_client import RulesConfig

# Configure rule defaults
config.rules = RulesConfig(
    checkpoint_location="/Volumes/my_catalog/my_schema/rule_checkpoints"
)

Error Handling

Handle configuration errors properly:

from dasl_client.errors import BadRequestError, ConflictError

try:
    updated_config = client.put_config(config)
except BadRequestError as e:
    print(f"Configuration is invalid: {e}")
    # Check required fields and valid values
except ConflictError as e:
    print(f"Configuration conflict: {e}")
    # Another update may have occurred

Next Steps

  • Datasources: Datasources to configure data ingestion

  • Rules: Rules to set up detection logic

  • API reference: Client for detailed configuration methods