py3ification
This commit is contained in:
parent
35405b4909
commit
0e1998c31e
8 changed files with 38 additions and 20 deletions
|
@ -28,7 +28,7 @@ MarkupSafe==1.1.0
|
|||
mccabe==0.6.1
|
||||
oauthlib==2.0.7
|
||||
prometheus-client==0.1.1
|
||||
psycopg2==2.5.4
|
||||
psycopg2==2.8.6
|
||||
prometheus-flask-exporter==0.8.0
|
||||
pylint==1.8.2
|
||||
python-ldap
|
||||
|
|
|
@ -29,6 +29,9 @@ import memcache
|
|||
import requests
|
||||
import sqltap.wsgi
|
||||
import click
|
||||
import json
|
||||
import decimal
|
||||
import datetime
|
||||
from flask import Flask, redirect
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_login import LoginManager, AnonymousUserMixin, login_required, current_user
|
||||
|
@ -67,6 +70,18 @@ def admin_required(func):
|
|||
return wrapper
|
||||
|
||||
|
||||
class DecimalEncoder(json.JSONEncoder):
|
||||
def default(self, o):
|
||||
if isinstance(o, decimal.Decimal):
|
||||
# wanted a simple yield str(o) in the next line,
|
||||
# but that would mean a yield on the line with super(...),
|
||||
# which wouldn't work (see my comment below), so...
|
||||
return str(o)
|
||||
#return (str(o) for o in [o])
|
||||
elif isinstance(o, datetime.datetime):
|
||||
return str(o)
|
||||
#return (str(o) for o in [o])
|
||||
return super(DecimalEncoder, self).default(o)
|
||||
|
||||
|
||||
def create_app():
|
||||
|
@ -116,4 +131,6 @@ def create_app():
|
|||
import webapp.commands
|
||||
app.cli.commands.update(webapp.commands.group.commands)
|
||||
|
||||
app.json_encoder = DecimalEncoder
|
||||
|
||||
return app
|
||||
|
|
|
@ -9,8 +9,8 @@ from flask import render_template, request, flash, g, Response, \
|
|||
from flask_login import login_required
|
||||
from webapp import forms, db, models, admin_required
|
||||
|
||||
import directory
|
||||
import logic
|
||||
from . import directory
|
||||
from . import logic
|
||||
|
||||
|
||||
bp = Blueprint('admin', __name__)
|
||||
|
@ -247,7 +247,7 @@ def sendspam():
|
|||
payment_policy=models.PaymentPolicy.normal.value).all()
|
||||
|
||||
members = [(m, m.get_status()) for m in members]
|
||||
members.sort(key=lambda (m, s): -(s['months_due'] or 0))
|
||||
members.sort(key=lambda m, s: -(s['months_due'] or 0))
|
||||
|
||||
form = forms.SpamForm()
|
||||
form.members.choices = [(member.id, member) for member, status in members if status['months_due'] or status['judgement']]
|
||||
|
|
|
@ -4,8 +4,8 @@ from flask import g
|
|||
from flask.cli import AppGroup
|
||||
|
||||
from webapp import models, db
|
||||
import directory
|
||||
import logic
|
||||
from . import directory
|
||||
from . import logic
|
||||
|
||||
group = AppGroup(__name__)
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ def _destroy_ldap(exception=None):
|
|||
|
||||
def get_ldap_group_diff(members):
|
||||
|
||||
active_members = filter(lambda m: m['judgement'], members)
|
||||
active_members = list(filter(lambda m: m['judgement'], members))
|
||||
fatty = set([member['username'] for member in active_members if member['type'] in ['fatty', 'supporting']])
|
||||
starving = set([member['username'] for member in active_members if member['type'] in ['starving']])
|
||||
|
||||
|
@ -86,10 +86,10 @@ def update_member_groups(c, changes):
|
|||
continue
|
||||
values = []
|
||||
for username in target_members:
|
||||
values.append('uid={},{}'.format(username.encode('utf-8'),app.config['LDAP_USER_BASE']))
|
||||
values.append('uid={},{}'.format(username,app.config['LDAP_USER_BASE']).encode('utf-8'))
|
||||
modlist = [(ldap.MOD_REPLACE,'uniqueMember',values)]
|
||||
#print group,modlist
|
||||
c.modify_s('cn={},{}'.format(group.encode('utf-8'),app.config['LDAP_GROUP_BASE']), modlist)
|
||||
c.modify_s('cn={},{}'.format(group,app.config['LDAP_GROUP_BASE']), modlist)
|
||||
|
||||
# keeping it here instead of git history because it's preferable to the other method, as long as LDAP stops crashing
|
||||
def update_member_groups_fucked(c, changes):
|
||||
|
@ -102,7 +102,7 @@ def update_member_groups_fucked(c, changes):
|
|||
values.append('uid={},{}'.format(username.encode('utf-8'),app.config['LDAP_USER_BASE']))
|
||||
if values:
|
||||
modlist.append((ops[op],'uniqueMember',values))
|
||||
print group, modlist
|
||||
#print group, modlist
|
||||
c.modify_s('cn={},{}'.format(group.encode('utf-8'),app.config['LDAP_GROUP_BASE']), modlist)
|
||||
|
||||
def get_group_members(c, group):
|
||||
|
@ -115,13 +115,13 @@ def get_group_members(c, group):
|
|||
|
||||
members = []
|
||||
for dn, obj in data:
|
||||
for k, v in obj.iteritems():
|
||||
for k, v in obj.items():
|
||||
if k == "uniqueMember":
|
||||
for iv in v:
|
||||
part,uid,index = ldap.dn.str2dn(iv)[0][0]
|
||||
if not part == 'uid' or not index == 1:
|
||||
raise ValueError("First part type {} or index {} seem wrong for DN {}".format(part,index,iv))
|
||||
members.append(uid.decode('utf-8'))
|
||||
members.append(uid)
|
||||
return members
|
||||
|
||||
def get_member_fields(c, member, fields):
|
||||
|
@ -146,7 +146,7 @@ def get_member_fields(c, member, fields):
|
|||
data = c.search_s(app.config['LDAP_USER_BASE'], ldap.SCOPE_SUBTREE,
|
||||
lfilter, tuple(fields))
|
||||
for dn, obj in data:
|
||||
for k, v in obj.iteritems():
|
||||
for k, v in obj.items():
|
||||
v = v[0].decode('utf-8')
|
||||
if k in fields_needed:
|
||||
fields_out[k] = v
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
"""The 'business' logic of the whole thing."""
|
||||
|
||||
from webapp import app, db
|
||||
import models
|
||||
from . import models
|
||||
|
||||
def get_unmatched_transfers():
|
||||
return models.Transfer.query.filter_by(member_transfers=None,ignore=False) \
|
||||
|
@ -41,7 +41,7 @@ def try_automatch(transfers):
|
|||
if member.transfers:
|
||||
year, month = member.get_next_unpaid()
|
||||
if None in (year, month):
|
||||
print "[w] next_unpaid borked, skipping"
|
||||
print("[w] next_unpaid borked, skipping")
|
||||
continue
|
||||
else:
|
||||
year, month = transfer.date.year, transfer.date.month
|
||||
|
|
|
@ -36,7 +36,7 @@ from sqlalchemy.sql.expression import or_
|
|||
from flask import g
|
||||
|
||||
from webapp import app, db, cache, cache_enabled
|
||||
import directory
|
||||
from . import directory
|
||||
|
||||
|
||||
|
||||
|
@ -381,7 +381,8 @@ class Transfer(db.Model):
|
|||
return self.uid[:16]
|
||||
|
||||
def parse_title(self):
|
||||
m = re.match(ur"^([a-z0-9ąężźćóżłśń\-_\.]+)[ -]+(fatty|starving|superfatty|supporting|supporter)[ -]+([0-9a-z\-_ąężźćóżłśń \(\),/\.]+$)", self.title.strip().lower())
|
||||
print(repr(self.title.strip().lower()))
|
||||
m = re.match(r"^([a-z0-9ąężźćóżłśń\-_\.]+)[ -]+(fatty|starving|superfatty|supporting|supporter)[ -]+([0-9a-z\-_ąężźćóżłśń \(\),/\.]+$)", self.title.strip().lower())
|
||||
if not m:
|
||||
return (None, None, None)
|
||||
member, _type, title = m.group(1), m.group(2), m.group(3)
|
||||
|
@ -408,10 +409,10 @@ class Transfer(db.Model):
|
|||
return self.MATCH_WRONG_TYPE, member, 0
|
||||
|
||||
if title[1] == 'starving' and self.amount >= (50*100) and (self.amount % (50*100)) == 0:
|
||||
return self.MATCH_OK, member, (self.amount/(50*100))
|
||||
return self.MATCH_OK, member, int(self.amount/(50*100))
|
||||
|
||||
if title[1] == 'fatty' and self.amount >= (100*100) and (self.amount % (100*100)) == 0:
|
||||
return self.MATCH_OK, member, (self.amount/(100*100))
|
||||
return self.MATCH_OK, member, int(self.amount/(100*100))
|
||||
|
||||
|
||||
return self.MATCH_WRONG_TYPE, member, 0
|
||||
|
|
|
@ -31,7 +31,7 @@ from flask import Response, request, redirect, flash, render_template, url_for,
|
|||
from flask_login import login_user, login_required, logout_user, current_user
|
||||
|
||||
from webapp import app, forms, User, models, cache, db
|
||||
import directory
|
||||
from . import directory
|
||||
|
||||
@app.route('/')
|
||||
def stats():
|
||||
|
|
Loading…
Reference in a new issue