Beispiel #1
0
def create_office_location():
    results = {}

    db = dbo.get_instance()

    session_permission = get_permission()

    if not session_permission == 0:
        # 마스터가 아니라면, 에러를 낸다
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)

    arguments = ["name"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    office = OfficeLocation(name=data["name"])
    try:
        with db.begin_nested():
            db.add(office)
            db.flush()
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #2
0
def statistic_report_of_population_in_period():
    results = {}

    db = dbo.get_instance()

    session_permission = get_permission()

    if session_permission > 0:
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)

    # 만약 7을 넣으면 7일 전부터 지금까지의 신규 가입을 얻어옴.
    arguments = ["day_from"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    day_from = data["day_from"] * (-1)

    recent_joined = db.query(Operator).\
        filter(Operator.created_at >= (datetime.datetime.now() + datetime.timedelta(days=day_from))).\
        count()
    total = db.query(Operator).count()

    results["population"] = {}
    results["population"]["recent_join"] = recent_joined
    results["population"]["total"] = total

    return jsonify(results), 200
Beispiel #3
0
def charge_req_log(count_from, count_to):
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)
    data_keys = data.keys()

    if not ((count_from >= 0 and count_to >= 0) and \
                    (count_from <= count_to)):
        raise abort(406)

    session_permission = get_permission()
    if not session_permission == 0:
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    logs = db.query(RequestCharge)
    if "is_active" in data_keys:
        if data["is_active"] == True:
            logs = logs.filter_by(state=0)
        else:
            logs = logs.filter(RequestCharge.state.in_([1,2]))

    else:
        logs = logs.filter_by(is_active=True)
    logs = logs.order_by(RequestWithdraw.created_at.desc()). \
               all()[count_from - 1:count_to - 1]

    results["log"] = []
    for log in logs:
        results["log"].append(log.serialize())

    return jsonify(results), 200
Beispiel #4
0
def set_version():
    results = {}

    session_permission = get_permission()

    if not session_permission == 0:
        # 마스터가 아니라면, 에러를 낸다
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)

    arguments = ["type", "version"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    db = dbo.get_instance()

    try:
        with db.begin_nested():
            new_ver = AppVersion(type=int(data["type"]), version=data["version"])
            db.add(new_ver)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #5
0
def get_enrolled_orderee_list(count_from, count_to):
    results = {}

    db = dbo.get_instance()

    session_username = session["token"]["user"]["username"]
    if not ((count_from >= 0 and count_to >= 0) and (count_from <= count_to)):
        raise abort(406)
    # data["count"] = request.args.get("count", 0, type=int)
    # if not data:
    # 	raise abort(400)

    user = db.query(Operator).filter_by(username=session_username).first()
    if not user:
        raise abort(404)
    orders = (
        db.query(Order)
        .filter_by(orderee_id=user.id)
        .order_by(Order.created_at.desc())
        .all()[count_from - 1 : count_to - 1]
    )

    results["orders"] = []
    for order in orders:
        results["orders"].append(order.serialize())

    return jsonify(results), 200
Beispiel #6
0
def get_point_bill():
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    arguments = ["username"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    results["point"] = user.point

    return jsonify(results), 200
Beispiel #7
0
def charge_point_begin():
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    arguments = ["how_much"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    session_username = session["token"]["user"]["username"]
    user = db.query(Operator). \
        filter_by(username=session_username).first()
    if not user:
        raise abort(404)

    for i in xrange(1024):
        sha256 = hashlib.sha256(str(random.getrandbits(128))).hexdigest()[:24]

        rc_found = db.query(RequestCharge).filter_by(moid=sha256)
        if not rc_found:
            break

    try:
        with db.begin_nested():
            rc = RequestCharge(user_id=user.id, how_much=data["how_much"], moid=sha256, state=0)
            db.add(rc)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #8
0
def add_address():
    results = {}

    session_permission = get_permission()

    if not session_permission == 0:
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)
    arguments = ["parent", "extra", "code"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    db = dbo.get_instance()
    regex = re.compile("[^\s]+")
    tokens = []
    full_address = ""
    if data["parent"] == 0:
        tokens = regex.findall(data["extra"])
        if tokens.__len__() == 0:
            raise abort(404)
        full_address = " ".join(tokens)

        try:
            with db.begin_nested():
                addr = Address(address=full_address, price_code=data["code"], \
                               created_at=datetime.datetime.now(), \
                               updated_at=datetime.datetime.now())
                db.add(addr)
                db.flush()

                parent = None
                for i in xrange(tokens.__len__()):
                    if (tokens.__len__() - 1) == i:
                        afs = AddressForSearch(addr_id=addr.id, token=tokens[i], \
                                               parent=parent, is_root=False, is_leaf=True)
                        db.add(afs)
                        db.flush()
                    elif i == 0:
                        afs = AddressForSearch(addr_id=None, token=tokens[i], \
                                               parent=parent, is_root=True, is_leaf=False)
                        db.add(afs)
                        db.flush()
                        parent = afs.id
                    else:
                        afs = AddressForSearch(addr_id=None, token=tokens[i], \
                                               parent=parent, is_root=False, is_leaf=False)
                        db.add(afs)
                        db.flush()
                        parent = afs.id
        except Exception, e:
            print str(e)
            dbo.abort()
            raise abort(500)
Beispiel #9
0
def make_shell_context():
    return dict(app=app, db=dbo.get_instance(),#db_session,
                Operator=Operator, OperatorAdminMatch=OperatorAdminMatch, InterestAddress=InterestAddress,
                Notification=Notification, Order=Order, RequestWithdraw=RequestWithdraw, RequestCharge=RequestCharge,
                Point=Point, PointPending=PointPending, Address=Address, Price=Price,
                OfficeLocation=OfficeLocation, AdminCode=AdminCode, Event=Event, WarningLog=WarningLog,
                AdminConfirm=AdminConfirm, UserBehaveLog=UserBehaveLog,
                android_push=android_push,
                uuid="APA91bEcXOTQJUxCP_IJQvVESA8mNSiplVpRMmeuoE0Yf5m1wptRbbp0UmUHlUjwVmL4svzqHQSLSQVC11pKQcPEH5T3Rte5yIS9mJrvKNQ9PrB4Dtf8JHIDuMrnoXjdLDd5VViqaXRB",
                sync_address=sync_address, sync_price=sync_price)
Beispiel #10
0
def read_all_office_locations():
    results = {}

    db = dbo.get_instance()

    offices = db.query(OfficeLocation). \
        order_by(OfficeLocation.name.asc()).all()
    results["offices"] = []
    for office in offices:
        results["offices"].append(office.serialize())

    return jsonify(results), 200
Beispiel #11
0
def destroy_office_location():
    results = {}

    db = dbo.get_instance()

    session_permission = get_permission()

    if not session_permission == 0:
        # 마스터가 아니라면, 에러를 낸다
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)
    data_keys = data.keys()
    arg_type = 0
    arg_data = 0
    if "name" in data_keys:
        arg_type = 1
        arg_data = data["name"]
    elif "index" in data_keys:
        arg_type = 2
        arg_data = data["index"]
    elif "idx" in data_keys:
        arg_type = 2
        arg_data = data["idx"]
    else:
        raise abort(406)

    if arg_type == 1:
        valid_row_count = db.query(OfficeLocation). \
            filter_by(name=arg_data).count()
    elif arg_type == 2:
        valid_row_count = db.query(OfficeLocation). \
            filter_by(id=arg_data).count()

    if valid_row_count == 0:
        raise abort(404)

    if arg_type == 1:
        office = db.query(OfficeLocation). \
            filter_by(name=arg_data).first()
    elif arg_type == 2:
        office = db.query(OfficeLocation). \
            filter_by(id=arg_data).first()

    try:
        with db.begin_nested():
            db.delete(office)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #12
0
def get_version(type):
    results = {}

    db = dbo.get_instance()

    ver = db.query(AppVersion).filter_by(type=type).\
        order_by(AppVersion.id.desc()).first()
    if not ver:
        raise abort(500)

    results["version"] = ver.version

    return jsonify(results), 200
Beispiel #13
0
def query_event():
    results = {}

    db = dbo.get_instance()

    events = db.query(Event). \
        order_by(Event.created_at.desc()).all()

    results["events"] = []
    for event in events:
        results["events"].append(event.serialize())

    return jsonify(results), 200
Beispiel #14
0
def add_event():
    # 1. 권한을 체크한다. (어드민)
    # 2. title, event_start, event_end 의 인자를 검사한다.
    # 3. 해당 이벤트에 겹치는 이벤트가 있나 검사한다
    # 4. 이벤트를 추가한다
    # 5. 방금 추가된 이벤트 정보를 반환한다.
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 권한을 체크한다. (어드민)
    session_permission = get_permission()
    if not session_permission == 0:
        # 마스터가 아니라면,
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    # 2. title, event_start, event_end 의 인자를 검사한다.
    arguments = ["title", "event_start", "event_end"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 3. 해당 이벤트에 겹치는 이벤트가 있나 검사한다
    ev_start = time.strftime("%Y-%m-%d %H:%M:%S", \
                             time.localtime(data["event_start"]))
    ev_end = time.strftime("%Y-%m-%d %H:%M:%S", \
                           time.localtime(data["event_end"]))
    valid_row_count = db.query(Event). \
        filter(or_(and_((Event.event_start <= ev_start), \
                        (Event.event_end >= ev_start)), \
                   and_((Event.event_start <= ev_end), \
                        (Event.event_end >= ev_end)))). \
        count()
    if valid_row_count > 0:
        raise abort(406)

    # 4. 이벤트를 추가한다
    try:
        with db.begin_nested():
            ev = Event(title=data["title"], \
                       event_start=ev_start, \
                       event_end=ev_end)
            db.add(ev)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #15
0
def read_notification(idx):
    results = {}

    db = dbo.get_instance()

    # notification = Notification.query.get(idx)
    notification = db.query(Notification). \
        filter_by(id=idx).first()
    if not notification:
        raise abort(404)

    results["notification"] = notification.serialize(exclude=["author"])

    return jsonify(results), 200
Beispiel #16
0
def query_interest_region():
    # 1. 대상 유저를 입력받는다.
    # 2. 권한을 체크한다. (어드민 혹은 본인)
    # 3. 해당 유저가 존재하는지 여부를 검사한다
    # 4. 특정된 유저를 기준으로 해당하는 항목을 가져온다.
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 대상 유저를 입력받는다.
    arguments = ["username"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 2. 권한을 체크한다. (어드민 혹은 본인)
    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    # 3. 해당 유저가 존재하는지 여부를 검사한다
    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    # 4. 특정된 유저를 기준으로 해당하는 항목을 가져온다.
    ias = db.query(InterestAddress). \
        join(InterestAddress.address). \
        filter(InterestAddress.operator_id == user.id). \
        order_by(InterestAddress.updated_at.desc()).all()

    results["interest_address"] = []
    for ia in ias:
        results["interest_address"].append(ia.serialize())

    return jsonify(results), 200
Beispiel #17
0
def delete_address():
    results = {}

    session_permission = get_permission()

    if not session_permission == 0:
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    data = json.loads(request.data)
    arguments = ["id"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    db = dbo.get_instance()

    afs = db.query(AddressForSearch).filter_by(id=data["id"], is_leaf=True).first()
    if not afs:
        raise abort(404)
    addr = db.query(Address).filter_by(id=afs.addr_id).first()

    try:
        with db.begin_nested():
            if addr:
                db.delete(addr)
            parent = afs.parent
            while(True):
                db.delete(afs)
                db.flush()
                if not parent:
                    break
                afs = db.query(AddressForSearch).filter_by(parent=parent).first()
                if afs:
                    break
                else:
                    afs = db.query(AddressForSearch).filter_by(id=parent).first()
                    parent = afs.parent

    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #18
0
def query_address_step_by_step(parent):
    results = {}

    db = dbo.get_instance()

    results["entries"] = []

    if parent == 0:
        # 최상위 단계
        for entry in db.query(AddressForSearch).\
                filter_by(is_root=True).order_by(AddressForSearch.token.asc()).all():
            results["entries"].append(entry.serialize())
    else:
        # 아래 단계
        for entry in db.query(AddressForSearch).\
                filter_by(parent=parent).order_by(AddressForSearch.token.asc()).all():
            results["entries"].append(entry.serialize())

    return jsonify(results), 200
Beispiel #19
0
def update_notification(idx):
    results = {}

    db = dbo.get_instance()

    session_permission = get_permission()
    if not session_permission == 0:
        # 마스터가 아니라면, 에러를 낸다
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401
    session_user_id = session["token"]["user"]["id"]

    data = json.loads(request.data)

    # arguments = ["title", "content", "author_id"]
    arguments = ["title", "content"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 글을 쓴 사람 본인이 맞는지 확인하는 루틴을 넣어야 한다.
    valid_row_count = db.query(Notification). \
        filter_by(id=idx, author_id=session_user_id).count()
    # print valid_row_count
    if valid_row_count == 0:
        raise abort(401)

    notification = db.query(Notification).filter_by(id=idx).first()
    if not notification:
        raise abort(404)

    try:
        with db.begin_nested():
            db.query(Notification).filter_by(id=notification.id).\
                    update({key: data[key] for key in data_keys})
            db.flush()
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #20
0
def write_notification():
    results = {}

    db = dbo.get_instance()

    session_permission = get_permission()

    if not session_permission == 0:
        # 마스터가 아니라면, 에러를 낸다
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401
    session_user_id = session["token"]["user"]["id"]

    data = json.loads(request.data)

    # arguments = ["title", "content", "author_id"]
    arguments = ["title", "content"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)
        # author_id 가 실제로 admin 중에 존재하는지 체크를 굳이 하는게 필요함
        # 아니면 에러가 날 것임.
        # author_id_exist = Admin.query.get(data["author_id"])
        # if not author_id_exist:
        # valid_row_count = db.query(Admin).\
        #				filter_by(id=data["author_id"]).count()
        # valid_row_count = db.query(Operator).\
        # filter_by(id=session_user_id, is_master=True).count()
        # if valid_row_count == 0:
        # raise abort(401)
    notification = Notification(title=data["title"], content=data["content"], \
                                author_id=session_user_id)
    try:
        with db.begin_nested():
            db.add(notification)
            db.flush()
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #21
0
def reset_interest_region():
    # 1. 대상 유저와 주소를 입력받는다.
    # 2. 권한을 체크한다. (어드민 혹은 본인)
    # 3. 해당 유저가 존재하는지 여부를 검사한다
    # 4. 해당 유저가 소유한 행을 모두 삭제한다.

    results = {}
    db = dbo.get_instance()
    data = json.loads(request.data)
    # 1. 대상 유저와 주소를 입력받는다.
    arguments = ["username"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 2. 권한을 체크한다. (어드민 혹은 본인)
    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    # 3. 해당 유저가 존재하는지 여부를 검사한다
    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    # 4. 해당 유저가 소유한 행을 모두 삭제한다.
    try:
        with db.begin_nested():
            db.query(InterestAddress).filter_by(operator_id=user.id).delete()
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #22
0
def send_arbitrary_gcm():
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 2. 필요한 인자들이 다 들어왔는가 검사한다.
    arguments = ["username", "message"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    message = dict(type="system", comment=unicode(data["message"]))

    user = db.query(Operator).filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)
    android_push.apply_async(args=[user.uuid, message])

    return jsonify(results), 200
Beispiel #23
0
def charge_point_cancel():
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    arguments = ["idx"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    session_permission = get_permission()
    session_user_id = session["token"]["user"]["id"]
    # session_username = session["token"]["user"]["username"]

    rc = db.query(RequestCharge).filter_by(id=data["idx"]).first()
    if not rc:
        raise abort(404)

    if session_permission == 0:
        # 프리패스
        pass
    else:
        if not (rc.user_id == session_user_id):
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    try:
        with db.begin_nested():
            db.query(RequestCharge).filter_by(id=rc.id).\
                update({RequestCharge.state: 2, \
                        RequestCharge.processed_at: datetime.datetime.now()})
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #24
0
def delete_event():
    # 1. 권한을 체크한다. (어드민)
    # 2. idx 의 인자를 검사한다.
    # 3. 해당 이벤트가 존재하나 검사한다.
    # 4. 이벤트를 삭제한다
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 권한을 체크한다. (어드민)
    session_permission = get_permission()
    if not session_permission == 0:
        # 마스터가 아니라면,
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    # 2. idx 의 인자를 검사한다.
    arguments = ["idx"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 3. 해당 이벤트가 존재하나 검사한다.
    ev = db.query(Event).filter_by(id=data["idx"]).first()
    if not ev:
        raise abort(404)

    # 4. 이벤트를 삭제한다
    try:
        with db.begin_nested():
            db.delete(ev)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #25
0
def destroy_notification(idx):
    results = {}

    db = dbo.get_instance()

    # notification = Notification.query.get(idx)
    # if not notification:
    valid_row_count = db.query(Notification). \
        filter_by(id=idx).count()
    if valid_row_count == 0:
        raise abort(404)

    # notification = Notification.query.get(idx)
    notification = db.query(Notification). \
        filter_by(id=idx).first()

    try:
        with db.begin_nested():
            db.delete(notification)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #26
0
def withdraw_point_end():
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    arguments = ["id"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    session_permission = get_permission()
    session_user_id = session["token"]["user"]["id"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        return jsonify({"reason_text": "Permission Denied", \
                        "reason_code": 2}), 401

    # 출금 요청 객체를 받아온다음.
    rw = db.query(RequestWithdraw). \
        filter_by(id=data["id"]).first()
    if not rw:
        raise abort(404)

    try:
        with db.begin_nested():
            # is_active 를 False 로 변경
            db.query(RequestWithdraw).filter_by(id=data["id"]). \
                update({RequestWithdraw.is_active: False, \
                        RequestWithdraw.processed_at: \
                            datetime.datetime.now()})
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #27
0
def read_all_notifications(count_from, count_to):
    results = {}

    db = dbo.get_instance()

    if not ((count_from >= 0 and count_to >= 0) and \
                    (count_from <= count_to)):
        raise abort(406)
    # filters = ["id", "author", "title", "content", "created_at", "updated_at"]
    # data["filters"] = request.args.get("filters", "", type=unicode)
    # if data["filters"]:
    # data["filters"] = data["filters"].split(",")
    # filters.extend(data["filters"])

    notifications = db.query(Notification). \
                        order_by(Notification.updated_at.desc()).all() \
        [count_from - 1:count_to - 1]
    results["notifications"] = []
    for notification in notifications:
        # results["notifications"].append(notification.serialize(fields=filters))
        results["notifications"]. \
            append(notification.serialize(exclude=["author"]))

    return jsonify(results), 200
Beispiel #28
0
def delete_interest_region():
    # 1. 대상 유저와 주소를 입력받는다.
    # 2. 권한을 체크한다. (어드민 혹은 본인)
    # 3. 해당 유저가 존재하는지 여부를 검사한다
    # 4. 입력된 어드레스를 단어들로 쪼갠다
    # 5. 입력된 어드레스가 존재하는지 찾는다
    # 6. 입력된 유저, 어드레스가 일치하는 행을 삭제한다.
    # 7. 특정된 유저를 기준으로 해당하는 항목을 가져온다.
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 대상 유저와 주소를 입력받는다.
    arguments = ["username"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 2. 권한을 체크한다. (어드민 혹은 본인)
    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    # 3. 해당 유저가 존재하는지 여부를 검사한다
    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    # 4. 입력된 어드레스를 단어들로 쪼갠다
    if data.has_key("addr_id"):
        addr = db.query(Address). \
            filter_by(id=data["addr_id"]).first()
    elif data.has_key("address"):
        address = data["address"]
        address = unicode(address.replace("+", " "))

        addr_words = re.findall("[^\s]+", address)
        if addr_words.__len__() == 0:
            raise abort(400)

        # 5. 입력된 어드레스가 존재하는지 찾는다
        addr = db.query(Address)
        for word in addr_words:
            addr = addr.filter(Address.address. \
                               like("%" + word + "%"))
        addr = addr.first()
    else:
        raise abort(400)

    if not addr:
        raise abort(500)

    ia = db.query(InterestAddress)
    ia = ia.filter_by(operator_id=user.id, address_id=addr.id).first()
    # for word in addr_words:
    #    ia = ia.filter(InterestAddress.address. \
    #                   like("%" + word + "%"))
    # ia = ia.filter_by(address_id=addr.id)
    # ia = ia.first()
    if not ia:
        raise abort(404)

    # 6. 입력된 유저, 어드레스가 일치하는 행을 삭제한다.
    try:
        ia_id = ia.id
        ia_address_id = ia.address_id
        with db.begin_nested():
            db.delete(ia)
    except Exception, e:
        print str(e)
        dbo.abort()
        raise abort(500)
Beispiel #29
0
def add_interest_region():
    # 1. 대상 유저와 주소를 입력받는다.
    # 2. 권한을 체크한다. (어드민 혹은 본인)
    # 3. 해당 유저가 존재하는지 여부를 검사한다
    # 4. 들어온 afs_id 를 통해 AddressForSearch 인자를 얻어온 후
    #    해당 행이 is_leaf 나 is_root 인가를 본다.
    # 5. 특정된 유저를 기준으로 해당하는 항목을 가져온다.
    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 대상 유저와 주소를 입력받는다.
    arguments = ["username", "afs_id"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 2. 권한을 체크한다. (어드민 혹은 본인)
    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    # 3. 해당 유저가 존재하는지 여부를 검사한다
    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    # 4. 들어온 afs_id 를 통해 AddressForSearch 인자를 얻어온 후
    #    해당 행이 is_leaf 나 is_root 인가를 본다.
    afs = db.query(AddressForSearch).filter_by(id=data["afs_id"]).first()
    if not afs:
        raise abort(404)

    addrs = []
    if afs.is_root:
        raise abort(403)
    elif afs.is_leaf:
        addr = db.query(Address).filter_by(id=afs.addr_id).first()
        if addr:
            addrs.append(addr)
    else:
        stack = []
        stack.append(afs)

        current_afs = None
        while True:
            if stack.__len__() == 0:
                break
            current_afs = stack.pop()
            if current_afs.is_leaf:
                addr = db.query(Address).filter_by(id=current_afs.addr_id).first()
                if addr:
                    addrs.append(addr)
            else:
                for afs_sub in db.query(AddressForSearch).filter_by(parent=current_afs.id).all():
                    stack.append(afs_sub)

    if addrs.__len__() > 0:
        try:
            with db.begin_nested():
                for addr in addrs:
                    ia = db.query(InterestAddress).filter_by(operator_id=user.id, \
                                                             address_id=addr.id).first()
                    if not ia:
                        ia = InterestAddress(operator_id=user.id, address_id=addr.id)
                        db.add(ia)
        except Exception, e:
            print str(e)
            dbo.abort()
            raise abort(500)

        try:
            db.commit()
        except Exception, e:
            print "EXCEPTION OCCUR DURING COMMIT : {0}".format(str(e))
            dbo.abort()
            db.rollback()
Beispiel #30
0
def search_interest_region():
    # 1. 대상 유저와 주소를 입력받는다.
    # 2. 권한을 체크한다. (어드민 혹은 본인)
    # 3. 해당 유저가 존재하는지 여부를 검사한다
    # 4. 입력된 어드레스를 단어들로 쪼갠다
    # 5. 입력된 단어들을 모두 가지는 어드레스 행을 가져온다

    results = {}

    db = dbo.get_instance()

    data = json.loads(request.data)

    # 1. 대상 유저를 입력받는다.
    arguments = ["username"]
    data_keys = data.keys()
    for argument in arguments:
        if argument not in data_keys:
            raise abort(400)

    # 2. 권한을 체크한다. (어드민 혹은 본인)
    session_permission = get_permission()
    session_username = session["token"]["user"]["username"]
    if not session_permission == 0:
        # 마스터가 아니라면,
        if not session_username == data["username"]:
            # 그러면서 본인도 아니라면?
            return jsonify({"reason_text": "Permission Denied", \
                            "reason_code": 2}), 401

    # 3. 해당 유저가 존재하는지 여부를 검사한다
    user = db.query(Operator). \
        filter_by(username=data["username"]).first()
    if not user:
        raise abort(404)

    # 4. 입력된 어드레스를 단어들로 쪼갠다
    if data.has_key("addr_id"):
        addr = db.query(Address).filter_by(id=data["addr_id"]).first()
    elif data.has_key("address"):
        address = data["address"]
        address = unicode(address.replace("+", " "))

        addr_words = re.findall("[^\s]+", address)
        if addr_words.__len__() == 0:
            raise abort(400)

        # 5. 입력된 단어들을 모두 가지는 어드레스 행을 가져온다
        addr = db.query(Address)
        for word in addr_words:
            addr = addr.filter(Address.address.like("%" + word + "%"))
        addr = addr.first()
    else:
        raise abort(400)

    if not addr:
        raise abort(404)
    #addr_ids = map(lambda x: x.id, addrs)


    #ias = db.query(InterestAddress)
    #ias = ias.filter_by(operator_id=user.id)
    #ias = ias.filter(InterestAddress.address_id.in_(addr_ids))
    #ias = ias.all()
    ias = db.query(InterestAddress).filter_by(operator_id=user.id, address_id=addr.id).all()
    if not ias:
        raise abort(404)

    # ias = db.query(InterestAddress).\
    #		filter_by(operator_id=user.id).\
    #		order_by(InterestAddress.updated_at.desc())

    results["interest_address"] = []
    for ia in ias:
        results["interest_address"].append(ia.serialize())

    return jsonify(results), 200