def flags_complete(queue, id): cuser = muser.getCurrentUser() if queue not in ["mod", "admin"]: abort(404) cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) q = {"mod": mreviews.ModQueue, "admin": mreviews.AdminQueue} q = q[queue] data = q.getItemData(id) if data == False: abort(404) if data["state"] == 0: q.completeReview(id) return url_for("flags_page")
def course_enroll(id, label=None): if not mcourses.Courses.exists(id) or muser.require_login( ) or muser.getCurrentUser().isDisabled(): abort(404) course = mcourses.Courses(id) if course.getLabel() != label: return redirect( url_for("course_enroll", id=id, label=course.getLabel())) cuser = muser.getCurrentUser() if course.getCourseRole(cuser) == 4 or ( cuser.isDev() and (course.isEnrolled(cuser) or course.getDetail("manual_enrollment"))): if request.method == "POST": user = muser.User.safe(request.form["id"]) if not user: abort(400) course.enroll(user) if "add_another" in request.form: return redirect(url_for("course_enroll", id=id, label=label)) else: return redirect( url_for("course_admin", id=id, label=label, page="membership")) return render_template("courses/enroll.html", title="Benutzer einschreiben: " + course.getTitle(), thispage="courses", course=course) elif not course.getDetail("manual_enrollment"): if not course.isEnrolled(cuser): course.enroll(cuser) enrolled_count = course.getEnrolledCount() earners = course.getEnrolledByPerm(4) + course.getEnrolledByPerm(3) if enrolled_count - len(earners) < 50: for e in earners: e.setDetail("reputation", 1 + e.getInfo()["reputation"]) e.setReputationChange( "enroll", "Kurs: [" + course.getTitle() + "](/c/" + str(course.id) + ")", 1) if course.getDetail("state") != 0: return redirect( url_for("course_start", label=course.getLabel(), id=course.id)) return redirect( url_for("course_info", label=course.getLabel(), id=course.id)) else: abort(403)
def devtools_for_user(id): if not muser.User.exists(id): abort(404) cuser = muser.getCurrentUser() id = int(id) if not cuser.isDev(): abort(403) user = muser.User(id) data = request.json if data["action"] == "update-role": user.setDetail("role", data["role"]) return "ok" elif data["action"] == "override-delete": if user.isDeleted(): user.setDetail("reputation", 0) return "ok" else: return "account not deleted", 400 elif data["action"] == "reget-reputation": user.regetRep(data["global"]) return "ok" return "no action found", 400
def survey_edit(id, label=None): cuser = muser.getCurrentUser() if msurvey.Survey.exists(id): survey = msurvey.Survey(id) forum = mforum.Forum(survey.getDetail("associated_forum")) if not (cuser.isDev() or survey.getDetail("survey_owner") == cuser.id) or cuser.isDisabled(): if survey.getDetail("associated_forum") == 0: abort(404) else: cou = mcourses.Courses(forum.id) if not cou.getCourseRole(cuser) > 3 or cuser.isDIsabled(): abort(404) if request.method == "GET": if label != survey.getLabel(): return redirect( url_for("survey_edit", id=id, label=survey.getLabel())) else: return render_template("survey/edit.html", title="Umfrage bearbeiten - " + survey.getTitle(), survey=survey, forum=forum) elif request.method == "POST": survey.setDetail("content", request.json["content"]) survey.setDetail("title", request.json["title"]) survey.setDetail("state", request.json["state"]) return "ok" else: abort(404)
def user_del_page(id, name=None): try: id = int(id) except: abort(404) if muser.User.exists(id): user = muser.User.from_id(id) cuser = muser.getCurrentUser() mt = user.getDetail("mergeto") if mt and not cuser.isMod(): return redirect(url_for("user_page", id=mt)) if user.isDeleted(): if not cuser.isMod(): abort(404) else: return redirect(url_for("user_deleted_page", id=id)) if not cuser.isMod() and cuser.id != id: abort(404) if name != user.getDetail("name"): return redirect( url_for("user_del_page", id=id, name=user.getDetail("name"))) else: return render_template("user/delete.html", data=user, thispage="user", title="Benutzer löschen: " + user.getHTMLName(False), current_time=time.time()) else: abort(404)
def tools_info(): cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) return render_template("tools/info.html", title="Werkzeuge", thispage="tools")
def branch_revert_override(override_id, branch_id, course_id, course_label=None): if not mcourses.Courses.exists(course_id): abort(404) course = mcourses.Courses(course_id) cuser = muser.getCurrentUser() if course.getLabel() != course_label and request.method != "POST": return redirect( url_for("branch_revert_override", branch_id=branch_id, course_id=course_id, course_label=course.getLabel(), override_id=override_id)) if not mpull_requests.Branch.exists(branch_id): abort(404) branch = mpull_requests.Branch(branch_id) if branch.getDetail("pull_request") or branch.isAbandoned(): abort(404) if not (branch.getDetail("author") == cuser.id or cuser.isMod( )) or cuser.isDisabled() or branch.getDetail("course_id") != course.id: abort(404) override = branch.getSingleOverride(override_id) if not override or override["branch"] != branch_id: abort(404) branch.removeOverride(override_id) return redirect( url_for("course_single_branch", id=branch_id, course_id=course_id, course_label=course.getLabel()))
def preferences_for_user(id): if not muser.User.exists(id): abort(404) cuser = muser.getCurrentUser() id = int(id) if id < 0 and not cuser.isMod(): abort(403) if not (cuser.isMod() or id == cuser.id): abort(403) user = muser.User(id) data = request.json VALID_PREFERENCES = [ "darkTheme", "autoSave", "mail:community", "mail:research", "pinnedNav", "betaTester", "gdpr:hideHomeCourseRecommendations" ] if data["key"] not in VALID_PREFERENCES: return jsonify({"result": "error", "error": "Ungültige Einstellung"}) user.setPref(data["key"], data["value"]) return jsonify({"result": "ok"})
def course_unit_reorder(id, label=None): if not mcourses.Courses.exists(id): abort(404) course = mcourses.Courses(id) cuser = muser.getCurrentUser() if not (course.getCourseRole(cuser) >= 3) or cuser.isDisabled(): abort(404) if request.method == "POST": data = (request.json) for item in data: u = mcourses.Units(item["id"]) if u.getDetail("courseid") != id: return "invalid" u.setDetail("unit_order", item["order"]) u.setDetail("parent", 0) for subitem in item["subitems"]: u = mcourses.Units(subitem["id"]) if u.getDetail("courseid") != id: return "invalid" u.setDetail("unit_order", subitem["order"]) u.setDetail("parent", item["id"]) return "ok" else: if course.getLabel() != label: return redirect( url_for("course_unit_reorder", id=id, label=course.getLabel())) return render_template('courses/edit/reorder.html', title="Kursmodule neu anordnen: " + course.getTitle(), thispage="courses", data=course)
def post(self): bidsToAddJson = self.request.get(dojoAjaxKey) bidsToAddObj = json.loads(bidsToAddJson) # Adding the bid model objects dbUser = getTheUser(users.get_current_user()) # Getting the bids for the current user userBids = dbUser.bids currentBids = {} #TODO if the user is an admin, then add all the bids #TODO if the user is a MO, the add the users for the MO i = 0 for bid in userBids: if bid.loan: currentBids[bid.loan.collateral_key] = bid else: currentBids[i] = bid i += 1 currentBidsKeys = currentBids.keys() # Adding or updating the bids statusChoices = Bid.status.choices creationTime = datetime.now() expirationTime = creationTime + timedelta(hours=2) for key, value in bidsToAddObj.iteritems(): # Getting user input values participation = float(value['participation']) bidrate = float(value['bidrate']) # Checking if there is a bid for a given collateral key if (key in currentBidsKeys): bid = currentBids[key] bid.participation = participation bid.bidrate = bidrate bid.put() else: loanQuery = loan.Loan.all(). \ filter('collateral_key =', key) loan = loanQuery.get() #TODO check why the status is random? #status = random.choice(statusChoices) status = 'Active' Bid(parent = dbUser, user = dbUser, loan = loan, participation = participation, bidrate = bidrate, #TODO add the posibility of get a None value in # bidrate, it is in the myscript.js ordertype = 'Noncompetitive' if bidrate else 'Competitive', status = status, createdAt = creationTime, expiresAt = expirationTime, #Added to agree with the LiqSpop engine #TODO is better to put it on the web bidtype = 'Specified', lorm = 'Loan', ordertiming = 'Day Trade', key_name = "%s %s" % (getCurrentUser(), creationTime), ).put()
def upload_post(): cu = muser.getCurrentUser() if not cu.isLoggedIn() or cu.isDisabled(): return redirect(url_for("upload_dialog", error="not-anonymous")) if 'file' not in request.files: return redirect(url_for("upload_dialog", error="not-selected")) file = request.files['file'] # if user does not select file, browser also # submit an empty part without filename if file.filename == '': return redirect(url_for("upload_dialog", error="not-selected")) if file and allowed_file(file.filename): filext = file.filename.rsplit('.', 1)[1].lower() img_key = hashlib.md5(file.read()).hexdigest() file.seek(0) file.save(os.path.join(UPLOAD_PATH, img_key + "." + filext)) filesize = os.stat(os.path.join(UPLOAD_PATH, img_key + "." + filext)).st_size img = mupload.UserUpload.new(cu, img_key + "." + filext, filesize) return render_template("uploader/info.html", filepath="/upload/" + str(img) + "/" + secure_filename(file.filename)) return redirect(url_for("upload_dialog", error="not-allowed"))
def assignments(team): tg, member, cuser = team_access_control(team, muser.getCurrentUser()) assignments = TeachAssignments.query.filter( TeachAssignments.team_id == tg.id, TeachAssignments.active).all() excluded_items = [] own_assignment_completions = TeachAssignmentCompletions.query.filter( TeachAssignmentCompletions.team_id == tg.id, TeachAssignmentCompletions.user_id == cuser.id) excluded_items += [ item.assignment_id for item in own_assignment_completions ] for item in assignments: if item.id in excluded_items: assignments.remove(item) return render_template("teach/team/assignments.html", title=tg.name, thispage="teach", tg=tg, member=member, assignments=assignments, course_maker=mcourses.Courses.__init__, TeachAssignmentTypes=TeachAssignmentTypes)
def dialog_post_api(post_id, route): try: post_id = int(post_id) except: return _error("Ungültige Anfrage, bitte im globalen Forum melden.") cuser = muser.getCurrentUser() if not cuser.isLoggedIn(): return _error("Nur angemeldete Benutzer können Beiträge melden.") if not mforum.Article.exists(post_id): return _error("Beitrag nicht gefunden.") post = mforum.Article(post_id) if post.isDeleted() or post.getDetail("author") == cuser.id: r = "post_own_or_deleted" elif post.isClosed(): r = "post_closed" elif cuser.may("forum_closeQuestion"): r = "post_close_priv" else: r = "post_no_close_priv" if route.startswith("mod"): r = "post" return _dialog(r, route)
def join_complete(team): tg, member, cuser = team_access_control(team, muser.getCurrentUser()) return render_template("teach/team/welcome.html", title=_("Neue Lerngruppe erstellt"), thispage="teach", tg=tg)
def tools_user_flags_item(id): cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) flagged = mreviews.CustomQueue.getItemData(id) flagged = dict(flagged) flagged["user"] = muser.User.from_id(flagged["item_id"]) if not flagged or flagged["item_type"] != "user": abort(404) flags = mreviews.CustomQueue.getItemFlags(id) def _prepare(d): d = dict(d) d["flagger"] = muser.User.from_id(d["flagger_id"]) return d flags = list(map(_prepare, flags)) has_open_flags = mreviews.CustomQueue.getItemOpenFlagsCount(id) != 0 return render_template("tools/user_flag_item.html", title="Werkzeuge - Benutzermeldungen", thispage="tools", item=flagged, flags=flags, has_open_flags=has_open_flags)
def course_single_branch(id, course_id, course_label=None): if not mcourses.Courses.exists(course_id): abort(404) course = mcourses.Courses(course_id) cuser = muser.getCurrentUser() if course.getLabel() != course_label and request.method != "POST": return redirect( url_for("course_single_branch", id=id, course_id=course_id, course_label=course.getLabel())) if not mpull_requests.Branch.exists(id): abort(404) branch = mpull_requests.Branch(id) if not (branch.getDetail("author") == cuser.id or cuser.isMod( )) or cuser.isDisabled() or branch.getDetail("course_id") != course.id: abort(404) return render_template('courses/pull-requests/branch.html', title="Branch #" + str(branch.id) + " für " + course.getTitle(), thispage="courses", course=course, branch=branch)
def course_single_pr(id, course_id, course_label=None): if not mcourses.Courses.exists(course_id): abort(404) course = mcourses.Courses(course_id) cuser = muser.getCurrentUser() if course.getLabel() != course_label and request.method != "POST": return redirect( url_for("course_single_pr", id=id, course_id=course_id, course_label=course.getLabel())) if not mpull_requests.PullRequest.exists(id): abort(404) pr = mpull_requests.PullRequest(id) branch = pr.getBranch() if pr.isHiddenAsSpam() and not cuser.isLoggedIn() or pr.getDetail( "course_id") != course.id: abort(404) return render_template('courses/pull-requests/pr.html', title="PR #" + str(pr.id) + " für " + course.getTitle(), thispage="courses", course=course, pr=pr, branch=branch)
def branch_cancel(branch_id, course_id, course_label=None): if not mcourses.Courses.exists(course_id): abort(404) course = mcourses.Courses(course_id) cuser = muser.getCurrentUser() if course.getLabel() != course_label and request.method != "POST": return redirect( url_for("branch_submit", branch_id=branch_id, course_id=course_id, course_label=course.getLabel())) if not mpull_requests.Branch.exists(branch_id): abort(404) branch = mpull_requests.Branch(branch_id) if branch.getDetail("pull_request") or branch.isAbandoned(): abort(404) if request.method == "POST": branch.setDetail("abandoned", 1) branch.setDetail("abandoned_date", time.time()) return jsonify({ "url": url_for("course_single_branch", id=branch.id, course_id=course.id, course_label=course.getLabel()) }) else: return render_template('courses/pull-requests/cancel.html', title="Verwerfen: Branch #" + str(branch.id) + " für " + course.getTitle(), thispage="courses", course=course, branch=branch)
def tools_forum_flags_action(id): cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) flagged = mreviews.CustomQueue.getItemData(id) flagged = dict(flagged) if not flagged or (flagged["item_type"] != "forum.question" and flagged["item_type"] != "forum.answer"): abort(404) if flagged["item_type"] == "forum.question": flagged["post"] = mforum.Article(flagged["item_id"]) elif flagged["item_type"] == "forum.answer": flagged["post"] = mforum.Answer(flagged["item_id"]) if flagged["state"] == 0: flags = request.json["flags"] for f in flags: mreviews.CustomQueue.manageFlag(id, f, request.json["result"], request.json["response"]) if mreviews.CustomQueue.getItemOpenFlagsCount(id) == 0: return "{ok:last}" return "{ok}" return "{ok:last}"
def assignment_complete(team, assignment): tg, member, cuser = team_access_control(team, muser.getCurrentUser()) assignment = TeachAssignments.query.filter( TeachAssignments.team_id == tg.id, TeachAssignments.active, TeachAssignments.token == assignment).first_or_404() if request.method == "POST": if assignment.type == TeachAssignmentTypes.CLICK_TO_RESOLVE: ac = TeachAssignmentCompletions( team_id=tg.id, assignment_id=assignment.id, user_id=cuser.id, token="".join([ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"[ random.randint(0, 61)] for i in range(16) ])) ac.submission_at = datetime.datetime.now() ac.is_submission_late = ( assignment.to_be_completed_before is not None and ac.submission_at > assignment.to_be_completed_before) ac.points_for_submission = assignment.max_points_for_completion db.session.add(ac) db.session.commit() return redirect(url_for("teach.assignments", team=tg.token)) return render_template("teach/team/assignment_single.html", title=tg.name, thispage="teach", tg=tg, member=member, assignment=assignment, course_maker=mcourses.Courses.__init__, TeachAssignmentTypes=TeachAssignmentTypes)
def tools_forum_flags_item(id): cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) flagged = mreviews.CustomQueue.getItemData(id) flagged = dict(flagged) if not flagged or (flagged["item_type"] != "forum.question" and flagged["item_type"] != "forum.answer"): abort(404) if flagged["item_type"] == "forum.question": flagged["post"] = mforum.Article(flagged["item_id"]) elif flagged["item_type"] == "forum.answer": flagged["post"] = mforum.Answer(flagged["item_id"]) flags = mreviews.CustomQueue.getItemFlags(id) def _prepare(d): d = dict(d) d["flagger"] = muser.User.from_id(d["flagger_id"]) return d flags = list(map(_prepare, flags)) has_open_flags = mreviews.CustomQueue.getItemOpenFlagsCount(id) != 0 return render_template("tools/forum_flag_item.html", title="Werkzeuge - Beitragsmeldungen", thispage="tools", item=flagged, flags=flags, has_open_flags=has_open_flags)
def Update(): cuser = muser.getCurrentUser() return jsonify({ "badges": cuser.hasUnknownBadges(), "reputation": cuser.getRepDelta(), "messages": g.countNotifications(cuser.getNotifications()) })
def dialog_post_api_fetch(post_id, route): try: post_id = int(post_id) except: return _error("Ungültige Anfrage, bitte im globalen Forum melden.") cuser = muser.getCurrentUser() if not cuser.isLoggedIn(): return _error("Nur angemeldete Benutzer können Beiträge melden.") if not mforum.Article.exists(post_id): return _error("Beitrag nicht gefunden.") post = mforum.Article(post_id) live = bool(request.values.get("live", 0)) if live: if post.isClosed() or post.isDeleted(): return "<div style='color: #c00; font-family: \"Open Sans\", Arial, sans-serif'>Beitrag ist bereits geschlossen oder gelöscht.</div>" if route not in ["flagging/closure/duplicate", "closure/duplicate"]: return "<div style='color: #c00; font-family: \"Open Sans\", Arial, sans-serif'>Ein Fehler ist aufgetreten. Bitte im <a href='/f/0' target='_blank' style='color: #600; font-weight: bold;'>globalen Forum</a> melden.</div>" search = request.values.get("search", "").strip() if search == "": return "" id = None if search.startswith("#"): try: id = int(search[1:]) except: id = None if not mforum.Article.exists(id): id = None if id: data = mforum.Article(id) return render_template("forum/raw_qna.html", data=data) else: return "<div style='font-family: \"Open Sans\", Arial, sans-serif'>Bitte wähle ein Suchergebnis aus der Liste rechts.</div>" else: if post.isClosed() or post.isDeleted(): return "[]" if route not in ["flagging/closure/duplicate", "closure/duplicate"]: return "[]" search = request.values.get("search", "").strip() if search == "": return "[]" forum = mforum.Forum(post.getDetail("forumID")) data = forum.getArticles(search, "score")[:80] data = [{ "id": k.id, "title": k.getHTMLTitle(), "score": k.getScore(), "tags": k.getTags(), "closed": k.isClosed() } for k in data if not k.isDeleted()] return jsonify(data[:10])
def accept(id): if not mproposal.Proposal.exists(id): abort(404) proposal = mproposal.Proposal(id) cuser = muser.getCurrentUser() if not cuser.isMod(): abort(403) if proposal.getDetail("courseid") == 0: proposal.createCourse() proposal = mproposal.Proposal(id) owner = proposal.getProposer() cmail.send_textbased_email( owner.getDetail("email"), "Dein Kursvorschlag für '" + proposal.getTitle() + "' war erfolgreich!", """Hallo %s, dein Kursvorschlag für einen Kurs ## %s war erfolgreich. Du kannst jetzt den Kurs erstellen. {# Zum Kurs -> %s #}""" % (owner.getDetail("realname"), proposal.getTitle(), request.url_root + "c/" + str(proposal.getDetail("courseid")))) return "{ok}"
def survey_results(id, label=None): cuser = muser.getCurrentUser() if msurvey.Survey.exists(id): survey = msurvey.Survey(id) forum = mforum.Forum(survey.getDetail("associated_forum")) if not (cuser.isDev() or survey.getDetail("survey_owner") == cuser.id): if survey.getDetail("associated_forum") == 0: abort(404) else: cou = mcourses.Courses(forum.id) if not cou.getCourseRole(cuser) > 3: abort(404) if request.method == "GET": if label != survey.getLabel(): return redirect( url_for("survey_results", id=id, label=survey.getLabel())) else: return render_template("survey/results_direct.html", title="Umfrageergebnisse - " + survey.getTitle(), survey=survey, forum=forum, int=int, len=len) elif request.method == "POST": RESULT = {} con = survey.getContent() i = 1 for c in con: if c["type"] == "text-answer": RESULT[i] = { "question": c["data"]["question"], "data": [], "type": "text-answer" } if c["type"] == "multiple-choice": selc = len(c["data"]["choices"]) RESULT[i] = { "question": c["data"]["question"], "data": ["0" for _ in range(selc)], "type": "multiple-choice", "choices": c["data"]["choices"] } i += 1 subm = survey.getSubmissions() for s in subm: s = json.loads(s[0]) for field, value in list(s.items()): r = RESULT[int(field)] if r["type"] == "text-answer": if value: r["data"].append(value) elif r["type"] == "multiple-choice": r["data"][int(value)] += str( int(r["data"][int(value) - 1]) + 1) survey.setDetail("results", json.dumps(RESULT)) return "done" else: abort(404)
def msg_tpl_data(tpid): cuser = muser.getCurrentUser() if not cuser.isMod(): abort(404) tpl = mmodmsg.getTemplateById(tpid) return jsonify(tpl)
def dashboard(team): tg, member, cuser = team_access_control(team, muser.getCurrentUser()) return render_template("teach/team/dashboard.html", title=tg.name, thispage="teach", tg=tg, member=member)
def revoke(id): if not mbadges.Badge.exists(id): abort(404) if not muser.getCurrentUser().isDev(): abort(403) badge = mbadges.Badge(id) badge.revokeFrom(request.form["from"], request.form["ts"]) return redirect(url_for("badges.single", id=id))
def oauth_callback(provider): email = nickname = username = None if provider == "google": resp = mauth.google.authorized_response() if resp is None: return redirect("/oauth-error/" + provider) session[provider + '_token'] = (resp['access_token'], '') me = mauth.google.get('userinfo') email = me.data["email"] username = me.data["name"].lower().replace(" ", ".") username = re.sub("[^a-z0-9.-]", "", username) nickname = me.data["name"] if email is None: return redirect('/oauth_error/' + provider) # Look if the user already exists cuser = muser.getCurrentUser() if cuser.isLoggedIn(): user = muser.User.oauth_login(provider, email) if user < 0: cuser.loginMethod_add("oauth:" + provider, email, None) return redirect( url_for("user_edit_page", id=cuser.id, name=cuser.getDetail("name"), page="login")) elif user == cuser.id: return redirect("/") session["login_time"] = time.time() else: return redirect( url_for("user_edit_page", id=cuser.id, name=cuser.getDetail("name"), page="login-alter", method="google", error="dualism")) else: user = muser.User.oauth_login(provider, email) if user < 0: # Create the user. Try and use their name returned by Google, # but if it is not set, split the email address at the @. if (nickname is None or nickname == "") or (username is None or username == ""): nickname = username = email.split('@')[0] user = muser.User.register(None, nickname, email) if user < 0: return render_template('login.html', error="format", title="Anmelden", thispage="login") user = muser.User.from_id(user) user.loginMethod_add("oauth:" + provider, email, None) session['login'] = user session["login_time"] = time.time() return redirect(url_for('index'))
def commit(id): if not mproposal.Proposal.exists(id): abort(404) proposal = mproposal.Proposal(id) cuser = muser.getCurrentUser() if cuser.isDisabled() or not cuser.isLoggedIn(): return "[no.permission]" if not proposal.hasUserCommitment(cuser): proposal.addUserCommitment(cuser) return "{ok}"
def data_page(): cuser = muser.getCurrentUser() if not cuser.isDev(): abort(404) hasLargeModTraffic = mreviews.ModQueue.getOpenItemCount( ) > HIGH_MOD_TRAFFIC return render_template("review/data/index.html", thispage="review", title="Moderationslisten", hasLargeModTraffic=hasLargeModTraffic)
def get(self): page = Page.CALC parameters = getPageDict(page) parameters['User'] = "******" % (getCurrentUser(), getGroup()) try: c = calc() logging.debug(80*"*") logging.debug("loans =") logging.debug(c['loans']) logging.debug(80*"*") logging.debug("bids =") logging.debug(c['bids']) if 'loans' in c and 'bids' in c: parameters['loans'] = c['loans'] parameters['bids'] = c['bids'] for i in range(1, len(c['bids'])): b = Bid.get_by_key_name(key_names = c['bids'][i][0]['bid']) for j in range(len(c['bids'][i])): if 'key' in c['bids'][i][j]: l = loan.getLoan(c['bids'][i][j]['key']) if (l.curr_upb >= long(float(c['bids'][i][j]['val']))): l.curr_upb -= long(float(c['bids'][i][j]['val'])) l.put() else: raise CalcError("ERROR: At discount Bit %s to Loan %s curr_upb %s" % (str(c['bids'][i][0]['bid']), str(l.collateral_key), str(l.curr_upb))) b.status = 'Accepted' b.put() self.response.out.write(template.render("templates/results.html", parameters)) except: g = getGroup() if g == 'Demo': c = Demo_Param_Calc() parameters['loans'] = c['loans'] parameters['bids'] = c['bids'] self.response.out.write(template.render( "templates/results.html", parameters)) else: self.response.out.write(template.render("templates/oops.html", []))
def get(self): page = Page.MYBIDS parameters = getPageDict(page) parameters['User'] = "******" % (getCurrentUser(), getGroup()) self.response.out.write(template.render("templates/mybids.html", parameters))