source: DVD_images/update_DVD_images.py @ 7329

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

updated by Kristy and Jonathan

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