Ejemplo n.º 1
0
def move(user_id):
    user = User.q.get(user_id)
    if user is None:
        flash(u"Nutzer mit ID %s existiert nicht!" % (user_id,), 'error')
        abort(404)

    form = UserMoveForm()

    if not form.is_submitted():
        form.dormitory.data = user.room.dormitory

        levels = session.query(Room.level.label('level')).filter_by(
            dormitory_id=user.room.dormitory.id).order_by(Room.level).distinct()

        form.level.choices = [(entry.level, str(entry.level)) for entry in
                                                              levels]
        form.level.data = user.room.level

        rooms = session.query(Room).filter_by(
            dormitory_id=user.room.dormitory.id,
            level=user.room.level
        ).order_by(Room.number).distinct()

        form.room_number.choices = [(entry.number, str(entry.number)) for entry
                                                                      in rooms]
        form.room_number.data = user.room

    if form.validate_on_submit():
        edited_user = lib.user.move(user, form.dormitory.data,
            form.level.data, form.room_number.data, current_user)

        flash(u'Benutzer umgezogen', 'success')
        return redirect(url_for('.user_show', user_id=edited_user.id))

    return render_template('user/user_move.html', user_id=user_id, form=form)
Ejemplo n.º 2
0
def deleteDorm():
    """Delete a existing dormitory from the list"""

    dormitories = session.query(Dormitory).all()

    if not len(dormitories):
        print "no dormitories"
        return

    for i in range(len(dormitories)):
        print i
        print dormitories[i]

    while True:
        try:
            delete = int(raw_input("(you have to confirm) delete No. : "))
            break
        except ValueError:
            print "you have to type a number"

    if not delete >= 0 or not delete < len(dormitories):
        print "{} is not a dormitory".format(delete)
        return

    print dormitories[delete]
    confirm = raw_input("do you want to delete this dormitory? (y/n): ")

    if confirm == "y":
        try:
            session.delete(dormitories[delete])
            session.commit()
            print "deleted"
            return
        except:
            session.rollback()
Ejemplo n.º 3
0
def json_levels():
    if not request.is_xhr:
        abort(404)
    dormitory_id = request.args.get('dormitory', 0, type=int)
    levels = session.query(Room.level.label('level')).filter_by(
        dormitory_id=dormitory_id).order_by(Room.level).distinct()
    return jsonify(dict(items=[entry.level for entry in levels]))
Ejemplo n.º 4
0
def deleteDorm():
    """Delete a existing dormitory from the list"""

    dormitories = session.query(Dormitory).all()

    if not len(dormitories):
        print "no dormitories"
        return

    for i in range(len(dormitories)):
        print i
        print dormitories[i]

    while True:
        try:
            delete = int(raw_input("(you have to confirm) delete No. : "))
            break
        except ValueError:
            print "you have to type a number"

    if not delete >= 0 or not delete < len(dormitories):
        print "{} is not a dormitory".format(delete)
        return

    print dormitories[delete]
    confirm = raw_input("do you want to delete this dormitory? (y/n): ")

    if confirm == "y":
        try:
            session.delete(dormitories[delete])
            session.commit()
            print "deleted"
            return
        except:
            session.rollback()
Ejemplo n.º 5
0
    def q(cls):
        """This is a shortcut for easy querying of whole objects.

        With this metaclass shortcut you can query a Model with
        Model.q.filter(...) without using the verbose session stuff
        """
        return session.query(cls)
Ejemplo n.º 6
0
    def q(cls):
        """This is a shortcut for easy querying of whole objects.

        With this metaclass shortcut you can query a Model with
        Model.q.filter(...) without using the verbose session stuff
        """
        return session.query(cls)
Ejemplo n.º 7
0
def json_accounts_system():
    return jsonify(accounts=map(
        lambda account: {
            "account_id": account.id,
            "account_name": account.name
        },
        session.query(FinanceAccount).outerjoin(User).filter(
            User.finance_account == None).all()))
Ejemplo n.º 8
0
def json_accounts_system():
    return jsonify(accounts=[
        {
            "account_id": account.id,
            "account_name": localized(account.name),
        } for account in session.query(Account).outerjoin(User).filter(
            User.account == None
        ).all()])
Ejemplo n.º 9
0
def json_search():
    query = request.args['query']
    return jsonify(users=map(
        lambda u: {"id": u.id, "name": u.name},
        session.query(User.id, User.name).filter(or_(
            func.lower(User.name).like(func.lower(u"%{}%".format(query))),
            User.id.like(u"{}%".format(query))
        ))
    ))
Ejemplo n.º 10
0
def json_accounts_system():
    return jsonify(accounts=map(
        lambda account: {
            "account_id": account.id,
            "account_name": account.name
        },
        session.query(FinanceAccount).outerjoin(User).filter(
            User.finance_account == None
        ).all()
    ))
Ejemplo n.º 11
0
 def subnets(self):
     return session.query(
         Subnet
     ).join(
         Subnet.vlans
     ).join(
         VLAN.dormitories
     ).filter(
         Dormitory.id == self.id
     ).all()
Ejemplo n.º 12
0
def json_rooms():
    if not request.is_xhr:
        abort(404)
    dormitory_id = request.args.get('dormitory', 0, type=int)
    level = request.args.get('level', 0, type=int)
    rooms = session.query(
        Room.number.label("room_num")).filter_by(
        dormitory_id=dormitory_id, level=level).order_by(
        Room.number).distinct()
    return jsonify(dict(items=[entry.room_num for entry in rooms]))
Ejemplo n.º 13
0
def host_name_filter(host):
    a_record = session.query(
        ARecord
    ).filter(
        ARecord.host_id == host.id
    ).first()

    if a_record is not None:
        return a_record.name
    else:
        return "NoName"
Ejemplo n.º 14
0
def host_cname_filter(host):
    cname_record = session.query(
        CNAMERecord
    ).filter(
        CNAMERecord.host_id == host.id
    ).first()

    if cname_record is not None:
        return cname_record.name
    else:
        return "NoCName"
Ejemplo n.º 15
0
def json_accounts_user_search():
    query = request.args['query']
    return jsonify(accounts=map(
        lambda result: {
            "account_id": result[0],
            "user_id": result[1],
            "user_name": result[2]
        },
        session.query(FinanceAccount.id, User.id, User.name).filter(
            FinanceAccount.id == User.finance_account_id,
            or_(
                func.lower(User.name).like(func.lower("%{0}%".format(query))),
                User.id.like("{0}%".format(query)))).all()))
Ejemplo n.º 16
0
def json_accounts_user_search():
    query = request.args['query']
    results = session.query(
        Account.id, User.id, User.login,
        User.name).select_from(User).join(Account).filter(
            or_(
                func.lower(User.name).like(func.lower("%{0}%".format(query))),
                func.lower(User.login).like(func.lower("%{0}%".format(query))),
                cast(User.id, Text).like(u"{0}%".format(query)))).all()
    accounts = [{
        "account_id": account_id,
        "user_id": user_id,
        "user_login": user_login,
        "user_name": user_name
    } for account_id, user_id, user_login, user_name in results]
    return jsonify(accounts=accounts)
Ejemplo n.º 17
0
def json_accounts_user_search():
    query = request.args['query']
    return jsonify(accounts=map(
        lambda result: {
            "account_id": result[0],
            "user_id": result[1],
            "user_name": result[2]
        },
        session.query(FinanceAccount.id, User.id, User.name).filter(
            FinanceAccount.id == User.finance_account_id,
            or_(
                func.lower(User.name).like(func.lower("%{0}%".format(query))),
                User.id.like("{0}%".format(query))
            )
        ).all()
    ))
Ejemplo n.º 18
0
def json_accounts_user_search():
    query = request.args['query']
    results = session.query(
        Account.id, User.id, User.login, User.name
    ).select_from(User).join(Account).filter(
        or_(func.lower(User.name).like(func.lower("%{0}%".format(query))),
            func.lower(User.login).like(func.lower("%{0}%".format(query))),
            cast(User.id, Text).like(u"{0}%".format(query)))
    ).all()
    accounts = [
        {"account_id": account_id,
         "user_id": user_id,
         "user_login": user_login,
         "user_name": user_name}
        for account_id, user_id, user_login, user_name in results
    ]
    return jsonify(accounts=accounts)
Ejemplo n.º 19
0
def get_or_create_address(
    street: str,
    number: str,
    addition: str | None,
    zip_code: str,
    city: str | None = None,
    state: str | None = None,
    country: str | None = None,
) -> Address:
    """Returns an existing address or creates a new one.

    If the address is to be used for some other update operation,
    make sure to wrap this call and the next one in a `Session.no_autoflush` block,
    because else the address cleanup trigger may fire.
    """
    query = session.query(Address).filter_by(
        street=street,
        number=number,
        addition=addition,
        zip_code=zip_code,
        city=city,
        state=state,
        country=country,
    )
    num_matching = query.count()
    if num_matching == 1:
        return query.one()

    if num_matching > 1:
        raise RuntimeError("Found more than one address")

    # create
    new_address = Address(
        street=street,
        number=number,
        addition=addition,
        zip_code=zip_code,
        city=city,
        state=state,
        country=country,
    )
    session.add(new_address)
    return new_address
Ejemplo n.º 20
0
def json_trafficdata(user_id, days=7):
    """Generate a Highcharts compatible JSON file to use with traffic graphs.

    :param user_id:
    :param days: optional amount of days to be included
    :return: JSON with traffic data for INPUT and OUTPUT with [datetime, megabyte] tuples.
    """
    traffic_timespan = datetime.now() - timedelta(days=days)

    # get all traffic volumes for the user in the timespan
    traffic_volumes = session.query(
        TrafficVolume
    ).join(
        TrafficVolume.ip
    ).join(
        Ip.host
    ).filter(
        Host.user_id == user_id
    ).filter(
        TrafficVolume.timestamp > traffic_timespan)

    # filter for INPUT and OUTPUT
    traffic_volume_in = traffic_volumes.filter(TrafficVolume.type == 'IN').all()
    traffic_volume_out = traffic_volumes.filter(TrafficVolume.type == 'OUT').all()

    # generate the data arrays which will be used in the JSON
    tv_in = []
    for volume in traffic_volume_in:
        tv_in.append([volume.timestamp, volume.size / 1024 / 1024])
    tv_out = []
    for volume in traffic_volume_out:
        tv_out.append([volume.timestamp, volume.size / 1024 / 1024])

    # reverse, so data is in chronological order
    for tv in (tv_in, tv_out):
        tv.reverse()

    return jsonify(
        series=[
            {"name": 'Input', "data": tv_in, "stack": 0},
            {"name": 'Output', "data": tv_out, "stack": 1}
        ]
    )
Ejemplo n.º 21
0
def host_traffic_filter(host):
    traffic_timespan = datetime.now() - timedelta(days=7)

    traffic_volumes = session.query(
        TrafficVolume
    ).join(
        TrafficVolume.ip
    ).join(
        Ip.host
    ).filter(
        Host.id == host.id
    ).filter(
        TrafficVolume.timestamp > traffic_timespan
    ).all()

    traffic_sum = 0
    for traffic in traffic_volumes:
        traffic_sum += ( traffic.size / 1024 / 1024 )

    return u"%s MB" % (traffic_sum, )
Ejemplo n.º 22
0
 def subnets(self):
     return session.query(Subnet).join(Subnet.vlans).join(
         VLAN.dormitories).filter(Dormitory.id == self.id).all()
Ejemplo n.º 23
0
def json_accounts_system():
    return jsonify(accounts=[{
        "account_id": account.id,
        "account_name": localized(account.name),
    } for account in session.query(Account).outerjoin(User).filter(
        User.account == None).all()])