def iovs(self, **kwargs): """ Returns `amount` IOVs belonging to all Tags held in this Global Tag. For large Global Tags (which is most of them), VERY slow. Highly recommended to instead used `tags().get_members("tag_name").data()` to get a `list` of tag names, and then get IOVs from each Tag name. At some point, this method may replace the method currently used. """ # join global_tag_map onto iov (where insertion time <= gt snapshot) by tag_name + return results # first get only the IOVs that belong to Tags that are contained by this Global Tag # get IOVs belonging to a Tag contained by this Global Tag tag_names = self.tags().get_members("tag_name").data() iovs_all_tags = self.session.query(IOV).filter(IOV.tag_name.in_(tag_names)) iovs_all_tags = apply_filters(iovs_all_tags, IOV, **kwargs) amount = kwargs["amount"] if "amount" in kwargs.keys() else None iovs_all_tags = iovs_all_tags.limit(amount).subquery() # now, join Global Tag Map table onto IOVs iovs_gt_tags = self.session.query(GlobalTagMap.tag_name, iovs_all_tags.c.since,\ iovs_all_tags.c.payload_hash, iovs_all_tags.c.insertion_time)\ .filter(GlobalTagMap.global_tag_name == self.name)\ .join(iovs_all_tags, GlobalTagMap.tag_name == iovs_all_tags.c.tag_name) iovs_gt_tags = iovs_gt_tags.order_by(iovs_all_tags.c.since).all() column_names = ["tag_name", "since", "payload_hash", "insertion_time"] all_iovs = map(lambda row : dict(zip(column_names, row)), iovs_gt_tags) all_iovs = data_formats._dicts_to_orm_objects(IOV, all_iovs) return data_sources.json_data_node.make(all_iovs)
def pending_tag_requests(self): if self.empty: return None # get a json_list of all global_tag_map requests associated with this global tag gt_map_requests = self.session.query(GlobalTagMapRequest.queue, GlobalTagMapRequest.record, GlobalTagMapRequest.label,\ GlobalTagMapRequest.tag, GlobalTagMapRequest.status)\ .filter(and_(GlobalTagMapRequest.queue == self.name, GlobalTagMapRequest.status.in_(["P", "R"]))).all() #column_names = ["queue", "tag", "record", "label", "status", "description", "submitter_id", "time_submitted", "last_edited"] column_names = ["queue", "record", "label", "tag", "status"] gt_map_requests = map(lambda row : dict(zip(column_names, map(to_timestamp, row))), gt_map_requests) gt_map_requests = data_formats._dicts_to_orm_objects(GlobalTagMapRequest, gt_map_requests) return data_sources.json_data_node.make(gt_map_requests)
def tags(self, **kwargs): """ Returns `amount` *Global Tag Maps* belonging to this Global Tag. """ kwargs["global_tag_name"] = self.name all_tags = self.session.query(GlobalTagMap.global_tag_name, GlobalTagMap.record, GlobalTagMap.label, GlobalTagMap.tag_name) all_tags = apply_filters(all_tags, GlobalTagMap, **kwargs) amount = kwargs["amount"] if "amount" in kwargs.keys() else None all_tags = all_tags.order_by(GlobalTagMap.tag_name).limit(amount).all() column_names = ["global_tag_name", "record", "label", "tag_name"] all_tags = map(lambda row : dict(zip(column_names, map(to_timestamp, row))), all_tags) all_tags = data_formats._dicts_to_orm_objects(GlobalTagMap, all_tags) return data_sources.json_data_node.make(all_tags)
def iovs(self, amount=10, valid=False): # join global_tag_map onto iov (where insertion time <= gt snapshot) by tag_name + return results valid_iovs_all_tags = self.session.query(IOV) if valid: valid_iovs_all_tags = valid_iovs_all_tags.filter(IOV.insertion_time < self.snapshot_time) valid_iovs_all_tags = valid_iovs_all_tags.subquery() valid_iovs_gt_tags = self.session.query(GlobalTagMap.tag_name, valid_iovs_all_tags.c.since,\ valid_iovs_all_tags.c.payload_hash, valid_iovs_all_tags.c.insertion_time)\ .join(valid_iovs_all_tags, GlobalTagMap.tag_name == valid_iovs_all_tags.c.tag_name)\ .filter(GlobalTagMap.global_tag_name == self.name)\ .order_by(valid_iovs_all_tags.c.insertion_time).limit(amount).all() column_names = ["tag_name", "since", "payload_hash", "insertion_time"] all_iovs = map(lambda row : dict(zip(column_names, map(to_timestamp, row))), valid_iovs_gt_tags) all_iovs = data_formats._dicts_to_orm_objects(IOV, all_iovs) return data_sources.json_data_node.make(all_iovs)
def tags(self, amount=10): """gt_maps = self.session.query(GlobalTagMap).filter(GlobalTagMap.global_tag_name == self.name).limit(amount).subquery() all_tags = self.session.query(gt_maps.c.record, gt_maps.c.label,\ Tag.name, Tag.time_type, Tag.object_type,\ Tag.synchronization, Tag.end_of_validity, Tag.description,\ Tag.last_validated_time, Tag.insertion_time,\ Tag.modification_time)\ .join(gt_maps, Tag.name == gt_maps.c.tag_name).order_by(Tag.name.asc()).limit(amount).all()""" all_tags = self.session.query(GlobalTagMap.global_tag_name, GlobalTagMap.record, GlobalTagMap.label, GlobalTagMap.tag_name)\ .filter(GlobalTagMap.global_tag_name == self.name)\ .order_by(GlobalTagMap.tag_name).limit(amount).all() column_names = ["global_tag_name", "record", "label", "tag_name"] all_tags = map(lambda row : dict(zip(column_names, map(to_timestamp, row))), all_tags) all_tags = data_formats._dicts_to_orm_objects(GlobalTagMap, all_tags) return data_sources.json_data_node.make(all_tags)
def tags_full(self, amount=10): tags = self.session.query(Tag).order_by(Tag.name).subquery() all_tags = self.session.query(GlobalTagMap.global_tag_name,\ GlobalTagMap.record,\ GlobalTagMap.label,\ tags.c.name, tags.c.time_type, tags.c.object_type,\ tags.c.synchronization, tags.c.end_of_validity, tags.c.description,\ tags.c.last_validated_time, tags.c.insertion_time,\ tags.c.modification_time)\ .join(tags, GlobalTagMap.tag_name == tags.c.name).filter(GlobalTagMap.global_tag_name == self.name) if amount != None: all_tags = all_tags.limit(amount) all_tags = all_tags.all() column_names = ["global_tag_name", "record", "label", "name", "time_type", "object_type", "synchronization",\ "end_of_validity", "description", "last_validated_time", "insertion_time", "modification_time"] all_tags = map(lambda row : dict(zip(column_names, map(to_timestamp, row))), all_tags) all_tags = data_formats._dicts_to_orm_objects(Tag, all_tags) return data_sources.json_data_node.make(all_tags)