示例#1
0
文件: api.py 项目: pperezrubio/dough
def subscribe_item(context, region=None, item=None, item_type=None,
                   payment_type=None, resource_uuid=None, resource_name=None,
                   **kwargs):
    """
    """
    # values of product
    values = {
        'project_id': context.project_id,
        'resource_uuid': resource_uuid,
        'resource_name': resource_name,
        }
    try:
        # filter to get product_id
        products = _product_get_all(context, region=region, item=item,
                                    item_type=item_type,
                                    payment_type=payment_type)
        # TODO(lzyeval): check if products size is not 1
        values['product_id'] = products[0]['id']
        subscription_ref = db.subscription_create(context, values)
        db.subscription_extend(context,
                               subscription_ref['id'],
                               subscription_ref['created_at'])
    except Exception, e:
        # TODO(lzyeval): report
        raise
示例#2
0
文件: api.py 项目: pengyuwei/dough
def subscribe_item(context, region=None, item=None, item_type=None,
                   payment_type=None, resource_uuid=None, resource_name=None,
                   **kwargs):
    """
    """
    # values of product
    values = {
        'project_id': context.project_id,
        'resource_uuid': resource_uuid,
        'resource_name': resource_name,
        }
    try:
        # filter to get product_id
        products = _product_get_all(context, region=region, item=item,
                                    item_type=item_type,
                                    payment_type=payment_type)
        # TODO(lzyeval): check if products size is not 1
        values['product_id'] = products[0]['id']
        values['status'] = "verified"
        print "subscription_create", item, payment_type, values
        app = context.app
        app.info("subscribe_item:proj_id=" + str(context.project_id) + \
                " name:" + str(resource_name) + \
                "/" + str(item) + \
                "/" + str(payment_type) + \
                "/" + str(resource_uuid))
        subscription_ref = db.subscription_create(context, values)
        db.subscription_extend(context,
                               subscription_ref['id'],
                               subscription_ref['created_at'])
        print "item subscribed."
    except Exception, e:
        # TODO(lzyeval): report
        print "subscribe failed:", Exception, e
        raise
示例#3
0
文件: api.py 项目: pengyuwei/dough
def creating(context, subscription_id, tenant_id, item_name, resource_uuid,
             created_at, updated_at, expires_at,
             order_unit, order_size, price, currency, region_name,
             interval_unit, interval_size, is_prepaid):
    app = context.app
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        app.info("wait:%s creating, but %s not running." % (str(subscription_id), item_name))
        if created_at + relativedelta(minutes=10) < utils.utcnow():
            app.info("%s(%s) status creating-->error" % (str(subscription_id), item_name))
            db.subscription_error(context, subscription_id)
            # TODO(lzyeval): report
    else:
        interval_info = {
            interval_unit: interval_size,
            }
        app.info("%s(%s) status creating-->verify" % (str(subscription_id), item_name))
        db.subscription_verify(context, subscription_id)
        if is_prepaid:
            quantity = conn.get_usage(resource_uuid,
                    expires_at - relativedelta(**interval_info),
                    expires_at, order_size)
            print "creating and is running", tenant_id, subscription_id, \
                    quantity, order_size, "\033[1;33m", price, "\033[0m"
            app.info("creating %s:subid=%s,tid=%s,price=%s" % (item_name, subscription_id, tenant_id, str(price)))
            charge(context, tenant_id, subscription_id, quantity,
                   order_size, price)
        else:
            app.info("%s/%s/%s is_prepaid" % (tenant_id, str(subscription_id), item_name))
        db.subscription_extend(context, subscription_id,
                               expires_at + relativedelta(**interval_info))
示例#4
0
文件: api.py 项目: young8/dough
def creating(context, subscription_id, tenant_id, item_name, resource_uuid,
             created_at, updated_at, expires_at, order_unit, order_size, price,
             currency, region_name, interval_unit, interval_size, is_prepaid):
    app = context.app
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        app.info("wait:%s creating, but %s not running." %
                 (str(subscription_id), item_name))
        if created_at + relativedelta(minutes=10) < utils.utcnow():
            app.info("%s(%s) status creating-->error" %
                     (str(subscription_id), item_name))
            db.subscription_error(context, subscription_id)
            # TODO(lzyeval): report
    else:
        interval_info = {
            interval_unit: interval_size,
        }
        app.info("%s(%s) status creating-->verify" %
                 (str(subscription_id), item_name))
        db.subscription_verify(context, subscription_id)
        if is_prepaid:
            quantity = conn.get_usage(
                resource_uuid, expires_at - relativedelta(**interval_info),
                expires_at, order_size)
            print "creating and is running", tenant_id, subscription_id, \
                    quantity, order_size, "\033[1;33m", price, "\033[0m"
            app.info("creating %s:subid=%s,tid=%s,price=%s" %
                     (item_name, subscription_id, tenant_id, str(price)))
            charge(context, tenant_id, subscription_id, quantity, order_size,
                   price)
        else:
            app.info("%s/%s/%s is_prepaid" %
                     (tenant_id, str(subscription_id), item_name))
        db.subscription_extend(context, subscription_id,
                               expires_at + relativedelta(**interval_info))
示例#5
0
def subscribe_item(context,
                   region=None,
                   item=None,
                   item_type=None,
                   payment_type=None,
                   resource_uuid=None,
                   resource_name=None,
                   **kwargs):
    """
    """
    # values of product
    values = {
        'project_id': context.project_id,
        'resource_uuid': resource_uuid,
        'resource_name': resource_name,
    }
    try:
        # filter to get product_id
        products = _product_get_all(context,
                                    region=region,
                                    item=item,
                                    item_type=item_type,
                                    payment_type=payment_type)
        # TODO(lzyeval): check if products size is not 1
        values['product_id'] = products[0]['id']
        subscription_ref = db.subscription_create(context, values)
        db.subscription_extend(context, subscription_ref['id'],
                               subscription_ref['created_at'])
    except Exception, e:
        # TODO(lzyeval): report
        raise
示例#6
0
文件: api.py 项目: young8/dough
def subscribe_item(context, region=None, item=None, item_type=None,
                   payment_type=None, resource_uuid=None, resource_name=None,
                   **kwargs):
    """
    """
    # values of product
    values = {
        'project_id': context.project_id,
        'resource_uuid': resource_uuid,
        'resource_name': resource_name,
        }
    try:
        # filter to get product_id
        products = _product_get_all(context, region=region, item=item,
                                    item_type=item_type,
                                    payment_type=payment_type)
        # TODO(lzyeval): check if products size is not 1
        values['product_id'] = products[0]['id']
        values['status'] = "verified"
        print "subscription_create", item, payment_type, values
        app = context.app
        app.info("subscribe_item:proj_id=" + str(context.project_id) + \
                " name:" + str(resource_name) + \
                "/" + str(item) + \
                "/" + str(payment_type) + \
                "/" + str(resource_uuid))
        subscription_ref = db.subscription_create(context, values)
        db.subscription_extend(context,
                               subscription_ref['id'],
                               subscription_ref['created_at'])
        print "item subscribed."
    except Exception, e:
        # TODO(lzyeval): report
        print "subscribe failed:", Exception, e
        raise
示例#7
0
文件: api.py 项目: pperezrubio/dough
def verified(context, subscription_id, tenant_id, resource_uuid,
             created_at, deleted_at, expires_at,
             order_unit, order_size, price, currency, region_name, 
             item_name, interval_unit, interval_size, is_prepaid):
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        raise Exception()
    interval_info = {
        interval_unit: interval_size,
        }
    quantity = conn.get_usage(resource_uuid,
                              expires_at - relativedelta(**interval_info),
                              expires_at, order_size)
    charge(context, tenant_id, subscription_id, quantity, order_size, price)
    db.subscription_extend(context, subscription_id,
                           expires_at + relativedelta(**interval_info))
示例#8
0
def verified(context, subscription_id, tenant_id, resource_uuid,
             created_at, updated_at, expires_at,
             order_unit, order_size, price, currency, region_name, 
             item_name, interval_unit, interval_size, is_prepaid):
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        # FIXME(lzyeval): raise Exception()
        return
    interval_info = {
        interval_unit: interval_size,
        }
    quantity = conn.get_usage(resource_uuid,
                              expires_at - relativedelta(**interval_info),
                              expires_at, order_size)
    charge(context, tenant_id, subscription_id, quantity, order_size, price)
    db.subscription_extend(context, subscription_id,
                           expires_at + relativedelta(**interval_info))
示例#9
0
文件: __init__.py 项目: soloxf/dough
def creating(context, subscription_id, tenant_id, resource_uuid,
             created_at, deleted_at, expires_at,
             order_unit, order_size, price, currency, region_name, 
             item_name, interval_unit, interval_size, is_prepaid):
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        if created_at + relativedelta(minutes=10) < utils.utcnow():
            db.subscription_error(context, subscription_id)
            # TODO(lzyeval): report
    else:
        interval_info = {
            interval_unit: interval_size,
            }
        db.subscription_verify(context, subscription_id)
        if is_prepaid:
            quantity = conn.get_usage(resource_uuid,
                    expires_at - relativedelta(**interval_info),
                    expires_at, order_size)
            charge(context, tenant_id, subscription_id, quantity, order_size, price)
        db.subscription_extend(context, subscription_id,
                               expires_at + relativedelta(**interval_info))
示例#10
0
 def test_subscription_extend(self):
     self.truncate_table("regions")
     self.truncate_table("items")
     self.truncate_table("item_types")
     self.truncate_table("payment_types")
     self.truncate_table("products")
     self.truncate_table("subscriptions")
     region_ref = db.region_create(self.context, {'name': 'a_region'})
     item_ref = db.item_create(self.context, {'name': 'an_item'})
     item_type_ref = db.item_type_create(self.context,
                                         {'name': 'an_item_type'})
     payment_type_ref = db.payment_type_create(
         self.context, {
             'name': 'a_payment_type',
             'interval_unit': 'days',
             'interval_size': 12345,
             'is_prepaid': False
         })
     values = {
         'region_id': region_ref.id,
         'item_id': item_ref.id,
         'item_type_id': item_type_ref.id,
         'payment_type_id': payment_type_ref.id,
         'order_unit': 'some_measure',
         'order_size': 1,
         'price': 11.24,
         'currency': 'CNY',
     }
     product_ref = db.product_create(self.context, values)
     values = {
         'project_id': self.context.project_id,
         'product_id': product_ref.id,
         'resource_uuid': self.resource_uuid,
         'resource_name': self.resource_name,
     }
     expect = db.subscription_create(self.context, values)
     datetime_to = datetime.datetime.now() + datetime.timedelta(days=1)
     db.subscription_extend(self.context, expect.id, datetime_to)
     actual = db.subscription_get(self.context, expect.id)
     self.assertEqual(datetime_to.day, actual['expires_at'].day)
示例#11
0
文件: api.py 项目: pengyuwei/dough
def verified(context, subscription_id, tenant_id, item_name, resource_uuid,
             created_at, updated_at, expires_at,
             order_unit, order_size, price, currency, region_name,
             interval_unit, interval_size, is_prepaid):
    app = context.app
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid, tenant_id=tenant_id):
        # FIXME(lzyeval): raise Exception()
        app.info("%s verified, but %s not running." % (str(subscription_id), item_name))
        return
    interval_info = {
        interval_unit: interval_size,
        }
    quantity = conn.get_usage(resource_uuid,
                              expires_at - relativedelta(**interval_info),
                              expires_at, order_size)
    print "verified", tenant_id, subscription_id, \
                    quantity, order_size, "\033[1;33m", price, "\033[0m"
    app.info("verified %s:subid=%s,tid=%s,price=%s" % (item_name, subscription_id, tenant_id, str(price)))
    charge(context, tenant_id, subscription_id, quantity, order_size, price)
    db.subscription_extend(context, subscription_id,
                           expires_at + relativedelta(**interval_info))
示例#12
0
def creating(context, subscription_id, tenant_id, resource_uuid,
             created_at, updated_at, expires_at,
             order_unit, order_size, price, currency, region_name, 
             item_name, interval_unit, interval_size, is_prepaid):
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid):
        if created_at + relativedelta(minutes=10) < utils.utcnow():
            db.subscription_error(context, subscription_id)
            # TODO(lzyeval): report
    else:
        interval_info = {
            interval_unit: interval_size,
            }
        db.subscription_verify(context, subscription_id)
        if is_prepaid:
            quantity = conn.get_usage(resource_uuid,
                    expires_at - relativedelta(**interval_info),
                    expires_at, order_size)
            charge(context, tenant_id, subscription_id, quantity,
                   order_size, price)
        db.subscription_extend(context, subscription_id,
                               expires_at + relativedelta(**interval_info))
示例#13
0
 def test_subscription_extend(self):
     self.truncate_table("regions")
     self.truncate_table("items")
     self.truncate_table("item_types")
     self.truncate_table("payment_types")
     self.truncate_table("products")
     self.truncate_table("subscriptions")
     region_ref = db.region_create(self.context, {'name': 'a_region'})
     item_ref = db.item_create(self.context, {'name': 'an_item'})
     item_type_ref = db.item_type_create(self.context,
                                         {'name': 'an_item_type'})
     payment_type_ref = db.payment_type_create(self.context,
                                               {'name': 'a_payment_type',
                                                'interval_unit': 'days',
                                                'interval_size': 12345,
                                                'is_prepaid': False})
     values = {
         'region_id': region_ref.id,
         'item_id': item_ref.id,
         'item_type_id': item_type_ref.id,
         'payment_type_id': payment_type_ref.id,
         'order_unit': 'some_measure',
         'order_size': 1,
         'price': 11.24,
         'currency': 'CNY',
         }
     product_ref = db.product_create(self.context, values)
     values = {
         'project_id': self.context.project_id,
         'product_id': product_ref.id,
         'resource_uuid': self.resource_uuid,
         'resource_name': self.resource_name,
         }
     expect = db.subscription_create(self.context, values)
     datetime_to = datetime.datetime.now() + datetime.timedelta(days=1)
     db.subscription_extend(self.context, expect.id, datetime_to)
     actual = db.subscription_get(self.context, expect.id)
     self.assertEqual(datetime_to.day, actual['expires_at'].day)
示例#14
0
文件: api.py 项目: young8/dough
def verified(context, subscription_id, tenant_id, item_name, resource_uuid,
             created_at, updated_at, expires_at, order_unit, order_size, price,
             currency, region_name, interval_unit, interval_size, is_prepaid):
    app = context.app
    conn = driver.get_connection(item_name)
    if not conn.is_running(resource_uuid, tenant_id=tenant_id):
        # FIXME(lzyeval): raise Exception()
        app.info("%s verified, but %s not running." %
                 (str(subscription_id), item_name))
        return
    interval_info = {
        interval_unit: interval_size,
    }
    quantity = conn.get_usage(resource_uuid,
                              expires_at - relativedelta(**interval_info),
                              expires_at, order_size)
    print "verified", tenant_id, subscription_id, \
                    quantity, order_size, "\033[1;33m", price, "\033[0m"
    app.info("verified %s(%s/%s/%s)" \
             % (subscription_id, item_name, str(price), str(expires_at)))
    charge(context, tenant_id, subscription_id, quantity, order_size, price)
    db.subscription_extend(context, subscription_id,
                           expires_at + relativedelta(**interval_info))
示例#15
0
 def test_subscribe_item(self):
     self.mox.StubOutWithMock(db, 'region_get_by_name')
     self.mox.StubOutWithMock(db, 'item_get_by_name')
     self.mox.StubOutWithMock(db, 'item_type_get_by_name')
     self.mox.StubOutWithMock(db, 'payment_type_get_by_name')
     self.mox.StubOutWithMock(db, 'product_get_all')
     self.mox.StubOutWithMock(db, 'subscription_create')
     self.mox.StubOutWithMock(db, 'subscription_extend')
     db.region_get_by_name(self.context, self.region_name).\
             AndReturn(self.region)
     db.item_get_by_name(self.context, self.item_name).AndReturn(self.item)
     db.item_type_get_by_name(self.context, self.item_type_name).\
             AndReturn(self.item_type)
     db.payment_type_get_by_name(self.context, self.payment_type_name).\
             AndReturn(self.payment_type)
     db.product_get_all(self.context,
                        filters={'region_id': self.region_id,
                                 'item_id': self.item_id,
                                 'item_type_id': self.item_type_id,
                                 'payment_type_id': self.payment_type_id}).\
                                         AndReturn(self.products)
     db.subscription_create(self.context,
                            {'project_id': self.context.project_id,
                             'product_id': self.product_id,
                             'resource_uuid': self.resource_uuid,
                             'resource_name': self.resource_name}).\
                                     AndReturn(self.subscription)
     db.subscription_extend(self.context, self.subscription_id,
                            self.created_at).AndReturn(None)
     self.mox.ReplayAll()
     result = api.subscribe_item(self.context, self.region_name,
                                 self.item_name, self.item_type_name,
                                 self.payment_type_name, self.resource_uuid,
                                 self.resource_name)
     self.mox.VerifyAll()
     self.assertEqual(result, {})
示例#16
0
 def test_subscribe_item(self):
     self.mox.StubOutWithMock(db, 'region_get_by_name')
     self.mox.StubOutWithMock(db, 'item_get_by_name')
     self.mox.StubOutWithMock(db, 'item_type_get_by_name')
     self.mox.StubOutWithMock(db, 'payment_type_get_by_name')
     self.mox.StubOutWithMock(db, 'product_get_all')
     self.mox.StubOutWithMock(db, 'subscription_create')
     self.mox.StubOutWithMock(db, 'subscription_extend')
     db.region_get_by_name(self.context, self.region_name).\
             AndReturn(self.region)
     db.item_get_by_name(self.context, self.item_name).AndReturn(self.item)
     db.item_type_get_by_name(self.context, self.item_type_name).\
             AndReturn(self.item_type)
     db.payment_type_get_by_name(self.context, self.payment_type_name).\
             AndReturn(self.payment_type)
     db.product_get_all(self.context,
                        filters={'region_id': self.region_id,
                                 'item_id': self.item_id,
                                 'item_type_id': self.item_type_id,
                                 'payment_type_id': self.payment_type_id}).\
                                         AndReturn(self.products)
     db.subscription_create(self.context,
                            {'project_id': self.context.project_id,
                             'product_id': self.product_id,
                             'resource_uuid': self.resource_uuid,
                             'resource_name': self.resource_name}).\
                                     AndReturn(self.subscription)
     db.subscription_extend(self.context, self.subscription_id,
                            self.created_at).AndReturn(None)
     self.mox.ReplayAll()
     result = api.subscribe_item(self.context, self.region_name,
                                 self.item_name, self.item_type_name,
                                 self.payment_type_name, self.resource_uuid,
                                 self.resource_name)
     self.mox.VerifyAll()
     self.assertEqual(result, {})