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
示例#2
0
 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
示例#3
0
 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
示例#4
0
    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
示例#5
0
    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
示例#7
0
    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