From 014370b913ede5fb64ec917217f40641ac841e13 Mon Sep 17 00:00:00 2001
From: San <99511815+sanowl@users.noreply.github.com>
Date: Sun, 16 Jun 2024 13:45:57 +0300
Subject: [PATCH 1/4] "Refactored DIFOutputJSON for improved readability and
error handling"
---
lib/JsonDIF.py | 480 +++++++++----------------------------------------
1 file changed, 81 insertions(+), 399 deletions(-)
diff --git a/lib/JsonDIF.py b/lib/JsonDIF.py
index 5c0d033d..a4281751 100755
--- a/lib/JsonDIF.py
+++ b/lib/JsonDIF.py
@@ -1,407 +1,89 @@
-'''This file is for get JSON output for Collection DIF data'''
+"""
+This file is for generating JSON output for Collection DIF data.
+"""
-class DIFOutputJSON():
- def __init__(self,checkerRules,wrap):
- self.checkerRules = checkerRules
+class DIFOutputJSON:
+ def __init__(self, checker_rules, wrap):
+ self.checker_rules = checker_rules
self.wrap = wrap
- def checkAll(self, metadata):
+ def check_all(self, metadata):
result = {}
- #=======================================
- str = 'Entry_Title'
- try:
- result[str] = self.checkerRules.check_Entry_Title(metadata)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Citation.Dataset_Release_Date'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Dataset_Citation_Dataset_Release_Date,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Citation.Persistent_Identifier.Type'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Dataset_Citation_Persistent_Identifier_Type,'Dataset_Citation.Persistent_Identifier.Type')
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Citation.Persistent_Identifier.Identifier'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Dataset_Citation_Persistent_Identifier_Identifier,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Citation.Online_Resource'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Dataset_Citation_Online_Resource,'Dataset_Citation.Online_Resource')
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Role'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Personnel_Role_item,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Person.Email'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Personnel_Contact_Person_Email_item, str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Person.Phone.Number'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Personnel_Contact_Person_phone_item, str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Person.Phone.Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Personnel_Contact_Person_Phone_Type_item,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Group.Email'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Personnel_Contact_Group_Email_item,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Group.Phone.Number'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Personnel_Contact_Group_Phone_item,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Personnel.Contact_Group.Phone.Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Personnel_Contact_Group_Phone_Type_item,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Category'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.science_Keywords_item_Category,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Topic'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_science_Keywords_item_topic,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Term'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_science_Keywords_item_Term,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Variable_Level_1'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_science_Keywords_item_Variable_1,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Variable_Level_2'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_science_Keywords_item_Variable_2,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Science_Keywords.Variable_Level_3'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_science_Keywords_item_Variable_3,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'ISO_Topic_Category'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_ISO_Topic_Category,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Type'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Platform_item_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Short_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Short_Name,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Long_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Long_Name,str)
- except:
- result[str] = 'np'
+ checks = [
+ ('Entry_Title', self.checker_rules.check_Entry_Title),
+ ('Dataset_Citation.Dataset_Release_Date', self.checker_rules.check_Dataset_Citation_Dataset_Release_Date),
+ ('Dataset_Citation.Persistent_Identifier.Type', self.checker_rules.check_Dataset_Citation_Persistent_Identifier_Type),
+ ('Dataset_Citation.Persistent_Identifier.Identifier', self.checker_rules.check_Dataset_Citation_Persistent_Identifier_Identifier),
+ ('Dataset_Citation.Online_Resource', self.checker_rules.check_Dataset_Citation_Online_Resource),
+ ('Personnel.Role', self.checker_rules.check_Personnel_Role_item),
+ ('Personnel.Contact_Person.Email', self.checker_rules.check_Personnel_Contact_Person_Email_item),
+ ('Personnel.Contact_Person.Phone.Number', self.checker_rules.check_Personnel_Contact_Person_phone_item),
+ ('Personnel.Contact_Person.Phone.Type', self.checker_rules.check_Personnel_Contact_Person_Phone_Type_item),
+ ('Personnel.Contact_Group.Email', self.checker_rules.check_Personnel_Contact_Group_Email_item),
+ ('Personnel.Contact_Group.Phone.Number', self.checker_rules.check_Personnel_Contact_Group_Phone_item),
+ ('Personnel.Contact_Group.Phone.Type', self.checker_rules.check_Personnel_Contact_Group_Phone_Type_item),
+ ('Science_Keywords.Category', self.checker_rules.science_Keywords_item_Category),
+ ('Science_Keywords.Topic', self.checker_rules.check_science_Keywords_item_topic),
+ ('Science_Keywords.Term', self.checker_rules.check_science_Keywords_item_Term),
+ ('Science_Keywords.Variable_Level_1', self.checker_rules.check_science_Keywords_item_Variable_1),
+ ('Science_Keywords.Variable_Level_2', self.checker_rules.check_science_Keywords_item_Variable_2),
+ ('Science_Keywords.Variable_Level_3', self.checker_rules.check_science_Keywords_item_Variable_3),
+ ('ISO_Topic_Category', self.checker_rules.check_ISO_Topic_Category),
+ ('Platform.Type', self.checker_rules.check_Platform_item_Type),
+ ('Platform.Short_Name', self.checker_rules.check_Platform_item_Short_Name),
+ ('Platform.Long_Name', self.checker_rules.check_Platform_item_Long_Name),
+ ('Platform.Instrument.Short_Name', self.checker_rules.check_Platform_item_Instrument_item_shortname),
+ ('Platform.Instrument.Long_Name', self.checker_rules.check_Platform_item_Instrument_item_longname),
+ ('Platform.Instrument', self.checker_rules.check_Platform_item_Instrument_sensor_shortname),
+ ('Platform.Instrument', self.checker_rules.check_Platform_item_Instrument_sensor_longname),
+ ('Temporal_Coverage.Range_DateTime.Beginning_Date_Time', self.checker_rules.check_Temporal_Coverage_item_Begin_Date_Time),
+ ('Temporal_Coverage.Range_DateTime.Ending_Date_Time', self.checker_rules.check_Temporal_Coverage_item_end_Date_Time),
+ ('Dataset_Progress', self.checker_rules.check_dataset_progress),
+ ('Spatial_Coverage.Granule_Spatial_Representation', self.checker_rules.check_Spatial_Coverage_Granule_Spatial_Representation),
+ ('Spatial_Coverage.Geometry.Coordinate_System', self.checker_rules.check_Spatial_Coverage_Geometry_Coordinate_System),
+ ('Spatial_Coverage.Geometry.Bounding_Rectangle', self.checker_rules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Southernmost_Latitude),
+ ('Spatial_Coverage.Geometry.Bounding_Rectangle', self.checker_rules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Northernmost_Latitude),
+ ('Spatial_Coverage.Geometry.Bounding_Rectangle', self.checker_rules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Westernmost_Longitude),
+ ('Spatial_Coverage.Geometry.Bounding_Rectangle', self.checker_rules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Easternmost_Longitude),
+ ('Location.Location_Category', self.checker_rules.check_Location_Location_Category),
+ ('Location.Location_Type', self.checker_rules.check_Location_Location_Type),
+ ('Location.Location_Subregion1', self.checker_rules.check_Location_Subregion1),
+ ('Location.Location_Subregion2', self.checker_rules.check_Location_Subregion2),
+ ('Location.Location_Subregion3', self.checker_rules.check_Location_Subregion3),
+ ('Data_Resolution.Horizontal_Resolution_Range', self.checker_rules.check_Horizontal_Resolution_Range),
+ ('Data_Resolution.Vertical_Resolution_Range', self.checker_rules.check_Vertical_Resolution_Range),
+ ('Data_Resolution.Temporal_Resolution_Range', self.checker_rules.check_Temporal_Resolution_Range),
+ ('Project.Short_Name', self.checker_rules.check_Project_Short_Name),
+ ('Project.Long_Name', self.checker_rules.check_Project_Long_Name),
+ ('Quality', self.checker_rules.check_Quality),
+ ('Dataset_Language', self.checker_rules.check_Dataset_Language),
+ ('Organization.Organization_Type', self.checker_rules.check_Organization_Organization_Type),
+ ('Organization.Organization_Name.Short_Name', self.checker_rules.check_Organization_Name_Short_Name),
+ ('Organization.Organization_Name.Long_Name', self.checker_rules.check_Organization_Name_Long_Name),
+ ('Organization.Personnel.Contact_Person.Phone.Type', self.checker_rules.check_Organization_Personnel_Contact_Person_Phone_Type),
+ ('Organization.Personnel.Contact_Group.Phone.Type', self.checker_rules.check_Organization_Personnel_Contact_Person_Phone_Type),
+ ('Distribution.Distribution_Format', self.checker_rules.check_Distribution_Distribution_Format),
+ ('Multimedia_Sample.URL', self.checker_rules.check_Multimedia_Sample_URL),
+ ('Summary.Abstract', self.checker_rules.check_summary_abstract),
+ ('Related_URL.URL_Content_Type.Type', self.checker_rules.check_Related_URL_item_Content_Type),
+ ('Related_URL.URL_Content_Type.Subtype', self.checker_rules.check_Related_URL_Content_Type_SubType),
+ ('Related_URL.Description', self.checker_rules.check_Related_URL_Description_Item),
+ ('Related_URL', self.checker_rules.check_Related_URL_Mime_Type),
+ ('Product_Level_Id', self.checker_rules.check_Product_Level_ID),
+ ('Collection_Data_Type', self.checker_rules.check_Collection_Data_Type),
+ ('Metadata_Dates.Metadata_Creation', self.checker_rules.check_Metadata_Dates_Creation),
+ ('Metadata_Dates.Metadata_Last_Revision', self.checker_rules.check_Metadata_last_revision),
+ ('Metadata_Dates.Data_Creation', self.checker_rules.check_Metadata_data_creation),
+ ('Metadata_Dates.Data_Last_Revision', self.checker_rules.check_Metadata_data_latest_revision),
+ ]
- # ======================================
- str = 'Platform.Instrument.Short_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Instrument_item_shortname,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Instrument.Long_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Instrument_item_longname,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Instrument'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Instrument_sensor_shortname,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Platform.Instrument'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Platform_item_Instrument_sensor_longname,str)
- except:
- result[str] = 'np'
+ for key, check_function in checks:
+ result[key] = self.safe_wrap(metadata, check_function, key)
- # ======================================
- str = 'Temporal_Coverage.Range_DateTime.Beginning_Date_Time'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Temporal_Coverage_item_Begin_Date_Time,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Temporal_Coverage.Range_DateTime.Ending_Date_Time'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Temporal_Coverage_item_end_Date_Time,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Progress'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_dataset_progress,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Granule_Spatial_Representation'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Granule_Spatial_Representation,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Geometry.Coordinate_System'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Geometry_Coordinate_System,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Geometry.Bounding_Rectangle'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Southernmost_Latitude,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Geometry.Bounding_Rectangle'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Northernmost_Latitude,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Geometry.Bounding_Rectangle'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Westernmost_Longitude,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Spatial_Coverage.Geometry.Bounding_Rectangle'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Spatial_Coverage_Geometry_Bounding_Rectangle_Easternmost_Longitude,str)
- except:
- result[str] = 'np'
+ return result
- # ======================================
- str = 'Location.Location_Category'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Location_Location_Category,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Location.Location_Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Location_Location_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Location.Location_Subregion1'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Location_Subregion1,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Location.Location_Subregion2'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Location_Subregion2,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Location.Location_Subregion3'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Location_Subregion3, str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Data_Resolution.Horizontal_Resolution_Range'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Horizontal_Resolution_Range,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Data_Resolution.Vertical_Resolution_Range'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Vertical_Resolution_Range,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Data_Resolution.Temporal_Resolution_Range'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Temporal_Resolution_Range,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Project.Short_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Project_Short_Name,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Project.Long_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Project_Long_Name,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Quality'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Quality,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Dataset_Language'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Dataset_Language,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Organization.Organization_Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Organization_Organization_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Organization.Organization_Name.Short_Name'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Organization_Name_Short_Name,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Organization.Organization_Name.Long_Name'
+ def safe_wrap(self, metadata, check_function, key):
try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Organization_Name_Long_Name,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Organization.Personnel.Contact_Person.Phone.Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Organization_Personnel_Contact_Person_Phone_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Organization.Personnel.Contact_Group.Phone.Type'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Organization_Personnel_Contact_Person_Phone_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Distribution.Distribution_Format'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Distribution_Distribution_Format,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Multimedia_Sample.URL'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Multimedia_Sample_URL,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Summary.Abstract'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_summary_abstract,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Related_URL.URL_Content_Type.Type'
- try:
- temp = self.wrap(metadata,self.checkerRules.check_Related_URL_item_Content_Type,str)
- result[str] = self.checkerRules.check_Related_URL_Content_Type(temp)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Related_URL.URL_Content_Type.Subtype'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Related_URL_Content_Type_SubType,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Related_URL.Description'
- try:
- temp = self.wrap(metadata,self.checkerRules.check_Related_URL_Description_Item,str)
- result[str] += self.checkerRules.check_Related_URL_Description(temp)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Related_URL'
- try:
- temp = self.wrap(metadata,self.checkerRules.check_Related_URL_Mime_Type,str)
- result[str] = self.checkerRules.convertMimeType(temp)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Product_Level_Id'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Product_Level_ID,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Collection_Data_Type'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Collection_Data_Type,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Metadata_Dates.Metadata_Creation'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Metadata_Dates_Creation,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Metadata_Dates.Metadata_Last_Revision'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Metadata_last_revision,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Metadata_Dates.Data_Creation'
- try:
- result[str] = self.wrap(metadata, self.checkerRules.check_Metadata_data_creation,str)
- except:
- result[str] = 'np'
- # ======================================
- str = 'Metadata_Dates.Data_Last_Revision'
- try:
- result[str] = self.wrap(metadata,self.checkerRules.check_Metadata_data_latest_revision,str)
- except:
- result[str] = 'np'
-
- return result
\ No newline at end of file
+ return self.wrap(metadata, check_function, key)
+ except Exception:
+ return 'np'
From b3ebdb6be2a57c77ae218198362bb218d45072c1 Mon Sep 17 00:00:00 2001
From: San <99511815+sanowl@users.noreply.github.com>
Date: Sun, 16 Jun 2024 14:15:26 +0300
Subject: [PATCH 2/4] Refactored GranuleOutputJSON for improved readability and
error handling
---
lib/JsonGranule.py | 354 +++++++++++++++------------------------------
1 file changed, 117 insertions(+), 237 deletions(-)
diff --git a/lib/JsonGranule.py b/lib/JsonGranule.py
index 57053a83..90584b1e 100755
--- a/lib/JsonGranule.py
+++ b/lib/JsonGranule.py
@@ -1,280 +1,160 @@
-'''This file is for get CSV output for Collection DIF data'''
+"""
+This file is for generating CSV output for Collection DIF data.
+"""
-class GranuleOutputJSON():
- def __init__(self,checkerRules,fetchAllInstrs):
- self.checkerRules = checkerRules
- self.fetchAllInstrs = fetchAllInstrs
+class GranuleOutputJSON:
+ def __init__(self, checker_rules, fetch_all_instrs):
+ self.checker_rules = checker_rules
+ self.fetch_all_instrs = fetch_all_instrs
- def checkAll(self, metadata):
+ def check_all(self, metadata):
result = {}
- # ================
- str = 'InsertTime'
- try:
- result[str] = self.checkerRules.checkInsertTime(metadata[str])
- except:
- result[str] = "np"
- # ================
- str = 'LastUpdate'
- try:
- result[str] = self.checkerRules.checkLastUpdate(metadata['LastUpdate'],metadata['DataGranule']['ProductionDateTime'])
- except:
- result[str] = "np"
- # ================
- str = 'DeleteTime'
- try:
- result[str] = self.checkerRules.checkDeleteTime(metadata['DeleteTime'],
- metadata['DataGranule']['ProductionDateTime'])
- except:
- result[str] = "np"
- # ================
- str = 'Collection/ShortName'
- try:
- result[str] = self.checkerRules.checkCollectionShortName(metadata['Collection']['ShortName'])
- except KeyError:
- result[str] = "np - Ensure the DataSetId field is provided."
- except:
- result[str] = "np"
- # =================
- str = 'Collection/VersionId'
- try:
- result[str] = self.checkerRules.checkCollectionVersionID(metadata['Collection']['VersionId'])
- except KeyError:
- result[str] = "np - Ensure the DataSetId field is provided."
- except:
- result[str] = "np"
- # ================
- str = 'Collection/DataSetId'
- try:
- result[str] = self.checkerRules.checkDataSetId(metadata['Collection']['DataSetId'])
- except KeyError:
- result[str] = "np - Ensure that the ShortName and VersionId fields are provided."
- except:
- result[str] = "np"
- # ================
- str = 'DataGranule/SizeMBDataGranule'
- try:
- result[str] = self.checkerRules.checkSizeMBDataGranule(
- metadata['DataGranule']['SizeMBDataGranule'])
- except KeyError:
- result[str] = "Granule file size not provided. Recommend providing a value for this field in the metadata"
- except:
- result[str] = "np"
- # ================
- str = 'DataGranule/DayNightFlag'
- try:
- result[str] = self.checkerRules.checkDayNightFlag(metadata['DataGranule']['DayNightFlag'])
- except:
- result[str] = "np"
- # ================
- str = 'DataGranule/ProductionDateTime'
- try:
- result[str] = self.checkerRules.checkProductionDateTime(metadata['DataGranule']['ProductionDateTime'],metadata['InsertTime'])
- except:
- result[str] = "np"
- # ================
- str = 'Temporal/RangeDateTime/SingleDateTime'
- try:
- result[str] = self.checkerRules.checkTemporalSingleTime(metadata['Temporal']['RangeDateTime']['SingleDateTime'])
- except:
- result[str] = "np"
- # ================
- str = 'Temporal/RangeDateTime/BeginningDateTime'
- try:
- result[str] = self.checkerRules.checkTemporalBeginningTime(metadata['Temporal']['RangeDateTime']['BeginningDateTime'])
- except:
- result[str] = "np"
- # ================
- str = 'Temporal/RangeDateTime/EndingDateTime'
- try:
- result[str] = self.checkerRules.checkTemporalEndingTime(metadata['Temporal']['RangeDateTime']['EndingDateTime'])
- except KeyError:
- result[str] = "np"
- # ================
- str = 'Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle'
- try:
- result[str] = self.checkerRules.checkBoundingRectangle(
- metadata['Spatial']['HorizontalSpatialDomain']['Geometry'][
- 'BoundingRectangle'])
- except:
- result[str] = "np, np, np, np"
- # ================
- str = 'OrbitCalculatedSpatialDomains/OrbitCalculatedSpatialDomain/EquatorCrossingDateTime'
+ checks = [
+ ('InsertTime', self.checker_rules.checkInsertTime),
+ ('LastUpdate', lambda md: self.checker_rules.checkLastUpdate(md['LastUpdate'], md['DataGranule']['ProductionDateTime'])),
+ ('DeleteTime', lambda md: self.checker_rules.checkDeleteTime(md['DeleteTime'], md['DataGranule']['ProductionDateTime'])),
+ ('Collection/ShortName', self.checker_rules.checkCollectionShortName, KeyError, "np - Ensure the DataSetId field is provided."),
+ ('Collection/VersionId', self.checker_rules.checkCollectionVersionID, KeyError, "np - Ensure the DataSetId field is provided."),
+ ('Collection/DataSetId', self.checker_rules.checkDataSetId, KeyError, "np - Ensure that the ShortName and VersionId fields are provided."),
+ ('DataGranule/SizeMBDataGranule', self.checker_rules.checkSizeMBDataGranule, KeyError, "Granule file size not provided. Recommend providing a value for this field in the metadata"),
+ ('DataGranule/DayNightFlag', self.checker_rules.checkDayNightFlag),
+ ('DataGranule/ProductionDateTime', lambda md: self.checker_rules.checkProductionDateTime(md['DataGranule']['ProductionDateTime'], md['InsertTime'])),
+ ('Temporal/RangeDateTime/SingleDateTime', self.checker_rules.checkTemporalSingleTime),
+ ('Temporal/RangeDateTime/BeginningDateTime', self.checker_rules.checkTemporalBeginningTime),
+ ('Temporal/RangeDateTime/EndingDateTime', self.checker_rules.checkTemporalEndingTime, KeyError, "np"),
+ ('Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle', self.checker_rules.checkBoundingRectangle, None, "np, np, np, np"),
+ ('OrbitCalculatedSpatialDomains/OrbitCalculatedSpatialDomain/EquatorCrossingDateTime', self.checker_rules.checkEquatorCrossingTime, TypeError, "np", self.check_equator_crossing_time),
+ ('Platforms/Platform/ShortName', self.checker_rules.checkPlatformShortName, TypeError, "np", self.check_platform_short_name),
+ ('Platforms/Platform/Instruments/Instrument/ShortName', self.check_instruments_short_name),
+ ('Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName', self.check_sensor_short_name),
+ ('Campaigns/', self.check_campaign_short_name),
+ ('OnlineAccessURLs/OnlineAccessURL/URL', self.check_online_access_url, TypeError, "No Online Access URL is provided"),
+ ('OnlineAccessURLs/OnlineAccessURL/URLDescription', self.check_online_access_url_desc, TypeError, "Recommend providing a brief URL description"),
+ ('OnlineResources/OnlineResource/URL', self.check_online_resource_url),
+ ('OnlineResource/OnlineResource/Description', self.check_online_resource_desc),
+ ('OnlineResources/OnlineResource/Type', self.check_online_resource_type),
+ ('Orderable', self.checker_rules.checkOrderable),
+ ('DataFormat', self.checker_rules.checkDataFormat, KeyError, "Recommend providing the data format for the associated granule"),
+ ('Visible', self.checker_rules.checkVisible),
+ ]
+
+ for key, check_function, *exception_handling in checks:
+ result[key] = self.safe_wrap(metadata, key, check_function, *exception_handling)
+
+ return result
+
+ def safe_wrap(self, metadata, key, check_function, specific_exception=None, specific_message=None, alternative_function=None):
+ try:
+ if alternative_function:
+ return alternative_function(metadata, check_function)
+ return check_function(metadata[key])
+ except specific_exception:
+ return specific_message
+ except Exception:
+ return "np"
+
+ def check_equator_crossing_time(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkEquatorCrossingTime(
- metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain'][
- 'EquatorCrossingDateTime'], 1)
+ return check_function(metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain']['EquatorCrossingDateTime'], 1)
except TypeError:
- if metadata['OrbitCalculatedSpatialDomains'] != None and metadata['OrbitCalculatedSpatialDomains'][
- 'OrbitCalculatedSpatialDomain'] != None:
+ if metadata['OrbitCalculatedSpatialDomains'] and metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain']:
length = len(metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain'])
try:
- result[str] = self.checkerRules.checkEquatorCrossingTime(
- metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain'][
- 'EquatorCrossingDateTime'], length)
+ return check_function(metadata['OrbitCalculatedSpatialDomains']['OrbitCalculatedSpatialDomain']['EquatorCrossingDateTime'], length)
except:
- result[str]= "np"
- else:
- result[str] = "np"
- except:
- result[str]= "np"
- # ================
- str = 'Platforms/Platform/ShortName'
+ return "np"
+ return "np"
+
+ def check_platform_short_name(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkPlatformShortName(metadata['Platforms']['Platform']['ShortName'],1)
+ return check_function(metadata['Platforms']['Platform']['ShortName'], 1)
except TypeError:
- if metadata['Platforms'] != None and metadata['Platforms']['Platform'] != None:
+ if metadata['Platforms'] and metadata['Platforms']['Platform']:
length = len(metadata['Platforms']['Platform'])
- result[str] = self.checkerRules.checkPlatformShortName(metadata['Platforms']['Platform'], length)
- else:
- result[str] = "np"
- except:
- result[str] = "np"
- # ================
- # try:
- # metadata['Platforms']['Platform']['ShortName']
- # platform_num = 1
- # result += self.checkInstrShortName(metadata['Platforms']['Platform'], platform_num) + ', , , '
- # except TypeError:
- # if metadata['Platforms'] != None and metadata['Platforms']['Platform'] != None:
- # platform_num = len(metadata['Platforms']['Platform'])
- # result += self.checkInstrShortName(metadata['Platforms']['Platform'], platform_num) + ', , , '
- # else:
- # result += "np" + ', , , '
- # except KeyError:
- # result += "np" + ', , , '
- # ================
- str = 'Platforms/Platform/Instruments/Instrument/ShortName'
- instruments = self.fetchAllInstrs
- sensorShortResult = ''
+ return check_function(metadata['Platforms']['Platform'], length)
+ return "np"
+
+ def check_instruments_short_name(self, metadata, check_function):
+ sensor_short_result = ''
try:
metadata['Platforms']['Platform']['ShortName']
platform_num = 1
- ret, sensorShortResult = self.checkerRules.checkInstrShortName(metadata['Platforms']['Platform'],
- platform_num, instruments)
- result[str] = ret
+ ret, sensor_short_result = check_function(metadata['Platforms']['Platform'], platform_num, self.fetch_all_instrs)
+ return ret
except TypeError:
- if metadata['Platforms'] != None and metadata['Platforms']['Platform'] != None:
+ if metadata['Platforms'] and metadata['Platforms']['Platform']:
platform_num = len(metadata['Platforms']['Platform'])
- ret, sensorShortResult = self.checkerRules.checkInstrShortName(metadata['Platforms']['Platform'],
- platform_num, instruments)
- result[str] = ret
- else:
- result[str] = 'np'
- except KeyError:
- result[str] = 'np'
- # ================
- str = 'Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName'
- if len(sensorShortResult) == 0:
- result[str] = 'np'
- else:
- result[str] = sensorShortResult
- # ================
- str = 'Campaigns/'
+ ret, sensor_short_result = check_function(metadata['Platforms']['Platform'], platform_num, self.fetch_all_instrs)
+ return ret
+ return 'np'
+
+ def check_sensor_short_name(self, metadata, check_function):
+ sensor_short_result = self.check_instruments_short_name(metadata, check_function)
+ if len(sensor_short_result) == 0:
+ return 'np'
+ return sensor_short_result
+
+ def check_campaign_short_name(self, metadata, check_function):
try:
campaign_num = 1
- result[str] = self.checkerRules.checkCampaignShortName(metadata['Campaigns']['Campaign']['ShortName'],campaign_num)
+ return check_function(metadata['Campaigns']['Campaign']['ShortName'], campaign_num)
except TypeError:
- if metadata['Campaigns'] != None and metadata['Campaigns']['Campaign'] != None:
+ if metadata['Campaigns'] and metadata['Campaigns']['Campaign']:
campaign_num = len(metadata['Campaigns'])
- result[str] = self.checkerRules.checkCampaignShortName(metadata['Campaigns'],campaign_num)
+ return check_function(metadata['Campaigns'], campaign_num)
except:
- result[str] = "np"
- # ================
- str = 'OnlineAccessURLs/OnlineAccessURL/URL'
+ return "np"
+
+ def check_online_access_url(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkOnlineAccessURL(metadata['OnlineAccessURLs']['OnlineAccessURL']['URL'],1)
+ return check_function(metadata['OnlineAccessURLs']['OnlineAccessURL']['URL'], 1)
except TypeError:
- if metadata['OnlineAccessURLs'] != None:
+ if metadata['OnlineAccessURLs']:
length = len(metadata['OnlineAccessURLs']['OnlineAccessURL'])
- result[str] = self.checkerRules.checkOnlineAccessURL(metadata['OnlineAccessURLs']['OnlineAccessURL'],
- length)
- else:
- result[str] = "No Online Access URL is provided"
+ return check_function(metadata['OnlineAccessURLs']['OnlineAccessURL'], length)
except KeyError:
- result[str] = "No Online Access URL is provided"
+ return "No Online Access URL is provided"
except:
- result[str] = "np"
- # ================
- str = 'OnlineAccessURLs/OnlineAccessURL/URLDescription'
+ return "np"
+
+ def check_online_access_url_desc(self, metadata, check_function):
try:
- result[str]= self.checkerRules.checkOnlineAccessURLDesc(
- metadata['OnlineAccessURLs']['OnlineAccessURL']['URLDescription'], 1)
+ return check_function(metadata['OnlineAccessURLs']['OnlineAccessURL']['URLDescription'], 1)
except TypeError:
- if metadata['OnlineAccessURLs'] != None:
+ if metadata['OnlineAccessURLs']:
length = len(metadata['OnlineAccessURLs']['OnlineAccessURL'])
- result[str] = self.checkerRules.checkOnlineAccessURLDesc(metadata['OnlineAccessURLs']['OnlineAccessURL'], length)
- else:
- result[str] = "Recommend providing a brief URL description"
+ return check_function(metadata['OnlineAccessURLs']['OnlineAccessURL'], length)
except KeyError:
- result[str] = "Recommend providing a brief URL description"
+ return "Recommend providing a brief URL description"
except:
- result[str] = "np"
- # ================
- str = 'OnlineResources/OnlineResource/URL'
- OnlineResourceURL_Cnt = 0
+ return "np"
+
+ def check_online_resource_url(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkOnlineResourceURL(metadata['OnlineResources']['OnlineResource']['URL'],
- 1)
- OnlineResourceURL_Cnt = 1
+ return check_function(metadata['OnlineResources']['OnlineResource']['URL'], 1)
except TypeError:
- if metadata['OnlineResources'] != None:
+ if metadata['OnlineResources']:
length = len(metadata['OnlineResources']['OnlineResource'])
- OnlineResourceURL_Cnt = length
- result[str] = self.checkerRules.checkOnlineResourceURL(metadata['OnlineResources']['OnlineResource'],
- length)
- else:
- result[str] = "np"
+ return check_function(metadata['OnlineResources']['OnlineResource'], length)
except:
- result[str] = "np"
- # ================
- str = 'OnlineResource/OnlineResource/Description'
+ return "np"
+
+ def check_online_resource_desc(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkOnlineResourceDesc(
- metadata['OnlineResources']['OnlineResource']['Description'], 1)
+ return check_function(metadata['OnlineResources']['OnlineResource']['Description'], 1)
except TypeError:
- if metadata['OnlineResources'] != None:
+ if metadata['OnlineResources']:
length = len(metadata['OnlineResources']['OnlineResource'])
- if length < OnlineResourceURL_Cnt:
- result[str] = "Recommend providing descriptions for all Online Resource URLs."
- else:
- result[str] = self.checkerRules.checkOnlineResourceDesc(
- metadata['OnlineResources']['OnlineResource'], length)
- else:
- result[str] = "np"
+ return check_function(metadata['OnlineResources']['OnlineResource'], length)
except:
- result[str] = "np"
- # ================
- str = 'OnlineResources/OnlineResource/Type'
+ return "np"
+
+ def check_online_resource_type(self, metadata, check_function):
try:
- result[str] = self.checkerRules.checkOnlineResourceType(
- metadata['OnlineResources']['OnlineResource']['Type'], 1)
+ return check_function(metadata['OnlineResources']['OnlineResource']['Type'], 1)
except TypeError:
- if metadata['OnlineResources'] != None:
+ if metadata['OnlineResources']:
length = len(metadata['OnlineResources']['OnlineResource'])
- result[str] = self.checkerRules.checkOnlineResourceType(metadata['OnlineResources']['OnlineResource'],
- length)
- else:
- result[str] = "np"
- except:
- result[str] = "np"
- # ================
- str = "Orderable"
- try:
- result[str] = self.checkerRules.checkOrderable(metadata["Orderable"])
+ return check_function(metadata['OnlineResources']['OnlineResource'], length)
except:
- result[str] = "np"
- # ================
- str = 'DataFormat'
- try:
- result[str] = self.checkerRules.checkDataFormat(metadata["DataFormat"])
- except KeyError:
- result[str] = "Recommend providing the data format for the associated granule"
- except:
- result[str] = "np"
- # ================
- str = 'Visible'
- try:
- result[str] = self.checkerRules.checkVisible(metadata["Visible"])
- except:
- result[str] = "np"
- return result
+ return "np"
From 309f57e83ca835781dd0655478aea2c5fee60c68 Mon Sep 17 00:00:00 2001
From: San <99511815+sanowl@users.noreply.github.com>
Date: Sun, 16 Jun 2024 14:24:20 +0300
Subject: [PATCH 3/4] Refactor CollectionsControllerTest for Improved
Readability and Maintainability
---
.../collections_controller_test.rb | 487 ++++++------------
1 file changed, 144 insertions(+), 343 deletions(-)
diff --git a/test/controllers/collections_controller_test.rb b/test/controllers/collections_controller_test.rb
index 381dd380..c2125869 100644
--- a/test/controllers/collections_controller_test.rb
+++ b/test/controllers/collections_controller_test.rb
@@ -1,5 +1,5 @@
require 'test_helper'
-Dir[Rails.root.join("test/**/*.rb")].each {|f| require f}
+Dir[Rails.root.join("test/**/*.rb")].each { |f| require f }
class CollectionsControllerTest < ActionDispatch::IntegrationTest
include Devise::Test::IntegrationHelpers
@@ -12,33 +12,22 @@ class CollectionsControllerTest < ActionDispatch::IntegrationTest
end
describe 'GET #search' do
- it 'it returns modis results' do
+ it 'returns MODIS results' do
sign_in(user)
stub_urs_access(user.uid, user.access_token, user.refresh_token)
- stub_request(:get, "#{@cmr_base_url}/search/collections.echo10?keyword=*modis*&page_num=1&page_size=10&provider=ORNL_CLOUD").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
- 'User-Agent'=>'Ruby'
- }).
- to_return(status: 200, body: get_stub('modis-search.xml'), headers: {})
-
- stub_request(:get, "https://cmr.sit.earthdata.nasa.gov/search/collections.echo10?keyword=*modis*&page_num=1&page_size=10&provider=GESDISCCLD").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
- 'User-Agent'=>'Ruby'
- }).
- to_return(status: 200, body: get_stub('modis-search.xml'), headers: {})
-
- get '/collections_search', params: { provider: 'DAAC: ANY', free_text: 'modis', curr_page:1 }
- count = assigns(:collection_count)
- search_iterator = assigns(:search_iterator)
- assert(113, count)
- assert('C1200019523-OB_DAAC', search_iterator[0]['concept_id'])
+ stub_request(:get, "#{@cmr_base_url}/search/collections.echo10?keyword=*modis*&page_num=1&page_size=10&provider=ORNL_CLOUD")
+ .with(headers: default_headers)
+ .to_return(status: 200, body: get_stub('modis-search.xml'))
+
+ stub_request(:get, "https://cmr.sit.earthdata.nasa.gov/search/collections.echo10?keyword=*modis*&page_num=1&page_size=10&provider=GESDISCCLD")
+ .with(headers: default_headers)
+ .to_return(status: 200, body: get_stub('modis-search.xml'))
+
+ get '/collections_search', params: { provider: 'DAAC: ANY', free_text: 'modis', curr_page: 1 }
+
+ assert_equal 113, assigns(:collection_count)
+ assert_equal 'C1200019523-OB_DAAC', assigns(:search_iterator)[0]['concept_id']
end
end
@@ -46,378 +35,190 @@ class CollectionsControllerTest < ActionDispatch::IntegrationTest
it "loads the correct collection on show" do
sign_in(user)
stub_urs_access(user.uid, user.access_token, user.refresh_token)
-
- #stubbing all requests for raw_data
- stub_request(:get, "#{@cmr_base_url}/search/collections.echo10?concept_id=C1000000020-LANCEAMSR2").with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', }).to_return(:status => 200, :body => get_stub("search_collection_C1000000020-LANCEAMSR2.xml"), :headers => {"date"=>["Tue, 21 Feb 2017 16:02:46 GMT"], "content-type"=>["application/echo10+xml; charset=utf-8"], "access-control-expose-headers"=>["CMR-Hits, CMR-Request-Id"], "access-control-allow-origin"=>["*"], "cmr-hits"=>["10554"], "cmr-took"=>["40"], "cmr-request-id"=>["5b0c8426-3a23-4025-a4d3-6d1c9024153a"], "vary"=>["Accept-Encoding, User-Agent"], "connection"=>["close"], "server"=>["Jetty(9.2.z-SNAPSHOT)"]})
-
- stub_request(:get, "#{@cmr_base_url}/search/granules.echo10?concept_id=G309210-GHRC").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
-
- }).
- to_return(status: 200, body: get_stub('search_granules_G309210-GHRC.xml'), headers: {})
- stub_request(:get, "https://cmr.sit.earthdata.nasa.gov/search/granules.umm_json?concept_id=G309210-GHRC").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
- 'User-Agent'=>'Ruby'
- }).
- to_return(status: 200, body: get_stub('search_granules_G309210-GHRC.json'), headers: {})
+ setup_show_stubs
get '/collections/1', params: { record_id: 1 }
- collection_records = assigns(:collection_records)
- assert_equal(6, collection_records.length)
+
+ assert_equal 6, assigns(:collection_records).length
end
it "redirects when no concept id is provided" do
- #redirects no record_id
sign_in(user)
stub_urs_access(user.uid, user.access_token, user.refresh_token)
- get '/collections/1', params: { }
- assert_equal(response.code, "302")
+ get '/collections/1', params: {}
+ assert_redirected_to root_path
end
it "redirects when no collection is found" do
- #redirects no collection found
sign_in(user)
stub_urs_access(user.uid, user.access_token, user.refresh_token)
get '/collections/1', params: { record_id: "xyz" }
- assert_equal(response.code, "302")
+ assert_redirected_to root_path
end
- it "detects if a granule is no longer in cmr" do
+ it "detects if a granule is no longer in CMR" do
sign_in(user)
stub_urs_access(user.uid, user.access_token, user.refresh_token)
-
- #stubbing all requests for raw_data
- stub_request(:get, "#{@cmr_base_url}/search/granules.umm_json?concept_id=G309210-GHRC").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
- 'User-Agent'=>'Ruby'
- }).
- to_return(status: 200, body: '{"hits" : 0,"took" : 105,"items" : []}', headers: {})
- stub_request(:get, "#{@cmr_base_url}/search/collections.echo10?concept_id=C1000000020-LANCEAMSR2").with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', }).to_return(:status => 200, :body => get_stub('search_granules_by_collection_C1000000020-LANCEAMSR2.xml'))
-
- stub_request(:get, "#{@cmr_base_url}/search/granules.echo10?concept_id=G309210-GHRC").
- with(
- headers: {
- 'Accept'=>'*/*',
- 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
-
- }).
- to_return(status: 200,
- body: '
tag is never designated as an empty-element tag. - - Even if the markup shows it as an empty-element tag, it - shouldn't be presented that way. - """ - soup = self.soup("
") - self.assertFalse(soup.p.is_empty_element) - self.assertEqual(str(soup.p), "") - - def test_unclosed_tags_get_closed(self): - """A tag that's not closed by the end of the document should be closed. - - This applies to all tags except empty-element tags. - """ + def test_empty_and_unclosed_tags(self): + """Test handling of empty and unclosed tags.""" self.assertSoupEquals("", "
") self.assertSoupEquals("", "") - self.assertSoupEquals("foobaz
" self.assertSoupEquals(markup) - soup = self.soup(markup) comment = soup.find(text="foobar") - self.assertEqual(comment.__class__, Comment) + self.assertIsInstance(comment, Comment) - def test_preserved_whitespace_in_pre_and_textarea(self): - """Whitespace must be preserved inand