Skip to content

Commit cfc9099

Browse files
committed
Update example scripts to use the new format of the conditions
argument when creating queries. Eliminate a few more occurrences of the old legacy ICAT query syntax on the way.
1 parent 383c975 commit cfc9099

9 files changed

Lines changed: 186 additions & 158 deletions

File tree

doc/examples/add-job.py

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ def makeparam(t, pdata):
4242
param = client.new(t)
4343
initobj(param, pdata)
4444
ptdata = data['parameter_types'][pdata['type']]
45-
query = ("ParameterType [name='%s' AND units='%s']"
46-
% (ptdata['name'], ptdata['units']))
45+
query = Query(client, "ParameterType", conditions=[
46+
("name", "= '%s'" % ptdata['name']),
47+
("units", "= '%s'" % ptdata['units']),
48+
])
4749
param.type = client.assertedSearch(query)[0]
4850
return param
4951

@@ -78,20 +80,20 @@ def makeparam(t, pdata):
7880
initobj(inputcollection, jobdata['input'])
7981

8082
for ds in jobdata['input']['datasets']:
81-
query = Query(client, "Dataset", conditions={
82-
"name":"= '%s'" % ds['name'],
83-
"investigation.name":"= '%s'" % ds['investigation']
84-
})
83+
query = Query(client, "Dataset", conditions=[
84+
("name", "= '%s'" % ds['name']),
85+
("investigation.name", "= '%s'" % ds['investigation']),
86+
])
8587
dataset = client.assertedSearch(query)[0]
8688
dcs = client.new("DataCollectionDataset", dataset=dataset)
8789
inputcollection.dataCollectionDatasets.append(dcs)
8890

8991
for df in jobdata['input']['datafiles']:
90-
query = Query(client, "Datafile", conditions={
91-
"name":"= '%s'" % df['name'],
92-
"dataset.name":"= '%s'" % df['dataset'],
93-
"dataset.investigation.name":"= '%s'" % df['investigation']
94-
})
92+
query = Query(client, "Datafile", conditions=[
93+
("name", "= '%s'" % df['name']),
94+
("dataset.name", "= '%s'" % df['dataset']),
95+
("dataset.investigation.name", "= '%s'" % df['investigation']),
96+
])
9597
datafile = client.assertedSearch(query)[0]
9698
dcf = client.new("DataCollectionDatafile", datafile=datafile)
9799
inputcollection.dataCollectionDatafiles.append(dcf)
@@ -112,13 +114,13 @@ def makeparam(t, pdata):
112114
initobj(outputcollection, jobdata['output'])
113115

114116
for ds in jobdata['output']['datasets']:
115-
query = Query(client, "Investigation", conditions={
116-
"name":"= '%s'" % ds['investigation']
117-
})
117+
query = Query(client, "Investigation", conditions=[
118+
("name", "= '%s'" % ds['investigation']),
119+
])
118120
investigation = client.assertedSearch(query)[0]
119-
query = Query(client, "DatasetType", conditions={
120-
"name":"= '%s'" % data['dataset_types'][ds['type']]['name']
121-
})
121+
query = Query(client, "DatasetType", conditions=[
122+
("name", "= '%s'" % data['dataset_types'][ds['type']]['name'])
123+
])
122124
dataset_type = client.assertedSearch(query)[0]
123125
print("Dataset: creating '%s' ..." % ds['name'])
124126
dataset = client.new("Dataset")
@@ -131,10 +133,10 @@ def makeparam(t, pdata):
131133

132134
for df in ds['datafiles']:
133135
dff = data['datafile_formats'][df['format']]
134-
query = Query(client, "DatafileFormat", conditions={
135-
"name":"= '%s'" % dff['name'],
136-
"version":"= '%s'" % dff['version'],
137-
})
136+
query = Query(client, "DatafileFormat", conditions=[
137+
("name", "= '%s'" % dff['name']),
138+
("version", "= '%s'" % dff['version']),
139+
])
138140
datafile_format = client.assertedSearch(query)[0]
139141
print("Datafile: creating '%s' ..." % df['name'])
140142
datafile = client.new("Datafile")
@@ -157,16 +159,16 @@ def makeparam(t, pdata):
157159
outputcollection.dataCollectionDatasets.append(dcs)
158160

159161
for df in jobdata['output']['datafiles']:
160-
query = Query(client, "Dataset", conditions={
161-
"name":"= '%s'" % df['dataset'],
162-
"investigation.name":"= '%s'" % df['investigation']
163-
})
162+
query = Query(client, "Dataset", conditions=[
163+
("name", "= '%s'" % df['dataset']),
164+
("investigation.name", "= '%s'" % df['investigation']),
165+
])
164166
dataset = client.assertedSearch(query)[0]
165167
dff = data['datafile_formats'][df['format']]
166-
query = Query(client, "DatafileFormat", conditions={
167-
"name":"= '%s'" % dff['name'],
168-
"version":"= '%s'" % dff['version'],
169-
})
168+
query = Query(client, "DatafileFormat", conditions=[
169+
("name", "= '%s'" % dff['name']),
170+
("version", "= '%s'" % dff['version']),
171+
])
170172
datafile_format = client.assertedSearch(query)[0]
171173
print("Datafile: creating '%s' ..." % df['name'])
172174
datafile = client.new("Datafile")

doc/examples/create-datafile.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@
5656
raise RuntimeError("datafile %s not found" % df_path)
5757

5858
query = Query(client, "DatasetType",
59-
conditions={ "name": "= '%s'" % conf.dst_name })
59+
conditions=[ ("name", "= '%s'" % conf.dst_name) ])
6060
dst = client.assertedSearch(query)[0]
6161
query = Query(client, "DatafileFormat",
62-
conditions={ "name": "= '%s'" % conf.dff_name })
62+
conditions=[ ("name", "= '%s'" % conf.dff_name) ])
6363
dff = client.assertedSearch(query)[0]
6464
query = Query(client, "Investigation",
65-
conditions={ "name": "= '%s'" % conf.investigation })
65+
conditions=[ ("name", "= '%s'" % conf.investigation) ])
6666
investigation = client.assertedSearch(query)[0]
6767

6868
fstats = df_path.stat()

doc/examples/create-investigation.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,10 @@ def getUser(client, attrs):
107107
ip = client.new("InvestigationParameter")
108108
initobj(ip, pdata)
109109
ptdata = data['parameter_types'][pdata['type']]
110-
query = ("ParameterType [name='%s' AND units='%s']"
111-
% (ptdata['name'], ptdata['units']))
110+
query = Query(client, "ParameterType", conditions=[
111+
("name", "= '%s'" % ptdata['name']),
112+
("units", "= '%s'" % ptdata['units']),
113+
])
112114
ip.type = client.assertedSearch(query)[0]
113115
investigation.parameters.append(ip)
114116
if 'shifts' in investigationdata:
@@ -123,10 +125,10 @@ def getUser(client, attrs):
123125
sd = investigation.startDate or investigation.endDate
124126
ed = investigation.endDate or investigation.startDate
125127
if sd and ed:
126-
query = Query(client, "FacilityCycle", conditions={
127-
"startDate": "<= '%s'" % parse_attr_string(ed, "Date"),
128-
"endDate": "> '%s'" % parse_attr_string(sd, "Date"),
129-
})
128+
query = Query(client, "FacilityCycle", conditions=[
129+
("startDate", "<= '%s'" % parse_attr_string(ed, "Date")),
130+
("endDate", "> '%s'" % parse_attr_string(sd, "Date")),
131+
])
130132
for fc in client.search(query):
131133
ifc = client.new("InvestigationFacilityCycle", facilityCycle=fc)
132134
investigation.investigationFacilityCycles.append(ifc)

doc/examples/dumpinvestigation.py

Lines changed: 69 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,32 @@ def mergesearch(sexps):
7575
# instruments related to the investigations. These are independent
7676
# searches, but the results are likely to overlap. So we need to
7777
# search and merge results first. Similar situation for ParameterType.
78-
usersearch = [("User <-> InvestigationUser <-> Investigation [id=%d]"),
79-
("User <-> UserGroup <-> Grouping <-> InvestigationGroup "
80-
"<-> Investigation [id=%d]"),
81-
("User <-> InstrumentScientist <-> Instrument "
82-
"<-> InvestigationInstrument <-> Investigation [id=%d]")]
83-
ptsearch = [("ParameterType INCLUDE Facility, PermissibleStringValue "
84-
"<-> InvestigationParameter <-> Investigation [id=%d]"),
85-
("ParameterType INCLUDE Facility, PermissibleStringValue "
86-
"<-> SampleParameter <-> Sample <-> Investigation [id=%d]"),
87-
("ParameterType INCLUDE Facility, PermissibleStringValue "
88-
"<-> DatasetParameter <-> Dataset <-> Investigation [id=%d]"),
89-
("ParameterType INCLUDE Facility, PermissibleStringValue "
90-
"<-> DatafileParameter <-> Datafile <-> Dataset "
91-
"<-> Investigation [id=%d]"), ]
78+
usersearch = [
79+
Query(client, "User", conditions=[
80+
("investigationUsers.investigation.id", "= %d")
81+
]),
82+
Query(client, "User", conditions=[
83+
("userGroups.grouping.investigationGroups.investigation.id", "= %d")
84+
]),
85+
Query(client, "User", conditions=[
86+
("instrumentScientists.instrument.investigationInstruments."
87+
"investigation.id", "= %d")
88+
]),
89+
]
90+
ptsearch = [
91+
Query(client, "ParameterType", conditions=[
92+
("investigationParameters.investigation.id", "= %d")
93+
], includes=["facility", "permissibleStringValues"]),
94+
Query(client, "ParameterType", conditions=[
95+
("sampleParameters.sample.investigation.id", "= %d")
96+
], includes=["facility", "permissibleStringValues"]),
97+
Query(client, "ParameterType", conditions=[
98+
("datasetParameters.dataset.investigation.id", "= %d")
99+
], includes=["facility", "permissibleStringValues"]),
100+
Query(client, "ParameterType", conditions=[
101+
("datafileParameters.datafile.dataset.investigation.id", "= %d")
102+
], includes=["facility", "permissibleStringValues"]),
103+
]
92104

93105
# The set of objects to be included in the Investigation.
94106
inv_includes = { "facility", "type.facility", "investigationInstruments",
@@ -103,42 +115,49 @@ def mergesearch(sexps):
103115
# list: either queries expressed as Query objects, or queries
104116
# expressed as string expressions, or lists of objects. In the first
105117
# two cases, the seacrh results will be written, in the last case, the
106-
# objects are written as provided. We assume that there is only one
107-
# relevant facility, e.g. that all objects related to the
108-
# investigation are related to the same facility. We may thus ommit
109-
# the facility from the ORDER BY clauses.
110-
authtypes = [mergesearch([s % invid for s in usersearch]),
111-
("Grouping ORDER BY name INCLUDE UserGroup, User "
112-
"<-> InvestigationGroup <-> Investigation [id=%d]" % invid)]
113-
statictypes = [("Facility ORDER BY name"),
114-
("Instrument ORDER BY name "
115-
"INCLUDE Facility, InstrumentScientist, User "
116-
"<-> InvestigationInstrument <-> Investigation [id=%d]"
117-
% invid),
118-
(mergesearch([s % invid for s in ptsearch])),
119-
("InvestigationType ORDER BY name INCLUDE Facility "
120-
"<-> Investigation [id=%d]" % invid),
121-
("SampleType ORDER BY name, molecularFormula INCLUDE Facility "
122-
"<-> Sample <-> Investigation [id=%d]" % invid),
123-
("DatasetType ORDER BY name INCLUDE Facility "
124-
"<-> Dataset <-> Investigation [id=%d]" % invid),
125-
("DatafileFormat ORDER BY name, version INCLUDE Facility "
126-
"<-> Datafile <-> Dataset <-> Investigation [id=%d]" % invid)]
127-
investtypes = [Query(client, "Investigation",
128-
conditions={"id":"in (%d)" % invid},
129-
includes=inv_includes),
130-
Query(client, "Sample", order=["name"],
131-
conditions={"investigation.id":"= %d" % invid},
132-
includes={"investigation", "type.facility",
133-
"parameters", "parameters.type.facility"}),
134-
Query(client, "Dataset", order=["name"],
135-
conditions={"investigation.id":"= %d" % invid},
136-
includes={"investigation", "type.facility", "sample",
137-
"parameters", "parameters.type.facility"}),
138-
Query(client, "Datafile", order=["dataset.name", "name"],
139-
conditions={"dataset.investigation.id":"= %d" % invid},
140-
includes={"dataset", "datafileFormat.facility",
141-
"parameters", "parameters.type.facility"})]
118+
# objects are written as provided.
119+
authtypes = [
120+
mergesearch([str(s) % invid for s in usersearch]),
121+
Query(client, "Grouping", conditions=[
122+
("investigationGroups.investigation.id", "= %d" % invid)
123+
], order=["name"], includes=["userGroups.user"])
124+
]
125+
statictypes = [
126+
Query(client, "Facility", order=True),
127+
Query(client, "Instrument", conditions=[
128+
("investigationInstruments.investigation.id", "= %d" % invid)
129+
], order=True, includes=["facility", "instrumentScientists.user"]),
130+
mergesearch([str(s) % invid for s in ptsearch]),
131+
Query(client, "InvestigationType", conditions=[
132+
("investigations.id", "= %d" % invid)
133+
], order=True, includes=["facility"]),
134+
Query(client, "SampleType", conditions=[
135+
("samples.investigation.id", "= %d" % invid)
136+
], order=True, includes=["facility"]),
137+
Query(client, "DatasetType", conditions=[
138+
("datasets.investigation.id", "= %d" % invid)
139+
], order=True, includes=["facility"]),
140+
Query(client, "DatafileFormat", conditions=[
141+
("datafiles.dataset.investigation.id", "= %d" % invid)
142+
], order=True, includes=["facility"]),
143+
]
144+
investtypes = [
145+
Query(client, "Investigation",
146+
conditions=[("id", "in (%d)" % invid)],
147+
includes=inv_includes),
148+
Query(client, "Sample", order=["name"],
149+
conditions=[("investigation.id", "= %d" % invid)],
150+
includes={"investigation", "type.facility",
151+
"parameters", "parameters.type.facility"}),
152+
Query(client, "Dataset", order=["name"],
153+
conditions=[("investigation.id", "= %d" % invid)],
154+
includes={"investigation", "type.facility", "sample",
155+
"parameters", "parameters.type.facility"}),
156+
Query(client, "Datafile", order=["dataset.name", "name"],
157+
conditions=[("dataset.investigation.id", "= %d" % invid)],
158+
includes={"dataset", "datafileFormat.facility",
159+
"parameters", "parameters.type.facility"})
160+
]
142161

143162
with open_dumpfile(client, conf.file, conf.format, 'w') as dumpfile:
144163
dumpfile.writedata(authtypes)

doc/examples/dumprules.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
groups = set()
3838
query = Query(client, "Rule",
39-
conditions={"grouping": "IS NOT NULL"},
39+
conditions=[("grouping", "IS NOT NULL")],
4040
includes={"grouping.userGroups.user"})
4141
for r in client.search(query):
4242
groups.add(r.grouping)
@@ -45,9 +45,9 @@
4545
sorted(groups, key=icat.entity.Entity.__sortkey__),
4646
Query(client, "PublicStep"),
4747
Query(client, "Rule", order=["what", "id"],
48-
conditions={"grouping": "IS NULL"}),
48+
conditions=[("grouping", "IS NULL")]),
4949
Query(client, "Rule", order=["grouping.name", "what", "id"],
50-
conditions={"grouping": "IS NOT NULL"},
50+
conditions=[("grouping", "IS NOT NULL")],
5151
includes={"grouping"}),
5252
]
5353

doc/examples/ingest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@
8383
client, conf = config.getconfig()
8484
client.login(conf.auth, conf.credentials)
8585

86-
query = Query(client, "Investigation", conditions={
87-
"name": "= '%s'" % conf.investigation
88-
})
86+
query = Query(client, "Investigation", conditions=[
87+
("name", "= '%s'" % conf.investigation),
88+
])
8989
investigation = client.assertedSearch(query)[0]
9090

9191

0 commit comments

Comments
 (0)