Skip to content

Commit

Permalink
Consume command
Browse files Browse the repository at this point in the history
  • Loading branch information
amercader committed May 6, 2024
1 parent 6fb1780 commit 9a4edcc
Showing 1 changed file with 65 additions and 10 deletions.
75 changes: 65 additions & 10 deletions ckanext/dcat/cli.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,80 @@
# -*- coding: utf-8 -*-
import json

import click

import ckan.plugins.toolkit as tk

import ckanext.dcat.utils as utils
from ckanext.dcat.processors import RDFParser, RDFSerializer, DEFAULT_RDF_PROFILES

@click.group()
def generate_static():
"""Generates static files containing all datasets.

"""
@click.group()
def dcat():
"""DCAT utilities for CKAN"""
pass

@generate_static.command()
@click.argument('output', type=click.File(mode="w"))
def json(output):
"""The generate command will generate a static file containing all of
the datasets in the catalog in JSON format.

@dcat.command()
@click.argument("output", type=click.File(mode="w"))
def generate_static(output):
"""[Deprecated] Generate a static datasets file in JSON format
(requires the dcat_json_interface plugin) .
"""
utils.generate_static_json(output)


@dcat.command(context_settings={"show_default": True})
@click.argument("input", type=click.File(mode="r"))
@click.option(
"-o",
"--output",
type=click.File(mode="w"),
default="-",
help="By default the command will output the result to stdin, "
"alternatively you can provide a file path with this option",
)
@click.option(
"-f", "--format", default="xml", help="Serialization format (eg ttl, jsonld)"
)
@click.option(
"-p",
"--profiles",
default=" ".join(DEFAULT_RDF_PROFILES),
help="RDF profiles to use",
)
@click.option(
"-P", "--pretty", default=False, help="Make the output more human readable"
)
@click.option(
"-m", "--compat_mode", default=False, help="Compatibility mode (deprecated)"
)
def consume(input, output, format, profiles, pretty, compat_mode):
"""
Parses DCAT RDF graphs into CKAN dataset JSON objects.
The input serializations can be provided as a path to a file, e.g.:
ckan dcat consume examples/dataset.ttl
Or be read from stdin:
ckan dcat consume -
"""
contents = input.read()

if profiles:
profiles = profiles.split()
parser = RDFParser(profiles=profiles, compatibility_mode=compat_mode)
parser.parse(contents, _format=format)

ckan_datasets = [d for d in parser.datasets()]

indent = 4 if pretty else None
out = json.dumps(ckan_datasets, indent=indent)

output.write(out)


def get_commands():
return [generate_static]
return [dcat]

0 comments on commit 9a4edcc

Please sign in to comment.