source: DVD_images/update_DVD_images.py @ 7356

Last change on this file since 7356 was 7356, checked in by kristy, 15 years ago

Script and htmls changed to incorporate PO.pdf document.

  • Property svn:executable set to *
File size: 16.9 KB
Line 
1#!/usr/bin/env python
2
3'''
4Program to update a DVD jurisdiction 'anuga' directory from the
5original source directory.
6
7usage: update.py <source>
8
9where <source> is one of:
10                  Hobart
11                  BatemansBay
12                  Gosford
13                  GoldCoast
14ie, the name of one of the DVD jurisdiction staging directories
15(case-insensitive).
16'''
17
18import os
19import sys
20import shutil
21import time
22
23
24# common base path to all data and project files
25main_path = '/nas/gemd/georisk_models/inundation'
26
27# structures holding data for each jurisdiction
28#   data_src_path  : sub-path to data directory
29#   proj_src_path  : sub-path to project files
30#   data_dst_path  : where to copy data files to
31#   proj_dst_path  : where to copy project files to
32#   copy_data_dirs : data directories to completely copy
33#   make_dst_dirs  : make these data directories (may be left empty)
34#   copy_data_files: individual data files to copy to <data_dst_path>
35#   copy_proj_files: individual project files to copy to <proj_dst_path>
36hobart_data = \
37{'jurisdiction':    'Hobart',           # jurisdiction name
38
39 # paths to various source directories
40 'data_src_path':   'data/tasmania/hobart_tsunami_scenario_2009/anuga',
41 'arcgis_src_path': 'data/tasmania/hobart_tsunami_scenario_2009/ArcGIS',
42 'viz_src_path':    'data/tasmania/hobart_tsunami_scenario_2009/visualisations',
43 'proj_src_path':   'sandpits/kvanputten/ANUGA/anuga_work/production/hobart_2009/For_DVD',
44 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
45
46 # paths to destination directories (under 'jurisdiction' root)
47 'data_dst_path':   'data/tasmania/hobart_tsunami_scenario_2009/anuga',
48 'proj_dst_path':   'project',
49 'viz_dst_path':    'documents',
50 'arcgis_dst_path': 'data/tasmania/hobart_tsunami_scenario_2009/ArcGIS',
51 'report_dst_path': 'documents',
52 
53 # copy or create whole directories
54 'make_dst_dirs':   ['outputs', 'topographies'],
55 'copy_data_dirs':  ['gauges','boundaries', 'polygons'],
56
57 # copy 'data' files or directories
58 'copy_data_files': ['outputs/Event1_HAT',
59                     'outputs/Event1_MSL',
60                     'outputs/Event2_HAT',
61                     'outputs/Event2_MSL',
62                     'outputs/Event3_MSL',
63                     'outputs/Event3_HAT',
64                     'outputs/elevation.gdb',
65                     'topographies/hobart_combined_elevation.pts',
66                     'topographies/hobart_combined_elevation.txt'],
67
68 # copy 'project' files or directories
69 'copy_proj_files': ['build_elevation.py', 'project.py', 'run_model.py', 
70                     'export_results_max.py',  'get_timeseries.py',
71                     'setup_model.py', 'build_urs_boundary.py',
72                     'file_length.py'],
73
74 # copy 'visualisations' files or directories
75 'copy_viz_files': ['Figures'], 
76
77 # copy 'arcgis' files or directories
78 'copy_arc_files':  ['Hobart.gdb','Hobart.mxd','layer files'],
79
80 # copy 'report' file
81 'copy_report_files':  ['professionalopinion_2009_07_TAS_inundation_modelling.pdf']
82}
83
84batemans_bay_data = \
85{'jurisdiction':    'BatemansBay',      # jurisdiction name
86
87 # paths to various source directories
88 'data_src_path':   'data/new_south_wales/batemans_bay_tsunami_scenario_2009/anuga',
89 'arcgis_src_path': 'data/new_south_wales/batemans_bay_tsunami_scenario_2009/ArcGIS',
90 'viz_src_path':    'data/new_south_wales/batemans_bay_tsunami_scenario_2009/visualisations',
91 'proj_src_path':   'sandpits/jgriffin/ANUGA/anuga_work/production/new_south_wales/batemans_bay',
92 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
93
94 # paths to destination directories (under 'jurisdiction' root)
95 'data_dst_path':   'data/new_south_wales/batemans_bay_tsunami_scenario_2009/anuga',
96 'proj_dst_path':   'project',
97 'viz_dst_path':    'documents',
98 'arcgis_dst_path': 'data/new_south_wales/batemans_bay_tsunami_scenario_2009/ArcGIS',
99 'report_dst_path': 'documents',
100
101 # copy or create whole directories
102 'make_dst_dirs':   ['boundaries', 'meshes', 'outputs', 'topographies'],
103 'copy_data_dirs':  ['polygons', 'gauges'],
104
105 # copy 'data' files or directories
106 'copy_data_files': ['topographies/batemans_bay_combined_elevation.pts',
107                     'outputs/Event1_HAT',
108                     'outputs/Event1_MSL',
109                     'outputs/Event2_HAT',
110                     'outputs/Event2_MSL',
111                     'outputs/Event3_MSL',
112                     'outputs/Puysegur_200yr',
113                     'outputs/Puysegur_500yr',
114                     'outputs/Puysegur_1000yr',
115                     'outputs/Puysegur_5000yr',
116                     'outputs/New_Hebrides_200yr',
117                     'outputs/New_Hebrides_500yr',
118                     'outputs/New_Hebrides_1000yr',
119                     'outputs/New_Hebrides_2000yr',
120                     'outputs/New_Hebrides_5000yr',
121                     'outputs/elevation',
122                     'boundaries/51077',
123                     'boundaries/51204',
124                     'boundaries/51292',
125                     'boundaries/51347',
126                     'boundaries/51378',
127                     'boundaries/51424',
128                     'boundaries/51436',
129                     'boundaries/51445',
130                     'boundaries/58115',
131                     'boundaries/58129',
132                     'boundaries/58226',
133                     'boundaries/58272',
134                     'boundaries/58284',
135                     'boundaries/58286',
136                     'boundaries/58346',
137                     'boundaries/58368',
138                     'boundaries/boundaries.gdb',
139                     'boundaries/landward_boundary_extend.csv',
140                     'boundaries/thinned_boundary_ordering_extend.csv'
141                     ],
142
143 # copy 'visualisations' files or directories
144 'copy_viz_files': ['Figures'], 
145
146 # copy 'project' files or directories
147 'copy_proj_files': ['project.py', 'run_model.py',
148                     'setup_model.py', 'build_elevation.py',
149                     'export_results_max.py',
150                     'file_length.py', 'build_urs_boundary.py'],
151
152 # copy 'arcgis' files or directories
153 'copy_arc_files':  ['BB_cbd_figure_template.mxd'],
154
155 # copy 'report' file
156 'copy_report_files':  ['professionalopinion_2009_09_NSW_inundation_modelling.pdf']
157
158}
159
160gosford_data = \
161{'jurisdiction':    'Gosford',          # jurisdiction name
162
163 # paths to various source directories
164 'data_src_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
165 'arcgis_src_path': 'data/new_south_wales/gosford_tsunami_scenario_2009/ArcGIS',
166 'viz_src_path':    'data/new_south_wales/gosford_tsunami_scenario_2009/visualisations',
167 'proj_src_path':   'sandpits/jgriffin/ANUGA/anuga_work/production/new_south_wales/gosford',
168 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
169 
170 # paths to destination directories (under 'jurisdiction' root)
171 'data_dst_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
172 'proj_dst_path':   'project',
173 'viz_dst_path':    'documents',
174 'arcgis_dst_path': 'data/new_south_wales/gosford_tsunami_scenario_2009/ArcGIS',
175 'report_dst_path': 'documents',
176 
177 # copy or create whole directories
178 'make_dst_dirs':   ['boundaries', 'meshes', 'outputs', 'topographies'],
179 'copy_data_dirs':  ['polygons',  'gauges'],
180
181 # copy 'data' files or directories
182 'copy_data_files': ['topographies/gosford_combined_elevation.pts',
183                     'outputs/Event1_HAT',
184                     'outputs/Event1_MSL',
185                     'outputs/Event2_HAT',
186                     'outputs/Event2_MSL',
187                     'outputs/Event3_MSL',
188                     'outputs/Puysegur_200yr',
189                     'outputs/Puysegur_500yr',
190                     'outputs/Puysegur_1000yr',
191                     'outputs/Puysegur_5000yr',
192                     'outputs/elevation',
193                     'boundaries/51436',
194                     'boundaries/58025',
195                     'boundaries/58113',
196                     'boundaries/58187',
197                     'boundaries/58242',
198                     'boundaries/58284',
199                     'boundaries/58349',
200                     'boundaries/boundaries.gdb',
201                     'boundaries/landward_boundary.csv',
202                     'boundaries/urs_order.csv'
203                    ],
204
205 # copy 'visualisations' files or directories
206 'copy_viz_files': ['Figures'], 
207
208 # copy 'project' files or directories
209 'copy_proj_files': ['export_results_max.py', 'file_length.py',
210                     'project.py', 'run_model.py', 'build_elevation.py',
211                     'get_timeseries.py', 'setup_model.py',
212                     'build_urs_boundary.py'
213                    ],
214
215 # copy 'arcgis' files or directories
216 'copy_arc_files':  ['G_umina_figure_template.mxd'],
217
218 # copy 'report' file
219 'copy_report_files':  ['professionalopinion_2009_09_NSW_inundation_modelling.pdf']
220}
221
222gold_coast_data = \
223{'jurisdiction':    'GoldCoast',        # jurisdiction name
224
225 # paths to various source directories
226 'data_src_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
227 'arcgis_src_path': 'data/queensland/gold_coast_tsunami_scenario_2009/ArcGIS',
228 'viz_src_path':    'data/queensland/gold_coast_tsunami_scenario_2009/visualisations',
229 'proj_src_path':   'sandpits/lfountain/anuga_work/production/gold_coast_2009/For_DVD',
230 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
231 
232 # paths to destination directories (under 'jurisdiction' root)
233 'data_dst_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
234 'proj_dst_path':   'project',
235 'viz_dst_path':    'documents',
236 'arcgis_dst_path': 'data/queensland/gold_coast_tsunami_scenario_2009/ArcGIS',
237 'report_dst_path': 'documents',
238
239 # copy or create whole directories
240 'make_dst_dirs':   ['outputs', 'topographies', 'boundaries'],
241 'copy_data_dirs':  ['polygons', 'gauges'],
242 
243 # copy 'data' files or directories
244 'copy_data_files': ['outputs/Event1_HAT', 'outputs/Event1_MSL',
245                     'outputs/Event2_HAT', 'outputs/Event2_MSL',
246                     'outputs/Event3_HAT', 'outputs/Event3_MSL',
247                     'boundaries/50863', 'boundaries/50994',
248                     'boundaries/51253', 'boundaries/51392',
249                     'boundaries/51423', 'boundaries/51469',
250                     'boundaries/62833','boundaries/events_chosen.xls',
251                     'boundaries/landward_boundary.csv',
252                     'boundaries/urs_order.csv',
253                     'topographies/gold_coast_combined_elevation.pts'
254                    ],
255
256 # copy 'visualisations' files or directories
257 'copy_viz_files': ['Figures'], 
258
259 # copy 'project' files or directories
260 'copy_proj_files': ['build_elevation.py', 'export_results_max.py', 'file_length.py',
261                     'project.py', 'run_model.py', 'setup_model.py',
262                     'get_timeseries.py', 'build_urs_boundary.py'
263                    ],
264
265 # copy 'arcgis' files or directories
266 'copy_arc_files':  ['gold_coast.mxd', 'gold_coast.gdb'],
267
268 # copy 'report' file
269 'copy_report_files':  ['professionalopinion_2009_08_QLD_inundation_modelling.pdf']
270}
271
272# dictionary mapping lower-case jurisdiction name to jurisdiction data dictionary
273source_jurisdiction_path = {'hobart': hobart_data,
274                            'batemansbay': batemans_bay_data,
275                            'gosford': gosford_data,
276                            'goldcoast': gold_coast_data
277                           }
278
279######
280# Routines to automate the script data above.
281######
282
283def log(msg=''):
284    print(msg)
285
286
287def dir_copy(src, dst):
288    cmd = 'cp -R %s %s' % (src, dst)
289    log('Doing: %s' % cmd)
290    fd = os.popen(cmd)
291    fd.close()
292
293def copy_file_or_dir(src, dst):
294    '''Copy a file or complete directory.'''
295
296    # could be a file or directory being copied
297    try:
298        shutil.copyfile(src, dst)
299    except IOError, e:
300        if 'Is a directory' in str(e):
301            shutil.copytree(src, dst)
302        else:
303            log('*' *72)
304            log('* %s' % str(e))
305            log('*' *72)
306
307def update_staging(jurisdiction):
308    # create a list of jurisdiction names
309    jurisdiction_names = []
310    for k in source_jurisdiction_path:
311        jurisdiction_names.append(source_jurisdiction_path[k]['jurisdiction'])
312
313    # get ready
314    j_dict = source_jurisdiction_path[jurisdiction]
315    j_name = j_dict['jurisdiction']
316    data_src_path = os.path.join(main_path, j_dict['data_src_path'])
317    data_dst_path = os.path.join(os.getcwd(), j_name, j_dict['data_dst_path'])
318    proj_src_path = os.path.join(main_path, j_dict['proj_src_path'])
319    proj_dst_path = os.path.join(os.getcwd(), j_name, j_dict['proj_dst_path'])
320    viz_src_path = os.path.join(main_path, j_dict['viz_src_path'])
321    viz_dst_path = os.path.join(os.getcwd(), j_name, j_dict['viz_dst_path'])
322    arcgis_src_path = os.path.join(main_path, j_dict['arcgis_src_path'])
323    arcgis_dst_path = os.path.join(os.getcwd(), j_name, j_dict['arcgis_dst_path'])
324    report_src_path = os.path.join(main_path, j_dict['report_src_path'])
325    report_dst_path = os.path.join(os.getcwd(), j_name, j_dict['report_dst_path'])
326   
327    # tell where all stuff is coming from
328    log('Getting data from: %s' % data_src_path)
329    log('Getting project from: %s' % proj_src_path)
330    log('Getting ArcGIS from: %s' % arcgis_src_path)
331    log('Getting report from: %s' % report_src_path)
332    log('')
333
334    # create new output directory, delete old if there
335    if os.path.exists(j_name):
336        log('Deleting existing staging directory: %s' % j_name)
337        shutil.rmtree(j_name)
338    log('Creating staging directory: %s' % j_name)
339    os.makedirs(j_name)
340
341    # create required directories
342    for dir in j_dict['make_dst_dirs']:
343        new_dir = os.path.join(data_dst_path, dir)
344        log('Creating directory: %s' % dir)
345        os.makedirs(new_dir)
346
347    # copy required full directories
348    for copy_dir in j_dict['copy_data_dirs']:
349        src_dir = os.path.join(data_src_path, copy_dir)
350        dst_dir = os.path.join(data_dst_path, copy_dir)
351        log('Copying directory: %s' % copy_dir)
352        copy_file_or_dir(src_dir, dst_dir)
353
354    # copy required data files
355    for copy_file in j_dict['copy_data_files']:
356        src_file = os.path.join(data_src_path, copy_file)
357        new_file = os.path.join(data_dst_path, copy_file)
358        log('Copying: %s' % copy_file)
359        copy_file_or_dir(src_file, new_file)
360
361    # copy required visualisation files
362    log('Creating directory: %s' % viz_dst_path)
363    os.makedirs(viz_dst_path)
364    for copy_file in j_dict['copy_viz_files']:
365        src_file = os.path.join(viz_src_path, copy_file)
366        new_file = os.path.join(viz_dst_path, copy_file)
367        log('Copying: %s' % copy_file)
368        copy_file_or_dir(src_file, new_file)
369
370    # copy required project files
371    log('Creating directory: %s' % proj_dst_path)
372    os.makedirs(proj_dst_path)
373    for copy_file in j_dict['copy_proj_files']:
374        src_file = os.path.join(proj_src_path, copy_file)
375        new_file = os.path.join(proj_dst_path, copy_file)
376        log('Copying: %s' % copy_file)
377        copy_file_or_dir(src_file, new_file)
378
379    # copy required ArcGIS files
380    log('Creating directory: %s' % arcgis_dst_path)
381    os.makedirs(arcgis_dst_path)
382    for copy_file in j_dict['copy_arc_files']:
383        src_file = os.path.join(arcgis_src_path, copy_file)
384        new_file = os.path.join(arcgis_dst_path, copy_file)
385        log('Copying: %s' % copy_file)
386        copy_file_or_dir(src_file, new_file)
387
388    # copy report
389    log('Creating directory: %s' % report_dst_path)
390    for copy_file in j_dict['copy_report_files']:
391        src_file = os.path.join(report_src_path, copy_file)
392        new_file = os.path.join(report_dst_path, copy_file)
393        log('Copying: %s' % copy_file)
394        copy_file_or_dir(src_file, new_file)
395
396    # now copy jurisdiction-specific DVD files
397    src_dir = 'extra_files/%s/*' % j_name
398    dst_dir = j_name
399    dir_copy(src_dir, dst_dir)
400
401    # copy the extra_files and special directories
402    src_dir = 'extra_files/browser_files'
403    dst_dir = j_name
404    dir_copy(src_dir, dst_dir)
405    src_dir = 'extra_files/documents'
406    dir_copy(src_dir, dst_dir)
407    src_file = 'extra_files/autorun.inf'
408    dir_copy(src_file, dst_dir)
409    src_dir = 'extra_files/.cache'
410    dir_copy(src_dir, dst_dir)
411
412    # get size of the staging directory
413    cmd = 'du -sh %s' % j_name
414    fd = os.popen(cmd, 'r')
415    res = fd.read()
416    fd.close()
417    (res, _) = res.split('\t', 1)
418    log('Staging directory %s has size %s' % (j_name, res))
419
420def usage():
421    print('usage: update.py <source>')
422    print('where <source> is one of the jurisdiction staging directories.')
423
424if sys.platform == 'win32':
425    print('Sorry, you can only run this script under Unix')
426    sys.exit(10)
427   
428if len(sys.argv) != 2:
429    usage()
430    sys.exit(10)
431
432jurisdiction = sys.argv[1].lower()
433# remove any trailing '/' - from TAB completion
434if jurisdiction.endswith('/'):
435    jurisdiction = jurisdiction[:-1]
436
437start_time = time.time()
438update_staging(jurisdiction)
439stop_time = time.time()
440elapsed_time = stop_time - start_time
441log('Elapsed time is %.1fs' % elapsed_time)
442print 'completed'
Note: See TracBrowser for help on using the repository browser.