def test_model_transaction(self): "Test transaction model" contact_type = ContactType(name='test') contact_type.save() contact = Contact(name='test', contact_type=contact_type) contact.save() currency = Currency(code="GBP", name="Pounds", symbol="L", is_default=True) currency.save() account = Account( name='test', owner=contact, balance_currency=currency) account.save() obj = Transaction(name='test', account=account, source=contact, target=contact, value=10, value_currency=currency) obj.save() self.assertEquals('test', obj.name) self.assertNotEquals(obj.id, None) obj.delete()
def test_model_transaction(self): "Test transaction model" contact_type = ContactType(name='test') contact_type.save() contact = Contact(name='test', contact_type=contact_type) contact.save() currency = Currency(code="GBP", name="Pounds", symbol="L", is_default=True) currency.save() account = Account(name='test', owner=contact, balance_currency=currency) account.save() obj = Transaction(name='test', account=account, source=contact, target=contact, value=10, value_currency=currency) obj.save() self.assertEquals('test', obj.name) self.assertNotEquals(obj.id, None) obj.delete()
def authenticate(): GESTURES = ['FIST', 'LEFT', 'OPEN', 'RIGHT'] gesture_one = None gesture_two = None gesture_three = None query = Transaction.delete() query.execute() secure_random = random.SystemRandom() while (gesture_one == gesture_two or gesture_two == gesture_three): gesture_one = secure_random.choice(GESTURES) gesture_two = secure_random.choice(GESTURES) gesture_three = secure_random.choice(GESTURES) transaction_id = 0 transaction = Transaction.create(gesture_one=gesture_one, gesture_two=gesture_two, gesture_three=gesture_three, transaction_id=transaction_id) return jsonify(gesture_one=gesture_one, gesture_two=gesture_two, gesture_three=gesture_three, transaction_id=transaction_id)
def post(self): action = self.request.get('action', 'list') if action == 'list': self.sendTransactionList() elif action == 'update': # add a new or update a transaction tkey = self.request.get('transaction', 'None') if tkey == 'None': transaction = Transaction() transaction.project = self.project else: transaction = Transaction.get(tkey) if transaction.project.key() != self.project.key(): raise Exception("Project/Transaction mismatch") # update / set fields transaction.date = datetime.strptime(self.request.get('date', transaction.date.isoformat()), "%Y-%m-%d") transaction.source = Account.get(self.request.get('source', transaction.source and transaction.source.key())) transaction.dest = Account.get(self.request.get('dest', transaction.dest and transaction.dest.key())) transaction.ammount = float(self.request.get('ammount', str(transaction.ammount)).replace(',', '.')) transaction.check = self.request.get('check', 'False') == 'True' transaction.text = self.request.get('text', transaction.text) transaction.user = self.user # a None currency means we use the base currency! c = self.request.get('currency', transaction.currency and transaction.currency.key()) transaction.currency = Currency.get(c) if c != "None" else None # exchange source and dest, if the amount is negative if transaction.ammount < 0: tmp_src = transaction.source transaction.source = transaction.dest transaction.dest = tmp_src transaction.ammount = -transaction.ammount # put back into data store transaction.put() # retransmit all transactions self.sendTransactionList() elif action == 'delete': # add a new or update a transaction transaction = Transaction.get(self.request.get('transaction', 'None')) if transaction.project.key() != self.project.key(): raise Exception("Project/Transaction mismatch") transaction.delete() # retransmit all transactions self.sendTransactionList() else: raise Exception("Unknown action '%(action)s'!" % {'action':action})
import os import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) from models import Transaction query = Transaction.delete() query.execute()
def transaction( request): ''' View for handling transaction start/stop <base_url>/transaction?Action=Start <base_url>/transaction?Action=Stop&TransID=<ID> ''' # Validate the request if request.method != 'GET': return HttpResponse( err_not_get(), status=400) # Bad request if not 'Action' in request.GET: return HttpResponse( err_missing_param( 'Action'), status=400) # Bad request action = request.GET['Action'] if not (action == 'Start' or action == 'Stop'): return HttpResponse( json_err_msg("Expected either 'Start' or 'Stop' for the 'Action' parameter."), status=400) if action == 'Start': # Start a new transaction new_trans = Transaction() new_trans.owner = request.user new_trans.save() # Need to call save() so that the id value is generated # generate the name and create the directory dir_name = os.path.join( settings.TRANSACTION_DIR, request.user.username + '_' + str(new_trans.id)) os.mkdir(dir_name, 0770) # Use setfacl to give the user read, write & execute permissions # on the directory we just created permissions = request.user.username + ':rwX' proc = subprocess.Popen([settings.SETFACL_BIN, '-m', permissions, dir_name]) proc.wait() if proc.returncode != 0: # couldn't set the ACL (maybe this filesystem doesn't support ACL's?) # so we need to fail the operation and that means cleaning up after # ourselves recursive_rm( dir_name) new_trans.delete() return HttpResponse( json_err_msg( "Cannot start transaction: Failed to set ACL's on transaction directory."), status=500) # internal server error # If we make it here, everything's good - save the transaction object # to the DB and return the required JSON new_trans.directory = dir_name new_trans.save() json_out = { } json_out['TransID'] = new_trans.id json_out['Directory'] = dir_name return HttpResponse( json.dumps( json_out)) else: # Stop an existing transaction # Need to specify the transaction ID (trans, error_response) = validate_trans_id( request) if error_response != None: # TransID didn't validate... return error_response # The transaction is validated - delete the files/directories recursive_rm( trans.directory) # delete the transaction from the db (Django defaults to 'cascaded' deletes, # so all we need to do is remove the transaction and everything that was pointing # to it (jobs & files) will also be removed trans.delete() return HttpResponse()