Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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