def test_lookup_payable(self): currencies.lookup_payable_addr("185cYTmEaTtKmBZc8aSGCr9v2VCDLqQHgR") currencies.lookup_payable_addr("DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD") self.assertRaises( InvalidAddressException, lambda: currencies.lookup_payable_addr( "VkbHY8ua2TjxdL7gY2uMfCz3TxMzMPgmRR")) self.assertRaises(InvalidAddressException, lambda: currencies.lookup_payable_addr("test"))
def collect_minutes(): """ Grabs all the pending minute shares out of redis and puts them in the database """ unproc_mins = redis_conn.keys("min_*") for key in unproc_mins: current_app.logger.info("Processing key {}".format(key)) share_type, algo, stamp = key.split("_")[1:] minute = datetime.datetime.utcfromtimestamp(float(stamp)) # To ensure invalid stampt don't get committed minute = ShareSlice.floor_time(minute, 0) if stamp < (time.time() - 30): current_app.logger.info("Skipping timestamp {}, too young" .format(minute)) continue redis_conn.rename(key, "processing_shares") for user, shares in redis_conn.hgetall("processing_shares").iteritems(): shares = float(shares) # messily parse out the worker/address combo... parts = user.split(".") if len(parts) > 0: worker = parts[1] else: worker = '' address = parts[0] if not address.startswith("pool"): try: curr = currencies.lookup_payable_addr(address) except InvalidAddressException: curr = None if curr is None: address = global_config.pool_payout_currency.pool_payout_addr try: slc = ShareSlice(user=address, time=minute, worker=worker, algo=algo, share_type=share_type, value=shares, span=0) db.session.add(slc) db.session.commit() except sqlalchemy.exc.IntegrityError: db.session.rollback() slc = ShareSlice.query.with_lockmode('update').filter_by( user=address, time=minute, worker=worker, algo=algo, share_type=share_type).one() slc.value += shares db.session.commit() redis_conn.delete("processing_shares")
def collect_minutes(): """ Grabs all the pending minute shares out of redis and puts them in the database """ unproc_mins = redis_conn.keys("min_*") for key in unproc_mins: current_app.logger.info("Processing key {}".format(key)) share_type, algo, stamp = key.split("_")[1:] minute = datetime.datetime.utcfromtimestamp(float(stamp)) # To ensure invalid stampt don't get committed minute = ShareSlice.floor_time(minute, 0) if stamp < (time.time() - 30): current_app.logger.info("Skipping timestamp {}, too young" .format(minute)) continue redis_conn.rename(key, "processing_shares") for user, shares in redis_conn.hgetall("processing_shares").iteritems(): shares = float(shares) # messily parse out the worker/address combo... parts = user.split(".") if len(parts) > 0: worker = parts[1] else: worker = '' address = parts[0] if address != "pool": try: curr = currencies.lookup_payable_addr(address) except InvalidAddressException: curr = None if not curr: address = global_config.pool_payout_currency.pool_payout_addr try: slc = ShareSlice(user=address, time=minute, worker=worker, algo=algo, share_type=share_type, value=shares, span=0) db.session.add(slc) db.session.commit() except sqlalchemy.exc.IntegrityError: db.session.rollback() slc = ShareSlice.query.with_lockmode('update').filter_by( user=address, time=minute, worker=worker, algo=algo, share_type=share_type).one() slc.value += shares db.session.commit() redis_conn.delete("processing_shares")
def test_lookup_payable(self): currencies.lookup_payable_addr("185cYTmEaTtKmBZc8aSGCr9v2VCDLqQHgR") currencies.lookup_payable_addr("DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD") self.assertRaises( InvalidAddressException, lambda: currencies.lookup_payable_addr( "VkbHY8ua2TjxdL7gY2uMfCz3TxMzMPgmRR")) self.assertRaises( InvalidAddressException, lambda: currencies.lookup_payable_addr( "test"))