예제 #1
0
파일: offer.py 프로젝트: ljmcgann/esi-leap
    def delete(self, offer_id):
        request = pecan.request.context
        cdict = request.to_policy_values()
        policy.authorize('esi_leap:offer:delete', cdict, cdict)

        o_id = offer.Offer.get(offer_id)

        permission = []
        for o in o_id:
            try:
                if o.project_id != request.project_id:
                    policy.authorize('esi_leap:offer:offer_admin', cdict,
                                     cdict)
                permission.append(o)
            except oslo_policy.PolicyNotAuthorized:
                continue
            if len(permission) > 1:
                raise exception.ContractDuplicateName(name=offer_id)

        if len(permission) == 0:
            raise exception.OfferNotFound(offer_id=offer_id)

        OffersController._verify_resource_permission(cdict, o_id[0].to_dict())

        o_id[0].cancel()
예제 #2
0
    def create(self, context=None):
        updates = self.obj_get_changes()
        updates['uuid'] = uuidutils.generate_uuid()

        if 'offer_uuid' not in updates:
            raise exception.ContractNoOfferUUID()

        related_offer = self.dbapi.offer_get_by_uuid(updates['offer_uuid'])
        if related_offer is None:
            raise exception.OfferNotFound(offer_uuid=updates['offer_uuid'])

        if related_offer.status != statuses.AVAILABLE:
            raise exception.OfferNotAvailable(offer_uuid=related_offer.uuid,
                                              status=related_offer.status)

        if 'start_time' not in updates:
            updates['start_time'] = datetime.datetime.now()

        if 'end_time' not in updates:
            q = self.dbapi.offer_get_first_availability(related_offer,
                                                        updates['start_time'])
            if q is None:
                updates['end_time'] = related_offer.end_time
            else:
                updates['end_time'] = q.start_time

        self.dbapi.offer_verify_availability(related_offer,
                                             updates['start_time'],
                                             updates['end_time'])

        db_contract = self.dbapi.contract_create(updates)
        self._from_db_object(context, self, db_contract)
예제 #3
0
파일: utils.py 프로젝트: DanNiESh/esi-leap
def get_offer_authorized(uuid_or_name, cdict, status_filter=None):
    if uuidutils.is_uuid_like(uuid_or_name):
        o = offer.Offer.get(uuid_or_name)
        offer_objs = []

        if not status_filter or o.status == status_filter:
            try:
                if o.project_id != cdict['project_id']:
                    policy.authorize('esi_leap:offer:offer_admin', cdict,
                                     cdict)
                offer_objs.append(o)
            except oslo_policy.PolicyNotAuthorized:
                pass

    else:
        try:
            policy.authorize('esi_leap:offer:offer_admin', cdict, cdict)
            offer_objs = offer.Offer.get_all({
                'name': uuid_or_name,
                'status': status_filter
            })

        except oslo_policy.PolicyNotAuthorized:
            offer_objs = offer.Offer.get_all({
                'name': uuid_or_name,
                'project_id': cdict['project_id'],
                'status': status_filter
            })

    if len(offer_objs) == 0:
        raise exception.OfferNotFound(offer_uuid=uuid_or_name)
    elif len(offer_objs) > 1:
        raise exception.OfferDuplicateName(name=uuid_or_name)

    return offer_objs[0]
예제 #4
0
def get_offer(uuid_or_name, status_filters=[]):
    if uuidutils.is_uuid_like(uuid_or_name):
        o = offer_obj.Offer.get(uuid_or_name)
        if not status_filters or o.status in status_filters:
            return o
        else:
            raise exception.OfferNotFound(offer_uuid=uuid_or_name)
    else:
        offers = offer_obj.Offer.get_all({'name': uuid_or_name,
                                          'status': status_filters})

        if len(offers) != 1:
            if len(offers) == 0:
                raise exception.OfferNotFound(offer_uuid=uuid_or_name)
            else:
                raise exception.OfferDuplicateName(name=uuid_or_name)

        return offers[0]
예제 #5
0
파일: api.py 프로젝트: DanNiESh/esi-leap
def offer_destroy(offer_uuid):
    query = model_query(models.Offer, get_session())
    offer_ref = query.filter_by(uuid=offer_uuid).one_or_none()

    if not offer_ref:
        raise exception.OfferNotFound(offer_uuid=offer_uuid)

    model_query(models.Offer,
                get_session()).filter_by(uuid=offer_uuid).delete()
예제 #6
0
def offer_get(context, offer_uuid):
    query = model_query(context, models.Offer, get_session())
    result = query.filter_by(uuid=offer_uuid).first()
    if not result:
        raise exception.OfferNotFound(offer_uuid=offer_uuid)
    if not context.is_admin:
        if context.project_id != result.project_id:
            raise exception.OfferNoPermission(offer_uuid=offer_uuid)
    return result
예제 #7
0
파일: api.py 프로젝트: tzumainn/esi-leap
def offer_destroy(offer_uuid):
    with _session_for_write() as session:
        query = model_query(models.Offer)
        offer_ref = query.filter_by(uuid=offer_uuid).one_or_none()

        if not offer_ref:
            raise exception.OfferNotFound(offer_uuid=offer_uuid)

        model_query(models.Offer).filter_by(uuid=offer_uuid).delete()
        session.flush()
예제 #8
0
파일: utils.py 프로젝트: DanNiESh/esi-leap
def get_offer(uuid_or_name, status_filter=None):
    if uuidutils.is_uuid_like(uuid_or_name):
        o = offer.Offer.get(uuid_or_name)
        if not status_filter or o.status == status_filter:
            return o
        else:
            raise exception.OfferNotFound(offer_uuid=uuid_or_name)
    else:
        offer_objs = offer.Offer.get_all({
            'name': uuid_or_name,
            'status': status_filter
        })

        if len(offer_objs) > 1:
            raise exception.OfferDuplicateName(name=uuid_or_name)
        elif len(offer_objs) == 0:
            raise exception.OfferNotFound(offer_uuid=uuid_or_name)

        return offer_objs[0]
예제 #9
0
파일: offer.py 프로젝트: ljmcgann/esi-leap
    def get_one(self, offer_id):
        request = pecan.request.context
        cdict = request.to_policy_values()
        policy.authorize('esi_leap:offer:get', cdict, cdict)

        o_id = offer.Offer.get(offer_id)

        if len(o_id) > 1:
            raise exception.OfferDuplicateName(name=offer_id)
        elif len(o_id) == 0:
            raise exception.OfferNotFound(offer_uuid=offer_id)

        o = OffersController._add_offer_availabilities(o_id[0])

        return Offer(**o)
예제 #10
0
def offer_destroy(context, offer_uuid):
    offer_ref = offer_get(context, offer_uuid)
    if not offer_ref:
        raise exception.OfferNotFound(offer_uuid=offer_uuid)
    if not context.is_admin:
        if context.project_id != offer_ref.project_id:
            raise exception.OfferNoPermission(offer_uuid=offer_uuid)
        resource = ro_factory.ResourceObjectFactory.get_resource_object(
            offer_ref.resource_type, offer_ref.resource_uuid)
        if not resource.is_resource_admin(context.project_id):
            raise exception.ResourceNoPermission(
                resource_type=offer_ref.resource_type,
                resource_uuid=offer_ref.resource_uuid)

    model_query(context, models.Offer,
                get_session()).filter_by(uuid=offer_uuid).delete()
예제 #11
0
    def post(self, new_contract):
        request = pecan.request.context
        cdict = request.to_policy_values()
        policy.authorize('esi_leap:contract:create', cdict, cdict)

        contract_dict = new_contract.to_dict()
        contract_dict['project_id'] = request.project_id
        contract_dict['uuid'] = uuidutils.generate_uuid()

        if new_contract.offer_uuid_or_name is None:
            raise exception.ContractNoOfferUUID()

        o_objects = offer.Offer.get(new_contract.offer_uuid_or_name)
        if len(o_objects) > 1:
            raise exception.OfferDuplicateName(
                name=new_contract.offer_uuid_or_name)
        elif len(o_objects) == 0:
            raise exception.OfferNotFound(
                offer_uuid=new_contract.offer_uuid_or_name)

        related_offer = o_objects[0]
        contract_dict['offer_uuid'] = related_offer.uuid

        if 'start_time' not in contract_dict:
            contract_dict['start_time'] = datetime.datetime.now()

        if 'end_time' not in contract_dict:
            q = related_offer.get_first_availability(
                contract_dict['start_time'])
            if q is None:
                contract_dict['end_time'] = related_offer.end_time
            else:
                contract_dict['end_time'] = q.start_time

        c = contract.Contract(**contract_dict)
        c.create(request)
        return Contract(**c.to_dict())