Skip to content

Commit fb7f9d0

Browse files
authored
Merge pull request #100 from pacificclimate/issue/96
Create generate_manifest script and python module
2 parents 7108652 + bfdfa62 commit fb7f9d0

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

mm_cataloguer/generate_manifest.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.orm import sessionmaker
3+
from modelmeta import DataFile, DataFileVariable, Ensemble, EnsembleDataFileVariables
4+
import sys
5+
6+
def list_filepaths(session, ensembles, since, outfile):
7+
if ensembles == ["all"]:
8+
ensembles = ["all_files"]
9+
print(session.query(DataFile.filename).join(DataFileVariable)
10+
.join(EnsembleDataFileVariables)
11+
.join(Ensemble)
12+
.filter(Ensemble.name.in_(ensembles))
13+
.filter(DataFile.index_time >= since).all(),
14+
file=outfile)
15+
16+
def generate_manifest(dsn, ensembles, since, outfile):
17+
engine = create_engine(dsn)
18+
session = sessionmaker(bind=engine)()
19+
if outfile != sys.stdout:
20+
outfile = open(outfile, "w")
21+
list_filepaths(session, ensembles, since, outfile)

scripts/generate_manifest

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#! python
2+
from argparse import ArgumentParser
3+
import sys
4+
from dateutil.parser import parse
5+
6+
from mm_cataloguer.generate_manifest import generate_manifest
7+
8+
9+
if __name__ == '__main__':
10+
parser = ArgumentParser(
11+
description='Generate manifest of files requested from database')
12+
parser.add_argument("-c", "--connection_string", help="DSN for modelmeta database")
13+
parser.add_argument("-e", "--ensembles", nargs="+", default=["all"],
14+
help="Ensembles from which files should be listed")
15+
parser.add_argument("-s", "--since", help="Date after which files should be listed. "
16+
"Date is parsed using dateutil.parser.parse")
17+
parser.add_argument("-o", "--outfile", default=sys.stdout,
18+
help="Path to file that should contain output")
19+
args = parser.parse_args()
20+
since = parse(args.since)
21+
generate_manifest(args.connection_string, args.ensembles, since, args.outfile)

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
scripts/index_netcdf
5050
scripts/associate_ensemble
5151
scripts/ncwms_configurator
52+
scripts/generate_manifest
5253
'''.split(),
5354
classifiers=['Development Status :: 5 - Production/Stable',
5455
'Environment :: Console',

0 commit comments

Comments
 (0)