def webhook(): data = request.get_json() log.info('WEBHOOK: %r', data) if not 'user_id' in data: return '' # Nothing we know what to do with with ReadonlyContext(g.database) as ctx: provider = blm.accounting.StripeProvider._query(stripe_id = data['user_id']).run() if not provider: return '' org_ug = provider[0].org[0].ug[0] interested = 'stripe-%s-%s-%s' % (data['type'], data['id'], ObjectId()) with CommitContext(g.database, org_ug) as ctx: # Use organisations permissions op = [] if data['type'] == 'invoice.created': op.append(CallBlm('members', 'handleStripeInvoice', [[data], provider])) elif data['type'] == 'charge.succeeded': op.append(CallBlm('members', 'handleStripeCharge', [[data], provider])) elif data['type'] == 'invoice.payment_succeeded': pass ctx.runCommit(op, interested) _, error = wait_for_commit(g.database, interested) if error: raise error return ''
def main(): database = db.connect() interested = 'bootstrap-%s' % ObjectId() with CommitContext(database) as ctx: ctx.set_read_preference(pymongo.ReadPreference.PRIMARY) op = CallBlm('accounting', 'bootstrap', []) ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested) if error: raise error
def import_products(org, products): import blm.members database = db.connect() interested = 'izettle-import-%s' % bson.objectid.ObjectId() with pytransact.commit.CommitContext(database) as ctx: ctx.setMayChange(True) op = CallBlm('members', 'import_izettle_products', [[org], [products]]) ctx.runCommit([op], interested=interested) result, errors = pytransact.commit.wait_for_commit( database, interested=interested) assert not errors, errors
def createOrders(database): with ReadonlyContext(database): for org in blm.accounting.identifyOrgsWithDueTransfers(): supInvList = blm.accounting.identifyDueTransfers(org=org) with CommitContext.clone() as ctx: op = CallBlm('accounting', 'createSignedBgcOrder', [[org], supInvList]) interested = 'createSignedBgcOrder_org-%s_%s' % (org.id[0], ObjectId()) ctx.runCommit([op], interested) result, error = wait_for_commit(database, interested) if error: raise error
def import_transactions(org, transactionsfilename): with open(transactionsfilename) as f: filedata = f.read().encode('base64') import blm.members database = db.connect() interested = 'izettle-import-%s' % bson.objectid.ObjectId() with pytransact.commit.CommitContext(database) as ctx: ctx.setMayChange(True) op = CallBlm('members', 'import_izettle_payments', [[org], [filedata]]) ctx.runCommit([op], interested=interested) result, errors = pytransact.commit.wait_for_commit( database, interested=interested) assert not errors, errors
def invoice_credit(toid): interested = 'rest-invoice-credit-%s' % ObjectId() op = CallBlm('members', 'createCreditInvoice', [[toid]]) with CommitContext(g.database, g.user) as ctx: ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested) if error: if isinstance(error, (PermissionError, AttrPermError)): raise Forbidden else: raise error toid = result[0][0] return {'id': toid}
def sendOrders(database, out): with ReadonlyContext(database): for order in blm.accounting.BgcOrder._query( order_signed=NotEmpty(), sent=Empty()).run(): with CommitContext.clone() as ctx: op = CallBlm('accounting', 'sendBgcOrder', [[order]]) interested = 'sendBgcOrder_order-%s_%s' % (order.id[0], ObjectId()) ctx.runCommit([op], interested) result, error = wait_for_commit(database, interested) if error: raise error for r in result: out.write('Sent {}\n'.format(r))
def do_call(self, blmname, methodname, params): interested = 'direct-call-%s' % ObjectId() with CommitContext(self.database, self.user) as ctx: if params is None: params = [] for i, param in enumerate(params): if not isinstance(param, list): params[i] = [param] op = CallBlm(blmname, methodname, params) ctx.runCommit([op], interested=interested) with ReadonlyContext(self.database, self.user) as ctx: result, error = wait_for_commit(self.database, interested) assert not error, error return result[0]
def import_products_file(org, filename): import blm.members with open(filename) as f: products = f.read().encode('base64') database = db.connect() interested = 'izettle-import-%s' % bson.objectid.ObjectId() with pytransact.commit.CommitContext(database) as ctx: ctx.setMayChange(True) op = CallBlm('members', 'import_izettle_products_file', [[org], [products]]) ctx.runCommit([op], interested=interested) result, errors = pytransact.commit.wait_for_commit( database, interested=interested) assert not errors, errors
def invoice_create(): interested = 'rest-invoice-create-%s' % ObjectId() try: data = flask.request.data.decode('utf-8') except AttributeError: data = flask.request.data op = CallBlm('members', 'invoice', [[json.loads(data)]]) with CommitContext(g.database, g.user) as ctx: ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested) if error: if isinstance(error, (PermissionError, AttrPermError)): raise Forbidden else: raise error toid = result[0][0]['invoice'] return {'id': toid}
def create_profile(): error = '' if request.method == 'POST': name = request.values['name'] email = request.values['email'] op = CallBlm('accounting', 'registerUser', [[name], [email], [session['openid']]]) interested = ObjectId() with CommitContext(g.database) as ctx: ctx.setMayChange(True) ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested) session['userid'] = result[0][0] del session['openid'] return redirect(session.pop('login_next', request.url_root)) return render_template('create_profile.html', error=error)
def simulatePayment(provider, purchase): interested = 'simulatePayment-%s' % ObjectId() amount = request.values['amount'] with CommitContext(g.database, g.user) as ctx: op = CallBlm('members', 'generateFakePayment', [[provider], [purchase], [amount]]) ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested) if error: raise error paymentId = result[0] with CommitContext(g.database) as ctx: op = CallToi(paymentId, 'sendConfirmationEmail', []) interested = 'send-sim-payment-confirmation-%s' % ObjectId() ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested=interested) if error: raise error return redirect(request.values['returnurl'])
def accountingImport(): orgId = request.form['org'] interested = ObjectId() try: with CommitContext(g.database, g.user) as ctx: org, = blm.accounting.Org._query(id=orgId).run() ctx.setMayChange(True) data = BlobVal(request.files['siefile']) op = CallBlm('accounting', 'accountingImport', [[org], [data]]) ctx.runCommit([op], interested=interested) result, errors = wait_for_commit(g.database, interested=interested) if errors: result = {'success': False} log.error('Error while importing SIE file: %s', errors) else: result = {'success': True, 'id': str(result[0][0])} except Exception: result = {'success': False} log.error('Error while importing SIE file', exc_info=True) return jsonify(**result)