Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions cognite/extractorutils/configtools/elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from datetime import timedelta
from enum import Enum
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path
from time import sleep
from typing import Any
from urllib.parse import urljoin, urlparse
Expand Down Expand Up @@ -649,7 +650,7 @@ class LocalStateStoreConfig:
Configuration of a state store using a local JSON file
"""

path: str
path: Path
save_interval: TimeIntervalConfig = TimeIntervalConfig("30s")


Expand Down Expand Up @@ -695,8 +696,11 @@ def create_state_store(
)

if self.local:
if self.local.path.is_dir():
raise ValueError(f"{self.local.path} is a directory, and not a file")

return LocalStateStore(
file_path=self.local.path,
file_path=str(self.local.path),
save_interval=self.local.save_interval.seconds,
cancellation_token=cancellation_token,
)
Expand Down
44 changes: 44 additions & 0 deletions tests/tests_unit/test_configtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@
import logging
import os
import re
from collections.abc import Generator
from dataclasses import dataclass
from pathlib import Path

import pytest
import yaml
from faker import Faker

from cognite.client import CogniteClient
from cognite.client.credentials import OAuthClientCredentials
Expand All @@ -37,15 +39,18 @@
AuthenticatorConfig,
CastableInt,
IgnorePattern,
LocalStateStoreConfig,
PortNumber,
RegExpFlag,
StateStoreConfig,
)
from cognite.extractorutils.configtools.loaders import (
ConfigResolver,
compile_patterns,
)
from cognite.extractorutils.configtools.validators import matches_pattern, matches_patterns
from cognite.extractorutils.exceptions import InvalidConfigError
from cognite.extractorutils.statestore.watermark import LocalStateStore


@dataclass
Expand Down Expand Up @@ -610,3 +615,42 @@ class DbConfigCastable:
assert parsed.port == 8080
assert parsed.connections == 4
assert parsed.batch_size == 1000


@pytest.fixture
def file_name() -> Generator[str, None, None]:
name = f"{Faker().word()}.json"
yield name
if Path(name).exists():
os.remove(name)


def test_load_local_statestore(file_name: str) -> None:
raw_config = f"""
local:
path: {file_name}
"""

config = load_yaml(raw_config, StateStoreConfig)

assert isinstance(config.local, LocalStateStoreConfig)
assert str(config.local.path) == file_name

state_store = config.create_state_store()
assert isinstance(state_store, LocalStateStore)


def test_load_local_directory_fails() -> None:
raw_config = """
local:
path: cognite
"""

config = load_yaml(raw_config, StateStoreConfig)

assert isinstance(config.local, LocalStateStoreConfig)

with pytest.raises(ValueError) as e:
config.create_state_store()

assert "is a directory, and not a file" in str(e.value)
Loading