Skip to content

CLI

export_data(exporter_name, start, end, config)

Export data using the specified exporter.

PARAMETER DESCRIPTION
exporter_name

The name of the exporter.

TYPE: str

start

The start date string in %Y-%m-%d format.

TYPE: str

end

The end date string in %Y-%m-%d format.

TYPE: str | None

config

The exporter config in JSON format. See the exporter's documentation for args details.

TYPE: str | None

RETURNS DESCRIPTION
str

The exported data

Example

$ ckan event-audit export-data csv --start=2024-11-11 > report.csv

$ ckan event-audit export-data json --start=2024-11-11 | jq '[.[] | {id, category, action}]'

$ ckan event-audit export-data xlsx --start=2024-11-11 --config='{"file_path": "/tmp/test.xlsx"}'

Source code in ckanext/event_audit/cli.py
21
22
23
24
25
26
27
28
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
@event_audit.command()
@click.argument("exporter_name", type=str)
@click.option(
    "--start",
    required=True,
    type=click.DateTime(formats=["%Y-%m-%d"]),
    help="ISO format start date",
)
@click.option(
    "--end",
    required=False,
    type=click.DateTime(formats=["%Y-%m-%d"]),
    help="ISO format end date",
)
@click.option("--config", required=False, type=str, help="Custom config in JSON format")
def export_data(exporter_name: str, start: dt, end: dt | None, config: str | None):
    """Export data using the specified exporter.

    Args:
        exporter_name (str): The name of the exporter.
        start (str): The start date string in %Y-%m-%d format.
        end (str | None): The end date string in %Y-%m-%d format.
        config (str | None): The exporter config in JSON format. See the exporter's
            documentation for args details.

    Returns:
        str : The exported data

    Example:
        $ ckan event-audit export-data csv --start=2024-11-11 > report.csv

        $ ckan event-audit export-data json --start=2024-11-11 | jq '[.[] |
            {id, category, action}]'

        $ ckan event-audit export-data xlsx --start=2024-11-11
            --config='{"file_path": "/tmp/test.xlsx"}'
    """
    start = UTC.localize(start) if start else None
    end = UTC.localize(end) if end else None

    try:
        config_dict = json.loads(config or "{}")
    except json.JSONDecodeError:
        return click.secho("Invalid JSON format for config.")

    try:
        exporter = utils.get_exporter(exporter_name)(**config_dict)
    except TypeError as e:
        return click.secho(f"Invalid exporter config: {config}. Error: {e}", fg="red")
    except ValueError as e:
        return click.secho(e, fg="red")

    if start and end and start > end:
        return click.secho("Start date must be before the end date.", fg="red")

    click.echo(exporter.from_filters(types.Filters(time_from=start, time_to=end)))

remove_events(repository, start, end)

Remove events from the repository by time range.

PARAMETER DESCRIPTION
repository

The repository name. If not provided, the active repository will be used.

TYPE: str | None

start

The start date string in %Y-%m-%d format.

TYPE: str

end

The end date string in %Y-%m-%d format.

TYPE: str | None

Example

$ ckan event-audit remove-events --start=2024-11-11 --end=2024-11-12

Source code in ckanext/event_audit/cli.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
@event_audit.command()
@click.option("--repository", required=False, help="The repository name")
@click.option(
    "--start",
    required=False,
    type=click.DateTime(formats=["%Y-%m-%d"]),
    help="ISO format start date",
)
@click.option(
    "--end",
    required=False,
    type=click.DateTime(formats=["%Y-%m-%d"]),
    help="ISO format end date",
)
def remove_events(repository: str | None, start: dt | None, end: dt | None):
    """Remove events from the repository by time range.

    Args:
        repository (str | None): The repository name. If not provided, the
            active repository will be used.
        start (str): The start date string in %Y-%m-%d format.
        end (str | None): The end date string in %Y-%m-%d format.

    Example:
        $ ckan event-audit remove-events --start=2024-11-11 --end=2024-11-12
    """
    start = UTC.localize(start) if start else None
    end = UTC.localize(end) if end else None

    if start and end and start > end:
        return click.secho("Start date must be before the end date.", fg="red")

    try:
        repo = utils.get_repo(repository) if repository else utils.get_active_repo()
    except ValueError:
        return click.secho(f"Unknown repository: {repository}", fg="red")

    if not (start or end) and not isinstance(repo, repositories.RemoveAll):
        return click.secho(
            f"Repository {repository} does not support removing events.", fg="red"
        )

    if not isinstance(repo, repositories.RemoveFiltered):
        if start or end:
            return click.secho(
                (
                    f"Repository {repository} does not support removing events "
                    "by time range. "
                    "Please remove the --start and --end flags to delete all events."
                ),
                fg="red",
            )
        return repo.remove_all_events()

    return repo.remove_events(types.Filters(time_from=start, time_to=end))