Source code for standard_names.cmd.snsql
#! /usr/bin/env python
from __future__ import print_function
import os
from ..utilities import FORMATTERS
from ..registry import NamesRegistry
_NAMES_SCHEMA = """
create table names (
id integer primary key,
name text,
unique(name)
);
create table objects (
id integer primary key,
name text,
unique(name)
);
create table quantities (
id integer primary key,
name text,
unique(name)
);
create table operators (
id integer primary key,
name text,
unique(name)
);
""".strip()
[docs]def as_sql_commands(names, newline=None):
"""Create an sql database from a NamesRegistry.
Parameters
----------
names : NamesRegistry
A collection of CSDMS Standard Names.
newline : str, optional
Newline character to use for output.
Returns
-------
str
The SQL commands to create the database.
Examples
--------
>>> import standard_names as csn
>>> names = csn.NamesRegistry(None)
>>> names.add('air__temperature')
>>> print(csn.cmd.snsql.as_sql_commands(names, newline='\\n'))
... # doctest: +REPORT_UDIFF
BEGIN TRANSACTION;
CREATE TABLE names (
id integer primary key,
name text,
unique(name)
);
INSERT INTO "names" VALUES(1,'air__temperature');
CREATE TABLE objects (
id integer primary key,
name text,
unique(name)
);
INSERT INTO "objects" VALUES(1,'air');
CREATE TABLE operators (
id integer primary key,
name text,
unique(name)
);
CREATE TABLE quantities (
id integer primary key,
name text,
unique(name)
);
INSERT INTO "quantities" VALUES(1,'temperature');
COMMIT;
"""
newline = newline or os.linesep
from contextlib import closing
from sqlite3 import connect
with closing(connect(":memory:")) as db:
db.cursor().executescript(_NAMES_SCHEMA)
c = db.cursor()
for name in names.names:
c.execute("INSERT INTO names(name) VALUES ('%s');" % name)
for name in names.objects:
c.execute("INSERT INTO objects(name) VALUES ('%s');" % name)
for name in names.quantities:
c.execute("INSERT INTO quantities(name) VALUES ('%s');" % name)
for name in names.operators:
c.execute("INSERT INTO operators(name) VALUES ('%s');" % name)
db.commit()
commands = newline.join(db.iterdump())
return commands
[docs]def main():
"""
Build a database of CSDMS standard names from a list.
"""
import argparse
parser = argparse.ArgumentParser(
description="Build an sqlite database from a list of names"
)
parser.add_argument(
"file", nargs="+", type=argparse.FileType("r"), help="List of names"
)
args = parser.parse_args()
names = NamesRegistry(args.file)
return as_sql_commands(names)
[docs]def run():
print(main())