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)
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()
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]))
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)
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()))
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()])
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)) )) ))
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() ))
def subnets(self): return session.query( Subnet ).join( Subnet.vlans ).join( VLAN.dormitories ).filter( Dormitory.id == self.id ).all()
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]))
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"
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"
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()))
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)
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() ))
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)
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
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} ] )
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, )
def subnets(self): return session.query(Subnet).join(Subnet.vlans).join( VLAN.dormitories).filter(Dormitory.id == self.id).all()
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()])