def test_get_popup_dict(): victim = get_victim() cursor = SearchCursor(victim.fc, 'PopupInfo') row = cursor.next() html = row[0] del row del cursor popup_dict = victim.get_popup_dict(html) assert 'Elevation' in popup_dict
def extract_popup_info(self): """Extract data from the PopupInfo field to new fields.""" # Make sure we have a feature class with a PopupInfo field. if not arcpy.Exists(self.fc): self.raise_error('Feature class {} not found.'.format(self.fc)) popup_field_name = 'PopupInfo' if not self.field_exists(popup_field_name): self.raise_error('No {} field found in {}.'.format(popup_field_name, self.fc)) # Find out what fields are in the popup. search_cursor = SearchCursor(self.fc, popup_field_name) first_row = search_cursor.next() sample_html = first_row[0] popup_dict = self.get_popup_dict(sample_html) popup_fields = list(popup_dict.keys()) del first_row del search_cursor # Add new fields as necessary. fc_name = os.path.basename(self.fc) for field_name in popup_fields: if not self.field_exists(field_name): self.info('Adding field "{}" to {}.'.format(field_name, fc_name)) try: arcpy.management.AddField(self.fc, field_name, 'TEXT') except Exception as e: self.raise_error('Failed to add field. {}'.format(e)) # Populate the fields. self.info('Updating attributes.') update_fields = popup_fields + [popup_field_name] cursor = UpdateCursor(self.fc, update_fields) for row in cursor: popup_html = row[-1] popupdict = self.get_popup_dict(popup_html) for field_index, field_name in enumerate(popup_fields): row[field_index] = popupdict.get(field_name, None) cursor.updateRow(row) del cursor