source: DVD_images/update_DVD_images.py @ 7362

Last change on this file since 7362 was 7362, checked in by jgriffin, 14 years ago
  • Property svn:executable set to *
File size: 17.2 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                     'topographies/Data_lineage.doc',
108                     'outputs/Event1_HAT',
109                     'outputs/Event1_MSL',
110                     'outputs/Event2_HAT',
111                     'outputs/Event2_MSL',
112                     'outputs/Event3_MSL',
113                     'outputs/Puysegur_200yr',
114                     'outputs/Puysegur_500yr',
115                     'outputs/Puysegur_1000yr',
116                     'outputs/Puysegur_5000yr',
117                     'outputs/New_Hebrides_200yr',
118                     'outputs/New_Hebrides_500yr',
119                     'outputs/New_Hebrides_1000yr',
120                     'outputs/New_Hebrides_2000yr',
121                     'outputs/New_Hebrides_5000yr',
122                     'outputs/elevation',
123                     'boundaries/51077',
124                     'boundaries/51204',
125                     'boundaries/51292',
126                     'boundaries/51347',
127                     'boundaries/51378',
128                     'boundaries/51424',
129                     'boundaries/51436',
130                     'boundaries/51445',
131                     'boundaries/58115',
132                     'boundaries/58129',
133                     'boundaries/58226',
134                     'boundaries/58272',
135                     'boundaries/58284',
136                     'boundaries/58286',
137                     'boundaries/58346',
138                     'boundaries/58368',
139                     'boundaries/boundaries.gdb',
140                     'boundaries/landward_boundary_extend.csv',
141                     'boundaries/thinned_boundary_ordering_extend.csv'
142                     ],
143
144 # copy 'visualisations' files or directories
145 'copy_viz_files': ['Figures'], 
146
147 # copy 'project' files or directories
148 'copy_proj_files': ['project.py', 'run_model.py',
149                     'setup_model.py', 'build_elevation.py',
150                     'export_results_max.py',
151                     'file_length.py', 'build_urs_boundary.py'],
152
153 # copy 'arcgis' files or directories
154 'copy_arc_files':  ['BB_cbd_figure_template.mxd'],
155
156 # copy 'report' file
157 'copy_report_files':  ['professionalopinion_2009_09_NSW_inundation_modelling.pdf']
158
159}
160
161gosford_data = \
162{'jurisdiction':    'Gosford',          # jurisdiction name
163
164 # paths to various source directories
165 'data_src_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
166 'arcgis_src_path': 'data/new_south_wales/gosford_tsunami_scenario_2009/ArcGIS',
167 'viz_src_path':    'data/new_south_wales/gosford_tsunami_scenario_2009/visualisations',
168 'proj_src_path':   'sandpits/jgriffin/ANUGA/anuga_work/production/new_south_wales/gosford',
169 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
170 
171 # paths to destination directories (under 'jurisdiction' root)
172 'data_dst_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
173 'proj_dst_path':   'project',
174 'viz_dst_path':    'documents',
175 'arcgis_dst_path': 'data/new_south_wales/gosford_tsunami_scenario_2009/ArcGIS',
176 'report_dst_path': 'documents',
177 
178 # copy or create whole directories
179 'make_dst_dirs':   ['boundaries', 'meshes', 'outputs', 'topographies'],
180 'copy_data_dirs':  ['polygons',  'gauges'],
181
182 # copy 'data' files or directories
183 'copy_data_files': ['topographies/gosford_combined_elevation.pts',
184                     'topographies/Data_lineage.doc',
185                     'outputs/Event1_HAT',
186                     'outputs/Event1_MSL',
187                     'outputs/Event2_HAT',
188                     'outputs/Event2_MSL',
189                     'outputs/Event3_MSL',
190                     'outputs/Puysegur_200yr',
191                     'outputs/Puysegur_500yr',
192                     'outputs/Puysegur_1000yr',
193                     'outputs/Puysegur_5000yr',
194                     'outputs/elevation',
195                     'boundaries/51436',
196                     'boundaries/58025',
197                     'boundaries/58113',
198                     'boundaries/58187',
199                     'boundaries/58242',
200                     'boundaries/58284',
201                     'boundaries/58349',
202                     'boundaries/boundaries.gdb',
203                     'boundaries/landward_boundary.csv',
204                     'boundaries/urs_order.csv'
205                    ],
206
207 # copy 'visualisations' files or directories
208 'copy_viz_files': ['Figures'], 
209
210 # copy 'project' files or directories
211 'copy_proj_files': ['export_results_max.py', 'file_length.py',
212                     'project.py', 'run_model.py', 'build_elevation.py',
213                     'get_timeseries.py', 'setup_model.py',
214                     'build_urs_boundary.py'
215                    ],
216
217 # copy 'arcgis' files or directories
218 'copy_arc_files':  ['G_umina_figure_template.mxd',
219                     'avoca_bookmark.dat',
220                     'copacabana_bookmark.dat',
221                     'terrigal_bookmark.dat',
222                     'umina_bookmark.dat'],
223
224 # copy 'report' file
225 'copy_report_files':  ['professionalopinion_2009_09_NSW_inundation_modelling.pdf']
226}
227
228gold_coast_data = \
229{'jurisdiction':    'GoldCoast',        # jurisdiction name
230
231 # paths to various source directories
232 'data_src_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
233 'arcgis_src_path': 'data/queensland/gold_coast_tsunami_scenario_2009/ArcGIS',
234 'viz_src_path':    'data/queensland/gold_coast_tsunami_scenario_2009/visualisations',
235 'proj_src_path':   'sandpits/lfountain/anuga_work/production/gold_coast_2009/For_DVD',
236 'report_src_path': 'data/four_east_coast_communities_reporting/Professional_opinions_final',
237 
238 # paths to destination directories (under 'jurisdiction' root)
239 'data_dst_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
240 'proj_dst_path':   'project',
241 'viz_dst_path':    'documents',
242 'arcgis_dst_path': 'data/queensland/gold_coast_tsunami_scenario_2009/ArcGIS',
243 'report_dst_path': 'documents',
244
245 # copy or create whole directories
246 'make_dst_dirs':   ['outputs', 'topographies', 'boundaries'],
247 'copy_data_dirs':  ['polygons', 'gauges'],
248 
249 # copy 'data' files or directories
250 'copy_data_files': ['outputs/Event1_HAT', 'outputs/Event1_MSL',
251                     'outputs/Event2_HAT', 'outputs/Event2_MSL',
252                     'outputs/Event3_HAT', 'outputs/Event3_MSL',
253                     'boundaries/50863', 'boundaries/50994',
254                     'boundaries/51253', 'boundaries/51392',
255                     'boundaries/51423', 'boundaries/51469',
256                     'boundaries/62833','boundaries/events_chosen.xls',
257                     'boundaries/landward_boundary.csv',
258                     'boundaries/urs_order.csv',
259                     'topographies/gold_coast_combined_elevation.pts'
260                    ],
261
262 # copy 'visualisations' files or directories
263 'copy_viz_files': ['Figures'], 
264
265 # copy 'project' files or directories
266 'copy_proj_files': ['build_elevation.py', 'export_results_max.py', 'file_length.py',
267                     'project.py', 'run_model.py', 'setup_model.py',
268                     'get_timeseries.py', 'build_urs_boundary.py'
269                    ],
270
271 # copy 'arcgis' files or directories
272 'copy_arc_files':  ['gold_coast.mxd', 'gold_coast.gdb'],
273
274 # copy 'report' file
275 'copy_report_files':  ['professionalopinion_2009_08_QLD_inundation_modelling.pdf']
276}
277
278# dictionary mapping lower-case jurisdiction name to jurisdiction data dictionary
279source_jurisdiction_path = {'hobart': hobart_data,
280                            'batemansbay': batemans_bay_data,
281                            'gosford': gosford_data,
282                            'goldcoast': gold_coast_data
283                           }
284
285######
286# Routines to automate the script data above.
287######
288
289def log(msg=''):
290    print(msg)
291
292
293def dir_copy(src, dst):
294    cmd = 'cp -R %s %s' % (src, dst)
295    log('Doing: %s' % cmd)
296    fd = os.popen(cmd)
297    fd.close()
298
299def copy_file_or_dir(src, dst):
300    '''Copy a file or complete directory.'''
301
302    # could be a file or directory being copied
303    try:
304        shutil.copyfile(src, dst)
305    except IOError, e:
306        if 'Is a directory' in str(e):
307            shutil.copytree(src, dst)
308        else:
309            log('*' *72)
310            log('* %s' % str(e))
311            log('*' *72)
312
313def update_staging(jurisdiction):
314    # create a list of jurisdiction names
315    jurisdiction_names = []
316    for k in source_jurisdiction_path:
317        jurisdiction_names.append(source_jurisdiction_path[k]['jurisdiction'])
318
319    # get ready
320    j_dict = source_jurisdiction_path[jurisdiction]
321    j_name = j_dict['jurisdiction']
322    data_src_path = os.path.join(main_path, j_dict['data_src_path'])
323    data_dst_path = os.path.join(os.getcwd(), j_name, j_dict['data_dst_path'])
324    proj_src_path = os.path.join(main_path, j_dict['proj_src_path'])
325    proj_dst_path = os.path.join(os.getcwd(), j_name, j_dict['proj_dst_path'])
326    viz_src_path = os.path.join(main_path, j_dict['viz_src_path'])
327    viz_dst_path = os.path.join(os.getcwd(), j_name, j_dict['viz_dst_path'])
328    arcgis_src_path = os.path.join(main_path, j_dict['arcgis_src_path'])
329    arcgis_dst_path = os.path.join(os.getcwd(), j_name, j_dict['arcgis_dst_path'])
330    report_src_path = os.path.join(main_path, j_dict['report_src_path'])
331    report_dst_path = os.path.join(os.getcwd(), j_name, j_dict['report_dst_path'])
332   
333    # tell where all stuff is coming from
334    log('Getting data from: %s' % data_src_path)
335    log('Getting project from: %s' % proj_src_path)
336    log('Getting ArcGIS from: %s' % arcgis_src_path)
337    log('Getting report from: %s' % report_src_path)
338    log('')
339
340    # create new output directory, delete old if there
341    if os.path.exists(j_name):
342        log('Deleting existing staging directory: %s' % j_name)
343        shutil.rmtree(j_name)
344    log('Creating staging directory: %s' % j_name)
345    os.makedirs(j_name)
346
347    # create required directories
348    for dir in j_dict['make_dst_dirs']:
349        new_dir = os.path.join(data_dst_path, dir)
350        log('Creating directory: %s' % dir)
351        os.makedirs(new_dir)
352
353    # copy required full directories
354    for copy_dir in j_dict['copy_data_dirs']:
355        src_dir = os.path.join(data_src_path, copy_dir)
356        dst_dir = os.path.join(data_dst_path, copy_dir)
357        log('Copying directory: %s' % copy_dir)
358        copy_file_or_dir(src_dir, dst_dir)
359
360    # copy required data files
361    for copy_file in j_dict['copy_data_files']:
362        src_file = os.path.join(data_src_path, copy_file)
363        new_file = os.path.join(data_dst_path, copy_file)
364        log('Copying: %s' % copy_file)
365        copy_file_or_dir(src_file, new_file)
366
367    # copy required visualisation files
368    log('Creating directory: %s' % viz_dst_path)
369    os.makedirs(viz_dst_path)
370    for copy_file in j_dict['copy_viz_files']:
371        src_file = os.path.join(viz_src_path, copy_file)
372        new_file = os.path.join(viz_dst_path, copy_file)
373        log('Copying: %s' % copy_file)
374        copy_file_or_dir(src_file, new_file)
375
376    # copy required project files
377    log('Creating directory: %s' % proj_dst_path)
378    os.makedirs(proj_dst_path)
379    for copy_file in j_dict['copy_proj_files']:
380        src_file = os.path.join(proj_src_path, copy_file)
381        new_file = os.path.join(proj_dst_path, copy_file)
382        log('Copying: %s' % copy_file)
383        copy_file_or_dir(src_file, new_file)
384
385    # copy required ArcGIS files
386    log('Creating directory: %s' % arcgis_dst_path)
387    os.makedirs(arcgis_dst_path)
388    for copy_file in j_dict['copy_arc_files']:
389        src_file = os.path.join(arcgis_src_path, copy_file)
390        new_file = os.path.join(arcgis_dst_path, copy_file)
391        log('Copying: %s' % copy_file)
392        copy_file_or_dir(src_file, new_file)
393
394    # copy report
395    log('Creating directory: %s' % report_dst_path)
396    for copy_file in j_dict['copy_report_files']:
397        src_file = os.path.join(report_src_path, copy_file)
398        new_file = os.path.join(report_dst_path, copy_file)
399        log('Copying: %s' % copy_file)
400        copy_file_or_dir(src_file, new_file)
401
402    # now copy jurisdiction-specific DVD files
403    src_dir = 'extra_files/%s/*' % j_name
404    dst_dir = j_name
405    dir_copy(src_dir, dst_dir)
406
407    # copy the extra_files and special directories
408    src_dir = 'extra_files/browser_files'
409    dst_dir = j_name
410    dir_copy(src_dir, dst_dir)
411    src_dir = 'extra_files/documents'
412    dir_copy(src_dir, dst_dir)
413    src_file = 'extra_files/autorun.inf'
414    dir_copy(src_file, dst_dir)
415    src_dir = 'extra_files/.cache'
416    dir_copy(src_dir, dst_dir)
417
418    # get size of the staging directory
419    cmd = 'du -sh %s' % j_name
420    fd = os.popen(cmd, 'r')
421    res = fd.read()
422    fd.close()
423    (res, _) = res.split('\t', 1)
424    log('Staging directory %s has size %s' % (j_name, res))
425
426def usage():
427    print('usage: update.py <source>')
428    print('where <source> is one of the jurisdiction staging directories.')
429
430if sys.platform == 'win32':
431    print('Sorry, you can only run this script under Unix')
432    sys.exit(10)
433   
434if len(sys.argv) != 2:
435    usage()
436    sys.exit(10)
437
438jurisdiction = sys.argv[1].lower()
439# remove any trailing '/' - from TAB completion
440if jurisdiction.endswith('/'):
441    jurisdiction = jurisdiction[:-1]
442
443start_time = time.time()
444update_staging(jurisdiction)
445stop_time = time.time()
446elapsed_time = stop_time - start_time
447log('Elapsed time is %.1fs' % elapsed_time)
448print 'completed'
Note: See TracBrowser for help on using the repository browser.