def item_status(self, orderid, itemid='ALL', username=None, filters=None): user = User.by_username(username) if not isinstance(filters, dict): if filters is None: filters = dict() else: raise TypeError('supplied filters invalid') if orderid: orders = Order.where({'orderid': orderid}) else: orders = Order.where({'user_id': user.id}) search = dict() if 'status' in filters: search.update(status=(filters.get('status'), )) if 'name' in filters: search.update(name=(filters.get('name'), )) elif itemid is not "ALL": search.update(name=(itemid, )) response = dict() for order in orders: response[order.orderid] = order.scenes(search) return response
def kill_user_jobs(self, username): _response = dict() try: for job_name in User.by_username(username).active_hadoop_job_names(): _response[job_name] = self.kill_job(self.job_names_ids()[job_name]) except AttributeError, e: if "object has no attribute 'active_hadoop_job_names'" in e.message: _response['msg'] = 'user not found' else: raise e
def item_status(self, orderid, itemid='ALL', username=None): response = {} sql = "select oo.orderid, os.id scene_id, os.name, os.status, os.completion_date, os.note, " \ "os.product_dload_url, os.cksum_download_url, os.log_file_contents " \ "from ordering_order oo left join ordering_scene os on oo.id = " \ "os.order_id where oo.orderid = %s" user = User.by_username(username) if itemid is not "ALL": argtup = (orderid, itemid) sql += " AND os.name = %s;" else: argtup = (str(orderid)) sql += ";" with db_instance() as db: db.select(sql, argtup) items = [_ for _ in db.fetcharr] if items: id = items[0]['orderid'] response['orderid'] = {id: []} for item in items: try: ts = item['completion_date'].isoformat() except AttributeError: # completion_date not yet set ts = '' i = { 'scene_id': item['scene_id'], 'name': item['name'], 'status': item['status'], 'completion_date': ts, 'note': item['note'], 'product_dload_url': item['product_dload_url'], 'cksum_download_url': item['cksum_download_url'] } if user and user.is_staff(): i['log_file_contents'] = item['log_file_contents'] response['orderid'][id].append(i) else: response[ 'msg'] = 'sorry, no items matched orderid %s , itemid %s' % ( orderid, itemid) return response
def item_status(self, orderid, itemid='ALL', username=None): response = {} sql = "select oo.orderid, os.id scene_id, os.name, os.status, os.completion_date, os.note, " \ "os.product_dload_url, os.cksum_download_url, os.log_file_contents " \ "from ordering_order oo left join ordering_scene os on oo.id = " \ "os.order_id where oo.orderid = %s" user = User.by_username(username) if itemid is not "ALL": argtup = (orderid, itemid) sql += " AND os.name = %s;" else: argtup = (str(orderid)) sql += ";" with db_instance() as db: db.select(sql, argtup) items = [_ for _ in db.fetcharr] if items: id = items[0]['orderid'] response['orderid'] = {id: []} for item in items: try: ts = item['completion_date'].isoformat() except AttributeError: # completion_date not yet set ts = '' i = {'scene_id': item['scene_id'], 'name': item['name'], 'status': item['status'], 'completion_date': ts, 'note': item['note'], 'product_dload_url': item['product_dload_url'], 'cksum_download_url': item['cksum_download_url']} if user and user.is_staff(): i['log_file_contents'] = item['log_file_contents'] response['orderid'][id].append(i) else: response['msg'] = 'sorry, no items matched orderid %s , itemid %s' % (orderid, itemid) return response
def available_products(self, product_id, username): """ Check to see what products are available to user based on an input list of scenes :param product_id: list of desired inputs :param username: username :return: dictionary """ user = User.by_username(username) pub_prods = copy.deepcopy(OrderingProvider.sensor_products(product_id)) with open(os.path.join(__location__, 'domain/restricted.yaml')) as f: restricted = yaml.safe_load(f.read()) role = False if user.is_staff() else True restrict_all = restricted.get('all', {}) all_role = restrict_all.get('role', []) all_by_date = restrict_all.get('by_date', {}) all_ordering_rsctd = restrict_all.get('ordering', []) upd = {'date_restricted': {}, 'ordering_restricted': {}} for sensor_type, prods in pub_prods.items(): if sensor_type == 'not_implemented': continue stype = sensor_type.replace( '_collection', '') if '_collection' in sensor_type else sensor_type sensor_restr = restricted.get(stype, {}) role_restr = sensor_restr.get('role', []) + all_role by_date_restr = sensor_restr.get('by_date', {}) # All overrides any sensor related dates by_date_restr.update(all_by_date) outs = pub_prods[sensor_type]['products'] ins = pub_prods[sensor_type]['inputs'] if sensor_type in all_ordering_rsctd: for sc_id in ins: if sensor_type in upd['ordering_restricted']: upd['ordering_restricted'][sensor_type].append(sc_id) else: upd['ordering_restricted'][sensor_type] = [sc_id] pub_prods.pop(sensor_type) continue remove_me = [] if role: for prod in role_restr: try: outs.remove(prod) except ValueError: continue for prod in outs: if prod in by_date_restr: r = sensor_restr['by_date'][prod] for sc_id in ins: obj = sensor.instance(sc_id) julian = '{}{}'.format(obj.year, obj.doy) if not julian_date_check(julian, r): remove_me.append(prod) if prod in upd['date_restricted']: upd['date_restricted'][prod].append(sc_id) else: upd['date_restricted'][prod] = [sc_id] for rem in remove_me: try: outs.remove(rem) except ValueError: continue if upd['date_restricted']: pub_prods.update(date_restricted=upd['date_restricted']) if upd['ordering_restricted']: pub_prods.update(ordering_restricted=upd['ordering_restricted']) return pub_prods
def available_products(self, product_id, username): """ Check to see what products are available to user based on an input list of scenes :param product_id: list of desired inputs :param username: username :return: dictionary """ user = User.by_username(username) pub_prods = copy.deepcopy(OrderingProvider.sensor_products(product_id)) with open('api/domain/restricted.yaml') as f: restricted = yaml.load(f.read()) role = False if user.is_staff() else True restrict_all = restricted.get('all', {}) all_role = restrict_all.get('role', []) all_by_date = restrict_all.get('by_date', {}) upd = {'date_restricted': {}} for sensor_type, prods in pub_prods.items(): if sensor_type == 'not_implemented': continue sensor_restr = restricted.get(sensor_type, {}) role_restr = sensor_restr.get('role', []) + all_role by_date_restr = sensor_restr.get('by_date', {}) # All overrides any sensor related dates by_date_restr.update(all_by_date) outs = pub_prods[sensor_type]['products'] ins = pub_prods[sensor_type]['inputs'] remove_me = [] if role: for prod in role_restr: try: outs.remove(prod) except ValueError: continue for prod in outs: if prod in by_date_restr: r = sensor_restr['by_date'][prod] for sc_id in ins: obj = sensor.instance(sc_id) julian = '{}{}'.format(obj.year, obj.doy) if not julian_date_check(julian, r): remove_me.append(prod) if prod in upd['date_restricted']: upd['date_restricted'][prod].append(sc_id) else: upd['date_restricted'][prod] = [sc_id] for rem in remove_me: try: outs.remove(rem) except ValueError: continue if upd['date_restricted']: pub_prods.update(upd) return pub_prods