a method to retrieve the details of a single image on AWS EC2

        :param image_id: string with AWS id of image
        :return: dictionary of image attributes

        relevant fields:
        
        'image_id': '',
        'snapshot_id': '',
        'region': '',
        'state': '',
        'tags': []

def read_image(self, image_id):

        '''
            a method to retrieve the details of a single image on AWS EC2

        :param image_id: string with AWS id of image
        :return: dictionary of image attributes

        relevant fields:
        
        'image_id': '',
        'snapshot_id': '',
        'region': '',
        'state': '',
        'tags': []
        '''

        title = '%s.read_image' % self.__class__.__name__

    # validate inputs
        input_fields = {
            'image_id': image_id
        }
        for key, value in input_fields.items():
            object_title = '%s(%s=%s)' % (title, key, str(value))
            self.fields.validate(value, '.%s' % key, object_title)

    # report query
        self.iam.printer('Querying AWS region %s for properties of image %s.' % (self.iam.region_name, image_id))

    # check image state
        self.iam.printer_on = False
        self.check_image_state(image_id)
        self.iam.printer_on = True

    # discover tags and snapshot id associated with image id
        try:
            response = self.connection.describe_images(ImageIds=[ image_id ])
        except:
            raise AWSConnectionError(title)
        image_info = response['Images'][0]

    # construct image details from response
        image_details = {
            'image_id': '',
            'state': '',
            'name': '',
            'region': self.iam.region_name,
            'tags': []
        }
        image_details = self.iam.ingest(image_info, image_details)
        image_details['snapshot_id'] = image_details['block_device_mappings'][0]['ebs']['snapshot_id']
        
        return image_details