Skip to content

Config

sereto.cli.config

add_dates_config(project, version=None)

Add date to the configuration.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
Source code in sereto/cli/config.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
@validate_call
def add_dates_config(project: Project, version: ProjectVersion | None = None) -> None:
    """Add date to the configuration.

    Args:
        project: Project's representation.
        version: The version of the project. If not provided, the last version is used.
    """
    if version is None:
        version = project.config.last_version()

    # Prompt user for the date
    date_type: DateType = load_enum(enum=DateType, message="Type:")
    new_date = prompt_user_for_date(date_type=date_type)

    # Add the date to the configuration
    project.config.at_version(version).add_date(Date(type=date_type, date=new_date))

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

add_people_config(project, version=None)

Add person to the configuration.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
Source code in sereto/cli/config.py
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
@validate_call
def add_people_config(project: Project, version: ProjectVersion | None = None) -> None:
    """Add person to the configuration.

    Args:
        project: Project's representation.
        version: The version of the project. If not provided, the last version is used.
    """
    if version is None:
        version = project.config.last_version()

    # Prompt user for the person
    person_type: PersonType = load_enum(enum=PersonType, message="Type:")
    new_person = prompt_user_for_person(person_type=person_type)

    # Add the person to the configuration
    project.config.at_version(version).add_person(new_person)

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

add_targets_config(project, version=None)

Add target to the configuration.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
Source code in sereto/cli/config.py
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
@validate_call
def add_targets_config(project: Project, version: ProjectVersion | None = None) -> None:
    """Add target to the configuration.

    Args:
        project: Project's representation.
        version: The version of the project. If not provided, the last version is used.
    """
    if version is None:
        version = project.config.last_version()

    # Prompt user for the target
    new_target = prompt_user_for_target(settings=project.settings)

    # Add the target to the configuration
    project.config.at_version(version).add_target(new_target)

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

    # Post-process the new target
    project.config.update_paths(project.path)
    project_create_missing(project=project, version=version)

delete_dates_config(project, index, version=None)

Delete date from the configuration by its index.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
index int

Index to item which should be deleted. First item is 1.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
Source code in sereto/cli/config.py
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
@validate_call
def delete_dates_config(project: Project, index: int, version: ProjectVersion | None = None) -> None:
    """Delete date from the configuration by its index.

    Args:
        project: Project's representation.
        index: Index to item which should be deleted. First item is 1.
        version: The version of the project. If not provided, the last version is used.
    """
    if version is None:
        version = project.config.last_version()

    # Delete the date from the configuration
    project.config.at_version(version).delete_date(index=index)

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

delete_people_config(project, index, version=None)

Delete person from the configuration by its index.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
index int

Index to item which should be deleted. First item is 1.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
Source code in sereto/cli/config.py
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
@validate_call
def delete_people_config(project: Project, index: int, version: ProjectVersion | None = None) -> None:
    """Delete person from the configuration by its index.

    Args:
        project: Project's representation.
        index: Index to item which should be deleted. First item is 1.
        version: The version of the project. If not provided, the last version is used.
    """
    if version is None:
        version = project.config.last_version()

    # Delete the date from the configuration
    project.config.at_version(version).delete_person(index=index)

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

delete_targets_config(project, index, version=None, interactive=False)

Delete target from the configuration by its index.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
index int

Index to item which should be deleted. First item is 1.

required
version ProjectVersion | None

The version of the project. If not provided, the last version is used.

None
interactive bool

Whether to ask for confirmations.

False
Source code in sereto/cli/config.py
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
@validate_call
def delete_targets_config(
    project: Project, index: int, version: ProjectVersion | None = None, interactive: bool = False
) -> None:
    """Delete target from the configuration by its index.

    Args:
        project: Project's representation.
        index: Index to item which should be deleted. First item is 1.
        version: The version of the project. If not provided, the last version is used.
        interactive: Whether to ask for confirmations.
    """
    if version is None:
        version = project.config.last_version()

    # Extract the filesystem path before deleting the values
    version_config = project.config.at_version(version)
    target_path = version_config.targets[index - 1].path

    # Delete the date from the configuration
    version_config.delete_target(index=index)

    # Write the configuration
    project.config.dump_json(file=project.get_config_path())

    # Delete target from the filesystem
    if (
        target_path is not None
        and target_path.is_dir()
        and interactive
        and yes_no_dialog(title="Confirm", text=f"Delete '{target_path}' from the filesystem?").run()
    ):
        shutil.rmtree(target_path)

edit_config(settings)

Edit the configuration file in default CLI editor.

Parameters:

Name Type Description Default
settings Settings

Global settings.

required
Source code in sereto/cli/config.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@validate_call
def edit_config(settings: Settings) -> None:
    """Edit the configuration file in default CLI editor.

    Args:
        settings: Global settings.
    """
    sereto_ver = importlib.metadata.version("sereto")
    config = get_config_path(dir_subtree=settings.projects_path)

    # If the config file does not exist, create it with default values
    if not config.is_file():
        Config(
            sereto_version=SeretoVersion.from_str(sereto_ver),
            version_configs={
                ProjectVersion.from_str("v1.0"): VersionConfig(
                    id="",
                    name="",
                    version_description="Initial",
                ),
            },
        ).dump_json(file=config)

    # Open the config file in the default editor
    click.edit(filename=str(config))

show_config(project, output_format, all=False, version=None)

Display the configuration for a project.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
output_format OutputFormat

Format of the output.

required
all bool

Whether to show values from all versions or just the last one.

False
version ProjectVersion | None

Show config at specific version, e.g. 'v1.0'.

None
Source code in sereto/cli/config.py
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
@validate_call
def show_config(
    project: Project,
    output_format: OutputFormat,
    all: bool = False,
    version: ProjectVersion | None = None,
) -> None:
    """Display the configuration for a project.

    Args:
        project: Project's representation.
        output_format: Format of the output.
        all: Whether to show values from all versions or just the last one.
        version: Show config at specific version, e.g. 'v1.0'.
    """
    if version is None:
        version = project.config.last_version()

    version_config = project.config.at_version(version)

    match output_format:
        case OutputFormat.table:
            Console().print(f"\n\n[blue]{version_config.id} - {version_config.name}\n", justify="center")
            show_targets_config(
                project=project,
                output_format=OutputFormat.table,
                all=all,
                version=version,
            )
            show_dates_config(
                project=project,
                output_format=OutputFormat.table,
                all=all,
                version=version,
            )
            show_people_config(
                project=project,
                output_format=OutputFormat.table,
                all=all,
                version=version,
            )
        case OutputFormat.json:
            if all:
                Console().print_json(project.config.model_dump_json())
            else:
                Console().print_json(version_config.model_dump_json())

show_dates_config(project, output_format, all, version)

Display the configured dates.

By default, if neither of version and all arguments are used, dates from the latest version are displayed.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
output_format OutputFormat

Select format of the output.

required
all bool

Show dates from all versions.

required
version ProjectVersion | None

Show dates from specific version.

required
Source code in sereto/cli/config.py
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
@validate_call
def show_dates_config(
    project: Project,
    output_format: OutputFormat,
    all: bool,
    version: ProjectVersion | None,
) -> None:
    """Display the configured dates.

    By default, if neither of `version` and `all` arguments are used, dates from the latest version are displayed.

    Args:
        project: Project's representation.
        output_format: Select format of the output.
        all: Show dates from all versions.
        version: Show dates from specific version.
    """
    if version is None:
        version = project.config.last_version()

    match output_format:
        case OutputFormat.table:
            for ver in project.config.versions() if all else [version]:
                Console().line()
                table = _get_dates_table(version_config=project.config.at_version(version=ver), version=ver)
                Console().print(table, justify="center")
        case OutputFormat.json:
            DateList: TypeAdapter[list[Date]] = TypeAdapter(list[Date])
            DateAll: TypeAdapter[dict[str, list[Date]]] = TypeAdapter(dict[str, list[Date]])

            if all:
                all_dates = DateAll.validate_python(
                    {str(ver): project.config.at_version(version=ver).dates for ver in project.config.versions()}
                )
                Console().print_json(DateAll.dump_json(all_dates).decode("utf-8"))
            else:
                dates = DateList.validate_python(project.config.at_version(version).dates)
                Console().print_json(DateList.dump_json(dates).decode("utf-8"))

show_people_config(project, output_format, all, version)

Display the configured people.

By default, if neither of version and all arguments are used, people from the latest version are displayed.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
output_format OutputFormat

Select format of the output.

required
all bool

Show people from all versions.

required
version ProjectVersion | None

Show people from specific version.

required
Source code in sereto/cli/config.py
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
@validate_call
def show_people_config(
    project: Project,
    output_format: OutputFormat,
    all: bool,
    version: ProjectVersion | None,
) -> None:
    """Display the configured people.

    By default, if neither of `version` and `all` arguments are used, people from the latest version are displayed.

    Args:
        project: Project's representation.
        output_format: Select format of the output.
        all: Show people from all versions.
        version: Show people from specific version.
    """
    if version is None:
        version = project.config.last_version()

    match output_format:
        case OutputFormat.table:
            for ver in project.config.versions() if all else [version]:
                Console().line()
                table = _get_person_table(version_config=project.config.at_version(version=ver), version=ver)
                Console().print(table, justify="center")
        case OutputFormat.json:
            PersonList: TypeAdapter[list[Person]] = TypeAdapter(list[Person])
            PersonAll: TypeAdapter[dict[str, list[Person]]] = TypeAdapter(dict[str, list[Person]])

            if all:
                all_people = PersonAll.validate_python(
                    {str(ver): project.config.at_version(version=ver).people for ver in project.config.versions()}
                )
                Console().print_json(PersonAll.dump_json(all_people).decode("utf-8"))
            else:
                people = PersonList.validate_python(project.config.at_version(version).people)
                Console().print_json(PersonList.dump_json(people).decode("utf-8"))

show_targets_config(project, output_format, all, version)

Display the configured targets.

By default, if neither of version and all arguments are used, targets from the latest version are displayed.

Parameters:

Name Type Description Default
project Project

Project's representation.

required
output_format OutputFormat

Select format of the output.

required
all bool

Show targets from all versions.

required
version ProjectVersion | None

Show targets from the specified project's version.

required
Source code in sereto/cli/config.py
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
@validate_call
def show_targets_config(
    project: Project,
    output_format: OutputFormat,
    all: bool,
    version: ProjectVersion | None,
) -> None:
    """Display the configured targets.

    By default, if neither of `version` and `all` arguments are used, targets from the latest version are displayed.

    Args:
        project: Project's representation.
        output_format: Select format of the output.
        all: Show targets from all versions.
        version: Show targets from the specified project's version.
    """
    if version is None:
        version = project.config.last_version()

    match output_format:
        case OutputFormat.table:
            for ver in project.config.versions() if all else [version]:
                Console().line()
                table = _get_target_table(version_config=project.config.at_version(version=ver), version=ver)
                Console().print(table, justify="center")
        case OutputFormat.json:
            TargetList: TypeAdapter[list[Target]] = TypeAdapter(list[Target])
            TargetAll: TypeAdapter[dict[str, list[Target]]] = TypeAdapter(dict[str, list[Target]])

            if all:
                all_targets = TargetAll.validate_python(
                    {str(ver): project.config.at_version(version=ver).targets for ver in project.config.versions()}
                )
                Console().print_json(TargetAll.dump_json(all_targets).decode("utf-8"))
            else:
                targets = TargetList.validate_python(project.config.at_version(version).targets)
                Console().print_json(TargetList.dump_json(targets).decode("utf-8"))