Commit 1754789b5ec4440eaab15ce21bba967d1cafb186

Authored by Goutte
1 parent 7994cf1a

Decorate and clean up the start/stop inputs.

web/run.py
... ... @@ -339,12 +339,6 @@ def get_target_csv(source, started_at, stopped_at):
339 339 except:
340 340 abort(400, "Invalid stopped_at parameter : '%s'." % stopped_at)
341 341  
342   - # todo: iterate on models when there are many
343   - try:
344   - model_slug = source_config['models'][0]['slug']
345   - except:
346   - abort(500, "Invalid model configuration for '%s'." % source)
347   -
348 342 filename = "%s_%s_%s.csv" % (source,
349 343 started_at.strftime(date_fmt),
350 344 stopped_at.strftime(date_fmt))
... ... @@ -362,125 +356,34 @@ def get_target_csv(source, started_at, stopped_at):
362 356 return send_from_directory(get_path("../cache/"), filename)
363 357  
364 358  
365   -# @app.route("/<source>/data.csv")
366   -# def get_orbiter_csv(source):
  359 +# DEV TOOLS ###################################################################
  360 +
  361 +# @app.route("/inspect")
  362 +# def analyze_cdf():
367 363 # """
368   -# DEPRECATED
369   -# Grab data and orbit data for the specified `source`,
370   -# rearrange it and return it as a CSV file.
  364 +# For debug purposes.
371 365 # """
372   -# # http://cdpp1.cesr.fr/BASE/DDService/getDataUrl.php?dataSet=tao_ros_sw&StartTime=2014-02-23T10:00&StopTime=2016-02-24T23:59
373   -# # Process input parameters
374   -# source_config = get_source_config(source)
375   -# date_fmt = "%Y-%m-%dT%H:%M:%S"
376   -# started_at = request.args.get('started_at')
377   -# try:
378   -# started_at = datetime.datetime.strptime(started_at, date_fmt)
379   -# except:
380   -# abort(400, "Invalid started_at parameter : '%s'." % started_at)
381   -# stopped_at = request.args.get('stopped_at')
382   -# try:
383   -# stopped_at = datetime.datetime.strptime(stopped_at, date_fmt)
384   -# except:
385   -# abort(400, "Invalid stopped_at parameter : '%s'." % stopped_at)
386   -#
387   -# # todo: iterate on models when there are many
388   -# try:
389   -# model_slug = source_config['models'][0]['slug']
390   -# except:
391   -# abort(500, "Invalid model configuration for '%s'." % source)
392   -#
393   -# # Grab the list of netCDF files from Myriam's API
394   -# # http://cdpp.irap.omp.eu/BASE/DDService/getDataUrl.php?dataSet=jupiter_orb_all&StartTime=2014-02-23T10:00:10&StopTime=2017-02-24T23:59:00
395   -# # http://cdpp.irap.omp.eu/BASE/DATA/TAO/JUPITER/SW/sw_2014.nc.gz
396   -# model_files = retrieve_data(source, model_slug, started_at, stopped_at)
397   -# orbits_files = retrieve_data(source, source_config['orbit']['model'], started_at, stopped_at)
  366 +# cdf_to_inspect = get_path("../res/dummy.nc")
  367 +# cdf_to_inspect = get_path("../res/dummy_jupiter_coordinates.nc")
398 368 #
399 369 # si = StringIO.StringIO()
400   -# cw = csv_writer(si)
401   -# cw.writerow(( # the order matters !
402   -# 'time',
403   -# 'vrad', 'vtan', 'vlen',
404   -# 'magn', 'temp', 'pdyn', 'dens', 'angl',
405   -# 'xhci', 'yhci'
406   -# ))
407   -#
408   -# precision = "%Y-%m-%dT%H" # model and orbits times are equal-ish
409   -# orbits_data = {} # keys are datetime as str, values arrays of XY
410   -# for orbits_file in orbits_files:
411   -# cdf_handle = Dataset(orbits_file, "r", format="NETCDF4")
412   -# times = cdf_handle.variables['Time'] # YYYY DOY HH MM SS .ms
413   -# data_hci = cdf_handle.variables['HCI']
414   -# for time, datum_hci in zip(times, data_hci):
415   -# dtime = datetime_from_list(time)
416   -# if started_at <= dtime <= stopped_at:
417   -# dkey = dtime.strftime(precision)
418   -# orbits_data[dkey] = datum_hci
419   -# all_data = {} # keys are datetime as str, values tuples of data
420   -# for model_file in model_files:
421   -# # Time, StartTime, StopTime, V, B, N, T, Delta_angle, P_dyn
422   -# cdf_handle = Dataset(model_file, "r", format="NETCDF4")
423   -# times = cdf_handle.variables['Time'] # YYYY DOY HH MM SS .ms
424   -# data_v = cdf_handle.variables['V']
425   -# data_b = cdf_handle.variables['B']
426   -# data_t = cdf_handle.variables['T']
427   -# data_n = cdf_handle.variables['N']
428   -# data_p = cdf_handle.variables['P_dyn']
429   -# data_d = cdf_handle.variables['Delta_angle']
430   -# for time, datum_v, datum_b, datum_t, datum_p, datum_n, datum_d \
431   -# in zip(times, data_v, data_b, data_t, data_n, data_p, data_d):
432   -# vrad = datum_v[0]
433   -# vtan = datum_v[1]
434   -# dtime = datetime_from_list(time)
435   -# if started_at <= dtime <= stopped_at:
436   -# dkey = dtime.strftime(precision)
437   -# x_hci = None
438   -# y_hci = None
439   -# if dkey in orbits_data:
440   -# x_hci = orbits_data[dkey][0]
441   -# y_hci = orbits_data[dkey][1]
442   -# all_data[dkey] = (
443   -# dtime.strftime("%Y-%m-%dT%H:%M:%S+00:00"),
444   -# vrad, vtan, sqrt(vrad * vrad + vtan * vtan),
445   -# datum_b, datum_t, datum_n, datum_p, datum_d,
446   -# x_hci, y_hci
447   -# )
448   -# cdf_handle.close()
  370 +# cw = csv.DictWriter(si, fieldnames=['Name', 'Shape', 'Length'])
  371 +# cw.writeheader()
449 372 #
450   -# for dkey in sorted(all_data):
451   -# cw.writerow(all_data[dkey])
  373 +# # Time, StartTime, StopTime, V, B, N, T, Delta_angle, P_dyn, QualityFlag
  374 +# cdf_handle = Dataset(cdf_to_inspect, "r", format="NETCDF4")
  375 +# for variable in cdf_handle.variables:
  376 +# v = cdf_handle.variables[variable]
  377 +# cw.writerow({
  378 +# 'Name': variable,
  379 +# 'Shape': v.shape,
  380 +# 'Length': v.size,
  381 +# })
  382 +# cdf_handle.close()
452 383 #
453 384 # return si.getvalue()
454 385  
455 386  
456   -# DEV TOOLS ###################################################################
457   -
458   -@app.route("/inspect")
459   -def analyze_cdf():
460   - """
461   - For debug purposes.
462   - """
463   - cdf_to_inspect = get_path("../res/dummy.nc")
464   - cdf_to_inspect = get_path("../res/dummy_jupiter_coordinates.nc")
465   -
466   - si = StringIO.StringIO()
467   - cw = csv.DictWriter(si, fieldnames=['Name', 'Shape', 'Length'])
468   - cw.writeheader()
469   -
470   - # Time, StartTime, StopTime, V, B, N, T, Delta_angle, P_dyn, QualityFlag
471   - cdf_handle = Dataset(cdf_to_inspect, "r", format="NETCDF4")
472   - for variable in cdf_handle.variables:
473   - v = cdf_handle.variables[variable]
474   - cw.writerow({
475   - 'Name': variable,
476   - 'Shape': v.shape,
477   - 'Length': v.size,
478   - })
479   - cdf_handle.close()
480   -
481   - return si.getvalue()
482   -
483   -
484 387 # MAIN ########################################################################
485 388  
486 389 if __name__ == "__main__":
... ...
web/static/js/swapp.js
... ... @@ -258,7 +258,7 @@
258 258 return [this.started_at, this.stopped_at];
259 259 };
260 260 SpaceWeather.prototype.resizeDomain = function(started_at, stopped_at){
261   - var ref$, formatted_started_at, formatted_stopped_at;
  261 + var ref$, max_stopped_at, formatted_started_at, formatted_stopped_at;
262 262 if (stopped_at < started_at) {
263 263 ref$ = [stopped_at, started_at], started_at = ref$[0], stopped_at = ref$[1];
264 264 }
... ... @@ -266,6 +266,11 @@
266 266 console.warn("Please provide distinct start and stop dates.");
267 267 return;
268 268 }
  269 + max_stopped_at = started_at.clone().add(2, 'years');
  270 + if (stopped_at > max_stopped_at) {
  271 + console.warn("The time interval was truncated beacuse it was bigger than two years.");
  272 + stopped_at = max_stopped_at;
  273 + }
269 274 this.setStartAndStop(started_at, stopped_at);
270 275 formatted_started_at = started_at.format();
271 276 formatted_stopped_at = stopped_at.format();
... ...
web/static/js/swapp.ls
... ... @@ -227,6 +227,10 @@ https://gitlab.irap.omp.eu/CDPP/SPACEWEATHERONLINE
227 227 if started_at == stopped_at
228 228 console.warn "Please provide distinct start and stop dates."
229 229 return
  230 + max_stopped_at = started_at.clone().add(2, 'years')
  231 + if stopped_at > max_stopped_at
  232 + console.warn "The time interval was truncated beacuse it was bigger than two years."
  233 + stopped_at = max_stopped_at
230 234  
231 235 @setStartAndStop(started_at, stopped_at)
232 236 formatted_started_at = started_at.format()
... ...
web/view/home.html.jinja2
... ... @@ -31,9 +31,16 @@
31 31  
32 32 <div class="mdl-layout__drawer">
33 33 <span class="mdl-layout-title">Time Interval</span>
34   - <input type="date" id="started_at" name="started_at" title="The date of the beginning of the interval to observe.">
35   - <input type="date" id="stopped_at" name="stopped_at" title="The date of the end of the interval to observe. (inclusive)">
36   - <input type="submit" id="apply_new_interval" value="Load new interval" title="This may take a while if you request a bigger interval.">
  34 + <form id="form_time_interval" action="#">
  35 + <div class="mdl-textfield mdl-js-textfield">
  36 + <input type="date" id="started_at" name="started_at" title="The date of the beginning of the interval to observe." class="mdl-textfield__input">
  37 + <input type="date" id="stopped_at" name="stopped_at" title="The date of the end of the interval to observe. (exclusive)" class="mdl-textfield__input">
  38 + </div>
  39 + <input type="submit" id="apply_new_interval" value="Load new interval" title="This may take a while if you request a bigger interval." class="mdl-button mdl-js-button mdl-js-ripple-effect">
  40 + </form>
  41 +
  42 + <br>
  43 + <hr class="clear">
37 44  
38 45 <span class="mdl-layout-title">Planets</span>
39 46  
... ... @@ -250,6 +257,15 @@
250 257 stroke-width: 1px;
251 258 stroke-dasharray: 5px;
252 259 }
  260 + #form_time_interval {
  261 + padding-left: 30px;
  262 + }
  263 + #form_time_interval .mdl-textfield {
  264 + padding-top: 0;
  265 + }
  266 + #started_at, #stopped_at {
  267 + width: 85%;
  268 + }
253 269 .targets-filters {
254 270 padding-left: 17px;
255 271 }
... ...