コード例 #1
0
    def init(self):
        '''
                @description:
                    intializes:
                        - configurations
                        - db connections
            '''
        Configuration.initialize()
        values = Configuration.values()

        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

        self.redisconn = gredis.client.Connection(
            address=str(values['redis_servers']['sms_api']['host']),
            port=int(values['redis_servers']['sms_api']['port']))
        self.redisconn.connect()

        print '-------'
        print 'redis:'
        print 'port: %s' % values['redis_servers']['sms_api']['port']
        print 'host: %s' % values['redis_servers']['sms_api']['host']
        print '\n'
        print 'sql:'
        print 'port: %s' % values['mysql-db']['sms_api_config']['host']
        print 'host: %s' % values['mysql-db']['sms_api_config']['port']
        print 'db: %s' % values['mysql-db']['sms_api_config']['db']
        print 'user: %s' % values['mysql-db']['sms_api_config']['user']
        print 'password: %s' % values['mysql-db']['sms_api_config']['password']
        print '-------'
コード例 #2
0
def main():
    values = Configuration.values()

    print values
    dbconn = SQLUtils(
        host=values['mysql-db']['sms_api_config']['host'],
        port=values['mysql-db']['sms_api_config']['port'],
        database=values['mysql-db']['sms_api_config']['db'],
        user=values['mysql-db']['sms_api_config']['user'],
        password=values['mysql-db']['sms_api_config']['password'])

    result = dbconn.run_query(query_type="select", query=query, fetchall=True)

    q = []

    for r in result:
        client_id = create_sha256_signature(r['suffix'], r['email'])
        secret_key = create_client_id(r['email'])
        print client_id, secret_key, r['email']

        print update_query % (client_id, secret_key, r['id'])
        q.append(update_query % (client_id, secret_key, r['id']))
        dbconn.run_query("update", update_query, None, None)
        '-------------------------'

    for i in q:
        print i + ';'
コード例 #3
0
 def init(self):
     '''
         @description:
             intializes:
                 - configurations
                 - db connections
     '''
     Configuration.initialize()
     values = Configuration.values()
     self.dbconn = SQLUtils(
         host=values['mysql-db']['sms_api_config']['host'],
         port=values['mysql-db']['sms_api_config']['port'],
         database=values['mysql-db']['sms_api_config']['db'],
         user=values['mysql-db']['sms_api_config']['user'],
         password=values['mysql-db']['sms_api_config']['password'])
コード例 #4
0
    def __init__(self):
        '''
            @description:
                - initializes DB connections
                and other configurations
        '''
        self.pool = Pool(1000)  # used for spawning threads

        values = Configuration.values()

        # -- initializes DB --
        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

        print '-------'
        print 'DB:'
        print 'port: %s' % values['mysql-db']['sms_api_config']['host']
        print 'host: %s' % values['mysql-db']['sms_api_config']['port']
        print 'db: %s' % values['mysql-db']['sms_api_config']['db']
        print 'user: %s' % values['mysql-db']['sms_api_config']['user']
        print 'password: %s' % values['mysql-db']['sms_api_config']['password']
        print '-------'

        # -- initializes dragonpay related config --
        self.api_url = values['dragonpay']['api_url']
        self.merchant_id = values['dragonpay']['merchant_id']
        self.secret_key = values['dragonpay']['secret_key']
        self.host = values['dragonpay']['host']
        self.api_get_txn_status_url = values['dragonpay'][
            'api_get_txn_status_url']
        self.uri = values['dragonpay']['uri']

        parse_command_line()

        if options.config == 'prod':
            url = URL('https://%s' % values['dragonpay']['host'])
        else:
            url = URL('http://%s' % values['dragonpay']['host'])

        self.http_conn = HTTPClient.from_url(url, concurrency=10)
コード例 #5
0
class BaseSuffixUpdater(object):

    dbconn = None
    redisconn = None

    query_del_from_claimed_suffix = """delete from claimed_suffixes where account_id='%s'"""
    query_del_from_accounts = """update accounts set suffix=NULL, package='INACTIVE' where id='%s'"""
    key_cached_suffix = 'SMSAPI_%s'
    key_cached_suffix_credits = 'SMSAPI_%s_CREDITS'
    key_zero_credit_date = 'ZERO_CREDIT_DATE'

    def init(self):
        '''
                @description:
                    intializes:
                        - configurations
                        - db connections
            '''
        Configuration.initialize()
        values = Configuration.values()

        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

        self.redisconn = gredis.client.Connection(
            address=str(values['redis_servers']['sms_api']['host']),
            port=int(values['redis_servers']['sms_api']['port']))
        self.redisconn.connect()

        print '-------'
        print 'redis:'
        print 'port: %s' % values['redis_servers']['sms_api']['port']
        print 'host: %s' % values['redis_servers']['sms_api']['host']
        print '\n'
        print 'sql:'
        print 'port: %s' % values['mysql-db']['sms_api_config']['host']
        print 'host: %s' % values['mysql-db']['sms_api_config']['port']
        print 'db: %s' % values['mysql-db']['sms_api_config']['db']
        print 'user: %s' % values['mysql-db']['sms_api_config']['user']
        print 'password: %s' % values['mysql-db']['sms_api_config']['password']
        print '-------'

    def select_suffix(self,
                      package='FREE',
                      suffix='',
                      extra_query=None,
                      days='30'):
        '''
            @description:
                - returns a list of ids and suffixes based
                from the params passed
        '''

        if not extra_query:
            query = """select a.id, a.suffix, b.date_created from accounts as a,
                claimed_suffixes as b where a.status = 'ACTIVE' and a.package = '%s'
                and a.suffix = b.suffix and a.id = b.account_id and b.date_created + INTERVAL '%s' DAY 
                < now()""" % (package, str(days))
        else:
            query = """select a.id, a.suffix, b.date_created from accounts as a,
                claimed_suffixes as b where a.status = 'ACTIVE' and a.package = '%s'
                and a.suffix = b.suffix and a.id = b.account_id and %s""" % (
                package, extra_query)

        print '\n - select suffix QUERY: - \n'
        print ' '.join(query.split())

        try:
            return self.dbconn.run_query(query_type='select',
                                         query=query,
                                         fetchall=True)
        except Exception, e:
            print e
        return None
コード例 #6
0
    'paypal_website_domain']  #   'www.sandbox.paypal.com'

# used to point to website and say that transaction is now underway (after checkout)
website_callback_url = paypal_settings[
    'website_base_url']  #'http://10.11.2.225:28003'

# get the maximum amount an account can purchase per month using paypal
max_purchase_value_per_month = paypal_settings['max_purchase_value_per_month']

# setup the paypal mysql dao
# must implement the dao interface

mysql_cfg = Configuration.values()['mysql-db']['sms_api_config']

sql_util = SQLUtils(host=mysql_cfg['host'],
                    port=mysql_cfg['port'],
                    database=mysql_cfg['db'],
                    user=mysql_cfg['user'],
                    password=mysql_cfg['password'])

mysql_dao = PaypalMysqlDAO(sql_util=sql_util)
PaypalToken.db_util = mysql_dao

PaypalToken.cache_dao = PaypalPaymentCheckout.paypal_cache_dao = PaypalRedisDao(
    redisconn=redisconn,
    config_mode=config_mode,
    paypal_pending_payment_flag_ttl=paypal_settings['purchase_waiting_time'])

PaypalPaymentCheckout.purchase_history_dao = PaypalPurchaseHistoryMysqlDAO(
    sql_util=sql_util)
コード例 #7
0
class ExpiredCheckoutDeleter(object):

    dbconn = None

    def main(self):
        '''
            @description:
                - encapsulates the whole checkout
                deletion (for expired) of process
        '''
        self.init()
        deleted_count = self.delete_expired_checkouts()
        print 'deleted %s checkout rows' % deleted_count

    def init(self):
        '''
            @description:
                intializes:
                    - configurations
                    - db connections
        '''
        Configuration.initialize()
        values = Configuration.values()
        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

    def delete_expired_checkouts(self):
        '''
            @description:
                - deletes the expired checkouts after
                1 week of expiration
        '''

        # --- logging purpose only ---

        ec_deleter_logger = sms_api_logger.StandAloneExpiredCheckoutDeleterLogger(
        )

        query = """select * from checkout where expired='1' 
            and (date_expiry + interval 7 day) <= now();"""

        expired_checkouts = self.dbconn.run_query(query_type='select',
                                                  query=query)

        ec_deleter_logger.info('expired checkouts to be deleted',
                               {'checkouts': str(expired_checkouts)})

        # --- start deletion ---

        query = """delete from checkout where expired='1' 
            and (date_expiry + interval 7 day) <= now();"""

        print '\n - delete expired checkout query - \n'
        print ' '.join(query.split())

        try:
            return self.dbconn.run_query(query_type='delete', query=query)
        except Exception, e:
            print e
        return None
コード例 #8
0
    send_testmin_vercode, verify_testmin_vercode, \
    save_testmin, generate_code
"""
dbconn = SQLUtils(host=values[options.config]['mysql-db']['sms_api_config']['host'],
    port=values[options.config]['mysql-db']['sms_api_config']['port'],
    database=values[options.config]['mysql-db']['sms_api_config']['db'],
    user=values[options.config]['mysql-db']['sms_api_config']['user'],
    password=values[options.config]['mysql-db']['sms_api_config']['password'])

redisconn = gredis.client.Connection(address=str(values[options.config]['redis_servers']['sms_api_match']['host']), 
    port=int(values[options.config]['redis_servers']['sms_api_match']['port']))
"""

dbconn = SQLUtils(host='10.11.2.225',
                  port=3306,
                  database='sms_api',
                  user='******',
                  password='')

redisconn = gredis.client.Connection(address='10.11.2.238', port=6414)

redisconn.connect()

Account.dbconn = dbconn
Verification.dbconn = dbconn
Verification.redisconn = redisconn
'''
    ERROR TESTS
'''

testmin = '09111111111'
コード例 #9
0
        invalid_long_code = 'c70a4ef428ca65ee0d8b23fd3a33bf1b'
        Verification.get( code=invalid_long_code )
        
        
if __name__ == '__main__':


    parse_command_line()
    Configuration.initialize()
    
    values = Configuration.values()


    dbconn = SQLUtils(host=values['mysql-db']['sms_api_config']['host'],
        port=values['mysql-db']['sms_api_config']['port'],
        database=values['mysql-db']['sms_api_config']['db'],
        user=values['mysql-db']['sms_api_config']['user'],
        password=values['mysql-db']['sms_api_config']['password'])


    Verification.cache_dao
    Verification.dao = VerificationDao( dbconn=dbconn )
        
    redisconn = gredis.client.Connection(  address=str(values['redis_servers']['sms_api']['host']), port=int(values['redis_servers']['sms_api']['port']))
    redisconn.connect()
    print redisconn
    Verification.cache_dao = EmailVerificationRedisDAO( redis_conn=redisconn )

    

    
コード例 #10
0
class CheckoutUpdater(object):

    dbconn = None

    def main(self):
        '''
            @description:
                - encapsulates the whole checkout
                updating process
        '''
        self.init()
        # co_ids = self.get_expired_checkouts()
        updated_count = self.update_checkout_expired_field()
        print 'Updated %s checkout rows' % updated_count

    def init(self):
        '''
            @description:
                intializes:
                    - configurations
                    - db connections
        '''
        Configuration.initialize()
        values = Configuration.values()
        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

    def update_checkout_expired_field(self, expired='1'):
        '''
            @description:
                - updates the column expired in checkout
                table
            @param expired (0 | 1): 
                - 0 for not expired
                - 1 for expired
            @param checkout_ids(list of dicts)
                - i.e. [{'id': 1}, {'id': 10}, {'id': 9}]
        '''

        # query = """update checkout set expired=%s where status = 'PENDING'
        # and expired=0 and (date_created + INTERVAL 30 MINUTE ) < now();""" % (
        # expired)

        # checkout_logger = sms_api_logger.StandAloneCheckoutUpdaterLogger()

        query = """update checkout set expired=%s, date_updated=now()
            where (status IS NULL or status = 'PENDING') 
            and expired=0 and date_expiry < now();""" % (expired)

        # checkout_logger.info('updating checkout table',
        # {'account_id': account_id, 'mobile': testmin})

        print '\n - update expired field in checkout table - \n'
        print ' '.join(query.split())

        try:
            return self.dbconn.run_query(query_type='update', query=query)
        except Exception, e:
            print e
        return None
コード例 #11
0
class StatusUpdater(object):

    dbconn = None

    # --- queries that will be used in this feature ---
    query_sel_dragonpay_pending_status = """SELECT id FROM checkout WHERE mode_of_payment='DRAGONPAY' and (status='PENDING') ORDER BY id ASC"""
    query_update_dragonpay_status = """UPDATE dragonpay SET status='%s' WHERE txn_id='%s'"""

    def __init__(self):
        '''
            @description:
                - initializes DB connections
                and other configurations
        '''
        self.pool = Pool(1000)  # used for spawning threads

        values = Configuration.values()

        # -- initializes DB --
        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

        print '-------'
        print 'DB:'
        print 'port: %s' % values['mysql-db']['sms_api_config']['host']
        print 'host: %s' % values['mysql-db']['sms_api_config']['port']
        print 'db: %s' % values['mysql-db']['sms_api_config']['db']
        print 'user: %s' % values['mysql-db']['sms_api_config']['user']
        print 'password: %s' % values['mysql-db']['sms_api_config']['password']
        print '-------'

        # -- initializes dragonpay related config --
        self.api_url = values['dragonpay']['api_url']
        self.merchant_id = values['dragonpay']['merchant_id']
        self.secret_key = values['dragonpay']['secret_key']
        self.host = values['dragonpay']['host']
        self.api_get_txn_status_url = values['dragonpay'][
            'api_get_txn_status_url']
        self.uri = values['dragonpay']['uri']

        parse_command_line()

        if options.config == 'prod':
            url = URL('https://%s' % values['dragonpay']['host'])
        else:
            url = URL('http://%s' % values['dragonpay']['host'])

        self.http_conn = HTTPClient.from_url(url, concurrency=10)

    def main(self):
        '''
            @description:
                - encapsulates the whole dragonpay
                transaction status update process
        '''

        payment_logger = sms_api_logger.PaymentLogger()

        pending_list = self.select_pending_status()
        if pending_list:
            for p in pending_list:
                # status = self.pool.spawn(self.get_txn_status, checkout_id=p)
                txn_id = DRAGONPAY_TXN_PREFIX % p['id']
                lock_key = 'lock:%s' % str(txn_id)

                try:
                    timeout = gevent.Timeout(TIMEOUT)
                    timeout.start()

                    if LockCache.lock(key=lock_key):
                        # locks txn to avoid multiple processes
                        return

                    else:
                        status = self.get_txn_status(txn_id)
                        if status and status[0] == 'S':  # success,
                            payment_logger.info('dragonpay success', {
                                'txn_id': txn_id,
                                'status': status[0]
                            })
                            on_payment_success_dragonpay(txn_id=txn_id,
                                                         good_response=True)
                        elif status[0] in ['F', 'V']:  # failure, unknown, void
                            payment_logger.info('dragonpay failed', {
                                'txn_id': txn_id,
                                'status': status[0]
                            })
                            on_payment_success_dragonpay(txn_id=txn_id,
                                                         good_response=False)
                        else:
                            # do nothing as of now
                            # refund, chargeback, authorized
                            pass

                        # -- updates dragonpay status --
                        self.update_dragonpay_status(txn_id=txn_id,
                                                     status=status[0])

                        LockCache.unlock(key=lock_key)

                except Exception:
                    LockCache.unlock(key=lock_key)
                finally:
                    timeout.cancel()

    def select_pending_status(self):
        '''
            @description:
                - selects checkout ids from DB where status = 'PENDING'
                and mode of payment = 'DRAGONPAY'
        '''
        try:
            return self.dbconn.run_query(
                query_type='select',
                query=self.query_sel_dragonpay_pending_status,
                fetchall=True)
        except Exception:
            import traceback
            print traceback.format_exc()

    def get_txn_status(self, txn_id):
        '''
            @description:
                - performs soap call to dragonpay
                to know status of
                transaction
        '''
        print txn_id

        body = """<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetTxnStatus xmlns="%s">
      <merchantId>%s</merchantId>
      <password>%s</password>
      <txnId>%s</txnId>
    </GetTxnStatus>
  </soap:Body>
</soap:Envelope>""" % (self.api_url, self.merchant_id, self.secret_key, txn_id)

        # print body

        headers = {
            'Host': self.host,
            'Content-Type': 'text/xml; charset=utf-8',
            'Content-Length': "%d" % len(body),
            'SOAPAction': self.api_get_txn_status_url
        }

        # print headers

        try:
            response = self.__parse_soap_response(
                self.http_conn.post(self.uri, body=body,
                                    headers=headers).read())
        except Exception, e:
            import traceback
            print traceback.format_exc()
            return None

        # return response.read()
        print response
        return response
コード例 #12
0
class BaseEmailNotifier(object):

    dbconn = None
    redisconn = None

    query_del_from_claimed_suffix = """delete from claimed_suffixes where account_id='%s'"""
    query_del_from_accounts = """update accounts set suffix=NULL where id='%s'"""
    key_cached_suffix = 'SMSAPI_%s'
    key_cached_suffix_credits = 'SMSAPI_%s_CREDITS'
    key_zero_credit_date = 'ZERO_CREDIT_DATE'

    def init(self):
        '''
                @description:
                    intializes:
                        - configurations
                        - db connections
            '''
        Configuration.initialize()
        values = Configuration.values()

        self.dbconn = SQLUtils(
            host=values['mysql-db']['sms_api_config']['host'],
            port=values['mysql-db']['sms_api_config']['port'],
            database=values['mysql-db']['sms_api_config']['db'],
            user=values['mysql-db']['sms_api_config']['user'],
            password=values['mysql-db']['sms_api_config']['password'])

        self.redisconn = gredis.client.Connection(
            address=str(values['redis_servers']['sms_api']['host']),
            port=int(values['redis_servers']['sms_api']['port']))
        self.redisconn.connect()

        self.mailer_settings = {
            'host': values['mailer']['host'],
            'port': values['mailer']['port'],
            'from_address': values['mailer']['mail_from_address']
        }

        print '-------'
        print 'sql:'
        print 'port: %s' % values['mysql-db']['sms_api_config']['host']
        print 'host: %s' % values['mysql-db']['sms_api_config']['port']
        print 'db: %s' % values['mysql-db']['sms_api_config']['db']
        print 'user: %s' % values['mysql-db']['sms_api_config']['user']
        print 'password: %s' % values['mysql-db']['sms_api_config']['password']
        print '-------'

    def select_suffix(self,
                      days_interval,
                      status='ACTIVE',
                      package='FREE',
                      suffix=''):
        '''
            @description:
                - returns a list of ids and suffixes based
                from the params passed
        '''
        # query = """select a.id, a.suffix, b.date_created from accounts as a,
        # claimed_suffixes as b where a.status = '%s' and a.package = '%s'
        # and a.suffix = b.suffix and a.id = b.account_id
        # and b.date_created= (b.date_created + INTERVAL %s DAY)"""  %(
        # status, package, days_interval)

        query = """select a.id, a.suffix, a.email, b.date_created from accounts as a,
            claimed_suffixes as b where a.status = '%s' and a.package = '%s'
            and a.suffix = b.suffix and a.id = b.account_id 
            and month(now()) = month(b.date_created + INTERVAL %s DAY) and
            day(now()) = day(b.date_created + INTERVAL %s DAY) and
            year(now()) = year(b.date_created + INTERVAL %s DAY)""" % (
            status, package, days_interval, days_interval, days_interval)

        print '\n - select suffix QUERY: - \n'
        print ' '.join(query.split())

        try:
            return self.dbconn.run_query(query_type='select',
                                         query=query,
                                         fetchall=True)
        except Exception, e:
            print e
        return None