Skip to content

Commit 7cb1675

Browse files
committed
Expose machine-readable capability matrix
1 parent fb269c6 commit 7cb1675

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

‎src/openstatspec/api.py‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@
1010
from .sql import declared_profiles, validate_dataset
1111

1212

13+
14+
def capability_matrix() -> Mapping[str, Any]:
15+
return {
16+
"spss": {
17+
"values": "supported", "variable_labels": "supported",
18+
"value_labels": "supported", "formats": "supported",
19+
"measurement_level": "supported", "user_missing_rules": "supported",
20+
"documents": "supported", "multiple_response_sets": "lossy",
21+
"variable_alignment": "lossy", "variable_sets": "unobservable",
22+
"custom_attributes": "unobservable", "variable_role": "unobservable",
23+
},
24+
"sql_profiles": declared_profiles(),
25+
}
26+
1327
def capabilities() -> Mapping[str, Any]:
1428
return CapabilityDeclaration(
1529
specification="OpenStatSpec strict wide-table SPSS profile (initial)",

‎src/openstatspec/cli.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import argparse
55
from collections.abc import Sequence
66

7-
from .api import export_sav, import_sav, inspect, validate
7+
from .api import capability_matrix, export_sav, import_sav, inspect, validate
88

99

1010
def main(argv: Sequence[str] | None = None) -> int:
1111
parser = argparse.ArgumentParser(prog="openstatspec")
1212
commands = parser.add_subparsers(dest="command", required=True)
13+
commands.add_parser("capabilities", help="show supported and lossy feature matrix")
1314
importer = commands.add_parser("import", help="import one SAV/ZSAV file")
1415
importer.add_argument("source")
1516
importer.add_argument("--database-url", required=True)
@@ -24,7 +25,9 @@ def main(argv: Sequence[str] | None = None) -> int:
2425
exporter.add_argument("--dataset-id", required=True)
2526
exporter.add_argument("--output", required=True)
2627
args = parser.parse_args(argv)
27-
if args.command == "import":
28+
if args.command == "capabilities":
29+
result = capability_matrix()
30+
elif args.command == "import":
2831
result = import_sav(args.source, database_url=args.database_url, dataset_id=args.dataset_id)
2932
elif args.command == "export":
3033
result = export_sav(database_url=args.database_url, dataset_id=args.dataset_id, destination=args.output)

0 commit comments

Comments
 (0)