diff --git a/metobsapi/files.py b/metobsapi/files.py index bcf0799c656159e4eff2576560e907d167daf418..98e1881b9f15cd6a231f0c58eba2a4bff3a842b9 100644 --- a/metobsapi/files.py +++ b/metobsapi/files.py @@ -83,10 +83,7 @@ def get_data(dates, streams, frame=True): def handleCSV(frame): - # Normalize the frame that was given so we only have expected information columns = ['filename', 'url', 'site', 'inst', 'level', 'version', 'size'] - frame = frame[columns] - body = StringIO() output = StringIO() @@ -94,15 +91,17 @@ def handleCSV(frame): output.write('# status: success\n# code: 200\n# message:\n') output.write('# num_results: ' + str(len(list(frame.index))) + '\n') - output.write('# Fields: {}'.format(', '.join(columns))) + output.write('# Fields: {}'.format(','.join(columns))) output.write('\n' + body.getvalue()) if frame.empty: return output.getvalue() + # Normalize the frame that was given so we only have expected information + frame = frame[columns] for row in frame.values: - output.write(', '.join(str(x) for x in row) + '\n') + output.write(','.join(str(x) for x in row) + '\n') return output.getvalue() diff --git a/metobsapi/templates/files_index.html b/metobsapi/templates/files_index.html index 9a248f5b03421e1b0e9f77266a64d56ee9a7b7f9..0687d228f6f0885cbf242fb0efc22ef9171832d3 100644 --- a/metobsapi/templates/files_index.html +++ b/metobsapi/templates/files_index.html @@ -167,6 +167,15 @@ End of the query interval in UTC as YYYY-MM-DD. If not provided, it defaults to today. </td> </tr> + <tr> + <td style='padding: 6px;'> + <b>dates:</b> + </td> + <td style='padding: 6px;'> + Individual query dates separated by colons in the format of YYYY-MM-DD. If provided, + this parameter overrides the begin and end parameters. + </td> + </tr> </table> </div> </div> @@ -258,51 +267,40 @@ <li style='font-size: 15px'> Latest ASCII file for AOSS Tower: <ul> - <a href="{{ url_for('get_files', fmt='csv', streams='aoss.tower.ascii.l00') }}" }}> - {{ url_for('get_files', fmt='csv', streams='aoss.tower.ascii.level_00') | replace('%3A', ':') }} + <a href="{{ url_for('get_files', fmt='csv', streams='aoss.tower.ascii.l00.*') }}" }}> + {{ url_for('get_files', fmt='csv', streams='aoss.tower.ascii.level_00.*') | replace('%3A', ':') | replace('%2A', '*') }} </a> </ul> </li> <li style='font-size: 15px'> Latest .SCR files AOSS AERI: <ul> - <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.R_SCR.l00:aoss.aeri.E_SCR.l00:aoss.aeri.Y_SCR.l00') }}"> - {{ url_for('get_files', fmt='csv', streams='aoss.aeri.R_SCR.l00:aoss.aeri.E_SCR.l00:aoss.aeri.Y_SCR.l00') | replace('%3A', ':') }} + <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.scr-aesitter.l00.*:aoss.aeri.scr-radiance.l00.*:aoss.aeri.scr-summary.l00.*') }}"> + {{ url_for('get_files', fmt='csv', streams='aoss.aeri.scr-aesitter.l00.*:aoss.aeri.scr-radiance.l00.*:aoss.aeri.scr-summary.l00.*') | replace('%3A', ':') | replace('%2A', '*') }} </a> </ul> </li> <li style='font-size: 15px'> - Last 2 days of all AOSS AERI files: + Last 2 days of all AOSS AERI level 00 files: <ul> - <a href="{{ url_for('get_files', fmt='csv', streams=('aoss.aeri.PAR.l00:aoss.aeri.QC.l00:aoss.aeri.SUM.l00:' + - 'aoss.aeri.B1_CXS.l00:aoss.aeri.B1_UVS.l00:aoss.aeri.B2_CXS.l00:aoss.aeri.B2_UVS.l00:aoss.aeri.C1_RNC.l00:aoss.aeri.C2_RNC.l00:' + - 'aoss.aeri.F1_CSV.l00:aoss.aeri.F1_CXS.l00:aoss.aeri.F1_UVS.l00:aoss.aeri.F2_CSV.l00:aoss.aeri.F2_CXS.l00:aoss.aeri.F2_UVS.l00:' + - 'aoss.aeri.R_SCR.l00:aoss.aeri.E_SCR.l00:aoss.aeri.Y_SCR.l00'), begin='-2') }}" > - <!-- 'aoss.aeri.B1_CXS.l00:aoss.aeri.B1_UVS.l00:aoss.aeri.B2_CXS.l00:aoss.aeri.B2_UVS.l00:aoss.aeri.C1_RNC.l00:aoss.aeri.C2_RNC.l00:' + - aoss.aeri.F1_CSV.l00:aoss.aeri.F1_CXS.l00:aoss.aeri.F1_UVS.l00:aoss.aeri.F2_CSV.l00:aoss.aeri.F2_CXS.l00:aoss.aeri.F2_UVS.l00' + - 'aoss.aeri.R_SCR.l00:aoss.aeri.E_SCR.l00:aoss.aeri.Y_SCR.l00'), begin='-2') }} "> --> - {{ url_for('get_files', fmt='csv', streams=('aoss.aeri.PAR.l00:aoss.aeri.QC.l00:aoss.aeri.SUM.l00:' + - 'aoss.aeri.B1_CXS.l00:aoss.aeri.B1_UVS.l00:aoss.aeri.B2_CXS.l00:aoss.aeri.B2_UVS.l00:aoss.aeri.C1_RNC.l00:aoss.aeri.C2_RNC.l00:' + - 'aoss.aeri.F1_CSV.l00:aoss.aeri.F1_CXS.l00:aoss.aeri.F1_UVS.l00:aoss.aeri.F2_CSV.l00:aoss.aeri.F2_CXS.l00:aoss.aeri.F2_UVS.l00' + - 'aoss.aeri.R_SCR.l00:aoss.aeri.E_SCR.l00:aoss.aeri.Y_SCR.l00' - - ), begin='-2') | replace('%3A', ':') }} + <a href="{{ url_for('get_files', fmt='csv', streams=('aoss.aeri.*.l00.*',), begin='-2') }}" > + {{ url_for('get_files', fmt='csv', streams=('aoss.aeri.*.l00.*',), begin='-2') | replace('%3A', ':') | replace('%2A', '*') }} </a> </ul> </li> <li style='font-size: 15px'> AOSS AERI Par, QC, and B1.UVS files for 2016-07-11 <ul> - <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.PAR.l00:aoss.aeri.QC.l00:aoss.aeri.B1_UVS.l00', begin='2016-07-11', end='2016-07-11') }}"> - {{ url_for('get_files', fmt='csv', streams='aoss.aeri.PAR.l00:aoss.aeri.QC.l00:aoss.aeri.B1_UVS.l00', begin='2016-07-11', end='2016-07-11') | replace('%3A', ':') }} + <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.par.l00.*:aoss.aeri.qc.l00.*:aoss.aeri.uvs-b1.l00.*', dates='2016-07-11') }}"> + {{ url_for('get_files', fmt='csv', streams='aoss.aeri.par.l00.*:aoss.aeri.qc.l00.*:aoss.aeri.uvs-b1.l00.*', dates='2016-07-11') | replace('%3A', ':') | replace('%2A', '*') }} </a> </ul> </li> <li style='font-size: 15px'> AOSS AERI Par and AOSS Tower ASCII files for 2016-07-11 <ul> - <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.PAR.l00:aoss.tower.ascii.l00', begin='2016-07-11', end='2016-07-11') }}"> - {{ url_for('get_files', fmt='csv', streams='aoss.aeri.PAR.l00:aoss.tower.ascii.l00', begin='2016-07-11', end='2016-07-11') | replace('%3A', ':') }} + <a href="{{ url_for('get_files', fmt='csv', streams='aoss.aeri.par.l00.*:aoss.tower.ascii.l00.*', dates='2016-07-11') }}"> + {{ url_for('get_files', fmt='csv', streams='aoss.aeri.par.l00.*:aoss.tower.ascii.l00.*', dates='2016-07-11') | replace('%3A', ':') | replace('%2A', '*') }} </a> </ul> </li> diff --git a/metobsapi/util/file_responses.py b/metobsapi/util/file_responses.py index 92fb044ac3bac37ca90163201d24af00a6fc9a15..6c72dfb70b7d5a4f74501cc01cdf19c4fbb93d29 100644 --- a/metobsapi/util/file_responses.py +++ b/metobsapi/util/file_responses.py @@ -60,15 +60,15 @@ ARCHIVE_INFO = { 'products': { 'par': { 'frequency': ProductFrequency.DAILY_DIR, - 'pattern': '%y%m%d.par', + 'pattern': '%y%m%d.PAR', }, 'qc': { 'frequency': ProductFrequency.DAILY_DIR, - 'pattern': '%y%m%d.qc', + 'pattern': '%y%m%d.QC', }, 'sum': { 'frequency': ProductFrequency.DAILY_DIR, - 'pattern': '%y%m%d.sum', + 'pattern': '%y%m%d.SUM', }, 'scr-aesitter': { 'frequency': ProductFrequency.DAILY_DIR, @@ -97,6 +97,7 @@ ARCHIVE_INFO = { } # Add the other AERI file types for file_suffix in ('B1.CXS', + 'B1.UVS', 'B2.CXS', 'B2.UVS', 'C1.RNC', @@ -198,5 +199,5 @@ ERROR_MESSAGES = { 'missing_level': (400, 'missing or unknown level parameter'), 'missing_stream_pattern': (400, 'missing or unknown stream pattern parameter'), 'missing_version': (400, 'missing or unknown version parameter'), - 'unknown_stream': (400, 'unknown stream ID, expected <site>.<inst>.<level=lXX>.<pattern>.<versionXX or \"*\">'), + 'unknown_stream': (400, "unknown stream ID, expected 'site'.'inst'.'level=lXX'.'pattern'.'versionXX or \"*\"'"), } diff --git a/metobsapi_development.py b/metobsapi_development.py index 34f7207bf929fd83e0393003b93d7b160fb4b5f9..985da4748ecc65f0dfdaebd39f0b32e57b036f2c 100644 --- a/metobsapi_development.py +++ b/metobsapi_development.py @@ -1,23 +1,7 @@ import os from metobsapi.common_config import * -from metobsapi.util import FAKE_ARCHIVE_PATH, create_fake_archive, ProductFrequency +from metobsapi.util import FAKE_ARCHIVE_PATH, create_fake_archive +from metobsapi.util.file_responses import ARCHIVE_INFO -ARCHIVE_INFO = { - 'aoss': { - 'tower': { - '00': { - 'ascii': { - 'frequency': ProductFrequency.DAILY_FILE, - 'pattern': 'rig_tower.%Y-%m-%d.ascii', - }, - }, - }, - }, - 'mendota': { - - }, -} - -if not os.path.exists(FAKE_ARCHIVE_PATH): - create_fake_archive(ARCHIVE_INFO) -ARCHIVE_ROOT = FAKE_ARCHIVE_PATH \ No newline at end of file +create_fake_archive(ARCHIVE_INFO, root=FAKE_ARCHIVE_PATH) +ARCHIVE_ROOT = FAKE_ARCHIVE_PATH