Source code for ibeis.control.manual_encounter_funcs

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import six
from ibeis import constants as const
from ibeis.control import accessor_decors, controller_inject
from ibeis.control.controller_inject import make_ibs_register_decorator
import functools
import utool as ut
import uuid
print, print_, printDBG, rrr, profile = ut.inject(__name__, '[manual_encounter]')


ENCOUNTER_END_TIME_POSIX   = 'encounter_end_time_posix'
ENCOUNTER_GPS_LAT          = 'encounter_gps_lat'
ENCOUNTER_GPS_LON          = 'encounter_gps_lon'
ENCOUNTER_NOTE             = 'encounter_note'
ENCOUNTER_PROCESSED_FLAG   = 'encounter_processed_flag'
ENCOUNTER_ROWID            = 'encounter_rowid'
ENCOUNTER_SHIPPED_FLAG     = 'encounter_shipped_flag'
ENCOUNTER_START_TIME_POSIX = 'encounter_start_time_posix'
ENCOUNTER_SMART_WAYPOINT_ID = 'encounter_smart_waypoint_id'
ENCOUNTER_SMART_XML_FNAME   = 'encounter_smart_xml_fname'


CLASS_INJECT_KEY, register_ibs_method = make_ibs_register_decorator(__name__)


register_api   = controller_inject.get_ibeis_flask_api(__name__)
register_route = controller_inject.get_ibeis_flask_route(__name__)


@register_ibs_method
@accessor_decors.ider
def _get_all_encounter_rowids(ibs):
    r"""
    Returns:
        list_ (list):  all unfiltered eids (encounter rowids)
    """
    all_eids = ibs.db.get_all_rowids(const.ENCOUNTER_TABLE)
    return all_eids


@register_ibs_method
@accessor_decors.ider
def _get_all_eids(ibs):
    r"""
    alias
    """
    return _get_all_encounter_rowids(ibs)


@register_ibs_method
@accessor_decors.ider
@register_api('/api/encounter/', methods=['GET'])
[docs]def get_valid_eids(ibs, min_num_gids=0, processed=None, shipped=None): r""" Returns: list_ (list): list of all encounter ids RESTful: Method: GET URL: /api/encounter/ """ eid_list = ibs._get_all_eids() if min_num_gids > 0: num_gids_list = ibs.get_encounter_num_gids(eid_list) flag_list = [num_gids >= min_num_gids for num_gids in num_gids_list] eid_list = ut.filter_items(eid_list, flag_list) if processed is not None: flag_list = ibs.get_encounter_processed_flags(eid_list) isvalid_list = [ flag == 1 if processed else flag == 0 for flag in flag_list] eid_list = ut.filter_items(eid_list, isvalid_list) if shipped is not None: flag_list = ibs.get_encounter_shipped_flags(eid_list) isvalid_list = [ flag == 1 if shipped else flag == 0 for flag in flag_list] eid_list = ut.filter_items(eid_list, isvalid_list) return eid_list
@register_ibs_method @accessor_decors.adder @register_api('/api/encounter/', methods=['POST'])
[docs]def add_encounters(ibs, enctext_list, encounter_uuid_list=None, config_rowid_list=None, notes_list=None): r""" Adds a list of encounters. Args: enctext_list (list): encounter_uuid_list (list): config_rowid_list (list): notes_list (list): Returns: eid_list (list): added encounter rowids RESTful: Method: POST URL: /api/encounter/ """ if ut.VERBOSE: print('[ibs] adding %d encounters' % len(enctext_list)) # Add encounter text names to database if notes_list is None: notes_list = [''] * len(enctext_list) if encounter_uuid_list is None: encounter_uuid_list = [uuid.uuid4() for _ in range(len(enctext_list))] if config_rowid_list is None: config_rowid_list = [ibs.MANUAL_CONFIGID] * len(enctext_list) colnames = ['encounter_text', 'encounter_uuid', 'config_rowid', 'encounter_note'] params_iter = zip(enctext_list, encounter_uuid_list, config_rowid_list, notes_list) get_rowid_from_superkey = functools.partial(ibs.get_encounter_eids_from_text, ensure=False) eid_list = ibs.db.add_cleanly(const.ENCOUNTER_TABLE, colnames, params_iter, get_rowid_from_superkey) return eid_list # SETTERS::ENCOUNTER
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/text/', methods=['PUT'])
[docs]def set_encounter_text(ibs, eid_list, encounter_text_list): r""" Sets names of encounters (groups of animals) RESTful: Method: PUT URL: /api/encounter/text/ """ # Special set checks if any(ibs.is_special_encounter(eid_list)): raise ValueError('cannot rename special encounters') id_iter = ((eid,) for eid in eid_list) val_list = ((encounter_text,) for encounter_text in encounter_text_list) ibs.db.set(const.ENCOUNTER_TABLE, ('encounter_text',), val_list, id_iter) # # GETTERS::ENCOUNTER
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/num_imgs_reviewed/', methods=['GET'])
[docs]def get_encounter_num_imgs_reviewed(ibs, eid_list): r""" RESTful: Method: GET URL: /api/encounter/num_imgs_reviewed/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> # Reset and compute encounters >>> ibs.delete_all_encounters() >>> ibs.compute_encounters() >>> eid_list = ibs.get_valid_eids() >>> num_reviwed_list = ibs.get_encounter_num_imgs_reviewed(eid_list) >>> result = num_reviwed_list >>> print(result) [0, 0] """ gids_list = ibs.get_encounter_gids(eid_list) flags_list = ibs.unflat_map(ibs.get_image_reviewed, gids_list) num_reviwed_list = [sum(flags) for flags in flags_list] return num_reviwed_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/num_annotmatch_reviewed/', methods=['GET'])
[docs]def get_encounter_num_annotmatch_reviewed(ibs, eid_list): r""" RESTful: Method: GET URL: /api/encounter/num_annotmatch_reviewed/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> import ibeis # NOQA >>> ibs = ibeis.opendb('testdb1') >>> eid_list = ibs._get_all_encounter_rowids() >>> num_annots_reviewed_list = ibs.get_encounter_num_annotmatch_reviewed(eid_list) """ aids_list = ibs.get_encounter_custom_filtered_aids(eid_list) has_revieweds_list = ibs.unflat_map(ibs.get_annot_has_reviewed_matching_aids, aids_list) num_annots_reviewed_list = list(map(sum, has_revieweds_list)) return num_annots_reviewed_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/num_names_with_exemplar/', methods=['GET'])
[docs]def get_encounter_num_names_with_exemplar(ibs, eid_list): r""" RESTful: Method: GET URL: /api/encounter/num_names_with_exemplar/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> import ibeis # NOQA >>> ibs = ibeis.opendb('testdb1') >>> eid_list = ibs._get_all_encounter_rowids() >>> num_annots_reviewed_list = ibs.get_encounter_num_annotmatch_reviewed(eid_list) """ aids_list = ibs.get_encounter_custom_filtered_aids(eid_list) exflags_list = ibs.unflat_map(ibs.get_annot_exemplar_flags, aids_list) nids_list = ibs.unflat_map(ibs.get_annot_name_rowids, aids_list) groups_list = [ut.group_items(exflags, nids) for exflags, nids in zip(exflags_list, nids_list)] #num_names_list = [len(groups) for groups in groups_list] num_exemplared_names_list = [ sum([any(exflags) for exflags in six.itervalues(groups)]) for groups in groups_list ] return num_exemplared_names_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/fraction_names_with_exemplar/', methods=['GET'])
[docs]def get_encounter_fraction_names_with_exemplar(ibs, eid_list): r""" RESTful: Method: GET URL: /api/encounter/fraction_names_with_exemplar/ Example: >>> # DISABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> import ibeis # NOQA >>> ibs = ibeis.opendb('testdb2') >>> eid_list = ibs._get_all_encounter_rowids() >>> fraction_exemplared_names_list = ibs.get_encounter_fraction_names_with_exemplar(eid_list) """ aids_list = ibs.get_encounter_custom_filtered_aids(eid_list) #exflags_list = ibs.unflat_map(ibs.get_annot_exemplar_flags, aids_list) nids_list = list(map(list, map(set, ibs.unflat_map(ibs.get_annot_name_rowids, aids_list)))) aids_list_list = ibs.unflat_map(ibs.get_name_aids, nids_list) flags_list_list = list(map(lambda x: ibs.unflat_map(ibs.get_annot_exemplar_flags, x), aids_list_list)) #groups_list = [ut.group_items(exflags, nids) # for exflags, nids in zip(exflags_list, nids_list)] num_names_list = list(map(len, nids_list)) num_exemplared_names_list = [ sum([any(exflags) for exflags in flags_list]) for flags_list in flags_list_list ] fraction_exemplared_names_list = [ None if num_names == 0 else num_exemplared_names / num_names for num_exemplared_names, num_names in zip(num_exemplared_names_list, num_names_list) ] return fraction_exemplared_names_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/fraction_annotmatch_reviewed/', methods=['GET'])
[docs]def get_encounter_fraction_annotmatch_reviewed(ibs, eid_list): r""" Auto-docstr for 'get_encounter_fraction_annotmatch_reviewed' RESTful: Method: GET URL: /api/encounter/fraction_annotmatch_reviewed/ """ aids_list = ibs.get_encounter_custom_filtered_aids(eid_list) flags_list = ibs.unflat_map(ibs.get_annot_has_reviewed_matching_aids, aids_list) fraction_annotmatch_reviewed_list = [None if len(flags) == 0 else sum(flags) / len(flags) for flags in flags_list] return fraction_annotmatch_reviewed_list
@register_ibs_method @accessor_decors.default_decorator @register_api('/api/encounter/custom_filtered_aids/', methods=['GET'])
[docs]def get_encounter_custom_filtered_aids(ibs, eid_list): r""" hacks to filter aids to only certain views and qualities RESTful: Method: GET URL: /api/encounter/custom_filtered_aids/ """ aids_list_ = ibs.get_encounter_aids(eid_list) # HACK: Get percentage for the annots we currently care about aids_list = [ibs.filter_aids_custom(aids) for aids in aids_list_] return aids_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/fraction_imgs_reviewed/', methods=['GET'])
[docs]def get_encounter_fraction_imgs_reviewed(ibs, eid_list): r""" Auto-docstr for 'get_encounter_fraction_imgs_reviewed' RESTful: Method: GET URL: /api/encounter/fraction_imgs_reviewed/ """ gids_list = ibs.get_encounter_gids(eid_list) flags_list = ibs.unflat_map(ibs.get_image_reviewed, gids_list) fraction_imgs_reviewed_list = [None if len(flags) == 0 else sum(flags) / len(flags) for flags in flags_list] return fraction_imgs_reviewed_list
@register_ibs_method @accessor_decors.getter_1to1 @accessor_decors.cache_getter(const.ENCOUNTER_TABLE, 'percent_names_with_exemplar_str', debug=False) # HACK @register_api('/api/encounter/percent_names_with_exemplar_str/', methods=['GET'])
[docs]def get_encounter_percent_names_with_exemplar_str(ibs, eid_list): r""" Auto-docstr for 'get_encounter_percent_names_with_exemplar_str' RESTful: Method: GET URL: /api/encounter/percent_names_with_exemplar_str/ """ fraction_exemplared_names_list = ibs.get_encounter_fraction_names_with_exemplar(eid_list) percent_exemplared_names_list_str = list(map(ut.percent_str, fraction_exemplared_names_list)) return percent_exemplared_names_list_str
@register_ibs_method @accessor_decors.getter_1to1 @accessor_decors.cache_getter(const.ENCOUNTER_TABLE, 'percent_imgs_reviewed_str', debug=False) # HACK @register_api('/api/encounter/percent_imgs_reviewed_str/', methods=['GET'])
[docs]def get_encounter_percent_imgs_reviewed_str(ibs, eid_list): r""" Auto-docstr for 'get_encounter_percent_imgs_reviewed_str' RESTful: Method: GET URL: /api/encounter/percent_imgs_reviewed_str/ """ fraction_imgs_reviewed_list = ibs.get_encounter_fraction_imgs_reviewed(eid_list) percent_imgs_reviewed_str_list = list(map(ut.percent_str, fraction_imgs_reviewed_list)) return percent_imgs_reviewed_str_list
@register_ibs_method @accessor_decors.getter_1to1 @accessor_decors.cache_getter(const.ENCOUNTER_TABLE, 'percent_annotmatch_reviewed_str', debug=False) # HACK @register_api('/api/encounter/percent_annotmatch_reviewed_str/', methods=['GET'])
[docs]def get_encounter_percent_annotmatch_reviewed_str(ibs, eid_list): r""" Auto-docstr for 'get_encounter_percent_annotmatch_reviewed_str' RESTful: Method: GET URL: /api/encounter/percent_annotmatch_reviewed_str/ """ fraction_annotmatch_reviewed_list = ibs.get_encounter_fraction_annotmatch_reviewed(eid_list) percent_annotmach_reviewed_str_list = list(map(ut.percent_str, fraction_annotmatch_reviewed_list)) return percent_annotmach_reviewed_str_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/num_gids/', methods=['GET'])
[docs]def get_encounter_num_gids(ibs, eid_list): r""" Returns: nGids_list (list): number of images in each encounter RESTful: Method: GET URL: /api/encounter/num_gids/ """ nGids_list = list(map(len, ibs.get_encounter_gids(eid_list))) return nGids_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/num_aids/', methods=['GET'])
[docs]def get_encounter_num_aids(ibs, eid_list): r""" Returns: nGids_list (list): number of images in each encounter RESTful: Method: GET URL: /api/encounter/num_aids/ """ nAids_list = list(map(len, ibs.get_encounter_aids(eid_list))) return nAids_list
@register_ibs_method @accessor_decors.getter_1toM @register_api('/api/encounter/aids/', methods=['GET'])
[docs]def get_encounter_aids(ibs, eid_list): r""" Returns: aids_list (list): a list of list of aids in each encounter RESTful: Method: GET URL: /api/encounter/aids/ Args: ibs (IBEISController): ibeis controller object eid_list (list): Returns: list: aids_list CommandLine: python -m ibeis.control.manual_encounter_funcs --test-get_encounter_aids Example: >>> # DISABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='testdb1') >>> ibs.delete_encounters(ibs.get_valid_eids()) >>> ibs.compute_encounters() >>> eid_list = ibs.get_valid_eids() >>> aids_list = get_encounter_aids(ibs, eid_list) >>> result = ('aids_list = %s' % (str(aids_list),)) >>> print(result) """ gids_list = ibs.get_encounter_gids(eid_list) aids_list_ = ibs.unflat_map(ibs.get_image_aids, gids_list) aids_list = list(map(ut.flatten, aids_list_)) #print('get_encounter_aids') #print('eid_list = %r' % (eid_list,)) #print('gids_list = %r' % (gids_list,)) #print('aids_list_ = %r' % (aids_list_,)) #print('aids_list = %r' % (aids_list,)) return aids_list
@register_ibs_method @accessor_decors.getter_1toM @accessor_decors.cache_getter(const.ENCOUNTER_TABLE, 'image_rowids') @register_api('/api/encounter/gids/', methods=['GET'])
[docs]def get_encounter_gids(ibs, eid_list): r""" Returns: gids_list (list): a list of list of gids in each encounter RESTful: Method: GET URL: /api/encounter/gids/ """ # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS gids_list = ibs.db.get(const.EG_RELATION_TABLE, ('image_rowid',), eid_list, id_colname='encounter_rowid', unpack_scalars=False) #print('get_encounter_gids') #print('eid_list = %r' % (eid_list,)) #print('gids_list = %r' % (gids_list,)) return gids_list
@register_ibs_method @accessor_decors.default_decorator @register_api('/api/encounter/egrids/', methods=['GET'])
[docs]def get_encounter_egrids(ibs, eid_list=None, gid_list=None): r""" Returns: list_ (list): a list of encounter-image-relationship rowids for each encouterid RESTful: Method: GET URL: /api/encounter/egrids/ """ # WEIRD FUNCTION FIXME assert eid_list is not None or gid_list is not None, "Either eid_list or gid_list must be None" if eid_list is not None and gid_list is None: # TODO: Group type params_iter = ((eid,) for eid in eid_list) where_clause = 'encounter_rowid=?' # list of relationships for each encounter egrids_list = ibs.db.get_where(const.EG_RELATION_TABLE, ('egr_rowid',), params_iter, where_clause, unpack_scalars=False) elif gid_list is not None and eid_list is None: # TODO: Group type params_iter = ((gid,) for gid in gid_list) where_clause = 'image_rowid=?' # list of relationships for each encounter egrids_list = ibs.db.get_where(const.EG_RELATION_TABLE, ('egr_rowid',), params_iter, where_clause, unpack_scalars=False) else: # TODO: Group type params_iter = ((eid, gid,) for eid, gid in zip(eid_list, gid_list)) where_clause = 'encounter_rowid=? AND image_rowid=?' # list of relationships for each encounter egrids_list = ibs.db.get_where(const.EG_RELATION_TABLE, ('egr_rowid',), params_iter, where_clause, unpack_scalars=False) return egrids_list
@register_ibs_method @accessor_decors.getter_1toM @register_api('/api/encounter/nids/', methods=['GET'])
[docs]def get_encounter_nids(ibs, eid_list): r""" Returns: list_ (list): a list of list of known nids in each encounter CommandLine: python -m ibeis.control.manual_encounter_funcs --test-get_encounter_nids RESTful: Method: GET URL: /api/encounter/nids/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb('testdb1') >>> ibs.delete_encounters(ibs.get_valid_eids()) >>> ibs.compute_encounters() >>> eid_list = ibs.get_valid_eids() >>> nids_list = ibs.get_encounter_nids(eid_list) >>> result = nids_list >>> print(result) [[1, 2, 3], [4, 5, 6, 7]] """ aids_list = ibs.get_encounter_aids(eid_list) nids_list = ibs.unflat_map(ibs.get_annot_name_rowids, aids_list) #nids_list_ = [[nid[0] for nid in nids if len(nid) > 0] for nids in nids_list] # Remove any unknown anmes nids_list = [[nid for nid in nids if nid > 0] for nids in nids_list] nids_list = list(map(ut.unique_ordered, nids_list)) #print('get_encounter_nids') #print('eid_list = %r' % (eid_list,)) #print('aids_list = %r' % (aids_list,)) #print('nids_list_ = %r' % (nids_list_,)) #print('nids_list = %r' % (nids_list,)) return nids_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/uuid/', methods=['GET'])
[docs]def get_encounter_uuid(ibs, eid_list): r""" Returns: list_ (list): encounter_uuid of each eid in eid_list RESTful: Method: GET URL: /api/encounter/uuid/ """ # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS encuuid_list = ibs.db.get(const.ENCOUNTER_TABLE, ('encounter_uuid',), eid_list, id_colname='encounter_rowid') return encuuid_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/configid/', methods=['GET'])
[docs]def get_encounter_configid(ibs, eid_list): r""" Returns: list_ (list): config_rowid of each eid in eid_list RESTful: Method: GET URL: /api/encounter/configid/ """ # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS config_rowid_list = ibs.db.get(const.ENCOUNTER_TABLE, ('config_rowid',), eid_list, id_colname='encounter_rowid') return config_rowid_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/text/', methods=['GET'])
[docs]def get_encounter_text(ibs, eid_list): r""" Returns: list_ (list): encounter_text of each eid in eid_list RESTful: Method: GET URL: /api/encounter/text/ """ # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS enctext_list = ibs.db.get(const.ENCOUNTER_TABLE, ('encounter_text',), eid_list, id_colname='encounter_rowid') return enctext_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/eids_from_text/', methods=['GET'])
[docs]def get_encounter_eids_from_text(ibs, enctext_list, ensure=True): r""" Returns: list_ (list): a list of eids corresponding to each encounter enctext #FIXME: make new naming scheme for non-primary-key-getters get_encounter_eids_from_text_from_text RESTful: Method: GET URL: /api/encounter/eids_from_text/ """ if ensure: eid_list = ibs.add_encounters(enctext_list) else: # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS eid_list = ibs.db.get(const.ENCOUNTER_TABLE, ('encounter_rowid',), enctext_list, id_colname='encounter_text') return eid_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/note/', methods=['GET'])
[docs]def get_encounter_note(ibs, eid_list): r""" Returns: list_ (list): encounter_note of each eid in eid_list RESTful: Method: GET URL: /api/encounter/note/ """ # FIXME: MAKE SQL-METHOD FOR NON-ROWID GETTERS encnote_list = ibs.db.get(const.ENCOUNTER_TABLE, ('encounter_note',), eid_list, id_colname='encounter_rowid') return encnote_list
@register_ibs_method @accessor_decors.deleter @register_api('/api/encounter/', methods=['DELETE'])
[docs]def delete_encounters(ibs, eid_list): r""" Removes encounters and thier relationships (images are not effected) RESTful: Method: DELETE URL: /api/encounter/ """ # Optimization hack, less SQL calls #egrid_list = ut.flatten(ibs.get_encounter_egrids(eid_list=eid_list)) #ibs.db.delete_rowids(const.EG_RELATION_TABLE, egrid_list) #ibs.db.delete(const.EG_RELATION_TABLE, eid_list, id_colname='encounter_rowid') if ut.VERBOSE: print('[ibs] deleting %d encounters' % len(eid_list)) ibs.delete_egr_encounter_relations(eid_list) ibs.db.delete_rowids(const.ENCOUNTER_TABLE, eid_list)
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/end_time_posix/', methods=['GET'])
[docs]def get_encounter_end_time_posix(ibs, encounter_rowid_list): r""" encounter_end_time_posix_list <- encounter.encounter_end_time_posix[encounter_rowid_list] gets data from the "native" column "encounter_end_time_posix" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_end_time_posix_list TemplateInfo: Tgetter_table_column col = encounter_end_time_posix tbl = encounter RESTful: Method: GET URL: /api/encounter/end_time_posix/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_end_time_posix_list = ibs.get_encounter_end_time_posix(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_end_time_posix_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_END_TIME_POSIX,) encounter_end_time_posix_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_end_time_posix_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/gps_lats/', methods=['GET'])
[docs]def get_encounter_gps_lats(ibs, encounter_rowid_list): r""" encounter_gps_lat_list <- encounter.encounter_gps_lat[encounter_rowid_list] gets data from the "native" column "encounter_gps_lat" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_gps_lat_list TemplateInfo: Tgetter_table_column col = encounter_gps_lat tbl = encounter RESTful: Method: GET URL: /api/encounter/gps_lats/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_gps_lat_list = ibs.get_encounter_gps_lats(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_gps_lat_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_GPS_LAT,) encounter_gps_lat_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_gps_lat_list
@register_ibs_method @accessor_decors.default_decorator @register_api('/api/encounter/info/', methods=['PUT'])
[docs]def update_encounter_info(ibs, encounter_rowid_list): r""" sets start and end time for encounters FIXME: should not need to bulk update, should be handled as it goes RESTful: Method: PUT URL: /api/encounter/info/ Example: >>> # DOCTEST_DISABLE >>> encounter_rowid_list = ibs.get_valid_eids() """ gids_list_ = ibs.get_encounter_gids(encounter_rowid_list) hasgids_list = [len(gids) > 0 for gids in gids_list_] gids_list = ut.filter_items(gids_list_, hasgids_list) eid_list = ut.filter_items(encounter_rowid_list, hasgids_list) unixtimes_list = ibs.unflat_map(ibs.get_image_unixtime, gids_list) encounter_end_time_posix_list = [max(unixtimes) for unixtimes in unixtimes_list] encounter_start_time_posix_list = [min(unixtimes) for unixtimes in unixtimes_list] ibs.set_encounter_end_time_posix(eid_list, encounter_end_time_posix_list) ibs.set_encounter_start_time_posix(eid_list, encounter_start_time_posix_list)
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/gps_lons/', methods=['GET'])
[docs]def get_encounter_gps_lons(ibs, encounter_rowid_list): r""" encounter_gps_lon_list <- encounter.encounter_gps_lon[encounter_rowid_list] gets data from the "native" column "encounter_gps_lon" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_gps_lon_list TemplateInfo: Tgetter_table_column col = encounter_gps_lon tbl = encounter RESTful: Method: GET URL: /api/encounter/gps_lons/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_gps_lon_list = ibs.get_encounter_gps_lons(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_gps_lon_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_GPS_LON,) encounter_gps_lon_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_gps_lon_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/notes/', methods=['GET'])
[docs]def get_encounter_notes(ibs, encounter_rowid_list): r""" encounter_note_list <- encounter.encounter_note[encounter_rowid_list] gets data from the "native" column "encounter_note" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_note_list TemplateInfo: Tgetter_table_column col = encounter_note tbl = encounter RESTful: Method: GET URL: /api/encounter/notes/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_note_list = ibs.get_encounter_notes(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_note_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_NOTE,) encounter_note_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_note_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/processed_flags/', methods=['GET'])
[docs]def get_encounter_processed_flags(ibs, encounter_rowid_list): r""" encounter_processed_flag_list <- encounter.encounter_processed_flag[encounter_rowid_list] gets data from the "native" column "encounter_processed_flag" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_processed_flag_list TemplateInfo: Tgetter_table_column col = encounter_processed_flag tbl = encounter RESTful: Method: GET URL: /api/encounter/processed_flags/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_processed_flag_list = ibs.get_encounter_processed_flags(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_processed_flag_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_PROCESSED_FLAG,) encounter_processed_flag_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_processed_flag_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/shipped_flags/', methods=['GET'])
[docs]def get_encounter_shipped_flags(ibs, encounter_rowid_list): r""" encounter_shipped_flag_list <- encounter.encounter_shipped_flag[encounter_rowid_list] gets data from the "native" column "encounter_shipped_flag" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_shipped_flag_list TemplateInfo: Tgetter_table_column col = encounter_shipped_flag tbl = encounter RESTful: Method: GET URL: /api/encounter/shipped_flags/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_shipped_flag_list = ibs.get_encounter_shipped_flags(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_shipped_flag_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SHIPPED_FLAG,) encounter_shipped_flag_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_shipped_flag_list
@register_ibs_method @accessor_decors.getter_1to1 @register_api('/api/encounter/start_time_posix/', methods=['GET'])
[docs]def get_encounter_start_time_posix(ibs, encounter_rowid_list): r""" encounter_start_time_posix_list <- encounter.encounter_start_time_posix[encounter_rowid_list] gets data from the "native" column "encounter_start_time_posix" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_start_time_posix_list TemplateInfo: Tgetter_table_column col = encounter_start_time_posix tbl = encounter RESTful: Method: GET URL: /api/encounter/start_time_posix/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_start_time_posix_list = ibs.get_encounter_start_time_posix(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_start_time_posix_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_START_TIME_POSIX,) encounter_start_time_posix_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_start_time_posix_list
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/end_time_posix/', methods=['PUT'])
[docs]def set_encounter_end_time_posix(ibs, encounter_rowid_list, encounter_end_time_posix_list): r""" encounter_end_time_posix_list -> encounter.encounter_end_time_posix[encounter_rowid_list] Args: encounter_rowid_list encounter_end_time_posix_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_end_time_posix RESTful: Method: PUT URL: /api/encounter/end_time_posix/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_END_TIME_POSIX,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_end_time_posix_list, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/gps_lats/', methods=['PUT'])
[docs]def set_encounter_gps_lats(ibs, encounter_rowid_list, encounter_gps_lat_list): r""" encounter_gps_lat_list -> encounter.encounter_gps_lat[encounter_rowid_list] Args: encounter_rowid_list encounter_gps_lat_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_gps_lat RESTful: Method: PUT URL: /api/encounter/gps_lats/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_GPS_LAT,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_gps_lat_list, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/gps_lons/', methods=['PUT'])
[docs]def set_encounter_gps_lons(ibs, encounter_rowid_list, encounter_gps_lon_list): r""" encounter_gps_lon_list -> encounter.encounter_gps_lon[encounter_rowid_list] Args: encounter_rowid_list encounter_gps_lon_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_gps_lon RESTful: Method: PUT URL: /api/encounter/gps_lons/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_GPS_LON,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_gps_lon_list, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/notes/', methods=['PUT'])
[docs]def set_encounter_notes(ibs, encounter_rowid_list, encounter_note_list): r""" encounter_note_list -> encounter.encounter_note[encounter_rowid_list] Args: encounter_rowid_list encounter_note_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_note RESTful: Method: PUT URL: /api/encounter/notes/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_NOTE,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_note_list, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/processed_flags/', methods=['PUT'])
[docs]def set_encounter_processed_flags(ibs, encounter_rowid_list, encounter_processed_flag_list): r""" encounter_processed_flag_list -> encounter.encounter_processed_flag[encounter_rowid_list] Args: encounter_rowid_list encounter_processed_flag_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_processed_flag RESTful: Method: PUT URL: /api/encounter/processed_flags/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_PROCESSED_FLAG,) val_iter = ((processed_flag,) for processed_flag in encounter_processed_flag_list) ibs.db.set(const.ENCOUNTER_TABLE, colnames, val_iter, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/shipped_flags/', methods=['PUT'])
[docs]def set_encounter_shipped_flags(ibs, encounter_rowid_list, encounter_shipped_flag_list): r""" encounter_shipped_flag_list -> encounter.encounter_shipped_flag[encounter_rowid_list] Args: encounter_rowid_list encounter_shipped_flag_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_shipped_flag RESTful: Method: PUT URL: /api/encounter/shipped_flags/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SHIPPED_FLAG,) val_iter = ((shipped_flag,) for shipped_flag in encounter_shipped_flag_list) ibs.db.set(const.ENCOUNTER_TABLE, colnames, val_iter, id_iter)
@register_ibs_method @accessor_decors.setter @register_api('/api/encounter/start_time_posix/', methods=['PUT'])
[docs]def set_encounter_start_time_posix(ibs, encounter_rowid_list, encounter_start_time_posix_list): r""" encounter_start_time_posix_list -> encounter.encounter_start_time_posix[encounter_rowid_list] Args: encounter_rowid_list encounter_start_time_posix_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_start_time_posix RESTful: Method: PUT URL: /api/encounter/start_time_posix/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_START_TIME_POSIX,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_start_time_posix_list, id_iter)
@register_ibs_method #@accessor_decors.cache_getter(const.ENCOUNTER_TABLE, ENCOUNTER_SMART_WAYPOINT_ID) @register_api('/api/encounter/smart_waypoint_ids/', methods=['GET'])
[docs]def get_encounter_smart_waypoint_ids(ibs, encounter_rowid_list): r""" encounter_smart_waypoint_id_list <- encounter.encounter_smart_waypoint_id[encounter_rowid_list] gets data from the "native" column "encounter_smart_waypoint_id" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_smart_waypoint_id_list TemplateInfo: Tgetter_table_column col = encounter_smart_waypoint_id tbl = encounter RESTful: Method: GET URL: /api/encounter/smart_waypoint_ids/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_smart_waypoint_id_list = ibs.get_encounter_smart_waypoint_ids(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_smart_waypoint_id_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SMART_WAYPOINT_ID,) encounter_smart_waypoint_id_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_smart_waypoint_id_list
@register_ibs_method #@accessor_decors.cache_getter(const.ENCOUNTER_TABLE, ENCOUNTER_SMART_XML_FNAME) @register_api('/api/encounter/smart_xml_fnames/', methods=['GET'])
[docs]def get_encounter_smart_xml_fnames(ibs, encounter_rowid_list): r""" encounter_smart_xml_fname_list <- encounter.encounter_smart_xml_fname[encounter_rowid_list] gets data from the "native" column "encounter_smart_xml_fname" in the "encounter" table Args: encounter_rowid_list (list): Returns: list: encounter_smart_xml_fname_list TemplateInfo: Tgetter_table_column col = encounter_smart_xml_fname tbl = encounter RESTful: Method: GET URL: /api/encounter/smart_xml_fnames/ Example: >>> # ENABLE_DOCTEST >>> from ibeis.control.manual_encounter_funcs import * # NOQA >>> ibs, config2_ = testdata_ibs() >>> encounter_rowid_list = ibs._get_all_encounter_rowids() >>> encounter_smart_xml_fname_list = ibs.get_encounter_smart_xml_fnames(encounter_rowid_list) >>> assert len(encounter_rowid_list) == len(encounter_smart_xml_fname_list) """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SMART_XML_FNAME,) encounter_smart_xml_fname_list = ibs.db.get( const.ENCOUNTER_TABLE, colnames, id_iter, id_colname='rowid') return encounter_smart_xml_fname_list
@register_ibs_method @register_api('/api/encounter/smart_waypoint_ids/', methods=['PUT'])
[docs]def set_encounter_smart_waypoint_ids(ibs, encounter_rowid_list, encounter_smart_waypoint_id_list): r""" encounter_smart_waypoint_id_list -> encounter.encounter_smart_waypoint_id[encounter_rowid_list] Args: encounter_rowid_list encounter_smart_waypoint_id_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_smart_waypoint_id RESTful: Method: PUT URL: /api/encounter/smart_waypoint_ids/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SMART_WAYPOINT_ID,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_smart_waypoint_id_list, id_iter)
@register_ibs_method @register_api('/api/encounter/smart_xml_fnames/', methods=['PUT'])
[docs]def set_encounter_smart_xml_fnames(ibs, encounter_rowid_list, encounter_smart_xml_fname_list): r""" encounter_smart_xml_fname_list -> encounter.encounter_smart_xml_fname[encounter_rowid_list] Args: encounter_rowid_list encounter_smart_xml_fname_list TemplateInfo: Tsetter_native_column tbl = encounter col = encounter_smart_xml_fname RESTful: Method: PUT URL: /api/encounter/smart_xml_fnames/ """ id_iter = encounter_rowid_list colnames = (ENCOUNTER_SMART_XML_FNAME,) ibs.db.set(const.ENCOUNTER_TABLE, colnames, encounter_smart_xml_fname_list, id_iter)
[docs]def testdata_ibs(): r""" Auto-docstr for 'testdata_ibs' """ import ibeis ibs = ibeis.opendb('testdb1') config2_ = None return ibs, config2_
if __name__ == '__main__': r""" CommandLine: python -m ibeis.control.manual_encounter_funcs python -m ibeis.control.manual_encounter_funcs --allexamples python -m ibeis.control.manual_encounter_funcs --allexamples --noface --nosrc """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA ut.doctest_funcs()