From 8e18bdebde90deadf2482a9fbee4616e3f382c33 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Wed, 28 May 2025 12:39:20 -0400 Subject: [PATCH 01/29] Adding metadata download module, code to be used as part of FOV/metadata preview tool for XRT observations --- visualization/fov/xrt_metadata_download.py | 174 +++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 visualization/fov/xrt_metadata_download.py diff --git a/visualization/fov/xrt_metadata_download.py b/visualization/fov/xrt_metadata_download.py new file mode 100644 index 000000000..3d97632f2 --- /dev/null +++ b/visualization/fov/xrt_metadata_download.py @@ -0,0 +1,174 @@ +from astropy.io import fits +import astropy.units as u + +import numpy as np + +from astropy.coordinates import SkyCoord + +from sunpy.coordinates import frames +from astropy.time import Time +import scipy.io as sio +from scipy.io import readsav +import urllib.request + + +def download_metadata(xrt_downloaded_files, filen, overwrite=False): + url_lis = xrt_downloaded_files[0][:]['fileid'] + url_str_lis = [] + for i in range(len(url_lis)): + url_str_lis.append(url_lis[i]) + primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) + c1 = fits.Column(name='URL', array=url_str_lis, format='100A') + c2 = fits.Column(name='header_int', array=np.asarray(range(len(url_str_lis)))+2, format='J') + table_hdu = fits.BinTableHDU.from_columns([c1, c2]) + + hdul2 = fits.HDUList([primary_hdu, table_hdu]) + #hlis = [] + + for i in range(len(url_str_lis)): + if (i%10 == 0): + print(int(1000.0*i/len(url_str_lis))/10.0,'%') + fsspec_kwargs = {"block_size": 100_000, "cache_type": "bytes"} + with fits.open(url_lis[i], use_fsspec=True, fsspec_kwargs=fsspec_kwargs) as hdul: + #hlis.append(hdul[0].header) + # Download a single header + t_header = hdul[0].header + image_hdu = fits.ImageHDU(data=np.ones((100, 100)), header=t_header,name="header"+str(i)) + hdul2.append(image_hdu) + return hdul2 + + #hdul2.writeto(filen,overwrite=overwrite) + +def date_to_meta(xrt_download_list): + time_lis = xrt_download_list[0]['Start Time'] + year_lis = xrt_download_list[0]['Start Time'].ymdhms.year + month_lis = xrt_download_list[0]['Start Time'].ymdhms.month + day_lis = xrt_download_list[0]['Start Time'].ymdhms.day + new_date = [] + file_lis = [] + for i in range(len(time_lis)): + year_str = str(year_lis[i]) + month_str = str(month_lis[i]) + day_str = str(day_lis[i]) + if len(day_str) < 2: + day_str = '0'+day_str + if len(month_str) < 2: + month_str = '0'+month_str + ndatei = year_str + month_str+ day_str + if ndatei in file_lis: + new_date.append(file_lis.index(ndatei)) + #new_date[file_lis.index(ndatei)].append(ndatei) + else: + file_lis.append(ndatei) + new_date.append(file_lis.index(ndatei)) + #print(ndatei,file_lis.index(ndatei)) + return file_lis, new_date + +def get_urls(file_n_lis, ggg): + nfile = len(file_n_lis) + geny_lis = [] + for i in range(nfile): + find_url = 'xrt'+file_n_lis[i] + findex = ggg.find(find_url) + gen_fn = ggg[findex:findex+35] + findex2 = gen_fn.find('geny') + gen_fn = gen_fn[:findex2+4] + geny_lis.append(gen_fn) + return geny_lis + +def get_metafile(geny_lis): + url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' + ngeny = len(geny_lis) + meta_lis = [] + for i in range(ngeny): + print(i) + gen_fn = geny_lis[i] + f, h = urllib.request.urlretrieve(url_start + gen_fn) + print(i) + data2 = readsav(f)["p0"] + data_dict2 = {k : data2[k] for k in data2.dtype.names} + meta_lis.append(data_dict2) + return meta_lis + +#def mk_meta_header(meta_lis): + #print(data_dict2['DATE_OBS']) + +def meta_to_dict(data_dict, di): + dkeys = data_dict.keys() + hdict = {} + for dki in dkeys: + try: + hdict[dki] = data_dict[dki][di].decode('ascii') + except: + hdict[dki] = data_dict[dki][di] + return hdict + +def match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): + + n_dict = len(data_dict_lis) + cat_time_lis = [] + for i in range(n_dict): + data_dict = data_dict_lis[i] + date_obs_cat = data_dict['DATE_OBS'] + cat_len = len(date_obs_cat) + cat_str = [] + for cat_bin in date_obs_cat: + cat_str.append(cat_bin.decode('ascii')) + cat_time = Time(np.asarray(cat_str), format='isot', scale='utc') + cat_time_lis.append(cat_time) + #print('yo') + min_ti_lis = [] + delt_lis = [] + delt_lisp = [] + delt_lism = [] + header_lis = [] + for i in range(len(xrt_download[0]['Start Time'])): + cat_time = cat_time_lis[cat_fi[i]] + stime = xrt_download[0]['Start Time'][i] + delt = cat_time - stime + delt = delt.value*24.0*3600.0 + min_ti = np.argmin(np.abs(delt)) + min_ti_lis.append(min_ti) + delt_lis.append(delt[min_ti]) + try: + delt_lisp.append(delt[min_ti+1]) + delt_lism.append(delt[min_ti-1]) + except: + print() + header_lis.append(meta_to_dict(data_dict_lis[cat_fi[i]],min_ti)) + return header_lis + +def get_html_lis(): + url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' + with urllib.request.urlopen(url_start) as response: + + html = response.read() + #print(response.info()) + #print() + ggg = html.decode('utf-8') + return ggg + +def download_metadata_fast(xrt_downloaded_files, ggg=None): + if (ggg == None): + ggg = get_html_lis() + file_lis, new_date = date_to_meta(xrt_downloaded_files) + genyl = get_urls(file_lis, ggg) + print('downloading') + tmeta_lis = get_metafile(genyl) + print('done') + hlis3 = match_vso_to_cat(tmeta_lis, new_date, xrt_downloaded_files) + return hlis3 + +def fetch_metadata(xrt_downloaded_files, fast_bool = True): + if fast_bool: + print('Fast Metadata (Level 0)') + return download_metadata_fast(xrt_downloaded_files, ggg=None) + else: + print('Slow Metadata (Level 1)') + hdul = download_metadata(xrt_downloaded_files,'') + hlis = [] + for i in range(len(xrt_downloaded_files[0])): + hlis.append(hdul[i+2].header) + return hlis + + From 6602a76c4d03ab413aadf8a3eb33d341f8a94b59 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Sun, 15 Jun 2025 17:17:30 -0400 Subject: [PATCH 02/29] Fixing code structure, doc strings, and start testing --- visualization/fov/metadata_downloader.py | 305 +++++++++++++++++++++ visualization/fov/xrt_metadata_download.py | 174 ------------ 2 files changed, 305 insertions(+), 174 deletions(-) create mode 100644 visualization/fov/metadata_downloader.py delete mode 100644 visualization/fov/xrt_metadata_download.py diff --git a/visualization/fov/metadata_downloader.py b/visualization/fov/metadata_downloader.py new file mode 100644 index 000000000..6bec0dcc6 --- /dev/null +++ b/visualization/fov/metadata_downloader.py @@ -0,0 +1,305 @@ +from astropy.io import fits +import astropy.units as u + +import numpy as np + +from astropy.coordinates import SkyCoord + +from sunpy.coordinates import frames +from astropy.time import Time +import scipy.io as sio +from scipy.io import readsav +import urllib.request +print('hey') + +def fetch_metadata(xrt_downloaded_files, fast_bool = True): + """ + Query Hinode/XRT data repositories to retrieve either level 0 (fast) or level 1 (slow) metadata + + Parameters: + ----------- + xrt_downloaded_files : ~sunpy.net.fido_factory.UnifiedResponse + fido query result for XRT data + + fast_bool : boolean, optional + if True, do a fast retrieval of level 0 metadata + + Returns: + -------- + hdul_lis : ~astropy.io.fits.PrimaryHDU + HDU list containing the fits header for all XRT observations in your fido search + """ + + if fast_bool: + print('Fast Metadata (Level 0)') + return _download_metadata_fast(xrt_downloaded_files) + else: + print('Slow Metadata (Level 1)') + hdul = _download_metadata_slow(xrt_downloaded_files) + hlis = [] + for i in range(len(xrt_downloaded_files[0])): + hlis.append(hdul[i+2].header) + return hlis + +def _download_metadata_slow(xrt_downloaded_files): + """ + Query Hinode/XRT data repositories to retrieve level 1 metadata + + Parameters: + ----------- + xrt_downloaded_files : ~sunpy.net.fido_factory.UnifiedResponse + fido query result for XRT data + + Returns: + -------- + hdul_lis : ~astropy.io.fits.PrimaryHDU + HDU list containing the fits header for all XRT observations in your fido search + """ + + url_lis = xrt_downloaded_files[0][:]['fileid'] + url_str_lis = [] + + for i in range(len(url_lis)): + url_str_lis.append(url_lis[i]) + + primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) + c1 = fits.Column(name='URL', array=url_str_lis, format='100A') + c2 = fits.Column(name='header_int', array=np.asarray(range(len(url_str_lis)))+2, format='J') + table_hdu = fits.BinTableHDU.from_columns([c1, c2]) + + hdu_lis = fits.HDUList([primary_hdu, table_hdu]) + + for i in range(len(url_str_lis)): + if (i%10 == 0): + print(int(1000.0*i/len(url_str_lis))/10.0,'%') + + fsspec_kwargs = {"block_size": 100_000, "cache_type": "bytes"} + with fits.open(url_lis[i], use_fsspec=True, fsspec_kwargs=fsspec_kwargs) as hdul: + # Download a single header + t_header = hdul[0].header + image_hdu = fits.ImageHDU(data=np.ones((100, 100)), header = t_header, name="header"+str(i)) + hdu_lis.append(image_hdu) + return hdu_lis + +def _download_metadata_fast(xrt_downloaded_files): + """ + Query Hinode/XRT data repositories to retrieve level 0 metadata + + Parameters: + ----------- + xrt_downloaded_files : ~sunpy.net.fido_factory.UnifiedResponse + fido query result for XRT data + + Returns: + -------- + hdul_lis : ~astropy.io.fits.PrimaryHDU + HDU list containing the fits header for all XRT observations in your fido search + """ + + html_str = _get_html_str() + file_lis, cat_fi = _date_to_metafile(xrt_downloaded_files) + genyl = _get_urls(file_lis, html_str) + print('downloading') + data_dict_lis = _get_metafile(genyl) + print('done') + hdu_lis = _match_vso_to_cat(data_dict_lis, cat_fi, xrt_downloaded_files) + return hdu_lis + +def _get_html_str(): + """ + Retrieve list of file names for .geny xrtcat files. + + Parameters: + ----------- + + Returns: + -------- + html_lis : list + list of strings for daily xrtcat .geny files + """ + url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' + with urllib.request.urlopen(url_start) as response: + html = response.read() + html_str = html.decode('utf-8') + return html_str + +def _date_to_metafile(xrt_download_list): + """ + (Part of fast metadata retrieval) + Get a partial list of daily xrtcat file names cat contain all observations requested + + Parameters: + ----------- + xrt_downloaded_files : ~sunpy.net.fido_factory.UnifiedResponse + fido query result for XRT data + + Returns: + -------- + file_lis : list + list containing the unique date string portion for each daily .geny file that contain the requested xrt observatio0ns + cat_fi: integer list + list containing indexes for each observation pointing at the correct daily .geny file + """ + time_lis = xrt_download_list[0]['Start Time'] + year_lis = xrt_download_list[0]['Start Time'].ymdhms.year + month_lis = xrt_download_list[0]['Start Time'].ymdhms.month + day_lis = xrt_download_list[0]['Start Time'].ymdhms.day + cat_fi = [] + file_lis = [] + for i in range(len(time_lis)): + year_str = str(year_lis[i]) + month_str = str(month_lis[i]) + day_str = str(day_lis[i]) + if len(day_str) < 2: + day_str = '0'+day_str + if len(month_str) < 2: + month_str = '0'+month_str + ndatei = year_str + month_str+ day_str + if ndatei in file_lis: + cat_fi.append(file_lis.index(ndatei)) + else: + + file_lis.append(ndatei) + cat_fi.append(file_lis.index(ndatei)) + + return file_lis, cat_fi + +def _get_urls(file_n_lis, html_str): + """ + (Part of fast metadata retrieval) + Retrieve the complete file name for each xrtcat file use the unique daily string for each file to search the complete file list + + Parameters: + ----------- + file_n_lis : string list + list with strings containing the date portion of the file name for each xrtcat file + html_str : + a long string containing the unformatted filenames for all xrtcat files + + Returns: + -------- + geny_lis: string list + list containing the complete xrtcat file name for all xrtcat files that contain the requested observations + """ + + nfile = len(file_n_lis) + geny_lis = [] + for i in range(nfile): + find_url = 'xrt'+file_n_lis[i] + findex = html_str.find(find_url) + gen_fn = html_str[findex:findex+35] + findex2 = gen_fn.find('geny') + gen_fn = gen_fn[:findex2+4] + geny_lis.append(gen_fn) + return geny_lis + +def _get_metafile(geny_lis): + """ + (Part of fast metadata retrieval) + Retrieve metadata for all observations contained within each .geny files listed in geny_lis + + Parameters: + ----------- + geny_lis : string list + list containing the complete xrtcat file name for all xrtcat files that contain the requested observations + + Returns: + -------- + data_dict_lis: dictionary list + list containing a dictionary for each .geny file, each dictionary containing metadata for all observations listed in each .geny file + + """ + + url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' + ngeny = len(geny_lis) + data_dict_lis = [] + for i in range(ngeny): + gen_fn = geny_lis[i] + f, h = urllib.request.urlretrieve(url_start + gen_fn) + data2 = readsav(f)["p0"] + data_dict2 = {k : data2[k] for k in data2.dtype.names} + data_dict_lis.append(data_dict2) + return data_dict_lis + + +def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): + """ + (Part of fast metadata retrieval) + Match list of requested observations to the metadata retrieved from xrtcat + + Parameters: + ----------- + data_dict_lis : list of dictionaries + list containing a dictionary for each .geny file, each dictionary containing metadata for all observations listed in each .geny file + cat_fi: integer list + list containing indexes for each observation pointing at the correct daily .geny file (or at the correct dictionary in data_dict_lis) + xrt_download : ~sunpy.net.fido_factory.UnifiedResponse + fido query result for XRT data + Returns: + -------- + header_lis: list of dictionaries + HDU list containing the fits header for all XRT observations in your fido search + """ + n_dict = len(data_dict_lis) + cat_time_lis = [] + for i in range(n_dict): + data_dict = data_dict_lis[i] + date_obs_cat = data_dict['DATE_OBS'] + cat_len = len(date_obs_cat) + cat_str = [] + for cat_bin in date_obs_cat: + cat_str.append(cat_bin.decode('ascii')) + cat_time = Time(np.asarray(cat_str), format='isot', scale='utc') + cat_time_lis.append(cat_time) + + min_ti_lis = [] + delt_lis = [] + delt_lisp = [] + delt_lism = [] + header_lis = [] + for i in range(len(xrt_download[0]['Start Time'])): + cat_time = cat_time_lis[cat_fi[i]] + stime = xrt_download[0]['Start Time'][i] + delt = cat_time - stime + delt = delt.value * 24.0 * 3600.0 #convert from days to seconds + min_ti = np.argmin(np.abs(delt)) + min_ti_lis.append(min_ti) + delt_lis.append(delt[min_ti]) + try: + delt_lisp.append(delt[min_ti+1]) + delt_lism.append(delt[min_ti-1]) + except: + print() + header_lis.append(_meta_to_dict(data_dict_lis[cat_fi[i]],min_ti)) + return header_lis + +def _meta_to_dict(data_dict, di): + """ + (Part of fast metadata retrieval) + Convert ascii metadata for each obseration to a python dictionary + + Parameters: + ----------- + data_dict : dictionary + dictionary containing all of the metadata for all observations in a given .geny file + di : integer + index that matches the observation entry from fido search to the file entry in data_dict + + Returns: + -------- + hdict : dictionary + dictionary of all metadata for a single obseration corresponding to index di + + """ + dkeys = data_dict.keys() + hdict = {} + for dki in dkeys: + try: + hdict[dki] = data_dict[dki][di].decode('ascii') + except: + hdict[dki] = data_dict[dki][di] + return hdict + + + + diff --git a/visualization/fov/xrt_metadata_download.py b/visualization/fov/xrt_metadata_download.py deleted file mode 100644 index 3d97632f2..000000000 --- a/visualization/fov/xrt_metadata_download.py +++ /dev/null @@ -1,174 +0,0 @@ -from astropy.io import fits -import astropy.units as u - -import numpy as np - -from astropy.coordinates import SkyCoord - -from sunpy.coordinates import frames -from astropy.time import Time -import scipy.io as sio -from scipy.io import readsav -import urllib.request - - -def download_metadata(xrt_downloaded_files, filen, overwrite=False): - url_lis = xrt_downloaded_files[0][:]['fileid'] - url_str_lis = [] - for i in range(len(url_lis)): - url_str_lis.append(url_lis[i]) - primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) - c1 = fits.Column(name='URL', array=url_str_lis, format='100A') - c2 = fits.Column(name='header_int', array=np.asarray(range(len(url_str_lis)))+2, format='J') - table_hdu = fits.BinTableHDU.from_columns([c1, c2]) - - hdul2 = fits.HDUList([primary_hdu, table_hdu]) - #hlis = [] - - for i in range(len(url_str_lis)): - if (i%10 == 0): - print(int(1000.0*i/len(url_str_lis))/10.0,'%') - fsspec_kwargs = {"block_size": 100_000, "cache_type": "bytes"} - with fits.open(url_lis[i], use_fsspec=True, fsspec_kwargs=fsspec_kwargs) as hdul: - #hlis.append(hdul[0].header) - # Download a single header - t_header = hdul[0].header - image_hdu = fits.ImageHDU(data=np.ones((100, 100)), header=t_header,name="header"+str(i)) - hdul2.append(image_hdu) - return hdul2 - - #hdul2.writeto(filen,overwrite=overwrite) - -def date_to_meta(xrt_download_list): - time_lis = xrt_download_list[0]['Start Time'] - year_lis = xrt_download_list[0]['Start Time'].ymdhms.year - month_lis = xrt_download_list[0]['Start Time'].ymdhms.month - day_lis = xrt_download_list[0]['Start Time'].ymdhms.day - new_date = [] - file_lis = [] - for i in range(len(time_lis)): - year_str = str(year_lis[i]) - month_str = str(month_lis[i]) - day_str = str(day_lis[i]) - if len(day_str) < 2: - day_str = '0'+day_str - if len(month_str) < 2: - month_str = '0'+month_str - ndatei = year_str + month_str+ day_str - if ndatei in file_lis: - new_date.append(file_lis.index(ndatei)) - #new_date[file_lis.index(ndatei)].append(ndatei) - else: - file_lis.append(ndatei) - new_date.append(file_lis.index(ndatei)) - #print(ndatei,file_lis.index(ndatei)) - return file_lis, new_date - -def get_urls(file_n_lis, ggg): - nfile = len(file_n_lis) - geny_lis = [] - for i in range(nfile): - find_url = 'xrt'+file_n_lis[i] - findex = ggg.find(find_url) - gen_fn = ggg[findex:findex+35] - findex2 = gen_fn.find('geny') - gen_fn = gen_fn[:findex2+4] - geny_lis.append(gen_fn) - return geny_lis - -def get_metafile(geny_lis): - url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' - ngeny = len(geny_lis) - meta_lis = [] - for i in range(ngeny): - print(i) - gen_fn = geny_lis[i] - f, h = urllib.request.urlretrieve(url_start + gen_fn) - print(i) - data2 = readsav(f)["p0"] - data_dict2 = {k : data2[k] for k in data2.dtype.names} - meta_lis.append(data_dict2) - return meta_lis - -#def mk_meta_header(meta_lis): - #print(data_dict2['DATE_OBS']) - -def meta_to_dict(data_dict, di): - dkeys = data_dict.keys() - hdict = {} - for dki in dkeys: - try: - hdict[dki] = data_dict[dki][di].decode('ascii') - except: - hdict[dki] = data_dict[dki][di] - return hdict - -def match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): - - n_dict = len(data_dict_lis) - cat_time_lis = [] - for i in range(n_dict): - data_dict = data_dict_lis[i] - date_obs_cat = data_dict['DATE_OBS'] - cat_len = len(date_obs_cat) - cat_str = [] - for cat_bin in date_obs_cat: - cat_str.append(cat_bin.decode('ascii')) - cat_time = Time(np.asarray(cat_str), format='isot', scale='utc') - cat_time_lis.append(cat_time) - #print('yo') - min_ti_lis = [] - delt_lis = [] - delt_lisp = [] - delt_lism = [] - header_lis = [] - for i in range(len(xrt_download[0]['Start Time'])): - cat_time = cat_time_lis[cat_fi[i]] - stime = xrt_download[0]['Start Time'][i] - delt = cat_time - stime - delt = delt.value*24.0*3600.0 - min_ti = np.argmin(np.abs(delt)) - min_ti_lis.append(min_ti) - delt_lis.append(delt[min_ti]) - try: - delt_lisp.append(delt[min_ti+1]) - delt_lism.append(delt[min_ti-1]) - except: - print() - header_lis.append(meta_to_dict(data_dict_lis[cat_fi[i]],min_ti)) - return header_lis - -def get_html_lis(): - url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' - with urllib.request.urlopen(url_start) as response: - - html = response.read() - #print(response.info()) - #print() - ggg = html.decode('utf-8') - return ggg - -def download_metadata_fast(xrt_downloaded_files, ggg=None): - if (ggg == None): - ggg = get_html_lis() - file_lis, new_date = date_to_meta(xrt_downloaded_files) - genyl = get_urls(file_lis, ggg) - print('downloading') - tmeta_lis = get_metafile(genyl) - print('done') - hlis3 = match_vso_to_cat(tmeta_lis, new_date, xrt_downloaded_files) - return hlis3 - -def fetch_metadata(xrt_downloaded_files, fast_bool = True): - if fast_bool: - print('Fast Metadata (Level 0)') - return download_metadata_fast(xrt_downloaded_files, ggg=None) - else: - print('Slow Metadata (Level 1)') - hdul = download_metadata(xrt_downloaded_files,'') - hlis = [] - for i in range(len(xrt_downloaded_files[0])): - hlis.append(hdul[i+2].header) - return hlis - - From 924660e5b405a1669f8f5c171f107afec65c8419 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Sun, 15 Jun 2025 17:40:09 -0400 Subject: [PATCH 03/29] First test file for team evaluation --- visualization/fov/test/test_fov.py | 60 ++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 visualization/fov/test/test_fov.py diff --git a/visualization/fov/test/test_fov.py b/visualization/fov/test/test_fov.py new file mode 100644 index 000000000..1274356c3 --- /dev/null +++ b/visualization/fov/test/test_fov.py @@ -0,0 +1,60 @@ +import pytest +import sys +import pickle +sys.path.append('/Users/ntrueba/SOLAR/code/GIT/xrtpy/xrtpy/visualization/fov/') # +import metadata_downloader as xfetch +from sunpy.net import Fido +from sunpy.net import attrs as a + + +time_range = a.Time("2011-06-07 06:00:00", "2011-06-07 07:30:54") +instrument = a.Instrument("xrt") + +xrt_downloaded_files = Fido.search(time_range, instrument) +n_files = len(xrt_downloaded_files[0]) + +html_str = xfetch._get_html_str() + +@pytest.mark.xfail(xfail_strict = True) +def test_download(): + assert n_files == 0 + +@pytest.mark.xfail(xfail_strict = True) +def test_html(): + assert len(html_str) == 0 + +@pytest.mark.parametrize( + "argument, expected_result", + [ + ('20061017', 'xrt20061017_0000_NE7.geny'), # pair the argument with the expected result + ('20090405', 'xrt20090405_0000_NE394.geny'), + ] +) +def test_get_urls(argument, expected_result): + geny_lis = xfetch._get_urls([argument], html_str) + genystr = geny_lis[0] + assert genystr == expected_result + + +file_lis, cat_fi = xfetch._date_to_metafile(xrt_downloaded_files) +def test_date_to_metafile_a(): + assert file_lis[0] == '20110607' +def test_date_to_metafile_b(): + assert len(file_lis) == 1 +def test_date_to_metafile_c(): + assert len(cat_fi) == n_files + +@pytest.mark.xfail(xfail_strict = True) +def test_date_to_metafile_d(): + assert len(cat_fi) == 0 + +@pytest.mark.parametrize( + "argument, expected_result", + [ + (True, n_files), # pair the argument with the expected result + (False, n_files), + ] +) +def test_fetch_metadata(argument, expected_result): + hdul = xfetch.fetch_metadata(xrt_downloaded_files, fast_bool = argument) + assert len(hdul) == expected_result \ No newline at end of file From 956327aa69ad610fd77c5772591927093026e3fb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 17:12:02 +0000 Subject: [PATCH 04/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- visualization/fov/metadata_downloader.py | 138 ++++++++++++----------- visualization/fov/test/test_fov.py | 46 +++++--- 2 files changed, 101 insertions(+), 83 deletions(-) diff --git a/visualization/fov/metadata_downloader.py b/visualization/fov/metadata_downloader.py index 6bec0dcc6..aaaa960b4 100644 --- a/visualization/fov/metadata_downloader.py +++ b/visualization/fov/metadata_downloader.py @@ -1,18 +1,14 @@ -from astropy.io import fits -import astropy.units as u +import urllib.request import numpy as np - -from astropy.coordinates import SkyCoord - -from sunpy.coordinates import frames +from astropy.io import fits from astropy.time import Time -import scipy.io as sio from scipy.io import readsav -import urllib.request -print('hey') -def fetch_metadata(xrt_downloaded_files, fast_bool = True): +print("hey") + + +def fetch_metadata(xrt_downloaded_files, fast_bool=True): """ Query Hinode/XRT data repositories to retrieve either level 0 (fast) or level 1 (slow) metadata @@ -22,7 +18,7 @@ def fetch_metadata(xrt_downloaded_files, fast_bool = True): fido query result for XRT data fast_bool : boolean, optional - if True, do a fast retrieval of level 0 metadata + if True, do a fast retrieval of level 0 metadata Returns: -------- @@ -31,16 +27,17 @@ def fetch_metadata(xrt_downloaded_files, fast_bool = True): """ if fast_bool: - print('Fast Metadata (Level 0)') + print("Fast Metadata (Level 0)") return _download_metadata_fast(xrt_downloaded_files) else: - print('Slow Metadata (Level 1)') + print("Slow Metadata (Level 1)") hdul = _download_metadata_slow(xrt_downloaded_files) hlis = [] for i in range(len(xrt_downloaded_files[0])): - hlis.append(hdul[i+2].header) + hlis.append(hdul[i + 2].header) return hlis - + + def _download_metadata_slow(xrt_downloaded_files): """ Query Hinode/XRT data repositories to retrieve level 1 metadata @@ -56,31 +53,38 @@ def _download_metadata_slow(xrt_downloaded_files): HDU list containing the fits header for all XRT observations in your fido search """ - url_lis = xrt_downloaded_files[0][:]['fileid'] + url_lis = xrt_downloaded_files[0][:]["fileid"] url_str_lis = [] for i in range(len(url_lis)): url_str_lis.append(url_lis[i]) - + primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) - c1 = fits.Column(name='URL', array=url_str_lis, format='100A') - c2 = fits.Column(name='header_int', array=np.asarray(range(len(url_str_lis)))+2, format='J') + c1 = fits.Column(name="URL", array=url_str_lis, format="100A") + c2 = fits.Column( + name="header_int", array=np.asarray(range(len(url_str_lis))) + 2, format="J" + ) table_hdu = fits.BinTableHDU.from_columns([c1, c2]) hdu_lis = fits.HDUList([primary_hdu, table_hdu]) for i in range(len(url_str_lis)): - if (i%10 == 0): - print(int(1000.0*i/len(url_str_lis))/10.0,'%') + if i % 10 == 0: + print(int(1000.0 * i / len(url_str_lis)) / 10.0, "%") fsspec_kwargs = {"block_size": 100_000, "cache_type": "bytes"} - with fits.open(url_lis[i], use_fsspec=True, fsspec_kwargs=fsspec_kwargs) as hdul: + with fits.open( + url_lis[i], use_fsspec=True, fsspec_kwargs=fsspec_kwargs + ) as hdul: # Download a single header t_header = hdul[0].header - image_hdu = fits.ImageHDU(data=np.ones((100, 100)), header = t_header, name="header"+str(i)) - hdu_lis.append(image_hdu) + image_hdu = fits.ImageHDU( + data=np.ones((100, 100)), header=t_header, name="header" + str(i) + ) + hdu_lis.append(image_hdu) return hdu_lis + def _download_metadata_fast(xrt_downloaded_files): """ Query Hinode/XRT data repositories to retrieve level 0 metadata @@ -99,12 +103,13 @@ def _download_metadata_fast(xrt_downloaded_files): html_str = _get_html_str() file_lis, cat_fi = _date_to_metafile(xrt_downloaded_files) genyl = _get_urls(file_lis, html_str) - print('downloading') + print("downloading") data_dict_lis = _get_metafile(genyl) - print('done') + print("done") hdu_lis = _match_vso_to_cat(data_dict_lis, cat_fi, xrt_downloaded_files) return hdu_lis + def _get_html_str(): """ Retrieve list of file names for .geny xrtcat files. @@ -117,12 +122,13 @@ def _get_html_str(): html_lis : list list of strings for daily xrtcat .geny files """ - url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' - with urllib.request.urlopen(url_start) as response: + url_start = "https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/" + with urllib.request.urlopen(url_start) as response: html = response.read() - html_str = html.decode('utf-8') + html_str = html.decode("utf-8") return html_str + def _date_to_metafile(xrt_download_list): """ (Part of fast metadata retrieval) @@ -140,30 +146,30 @@ def _date_to_metafile(xrt_download_list): cat_fi: integer list list containing indexes for each observation pointing at the correct daily .geny file """ - time_lis = xrt_download_list[0]['Start Time'] - year_lis = xrt_download_list[0]['Start Time'].ymdhms.year - month_lis = xrt_download_list[0]['Start Time'].ymdhms.month - day_lis = xrt_download_list[0]['Start Time'].ymdhms.day + time_lis = xrt_download_list[0]["Start Time"] + year_lis = xrt_download_list[0]["Start Time"].ymdhms.year + month_lis = xrt_download_list[0]["Start Time"].ymdhms.month + day_lis = xrt_download_list[0]["Start Time"].ymdhms.day cat_fi = [] file_lis = [] for i in range(len(time_lis)): - year_str = str(year_lis[i]) + year_str = str(year_lis[i]) month_str = str(month_lis[i]) - day_str = str(day_lis[i]) + day_str = str(day_lis[i]) if len(day_str) < 2: - day_str = '0'+day_str + day_str = "0" + day_str if len(month_str) < 2: - month_str = '0'+month_str - ndatei = year_str + month_str+ day_str + month_str = "0" + month_str + ndatei = year_str + month_str + day_str if ndatei in file_lis: cat_fi.append(file_lis.index(ndatei)) else: - file_lis.append(ndatei) cat_fi.append(file_lis.index(ndatei)) return file_lis, cat_fi + def _get_urls(file_n_lis, html_str): """ (Part of fast metadata retrieval) @@ -173,26 +179,27 @@ def _get_urls(file_n_lis, html_str): ----------- file_n_lis : string list list with strings containing the date portion of the file name for each xrtcat file - html_str : + html_str : a long string containing the unformatted filenames for all xrtcat files Returns: -------- geny_lis: string list - list containing the complete xrtcat file name for all xrtcat files that contain the requested observations + list containing the complete xrtcat file name for all xrtcat files that contain the requested observations """ nfile = len(file_n_lis) geny_lis = [] for i in range(nfile): - find_url = 'xrt'+file_n_lis[i] + find_url = "xrt" + file_n_lis[i] findex = html_str.find(find_url) - gen_fn = html_str[findex:findex+35] - findex2 = gen_fn.find('geny') - gen_fn = gen_fn[:findex2+4] + gen_fn = html_str[findex : findex + 35] + findex2 = gen_fn.find("geny") + gen_fn = gen_fn[: findex2 + 4] geny_lis.append(gen_fn) return geny_lis + def _get_metafile(geny_lis): """ (Part of fast metadata retrieval) @@ -201,7 +208,7 @@ def _get_metafile(geny_lis): Parameters: ----------- geny_lis : string list - list containing the complete xrtcat file name for all xrtcat files that contain the requested observations + list containing the complete xrtcat file name for all xrtcat files that contain the requested observations Returns: -------- @@ -209,15 +216,15 @@ def _get_metafile(geny_lis): list containing a dictionary for each .geny file, each dictionary containing metadata for all observations listed in each .geny file """ - - url_start = 'https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/' + + url_start = "https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/" ngeny = len(geny_lis) data_dict_lis = [] for i in range(ngeny): gen_fn = geny_lis[i] f, h = urllib.request.urlretrieve(url_start + gen_fn) data2 = readsav(f)["p0"] - data_dict2 = {k : data2[k] for k in data2.dtype.names} + data_dict2 = {k: data2[k] for k in data2.dtype.names} data_dict_lis.append(data_dict2) return data_dict_lis @@ -244,12 +251,12 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): cat_time_lis = [] for i in range(n_dict): data_dict = data_dict_lis[i] - date_obs_cat = data_dict['DATE_OBS'] + date_obs_cat = data_dict["DATE_OBS"] cat_len = len(date_obs_cat) cat_str = [] for cat_bin in date_obs_cat: - cat_str.append(cat_bin.decode('ascii')) - cat_time = Time(np.asarray(cat_str), format='isot', scale='utc') + cat_str.append(cat_bin.decode("ascii")) + cat_time = Time(np.asarray(cat_str), format="isot", scale="utc") cat_time_lis.append(cat_time) min_ti_lis = [] @@ -257,22 +264,23 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): delt_lisp = [] delt_lism = [] header_lis = [] - for i in range(len(xrt_download[0]['Start Time'])): + for i in range(len(xrt_download[0]["Start Time"])): cat_time = cat_time_lis[cat_fi[i]] - stime = xrt_download[0]['Start Time'][i] - delt = cat_time - stime - delt = delt.value * 24.0 * 3600.0 #convert from days to seconds - min_ti = np.argmin(np.abs(delt)) + stime = xrt_download[0]["Start Time"][i] + dealt = cat_time - stime + dealt = dealt.value * 24.0 * 3600.0 # convert from days to seconds + min_ti = np.argmin(np.abs(dealt)) min_ti_lis.append(min_ti) - delt_lis.append(delt[min_ti]) + delt_lis.append(dealt[min_ti]) try: - delt_lisp.append(delt[min_ti+1]) - delt_lism.append(delt[min_ti-1]) + delt_lisp.append(dealt[min_ti + 1]) + delt_lism.append(dealt[min_ti - 1]) except: print() - header_lis.append(_meta_to_dict(data_dict_lis[cat_fi[i]],min_ti)) + header_lis.append(_meta_to_dict(data_dict_lis[cat_fi[i]], min_ti)) return header_lis + def _meta_to_dict(data_dict, di): """ (Part of fast metadata retrieval) @@ -289,17 +297,13 @@ def _meta_to_dict(data_dict, di): -------- hdict : dictionary dictionary of all metadata for a single obseration corresponding to index di - + """ dkeys = data_dict.keys() hdict = {} for dki in dkeys: try: - hdict[dki] = data_dict[dki][di].decode('ascii') + hdict[dki] = data_dict[dki][di].decode("ascii") except: hdict[dki] = data_dict[dki][di] return hdict - - - - diff --git a/visualization/fov/test/test_fov.py b/visualization/fov/test/test_fov.py index 1274356c3..7f1f4435f 100644 --- a/visualization/fov/test/test_fov.py +++ b/visualization/fov/test/test_fov.py @@ -1,12 +1,12 @@ -import pytest import sys -import pickle -sys.path.append('/Users/ntrueba/SOLAR/code/GIT/xrtpy/xrtpy/visualization/fov/') # + +import pytest + +sys.path.append("/Users/ntrueba/SOLAR/code/GIT/xrtpy/xrtpy/visualization/fov/") # import metadata_downloader as xfetch from sunpy.net import Fido from sunpy.net import attrs as a - time_range = a.Time("2011-06-07 06:00:00", "2011-06-07 07:30:54") instrument = a.Instrument("xrt") @@ -15,46 +15,60 @@ html_str = xfetch._get_html_str() -@pytest.mark.xfail(xfail_strict = True) + +@pytest.mark.xfail(xfail_strict=True) def test_download(): assert n_files == 0 -@pytest.mark.xfail(xfail_strict = True) + +@pytest.mark.xfail(xfail_strict=True) def test_html(): assert len(html_str) == 0 + @pytest.mark.parametrize( "argument, expected_result", [ - ('20061017', 'xrt20061017_0000_NE7.geny'), # pair the argument with the expected result - ('20090405', 'xrt20090405_0000_NE394.geny'), - ] -) + ( + "20061017", + "xrt20061017_0000_NE7.geny", + ), # pair the argument with the expected result + ("20090405", "xrt20090405_0000_NE394.geny"), + ], +) def test_get_urls(argument, expected_result): geny_lis = xfetch._get_urls([argument], html_str) genystr = geny_lis[0] - assert genystr == expected_result + assert genystr == expected_result file_lis, cat_fi = xfetch._date_to_metafile(xrt_downloaded_files) + + def test_date_to_metafile_a(): - assert file_lis[0] == '20110607' + assert file_lis[0] == "20110607" + + def test_date_to_metafile_b(): assert len(file_lis) == 1 + + def test_date_to_metafile_c(): assert len(cat_fi) == n_files -@pytest.mark.xfail(xfail_strict = True) + +@pytest.mark.xfail(xfail_strict=True) def test_date_to_metafile_d(): assert len(cat_fi) == 0 + @pytest.mark.parametrize( "argument, expected_result", [ (True, n_files), # pair the argument with the expected result (False, n_files), - ] + ], ) def test_fetch_metadata(argument, expected_result): - hdul = xfetch.fetch_metadata(xrt_downloaded_files, fast_bool = argument) - assert len(hdul) == expected_result \ No newline at end of file + hdul = xfetch.fetch_metadata(xrt_downloaded_files, fast_bool=argument) + assert len(hdul) == expected_result From ecbd6ba0e965fbf6525ba6778cbfd14efd0e290d Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 24 Jun 2025 17:09:02 -0400 Subject: [PATCH 05/29] restructuring code to work within xrtpy, test should work but required changes to pytest.ini on my end --- xrtpy/visualization_GUI/__init__.py | 2 ++ xrtpy/visualization_GUI/fov/__init__.py | 2 ++ .../visualization_GUI}/fov/metadata_downloader.py | 0 xrtpy/visualization_GUI/fov/tests/__init__.py | 1 + .../test => xrtpy/visualization_GUI/fov/tests}/test_fov.py | 6 ++---- 5 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 xrtpy/visualization_GUI/__init__.py create mode 100644 xrtpy/visualization_GUI/fov/__init__.py rename {visualization => xrtpy/visualization_GUI}/fov/metadata_downloader.py (100%) create mode 100644 xrtpy/visualization_GUI/fov/tests/__init__.py rename {visualization/fov/test => xrtpy/visualization_GUI/fov/tests}/test_fov.py (91%) diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py new file mode 100644 index 000000000..9a2c6957e --- /dev/null +++ b/xrtpy/visualization_GUI/__init__.py @@ -0,0 +1,2 @@ +from xrtpy.visualization_GUI.fov import metadata_downloader + diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py new file mode 100644 index 000000000..9a2c6957e --- /dev/null +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -0,0 +1,2 @@ +from xrtpy.visualization_GUI.fov import metadata_downloader + diff --git a/visualization/fov/metadata_downloader.py b/xrtpy/visualization_GUI/fov/metadata_downloader.py similarity index 100% rename from visualization/fov/metadata_downloader.py rename to xrtpy/visualization_GUI/fov/metadata_downloader.py diff --git a/xrtpy/visualization_GUI/fov/tests/__init__.py b/xrtpy/visualization_GUI/fov/tests/__init__.py new file mode 100644 index 000000000..a9a2c5b3b --- /dev/null +++ b/xrtpy/visualization_GUI/fov/tests/__init__.py @@ -0,0 +1 @@ +__all__ = [] diff --git a/visualization/fov/test/test_fov.py b/xrtpy/visualization_GUI/fov/tests/test_fov.py similarity index 91% rename from visualization/fov/test/test_fov.py rename to xrtpy/visualization_GUI/fov/tests/test_fov.py index 1274356c3..40787af8e 100644 --- a/visualization/fov/test/test_fov.py +++ b/xrtpy/visualization_GUI/fov/tests/test_fov.py @@ -1,8 +1,6 @@ import pytest -import sys -import pickle -sys.path.append('/Users/ntrueba/SOLAR/code/GIT/xrtpy/xrtpy/visualization/fov/') # -import metadata_downloader as xfetch +import xrtpy +from xrtpy.visualization_GUI.fov import metadata_downloader as xfetch from sunpy.net import Fido from sunpy.net import attrs as a From cefe236154a82443e1a7c752a976e25a7c95ffd4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 18:52:52 +0000 Subject: [PATCH 06/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xrtpy/visualization_GUI/__init__.py | 1 - xrtpy/visualization_GUI/fov/__init__.py | 1 - 2 files changed, 2 deletions(-) diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py index 9a2c6957e..9e1b2f67c 100644 --- a/xrtpy/visualization_GUI/__init__.py +++ b/xrtpy/visualization_GUI/__init__.py @@ -1,2 +1 @@ from xrtpy.visualization_GUI.fov import metadata_downloader - diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py index 9a2c6957e..9e1b2f67c 100644 --- a/xrtpy/visualization_GUI/fov/__init__.py +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -1,2 +1 @@ from xrtpy.visualization_GUI.fov import metadata_downloader - From 973bfb8e474ceeeee8a0c3580201e0705766f432 Mon Sep 17 00:00:00 2001 From: Joy <74623359+joyvelasquez@users.noreply.github.com> Date: Mon, 30 Jun 2025 20:07:56 -0400 Subject: [PATCH 07/29] Update test_fov.py Resolve merge conflict in test_fov.py and clean imports --- xrtpy/visualization_GUI/fov/tests/test_fov.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/tests/test_fov.py b/xrtpy/visualization_GUI/fov/tests/test_fov.py index 9b1f12919..b4f8e6b37 100644 --- a/xrtpy/visualization_GUI/fov/tests/test_fov.py +++ b/xrtpy/visualization_GUI/fov/tests/test_fov.py @@ -1,15 +1,6 @@ -<<<<<<< HEAD:xrtpy/visualization_GUI/fov/tests/test_fov.py import pytest import xrtpy from xrtpy.visualization_GUI.fov import metadata_downloader as xfetch -======= -import sys - -import pytest - -sys.path.append("/Users/ntrueba/SOLAR/code/GIT/xrtpy/xrtpy/visualization/fov/") # -import metadata_downloader as xfetch ->>>>>>> caf4c77b36f878d69bf16418c1691d12e81cbac6:visualization/fov/test/test_fov.py from sunpy.net import Fido from sunpy.net import attrs as a From 8907577a8ac1b5d58d22f1b71ea6d3288531a37c Mon Sep 17 00:00:00 2001 From: Joy <74623359+joyvelasquez@users.noreply.github.com> Date: Tue, 1 Jul 2025 13:19:16 -0400 Subject: [PATCH 08/29] Update metadata_downloader.py Removing a printing statement that isn't necessary. --- xrtpy/visualization_GUI/fov/metadata_downloader.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/metadata_downloader.py b/xrtpy/visualization_GUI/fov/metadata_downloader.py index aaaa960b4..22863e448 100644 --- a/xrtpy/visualization_GUI/fov/metadata_downloader.py +++ b/xrtpy/visualization_GUI/fov/metadata_downloader.py @@ -5,8 +5,6 @@ from astropy.time import Time from scipy.io import readsav -print("hey") - def fetch_metadata(xrt_downloaded_files, fast_bool=True): """ From 97570c2f1ba974cd0186153e144496eecfd923f7 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 12:39:03 -0400 Subject: [PATCH 09/29] updating yaml --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f4f64cca..7f5b4a15f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -67,7 +67,7 @@ repos: exclude: .*\.fits - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.11.8 + rev: v0.11.12 hooks: - id: ruff name: ruff @@ -90,6 +90,6 @@ repos: additional_dependencies: ['validate-pyproject-schema-store[all]'] - repo: https://github.com/tox-dev/pyproject-fmt - rev: v2.5.1 + rev: v2.6.0 hooks: - id: pyproject-fmt From 479051e415c3e88343df38b984509dbf4b7f726a Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 12:48:41 -0400 Subject: [PATCH 10/29] applied ruff fix --- xrtpy/visualization_GUI/fov/tests/test_fov.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/tests/test_fov.py b/xrtpy/visualization_GUI/fov/tests/test_fov.py index b4f8e6b37..c3d80b5a6 100644 --- a/xrtpy/visualization_GUI/fov/tests/test_fov.py +++ b/xrtpy/visualization_GUI/fov/tests/test_fov.py @@ -1,9 +1,9 @@ import pytest -import xrtpy -from xrtpy.visualization_GUI.fov import metadata_downloader as xfetch from sunpy.net import Fido from sunpy.net import attrs as a +from xrtpy.visualization_GUI.fov import metadata_downloader as xfetch + time_range = a.Time("2011-06-07 06:00:00", "2011-06-07 07:30:54") instrument = a.Instrument("xrt") From d8663af650469ca3ac1fb69aa9aafbea62eec650 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:18:07 -0400 Subject: [PATCH 11/29] ruff fix errors --- xrtpy/visualization_GUI/fov/__init__.py | 2 +- .../fov/metadata_downloader.py | 32 ++++++++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py index 9e1b2f67c..6ae658046 100644 --- a/xrtpy/visualization_GUI/fov/__init__.py +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -1 +1 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader diff --git a/xrtpy/visualization_GUI/fov/metadata_downloader.py b/xrtpy/visualization_GUI/fov/metadata_downloader.py index 22863e448..afe70b19d 100644 --- a/xrtpy/visualization_GUI/fov/metadata_downloader.py +++ b/xrtpy/visualization_GUI/fov/metadata_downloader.py @@ -30,9 +30,10 @@ def fetch_metadata(xrt_downloaded_files, fast_bool=True): else: print("Slow Metadata (Level 1)") hdul = _download_metadata_slow(xrt_downloaded_files) - hlis = [] - for i in range(len(xrt_downloaded_files[0])): - hlis.append(hdul[i + 2].header) + #hlis = [] + #for i in range(len(xrt_downloaded_files[0])): + # hlis.append(hdul[i + 2].header) + hlis = [hdul[i+2].header for i in range(len(xrt_downloaded_files[0]))] return hlis @@ -52,11 +53,11 @@ def _download_metadata_slow(xrt_downloaded_files): """ url_lis = xrt_downloaded_files[0][:]["fileid"] - url_str_lis = [] - - for i in range(len(url_lis)): - url_str_lis.append(url_lis[i]) + #url_str_lis = [] + #for i in range(len(url_lis)): + # url_str_lis.append(url_lis[i]) + url_str_lis = list(url_lis) primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) c1 = fits.Column(name="URL", array=url_str_lis, format="100A") c2 = fits.Column( @@ -121,7 +122,7 @@ def _get_html_str(): list of strings for daily xrtcat .geny files """ url_start = "https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/" - with urllib.request.urlopen(url_start) as response: + with urllib.request.urlopen(url_start) as response: # noqa : S310 html = response.read() html_str = html.decode("utf-8") return html_str @@ -220,7 +221,7 @@ def _get_metafile(geny_lis): data_dict_lis = [] for i in range(ngeny): gen_fn = geny_lis[i] - f, h = urllib.request.urlretrieve(url_start + gen_fn) + f, h = urllib.request.urlretrieve(url_start + gen_fn) # noqa : S310 data2 = readsav(f)["p0"] data_dict2 = {k: data2[k] for k in data2.dtype.names} data_dict_lis.append(data_dict2) @@ -250,10 +251,11 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): for i in range(n_dict): data_dict = data_dict_lis[i] date_obs_cat = data_dict["DATE_OBS"] - cat_len = len(date_obs_cat) - cat_str = [] - for cat_bin in date_obs_cat: - cat_str.append(cat_bin.decode("ascii")) + #cat_len = len(date_obs_cat) + #cat_str = [] + #for cat_bin in date_obs_cat: + # cat_str.append(cat_bin.decode("ascii")) + cat_str = [cat_bin.decode("ascii") for cat_bin in date_obs_cat] cat_time = Time(np.asarray(cat_str), format="isot", scale="utc") cat_time_lis.append(cat_time) @@ -273,7 +275,7 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): try: delt_lisp.append(dealt[min_ti + 1]) delt_lism.append(dealt[min_ti - 1]) - except: + except IndexError: print() header_lis.append(_meta_to_dict(data_dict_lis[cat_fi[i]], min_ti)) return header_lis @@ -302,6 +304,6 @@ def _meta_to_dict(data_dict, di): for dki in dkeys: try: hdict[dki] = data_dict[dki][di].decode("ascii") - except: + except IndexError: # noqa : PERF203 hdict[dki] = data_dict[dki][di] return hdict From 879f348e8716305a431ec7b7d9d89cd97275f3f5 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:21:35 -0400 Subject: [PATCH 12/29] updating ruff errors for tests --- xrtpy/visualization_GUI/fov/tests/test_fov.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/tests/test_fov.py b/xrtpy/visualization_GUI/fov/tests/test_fov.py index c3d80b5a6..28e58e04b 100644 --- a/xrtpy/visualization_GUI/fov/tests/test_fov.py +++ b/xrtpy/visualization_GUI/fov/tests/test_fov.py @@ -24,7 +24,7 @@ def test_html(): @pytest.mark.parametrize( - "argument, expected_result", + ("argument", "expected_result"), [ ( "20061017", @@ -60,7 +60,7 @@ def test_date_to_metafile_d(): @pytest.mark.parametrize( - "argument, expected_result", + ("argument", "expected_result"), [ (True, n_files), # pair the argument with the expected result (False, n_files), From 8d6050664b569e2c6822686599845752f7f38b64 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:23:53 -0400 Subject: [PATCH 13/29] fixing __init file --- xrtpy/visualization_GUI/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py index 9e1b2f67c..6ae658046 100644 --- a/xrtpy/visualization_GUI/__init__.py +++ b/xrtpy/visualization_GUI/__init__.py @@ -1 +1 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader From e542d1954138d6246c84d147fa2bb4e966e3ed35 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:30:21 -0400 Subject: [PATCH 14/29] fixing beautifulsoup dependancy --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 84dc2e569..cfbfc8988 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,6 +71,7 @@ optional-dependencies.tests = [ "pytest-astropy>=0.11", "pytest-cov>=6", "pytest-xdist>=3.6.1", + "beautifulsoup4", ] urls.Changelog = "https://xrtpy.readthedocs.io/en/stable/changelog/index.html" urls.Documentation = "https://xrtpy.readthedocs.io" From bdbb6690059302bcfc7aec24df51e1bc021c139f Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:34:28 -0400 Subject: [PATCH 15/29] yet another ruff fix --- xrtpy/visualization_GUI/__init__.py | 2 ++ xrtpy/visualization_GUI/fov/__init__.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py index 6ae658046..1c30d3612 100644 --- a/xrtpy/visualization_GUI/__init__.py +++ b/xrtpy/visualization_GUI/__init__.py @@ -1 +1,3 @@ from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader + +__all__ = ["metadata_downloader"] diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py index 6ae658046..1c30d3612 100644 --- a/xrtpy/visualization_GUI/fov/__init__.py +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -1 +1,3 @@ from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader + +__all__ = ["metadata_downloader"] From 072e6628b9678a599a67ea65a020e31ceed007da Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:36:34 -0400 Subject: [PATCH 16/29] yet another ruff fix v2 --- xrtpy/visualization_GUI/__init__.py | 2 +- xrtpy/visualization_GUI/fov/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py index 1c30d3612..b4df3d814 100644 --- a/xrtpy/visualization_GUI/__init__.py +++ b/xrtpy/visualization_GUI/__init__.py @@ -1,3 +1,3 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader # as metadata_downloader __all__ = ["metadata_downloader"] diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py index 1c30d3612..6b0f0ea4e 100644 --- a/xrtpy/visualization_GUI/fov/__init__.py +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -1,3 +1,3 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader as metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader # #as metadata_downloader __all__ = ["metadata_downloader"] From f67bcb38acfe3694c98e79f11ff8a4d9ce611677 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:38:53 -0400 Subject: [PATCH 17/29] toml file fix --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index cfbfc8988..83a89cf2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,11 +67,11 @@ optional-dependencies.docs = [ "sunpy[map,net]>=5", ] optional-dependencies.tests = [ + "beautifulsoup4", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", "pytest-xdist>=3.6.1", - "beautifulsoup4", ] urls.Changelog = "https://xrtpy.readthedocs.io/en/stable/changelog/index.html" urls.Documentation = "https://xrtpy.readthedocs.io" From a3d7d90b715df1367917edffb92c03e98da6260c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:40:52 +0000 Subject: [PATCH 18/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../fov/metadata_downloader.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/xrtpy/visualization_GUI/fov/metadata_downloader.py b/xrtpy/visualization_GUI/fov/metadata_downloader.py index afe70b19d..4c69200a1 100644 --- a/xrtpy/visualization_GUI/fov/metadata_downloader.py +++ b/xrtpy/visualization_GUI/fov/metadata_downloader.py @@ -30,10 +30,10 @@ def fetch_metadata(xrt_downloaded_files, fast_bool=True): else: print("Slow Metadata (Level 1)") hdul = _download_metadata_slow(xrt_downloaded_files) - #hlis = [] - #for i in range(len(xrt_downloaded_files[0])): + # hlis = [] + # for i in range(len(xrt_downloaded_files[0])): # hlis.append(hdul[i + 2].header) - hlis = [hdul[i+2].header for i in range(len(xrt_downloaded_files[0]))] + hlis = [hdul[i + 2].header for i in range(len(xrt_downloaded_files[0]))] return hlis @@ -53,9 +53,9 @@ def _download_metadata_slow(xrt_downloaded_files): """ url_lis = xrt_downloaded_files[0][:]["fileid"] - #url_str_lis = [] + # url_str_lis = [] - #for i in range(len(url_lis)): + # for i in range(len(url_lis)): # url_str_lis.append(url_lis[i]) url_str_lis = list(url_lis) primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) @@ -122,7 +122,7 @@ def _get_html_str(): list of strings for daily xrtcat .geny files """ url_start = "https://sot.lmsal.com/data/sot/metadata/sswdb/hinode/xrt/xrt_genxcat/" - with urllib.request.urlopen(url_start) as response: # noqa : S310 + with urllib.request.urlopen(url_start) as response: # noqa : S310 html = response.read() html_str = html.decode("utf-8") return html_str @@ -221,7 +221,7 @@ def _get_metafile(geny_lis): data_dict_lis = [] for i in range(ngeny): gen_fn = geny_lis[i] - f, h = urllib.request.urlretrieve(url_start + gen_fn) # noqa : S310 + f, h = urllib.request.urlretrieve(url_start + gen_fn) # noqa : S310 data2 = readsav(f)["p0"] data_dict2 = {k: data2[k] for k in data2.dtype.names} data_dict_lis.append(data_dict2) @@ -251,9 +251,9 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): for i in range(n_dict): data_dict = data_dict_lis[i] date_obs_cat = data_dict["DATE_OBS"] - #cat_len = len(date_obs_cat) - #cat_str = [] - #for cat_bin in date_obs_cat: + # cat_len = len(date_obs_cat) + # cat_str = [] + # for cat_bin in date_obs_cat: # cat_str.append(cat_bin.decode("ascii")) cat_str = [cat_bin.decode("ascii") for cat_bin in date_obs_cat] cat_time = Time(np.asarray(cat_str), format="isot", scale="utc") @@ -304,6 +304,6 @@ def _meta_to_dict(data_dict, di): for dki in dkeys: try: hdict[dki] = data_dict[dki][di].decode("ascii") - except IndexError: # noqa : PERF203 + except IndexError: # noqa : PERF203 hdict[dki] = data_dict[dki][di] return hdict From b21abfac1982579bb18c3685592381e2130e17ad Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:44:00 -0400 Subject: [PATCH 19/29] more little changes --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 83a89cf2a..bf6640386 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,6 +68,7 @@ optional-dependencies.docs = [ ] optional-dependencies.tests = [ "beautifulsoup4", + "lxml", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From 5a083ce713fbd741b1cb76600263a749b68cf631 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:47:29 -0400 Subject: [PATCH 20/29] more little changes v2 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index bf6640386..bec1d83e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,6 +69,7 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "lxml", + "zeep", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From 08d915022ce19b640cf8df0abad0f8c74a592277 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:48:49 -0400 Subject: [PATCH 21/29] more little changes v3 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bec1d83e1..cc98da2ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,11 +69,11 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "lxml", - "zeep", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", "pytest-xdist>=3.6.1", + "zeep", ] urls.Changelog = "https://xrtpy.readthedocs.io/en/stable/changelog/index.html" urls.Documentation = "https://xrtpy.readthedocs.io" From 3466c7d5f103c6dad035bc2e66c08c024211191e Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:50:20 -0400 Subject: [PATCH 22/29] more little changes v4 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index cc98da2ad..4099b1f7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,6 +69,7 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "lxml", + "drms", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From 4d286f448167b1cd2d2b153a4e1809401542c3eb Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:52:15 -0400 Subject: [PATCH 23/29] more little changes v5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4099b1f7d..a893a36c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,8 +68,8 @@ optional-dependencies.docs = [ ] optional-dependencies.tests = [ "beautifulsoup4", - "lxml", "drms", + "lxml", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From a441351c9a9ce4f71e5250e53955e3e0f8e5b3db Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:54:52 -0400 Subject: [PATCH 24/29] more small changes --- pyproject.toml | 2 +- xrtpy/visualization_GUI/__init__.py | 2 +- xrtpy/visualization_GUI/fov/__init__.py | 2 +- xrtpy/visualization_GUI/fov/metadata_downloader.py | 8 -------- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a893a36c6..63f949eaf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "drms", - "lxml", + "lxml>=4.9", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", diff --git a/xrtpy/visualization_GUI/__init__.py b/xrtpy/visualization_GUI/__init__.py index b4df3d814..2f610f089 100644 --- a/xrtpy/visualization_GUI/__init__.py +++ b/xrtpy/visualization_GUI/__init__.py @@ -1,3 +1,3 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader # as metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader __all__ = ["metadata_downloader"] diff --git a/xrtpy/visualization_GUI/fov/__init__.py b/xrtpy/visualization_GUI/fov/__init__.py index 6b0f0ea4e..2f610f089 100644 --- a/xrtpy/visualization_GUI/fov/__init__.py +++ b/xrtpy/visualization_GUI/fov/__init__.py @@ -1,3 +1,3 @@ -from xrtpy.visualization_GUI.fov import metadata_downloader # #as metadata_downloader +from xrtpy.visualization_GUI.fov import metadata_downloader __all__ = ["metadata_downloader"] diff --git a/xrtpy/visualization_GUI/fov/metadata_downloader.py b/xrtpy/visualization_GUI/fov/metadata_downloader.py index 4c69200a1..bdf9d6b73 100644 --- a/xrtpy/visualization_GUI/fov/metadata_downloader.py +++ b/xrtpy/visualization_GUI/fov/metadata_downloader.py @@ -53,10 +53,6 @@ def _download_metadata_slow(xrt_downloaded_files): """ url_lis = xrt_downloaded_files[0][:]["fileid"] - # url_str_lis = [] - - # for i in range(len(url_lis)): - # url_str_lis.append(url_lis[i]) url_str_lis = list(url_lis) primary_hdu = fits.PrimaryHDU(data=np.ones((3, 3))) c1 = fits.Column(name="URL", array=url_str_lis, format="100A") @@ -251,10 +247,6 @@ def _match_vso_to_cat(data_dict_lis, cat_fi, xrt_download): for i in range(n_dict): data_dict = data_dict_lis[i] date_obs_cat = data_dict["DATE_OBS"] - # cat_len = len(date_obs_cat) - # cat_str = [] - # for cat_bin in date_obs_cat: - # cat_str.append(cat_bin.decode("ascii")) cat_str = [cat_bin.decode("ascii") for cat_bin in date_obs_cat] cat_time = Time(np.asarray(cat_str), format="isot", scale="utc") cat_time_lis.append(cat_time) From e1f9146264aa1da6be6c7fb578b2cfa53190e5dc Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:58:10 -0400 Subject: [PATCH 25/29] more small changes v2 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 63f949eaf..58792d7b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "drms", - "lxml>=4.9", + "lxml>=4.9,<5", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From b101d4830f0c9e99ece2933c03f84ecb757afa8b Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 13:59:13 -0400 Subject: [PATCH 26/29] more small changes v3 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 58792d7b1..bf0b39308 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ optional-dependencies.docs = [ optional-dependencies.tests = [ "beautifulsoup4", "drms", - "lxml>=4.9,<5", + "lxml>=4.9.3,<5", "pytest>=8.3.1", "pytest-astropy>=0.11", "pytest-cov>=6", From 5e2e6713ee38fec45f04f704400c8a135a0a6110 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 14:07:03 -0400 Subject: [PATCH 27/29] more small changes v4 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bf0b39308..aa287b016 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,7 @@ optional-dependencies.docs = [ "sunpy[map,net]>=5", ] optional-dependencies.tests = [ - "beautifulsoup4", + "beautifulsoup4>4.8.1", "drms", "lxml>=4.9.3,<5", "pytest>=8.3.1", From e34abc1c3a7be2fc02cf6b72be8d623a3fe9de03 Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 14:12:28 -0400 Subject: [PATCH 28/29] more small changes v5 --- xrtpy/visualization_GUI/fov/tests/test_fov.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xrtpy/visualization_GUI/fov/tests/test_fov.py b/xrtpy/visualization_GUI/fov/tests/test_fov.py index 28e58e04b..b217b99c1 100644 --- a/xrtpy/visualization_GUI/fov/tests/test_fov.py +++ b/xrtpy/visualization_GUI/fov/tests/test_fov.py @@ -1,9 +1,14 @@ +import sys + import pytest from sunpy.net import Fido from sunpy.net import attrs as a from xrtpy.visualization_GUI.fov import metadata_downloader as xfetch +pytestmark = pytest.mark.skipif(sys.version_info >= (3, 13), reason="zeep/lxml is not installable on Python 3.13 due to missing prebuilt wheels" +) + time_range = a.Time("2011-06-07 06:00:00", "2011-06-07 07:30:54") instrument = a.Instrument("xrt") From 123edb8c37e85ac062a3c71f366c5b31ae48baed Mon Sep 17 00:00:00 2001 From: Nicolas Trueba Date: Tue, 8 Jul 2025 14:15:31 -0400 Subject: [PATCH 29/29] more small changes v5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index aa287b016..ce18f4699 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,7 +74,7 @@ optional-dependencies.tests = [ "pytest-astropy>=0.11", "pytest-cov>=6", "pytest-xdist>=3.6.1", - "zeep", + "zeep>=4.1.0", ] urls.Changelog = "https://xrtpy.readthedocs.io/en/stable/changelog/index.html" urls.Documentation = "https://xrtpy.readthedocs.io"