def test_room_init(self):
     """
     Tests models.Room.__init__ to ensure that it correctly checks input
     """
     for test in self.room_init_test_cases:
         if issubclass(test[KEY_EXPECTED_TYPE], Exception):
             with self.assertRaises(test[KEY_EXPECTED_TYPE]):
                 result = models.Room(**test[KEY_INPUT])
         else:
             result = models.Room(**test[KEY_INPUT])
             self.assertTrue(isinstance(result, test[KEY_EXPECTED_TYPE]))
             self.assertEqual(result.size, test[KEY_EXPECTED].value)
Exemplo n.º 2
0
    def post(self):
        try:
            parser = reqparse.RequestParser()
            parser.add_argument('uploader', type=str)
            parser.add_argument('address', type=str)
            parser.add_argument('contact', type=str)
            parser.add_argument('introduction', type=str)
            parser.add_argument('latitude', type=float)
            parser.add_argument('longitude', type=float)
            args = parser.parse_args()

            if args['uploader'] is None or not args['uploader']:
                return {'Error': 'null data is not allowed'}, 400
            if args['address'] is None or not args['address']:
                return {'Error': 'null data is not allowed'}, 400
            if args['contact'] is None or not args['contact']:
                return {'Error': 'null data is not allowed'}, 400
            if args['latitude'] is None:
                return {'Error': 'null data is not allowed'}, 400
            if args['longitude'] is None:
                return {'Error': 'null data is not allowed'}, 400
            if args['introduction'] is None:
                args['introduction'] = ' '

            room = models.Room(**args)
            db.session.add(room)
            db.session.commit()
            return {'success': True}, 200
        except Exception as e:
            print(e)
            return {'Error': str(e)}, 400
Exemplo n.º 3
0
def create_room():
    topic = flask.request.form['topic']
    room = models.Room()
    room.topic = topic
    db.session.add(room)
    db.session.commit()
    r_id = room.id
    return flask.redirect(flask.url_for('room_view', r_id=r_id), code=303)
Exemplo n.º 4
0
def create_room():
    if not request.is_json:
        return error.error_400("Expected JSON")

    try:
        newRoom = models.Room(roomname=request.json["roomName"])
        session.add(newRoom)
        session.commit()
    except KeyError:
        return error.error_400("Missing field in body: 'roomName'")

    if newRoom.roomid is None:
        return error.error_400("Error adding room to database")

    return success.success_200({"roomId": newRoom.roomid})
Exemplo n.º 5
0
    def createDatabase(self):
        """Create the Required Database Objects"""
        session = models.meta.Session()
        arSession = self.Session()
        #log.setLevel(logging.WARNING)
        deploymentName = "archRock"
        houseName = self.houseAddress

        theDep = session.query(models.Deployment).filter_by(name=deploymentName).first()
        log.debug("Checking for existing deployment {0}".format(theDep))
        if theDep is None:
            #Create a new deployment
            theDep = models.Deployment(name=deploymentName)
            session.add(theDep)
            session.flush()
            log.debug("Adding Deployment to database {0}".format(theDep))


        #And check for Houses
        theHouse = session.query(models.House).filter_by(address=houseName).first()
        log.debug("Checking for house {0}".format(theHouse))
        if theHouse is None:
            theHouse = models.House(address=houseName,
                                    deploymentId = theDep.id)
            session.add(theHouse)
            session.flush()
            log.debug("Adding New House {0}".format(theHouse))


        self.theHouse = theHouse

        emptyRoom = session.query(models.RoomType).filter_by(name="Unocupied").first()

        nodeMap = {}
        #Temp storage for <ADDDR> <Node>
        addrMap = {}

        #We want to setup nodes / Rooms / Locations based on the node_dimension table
        log.info("Setting Up Nodes")
        nodeQry = arSession.query(Ar_Node)
        for item in nodeQry:
            #Dont bother with the router
            if item.name == "archrock-router":
                continue

            #Check / Create a node if required
            nodeId = int(item.addr[8:],16)
            log.debug("{0} {1} {2}".format(item,item.addr,nodeId))
            
            #nodeId = BASE_NODE_ID + item.short_addr
            
            theNode = session.query(models.Node).filter_by(id = nodeId).first()
            if theNode is None:
                theNode = models.Node(id=nodeId)
                session.add(theNode)
                session.flush()
                log.debug("Creating New Node {0}".format(theNode))
            
            #Next we create a room / Location
            roomName = item.name
            if not roomName == "":
                log.debug("Room Name is {0}".format(roomName))

                theRoom = session.query(models.Room).filter_by(name=roomName).first()
                if theRoom is None:
                    theRoom = models.Room(name=roomName,
                                          roomTypeId=emptyRoom.id)
                    log.debug("Creating Room {0}".format(theRoom))
                    session.add(theRoom)
                    session.flush()

                #And now we can turn this room into a Location
                theLocation = session.query(models.Location).filter_by(houseId=theHouse.id,
                                                                       roomId = theRoom.id).first()
                if theLocation is None:
                    theLocation = models.Location(houseId = theHouse.id,
                                                  roomId = theRoom.id)
                    session.add(theLocation)
                    log.debug("Creating Location {0}".format(theLocation))
                    session.flush()
            #Last thing we create a mapping between the node and the Location
            nodeMap[item.node_key] = [theNode,theLocation]
            addrMap[item.addr] = theNode

        #log.debug(nodeMap)
        self.nodeMap = nodeMap
        #We also need to do mapping for sensor types etc
        #theQry = arSession.query(Source)

        #Map the Types we are expecting to types from the database
        sensorTypeMap = {}
        log.info("Mapping Sensor Types")
        for sType in ALLOWED_TYPES:
            theType = session.query(models.SensorType).filter_by(name=sType[1]).first()
            
            log.debug("AR: {0}  Local {1}".format(sType,theType))
            sensorTypeMap[sType[0]] = theType
            
        #log.debug(sensorTypeMap)

        sensorMap = {}
        
        sQry = arSession.query(Source)
        for item in sQry:
            thisItem = sensorTypeMap.get(item.source,None)
            if thisItem:
                sensorMap[item.datasource_key] = sensorTypeMap[item.source]

        self.sensorMap = sensorMap
        log.setLevel(logging.DEBUG)
        
        log.info("Commtitting Changes")
        session.flush()
        session.commit()
    3: models.Attendee(ucid="lr123"),
}
MOCK_APPOINTMENT_DB_ENTRIES = {
    1:
    models.Appointment(
        room_id=1,
        start_time=datetime.datetime(2020, 1, 1, 12, 0, 0),
        end_time=datetime.datetime(2020, 1, 1, 13, 0, 0),
        organizer_id=1,
        attendee_ids=[1, 2, 3],
    ),
}
MOCK_ROOM_DB_ENTRIES = {
    1: models.Room(
        room_number=100,
        capacity=10,
        size=models.RoomSize.MEDIUM,
    ),
}
MOCK_UNAVAILABLE_DATE_DB_ENTRIES = {
    1: models.UnavailableDate(
        date=datetime.datetime(2020, 1, 1),
        reason=None,
    ),
    2: models.UnavailableDate(
        date=datetime.date(2020, 1, 2),
        reason="Snow Day",
    ),
}
MOCK_CHECK_IN_DB_ENTRIES = {
    1:
Exemplo n.º 7
0
 def get_room(self, id):
     return models.Room(self.query('SELECT * FROM room JOIN room_category WHERE room.id = %s' % id, one=True))
Exemplo n.º 8
0
 def get_rooms(self, id):
     q = self.query('SELECT * from room JOIN room_category WHERE hid = %s' % id)
     if q is None:
         q = []
     return [models.Room(x) for x in q]
Exemplo n.º 9
0
 def get_rooms_by_type(self, hotel_id, type):
     q = self.query('SELECT * FROM room JOIN room_category WHERE hid = %s AND type="%s"' % (hotel_id, type))
     if q is None:
         q = []
     return [models.Room(x) for x in q]
Exemplo n.º 10
0
def seed():
    """Seed the database with sample data."""
    import models
    # the rooms

    room_features = ['Projector', 'TV', 'Webcam', 'Phone Line']

    rooms = {
        '1560': ['Projector'],
        '1561': ['TV', 'Webcam'],
        '1562': ['Projector'],
        '1563': ['TV'],
        '1564': ['Projector'],
        '1565': ['TV', 'Webcam'],
        '1665': ['TV', 'Webcam'],
        '1663': ['TV'],
        '1662': ['Projector'],
        '1661': ['Projector'],
        '1660': ['Projector']
    }

    feature_dict = {}
    for feature in room_features:
        f = models.RoomFeature(name=feature)
        get_db().add(f)
        feature_dict[feature] = f

    rooms_dict = {}
    for room_number in rooms:
        r = models.Room(number=room_number)
        for feature in rooms[room_number]:
            f = feature_dict[feature]
            r.features.append(f)
        rooms_dict[room_number] = r
        get_db().add(r)

    # the types of team
    teamtype_dict = {}
    teamtype_dict['single'] = models.TeamType(
        name='single',
        priority=4,
        advance_time=7 * 2  # 2 weeks
    )
    get_db().add(teamtype_dict['single'])
    get_db().add(
        models.TeamType(
            name='other_team',
            priority=4,
            advance_time=7 * 2  # 2 weeks
        ))
    get_db().add(
        models.TeamType(
            name='class',
            priority=3,
            advance_time=7 * 2  # 2 weeks
        ))
    get_db().add(
        models.TeamType(
            name='colab_class',
            priority=2,
            advance_time=7 * 2  # 2 weeks
        ))
    get_db().add(
        models.TeamType(
            name='senior_project',
            priority=1,
            advance_time=7 * 2  # 2 weeks
        ))

    # the permissions

    perm_names = [
        'team.create', 'team.create.elevated', 'team.delete',
        'team.delete.elevated', 'team.read', 'team.read.elevated',
        'team.update', 'team.update.elevated', 'reservation.create',
        'reservation.delete', 'reservation.delete.elevated',
        'reservation.read', 'reservation.update',
        'reservation.update.elevated', 'room.update.elevated',
        'room.create.elevated', 'room.read', 'room.delete.elevated',
        'feature.create', 'feature.delete', 'feature.update', 'feature.read',
        'role.create', 'role.delete', 'role.update'
    ]
    perm_dict = {}
    for perm in perm_names:
        p = models.Permission(name=perm)
        get_db().add(p)
        perm_dict[perm] = p

    roles = {
        'student': [
            'team.create', 'team.delete', 'team.read', 'team.update',
            'reservation.create', 'reservation.delete', 'reservation.read',
            'reservation.update', 'room.read', 'feature.read'
        ],
        'labbie': [
            'team.create', 'team.delete', 'team.read', 'team.update',
            'reservation.create', 'reservation.delete', 'reservation.read',
            'reservation.update', 'room.read', 'feature.read',
            'team.read.elevated'
        ],
        'professor': [
            'team.create', 'team.delete', 'team.read', 'team.update',
            'reservation.create', 'reservation.delete', 'reservation.read',
            'reservation.update', 'room.read', 'feature.read',
            'team.create.elevated', 'team.read.elevated'
        ],
        'admin': [
            'team.create', 'team.create.elevated', 'team.delete',
            'team.delete.elevated', 'team.read', 'team.read.elevated',
            'team.update', 'team.update.elevated', 'reservation.create',
            'reservation.delete', 'reservation.delete.elevated',
            'reservation.read', 'reservation.update',
            'reservation.update.elevated', 'room.update.elevated',
            'room.create.elevated', 'room.read', 'room.delete.elevated',
            'feature.create', 'feature.delete', 'feature.update',
            'feature.read', 'role.create', 'role.delete', 'role.update'
        ]
    }
    users_dict = {}
    for role in roles:
        r = models.Role(name=role)
        for permission in roles[role]:
            p = perm_dict[permission]
            r.permissions.append(p)
        get_db().add(r)
        # seed a user TODO don't do this in production?
        u = models.User(name=role, email=role + "@example.com")
        u.roles.append(r)
        team = models.Team(u.name)
        team_type = teamtype_dict['single']
        team.team_type = team_type
        team.members.append(u)
        u.teams.append(team)
        users_dict[role] = u
        get_db().add(team)
        get_db().add(u)

    reservation = models.Reservation(
        start=datetime.datetime.now() + datetime.timedelta(days=7),
        end=datetime.datetime.now() + datetime.timedelta(days=7, hours=1),
        team=users_dict['admin'].teams[0],
        room=rooms_dict['1660'],
        created_by=users_dict['admin'])
    get_db().add(reservation)

    get_db().commit()
Exemplo n.º 11
0
 def __init__(self):
     self.current_tick = -1
     self.room = models.Room(settings)
Exemplo n.º 12
0
    def createDeployment(self):
        """
        Create a new deployment and house etc on the Transfer Database
        """

        deploymentName = "archRock"
        houseName = self.houseName
        
        session = models.meta.Session()
        #Check for deployment

        theDep = session.query(models.Deployment).filter_by(name=deploymentName).first()
        log.debug("Checking for existing deployment {0}".format(theDep))
        if theDep is None:
            #Create a new deployment
            theDep = models.Deployment(name=deploymentName)
            session.add(theDep)
            session.flush()
            log.debug("Adding Deployment to database {0}".format(theDep))


        #And check for Houses
        theHouse = session.query(models.House).filter_by(address=houseName).first()
        log.debug("Checking for house {0}".format(theHouse))
        if theHouse is None:
            theHouse = models.House(address=houseName,
                                    deploymentId = theDep.id)
            session.add(theHouse)
            session.flush()
            log.debug("Adding New House {0}".format(theHouse))


        self.theHouse = theHouse
        #Create a location for this particular node
        
        theRoom = session.query(models.Room).filter_by(name="External").first()
        if theRoom is None:
            theRoom = models.Room(name="External",roomTypeId=1)
            session.add(theRoom)
            session.flush()

        log.debug("External Room is {0}".format(theRoom))

        #theLocation = models.Location(houseId = theHouse.id,roomId = theRoom.id)
        theLocation = session.query(models.Location).filter_by(houseId=theHouse.id,
                                                               roomId = theRoom.id).first()
        log.debug("Checking for existing location {0}".format(theLocation))
        if theLocation is None:
            theLocation = models.Location(houseId = theHouse.id,
                                          roomId = theRoom.id)
            session.add(theLocation)
            session.flush()

        self.theLocation = theLocation

        #Node / Node Type
        theNode = session.query(models.Node).filter_by(id=118118).first()
        if theNode is None:
            theNode = models.Node(id=118118)
            session.add(theNode)
            session.flush()
        log.debug("Node is {0}".format(theNode))
        self.theNode = theNode

        sensorType = session.query(models.SensorType).filter_by(name="Power").first()
        self.avgType = sensorType
        log.debug("Sensor is {0}".format(sensorType))
        
        sensorType = session.query(models.SensorType).filter_by(name="Power Min").first()
        self.minType = sensorType

        sensorType = session.query(models.SensorType).filter_by(name="Power Max").first()
        self.maxType = sensorType

        session.commit()