1
1
import yaml
2
2
import json
3
+ import recastapi .analysis .read
3
4
import recastapi .request .write
4
5
import click
5
6
import zipfile
6
7
import tempfile
7
8
import os
8
9
9
- @click .command ()
10
- @click .argument ('specfile' )
11
- def createscan (specfile ):
12
- spec = yaml .load (open (specfile ))
13
- scanrequest = recastapi .request .write .scan_request (
14
- spec ['analysis_id' ],
15
- spec ['title' ],
16
- spec ['description' ],
17
- spec ['reason' ],
18
- spec ['additional_information' ]
19
- )
20
-
21
- parnames = spec ['parameters' ]
22
- points = spec ['points' ]
23
-
10
+ def addpoints_to_scan (scanid ,req_format ,parnames ,points ):
24
11
point_requests = []
25
12
basic_requests = []
26
- for p in points :
13
+
14
+ for i ,p in enumerate (points ):
27
15
coordinates = p ['coordinates' ]
28
16
data = p ['data' ]
29
17
@@ -42,18 +30,53 @@ def createscan(specfile):
42
30
raise click .ClickException ('point data needs to be zipfiles or directory' )
43
31
44
32
pointdict = dict (zip (parnames ,coordinates ))
45
- pr = recastapi .request .write .point_request_with_coords (scanrequest [ 'id' ] ,pointdict )
33
+ pr = recastapi .request .write .point_request_with_coords (scanid ,pointdict )
46
34
point_requests += [{'point' :pointdict ,'id' :pr ['id' ]}]
47
- br = recastapi .request .write .basic_request_with_archive (pr ['id' ],archive )
48
- basic_requests += [{'point' :pointdict ,'id' :br ['id' ]}]
35
+ br = recastapi .request .write .basic_request_with_archive (pr ['id' ],archive ,req_format )
36
+ basic_requests += [{'point' :pointdict ,'id' :br ['id' ], 'point_request' : pr ['id' ]}]
37
+ click .secho ('uploaded {}/{} requests' .format (i + 1 ,len (points )))
38
+ return point_requests , basic_requests
39
+
40
+
41
+ @click .command ()
42
+ @click .argument ('specfile' )
43
+ @click .argument ('outputfile' )
44
+ def createscan (specfile ,outputfile ):
45
+ spec = yaml .load (open (specfile ))
46
+
47
+ analysis_info = recastapi .analysis .read .analysis_by_pub_identifier (* spec ['pubkey' ].split ('/' ))
48
+ if not analysis_info :
49
+ raise click .ClickException ('Analysis {} not known, import it first.' .format (spec ['pubkey' ]))
50
+
51
+ scanrequest = recastapi .request .write .scan_request (
52
+ analysis_info ['id' ],
53
+ spec ['title' ],
54
+ spec ['description' ],
55
+ spec ['reason' ],
56
+ spec ['additional_information' ]
57
+ )
49
58
50
- click .echo (yaml .safe_dump ({
59
+
60
+ parnames = spec ['parameters' ]
61
+ points = spec ['points' ]
62
+
63
+ prlist , brlist = addpoints_to_scan (scanrequest ['id' ],spec ['request_format' ],parnames ,points )
64
+
65
+ yaml .safe_dump ({
51
66
'scan_id' : scanrequest ['id' ],
52
- 'point_requests' : point_requests ,
53
- 'basic_requests' : basic_requests
67
+ 'point_requests' : prlist ,
68
+ 'basic_requests' : brlist
54
69
},
70
+ open (outputfile ,'w' ),
55
71
default_flow_style = False
56
- ))
72
+ )
73
+
74
+ @click .command ()
75
+ @click .argument ('specfile' )
76
+ @click .argument ('outputfile' )
77
+ def addtoscan (specfile ,outputfile ):
78
+ #existing_points = {tuple(x['value'] for x in p['point_coordinates']):p['id'] for p in recastapi.request.read.point_request_of_scan(2) }
79
+ pass
57
80
58
81
if __name__ == '__main__' :
59
82
createscan ()
0 commit comments