コード例 #1
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_balance_checker():
    # BALANCE_ERROR : If user's balance is insufficient for room cost
    room = Room(1, 50, 1, None, None)
    new_guest = Guest('C', False, 1, 0, 10, date(2020, 9, 27),
                      date(2020, 9, 28))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.BALANCE_ERROR

    room = Room(1, 50, 1, None, None)
    new_guest = Guest('C', False, 1, 2, 70, date(2020, 9, 27),
                      date(2020, 9, 28))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.BALANCE_ERROR
コード例 #2
0
ファイル: main.py プロジェクト: r4rajat/libvirt-python
def main(conn=None):
    parser = getParser()
    options = parser.parse_args()

    conn = libvirt.open(options.connect)
    if conn is None:
        print "There is some error opening connection to libvirt"
        sys.exit(1);

    # check if existing machine of same name exists
    vm = None
    try:
        vm = conn.lookupByName(options.name)
    except libvirt.libvirtError:
        pass

    if vm is not None:
        print "VM of same name exists already, destroying and recreating it again"
        if vm.ID() != -1:
            vm.destroy()
        vm.undefine()

    guest = Guest(conn, options)
    xml = guest.guestGetXML(options.boot, options.cdrom).replace('\n','')
    dom = conn.createXML(xml, 0)
    dom = conn.defineXML(xml)

    if not dom:
        print "Cannot create/define domain"
        sys.exit(1)

    return 0
コード例 #3
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_find_available_room_for_customer_func():
    rooms = generate_rooms([1, 1, 1, 1, 1, 1])

    new_guest = Guest('F', True, 3, 2, 1000, date(2020, 9, 27),
                      date(2020, 9, 28))
    assert find_available_room_for_customer(rooms, new_guest) == True
    assert new_guest.room_number == 2

    new_guest1 = Guest('G', True, 3, 2, 1000, date(2020, 9, 27),
                       date(2020, 9, 28))
    assert find_available_room_for_customer(rooms,
                                            new_guest1) == error.HANDICAP_ERROR

    # After checkout, the third room should be empty
    checkout_guest(rooms, new_guest)
    assert rooms[2].checkin_date == None
コード例 #4
0
    def post(self):
        self.response.headers['Content-Type'] = 'text/html'

        first_name = cgi.escape(self.request.get('first-name'))
        last_name = cgi.escape(self.request.get('last-name'))
        email = cgi.escape(self.request.get('email'))
        guests = cgi.escape(self.request.get('guests'))
        country = cgi.escape(self.request.get('country'))
        message = cgi.escape(self.request.get('message'))

        template_values = {'greetings': 'Hey'}

        g = db.GqlQuery("SELECT * FROM Guest WHERE email = :1", email)

        if g is not None:
            g = Guest(first_name=first_name,
                      last_name=last_name,
                      email=email,
                      guests=guests,
                      country=country,
                      message=message)

            g.put()

        template_path = 'tmp/confirm.html'
        if 'es' in self.request.url:
            template_path = 'tmp/confirm-es.html'

        path = os.path.join(os.path.dirname(__file__), template_path)
        self.response.write(template.render(path, template_values))
コード例 #5
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_bed_checker():
    # BED_ERROR : If the room doesn't have proper number of beds
    room = Room(1, 50, 1, date(2020, 9, 27), date(2020, 9, 28))
    new_guest = Guest('E', False, 2, 2, 90, date(2020, 9, 29),
                      date(2020, 9, 30))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.BED_COUNT_ERROR
コード例 #6
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_handicap_checker():
    # HANDICAP_ERROR : If level is 2 and guest is disabled
    room = Room(2, 50, 1, None, None)
    new_guest = Guest('B', True, 1, 2, 60, date(2020, 9, 27),
                      date(2020, 9, 28))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.HANDICAP_ERROR
コード例 #7
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_occupation_checker():
    # OCCUPATION_ERROR : If the room is already booked
    room = Room(1, 50, 1, date(2020, 9, 27), date(2020, 9, 28))
    new_guest = Guest('D', False, 1, 2, 90, date(2020, 9, 28),
                      date(2020, 9, 30))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.OCCUPATION_ERROR
コード例 #8
0
ファイル: test.py プロジェクト: wpickachu/booking-room
def test_pay_checker():
    # PET_CHECK : If the number of pets is more than 2
    room = Room(1, 50, 1, None, None)
    new_guest = Guest('A', False, 1, 5, 60, date(2020, 9, 27),
                      date(2020, 9, 28))
    assert Room.is_available_for_customer(room,
                                          new_guest) == error.PET_CHECK_ERROR
コード例 #9
0
def run_server():
    """
    Setting up server. Wait for connection from new clients, starts server_input thread and communication thread.
    Socket with context manager is used to close socket automatically when it finish it's job
    :return: None
    """
    with soc.socket(soc.AF_INET, soc.SOCK_STREAM) as s:
        s.bind((HOST, PORT))                                      # set up server
        print("...server started...\n")
        Thread(target=server_input).start()                       # starting thread to get input from user to the server
        s.listen(10)                                              # open server to listen for connections
        while True:
            try:
                conn, addr = s.accept()                              # wait for any for connections
                print("...new user connected...")
                conn.send("Please provide your name: ".encode())     # server to provide name for identification
                name = conn.recv(1024).decode()                      # first message received is always the persons name
                when_joined = strftime('%Y-%m-%d %H:%M:%S', gmtime())

                """creates a new guest object and adds it to the list of guest """
                list_of_guests.append(Guest(conn, addr, when_joined))
                list_of_guests[-1].set_name(name)                    # sets the name for a new guest object

                """sending welcome message to every user on the server but the one that joined"""
                welcome = f"{list_of_guests[-1].get_name()} just joined! Time: {when_joined}\n"
                say_to_all(welcome, list_of_guests[-1].get_connection())
                print(f"connection from: {addr[0]}, port: {addr[1]}. Hello {list_of_guests[-1].get_name()}"
                      f". Time: {strftime('%Y-%m-%d %H:%M:%S', gmtime())}\n")

                Thread(target=communication, args=(list_of_guests[-1],)).start()    # starts communication thread

            except Exception as e:
                print("Exception in server - run server: ", e)
コード例 #10
0
    def test_user_can_signup(self):
        guest = Guest()
        member = Member()
        librairian = Librarian()

        self.assertEqual(guest.id, 0)
        self.assertIsNotNone(member.id)
        self.assertIsNotNone(librairian.id)
コード例 #11
0
def result(username):
    guests.update()
    registered = guests.is_exist(username)

    if registered:
        user = guests.get_guest(username)
    else:
        user = Guest(username, '')

    return render_template('result.html', registered=registered, user=user)
コード例 #12
0
ファイル: run.py プロジェクト: hakobian4/Python_Advanced
def main():
    # Create object of Hotel class
    obj_hotel = Hotel('MARRIOTT', '1 Amiryan Street, Yerevan  0010 Armenia', '+374-10-599000', 'www.marriott.com')

    # Create objects of Guest class
    obj_guest1 = Guest('Armen', 'Hakobian', '*****@*****.**', '091-333-402')   
    obj_guest2 = Guest('Ani', 'Hakobian', '*****@*****.**', '077-587-578')

    # Create objects of Room class
    obj_room1 = Room(1, 'Yes', 'Yes', 'No')   
    obj_room2 = Room(2, 'No', 'Yes', 'Yes')
    obj_room3 = Room(3, 'No', 'Yes', 'No')

    # Add rooms in Hotel
    obj_hotel.add_room(obj_room1)
    obj_hotel.add_room(obj_room2)
    obj_hotel.add_room(obj_room3)
    
    # Book rooms
    obj_hotel.book_room(obj_guest1)
    obj_hotel.book_room(obj_guest2)

    # Print hotel info
    obj_hotel.print_hotel_info()

    # Print all rooms info
    obj_hotel.print_all_rooms()

    # Print room info with a given number (ex. 2)
    obj_hotel.print_room_info(2) 

    # Print guest info
    obj_guest1.get_info()
  
    # Print all booked rooms info
    obj_hotel.print_book_info()
    # or 
    # Print a booked room info by room number 
    obj_hotel.print_book_info(2)
コード例 #13
0
def show_guests():
    """
    Show guests that have RSVP'd.

    Add guests to RSVP list if method is POST.
    """
    if request.method == "GET":
        return render_template("guests.html", guests=guest_list)
    elif request.method == "POST":
        name = request.form.get("name")
        email = request.form.get("email")
        plus_one = request.form.get("plus-one")
        phone = request.form.get("phone")
        guest_list.append(Guest(name, email, plus_one, phone))
        return render_template("guests.html", guests=guest_list)
コード例 #14
0
    def get_booking_info(type):
        from database import Database
        from guest import Guest
        from reservations import Reservation
        from worker import Worker
        from hotel import Hotel

        try:
            if type == "Guest":
                return Guest()
            elif type == "Worker":
                return Worker()
            elif type == "Reservation":
                return Reservation()
            elif type == "Database":
                return Database()
            elif type == "Hotel":
                return Hotel()
            raise AssertionError("Part not found")
        except AssertionError as _e:
            print(_e)
コード例 #15
0
    def post(self):
        ime = self.request.get("ime")
        priimek = self.request.get("priimek")
        email = self.request.get("email")
        sporocilo = self.request.get("sporocilo")

        if not ime:
            ime = "Neznanec"

        if not "<script>" in sporocilo:

            guest = Guest(ime=ime,
                          priimek=priimek,
                          email=email,
                          sporocilo=sporocilo)
            guest.put()
            return self.redirect_to("main")

        else:
            sprocilo = ""
            return self.redirect_to("main")
コード例 #16
0
def get_guest_menu():
    print("LOGGED AS GUEST")
    print()
    guest_obj = Guest()
    print("1. View products")
    print("2. Register")
    print("3. Exit")
    opt = int(input("Enter the corresponding number : "))
    while opt != 3:
        if opt == 1:
            view_products(guest_obj)
        elif opt == 2:
            get_register_menu()
            break
        elif opt != 3:
            print("Invalid option! Try again")
        print("LOGGED AS GUEST")
        print()
        print("1. View products")
        print("2. Register")
        print("3. Exit")
        opt = int(input("Enter the corresponding number : "))
コード例 #17
0
ファイル: host.py プロジェクト: yifengyou/JimV-N
    def guest_operate_engine(self):
        self.init_conn()

        ps = r.pubsub(ignore_subscribe_messages=False)
        ps.subscribe(config['instruction_channel'])

        while True:
            if Utils.exit_flag:
                msg = 'Thread guest_operate_engine say bye-bye'
                print msg
                logger.info(msg=msg)
                return

            thread_status['guest_operate_engine'] = ji.JITime.now_date_time()

            # noinspection PyBroadException
            try:
                msg = ps.get_message(timeout=1)

                if msg is None or 'data' not in msg or not isinstance(msg['data'], basestring):
                    continue

                try:
                    msg = json.loads(msg['data'])

                    if msg['action'] == 'pong':
                        continue

                    if msg['action'] == 'ping':
                        # 通过 ping pong 来刷存在感。因为经过实际测试发现,当订阅频道长时间没有数据来往,那么订阅者会被自动退出。
                        r.publish(config['instruction_channel'], message=json.dumps({'action': 'pong'}))
                        continue

                except ValueError as e:
                    logger.error(e.message)
                    log_emit.error(e.message)
                    continue

                if 'hostname' in msg and msg['hostname'] != self.hostname:
                    continue

                # 下列语句繁琐写法如 <code>if 'action' not in msg or 'uuid' not in msg:</code>
                if not all([key in msg for key in ['_object', 'action', 'uuid']]):
                    continue

                extend_data = dict()

                if msg['_object'] == 'guest':

                    self.refresh_guest_mapping()
                    if msg['action'] not in ['create']:

                        if msg['uuid'] not in self.guest_mapping_by_uuid:

                            if config['DEBUG']:
                                _log = u' '.join([u'uuid', msg['uuid'], u'在宿主机', self.hostname, u'中未找到.'])
                                logger.debug(_log)
                                log_emit.debug(_log)

                            raise RuntimeError('The uuid ' + msg['uuid'] + ' not found in current domains list.')

                        self.guest = self.guest_mapping_by_uuid[msg['uuid']]
                        if not isinstance(self.guest, libvirt.virDomain):
                            raise RuntimeError('Guest ' + msg['uuid'] + ' is not a domain.')

                    if msg['action'] == 'create':
                        t = threading.Thread(target=Guest.create, args=(self.conn, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'reboot':
                        if self.guest.reboot() != 0:
                            raise RuntimeError('Guest reboot failure.')

                    elif msg['action'] == 'force_reboot':
                        self.guest.destroy()
                        self.guest.create()

                    elif msg['action'] == 'shutdown':
                        if self.guest.shutdown() != 0:
                            raise RuntimeError('Guest shutdown failure.')

                    elif msg['action'] == 'force_shutdown':
                        if self.guest.destroy() != 0:
                            raise RuntimeError('Guest force shutdown failure.')

                    elif msg['action'] == 'boot':
                        if not self.guest.isActive():

                            guest = Guest()
                            guest.execute_boot_jobs(guest=self.guest, boot_jobs=msg['boot_jobs'])

                            if self.guest.create() != 0:
                                raise RuntimeError('Guest boot failure.')

                    elif msg['action'] == 'suspend':
                        if self.guest.suspend() != 0:
                            raise RuntimeError('Guest suspend failure.')

                    elif msg['action'] == 'resume':
                        if self.guest.resume() != 0:
                            raise RuntimeError('Guest resume failure.')

                    elif msg['action'] == 'delete':
                        root = ET.fromstring(self.guest.XMLDesc())

                        if self.guest.isActive():
                            self.guest.destroy()

                        self.guest.undefine()

                        system_disk = None

                        for _disk in root.findall('devices/disk'):
                            if 'vda' == _disk.find('target').get('dev'):
                                system_disk = _disk

                        if msg['storage_mode'] in [StorageMode.ceph.value, StorageMode.glusterfs.value]:
                            # 签出系统镜像路径
                            path_list = system_disk.find('source').attrib['name'].split('/')

                        if msg['storage_mode'] == StorageMode.glusterfs.value:
                            Guest.dfs_volume = path_list[0]
                            Guest.init_gfapi()

                            try:
                                Guest.gf.remove('/'.join(path_list[1:]))
                            except OSError:
                                pass

                        elif msg['storage_mode'] in [StorageMode.local.value, StorageMode.shared_mount.value]:
                            file_path = system_disk.find('source').attrib['file']
                            try:
                                os.remove(file_path)
                            except OSError:
                                pass

                    elif msg['action'] == 'attach_disk':

                        if 'xml' not in msg:
                            _log = u'添加磁盘缺少 xml 参数'
                            raise KeyError(_log)

                        flags = libvirt.VIR_DOMAIN_AFFECT_CONFIG
                        if self.guest.isActive():
                            flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE

                        # 添加磁盘成功返回时,ret值为0。可参考 Linux 命令返回值规范?
                        if self.guest.attachDeviceFlags(xml=msg['xml'], flags=flags) != 0:
                            raise RuntimeError('Attack disk failure.')

                    elif msg['action'] == 'detach_disk':

                        if 'xml' not in msg:
                            _log = u'分离磁盘缺少 xml 参数'
                            raise KeyError(_log)

                        flags = libvirt.VIR_DOMAIN_AFFECT_CONFIG
                        if self.guest.isActive():
                            flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE

                        if self.guest.detachDeviceFlags(xml=msg['xml'], flags=flags) != 0:
                            raise RuntimeError('Detach disk failure.')

                    elif msg['action'] == 'migrate':

                        # duri like qemu+ssh://destination_host/system
                        if 'duri' not in msg:
                            _log = u'迁移操作缺少 duri 参数'
                            raise KeyError(_log)

                        # https://rk4n.github.io/2016/08/10/qemu-post-copy-and-auto-converge-features/
                        flags = libvirt.VIR_MIGRATE_PERSIST_DEST | \
                            libvirt.VIR_MIGRATE_UNDEFINE_SOURCE | \
                            libvirt.VIR_MIGRATE_COMPRESSED | \
                            libvirt.VIR_MIGRATE_PEER2PEER | \
                            libvirt.VIR_MIGRATE_AUTO_CONVERGE

                        root = ET.fromstring(self.guest.XMLDesc())

                        if msg['storage_mode'] == StorageMode.local.value:
                            # 需要把磁盘存放路径加入到两边宿主机的存储池中
                            # 不然将会报 no storage pool with matching target path '/opt/Images' 错误
                            flags |= libvirt.VIR_MIGRATE_NON_SHARED_DISK
                            flags |= libvirt.VIR_MIGRATE_LIVE

                            if not self.guest.isActive():
                                _log = u'非共享存储不支持离线迁移。'
                                logger.error(_log)
                                log_emit.error(_log)
                                raise RuntimeError('Nonsupport online migrate with storage of non sharing mode.')

                            if self.init_ssh_client(hostname=msg['duri'].split('/')[2], user='******'):
                                for _disk in root.findall('devices/disk'):
                                    _file_path = _disk.find('source').get('file')
                                    disk_info = Disk.disk_info_by_local(image_path=_file_path)
                                    disk_size = disk_info['virtual-size']
                                    stdin, stdout, stderr = self.ssh_client.exec_command(
                                        ' '.join(['qemu-img', 'create', '-f', 'qcow2', _file_path, str(disk_size)]))

                                    for line in stdout:
                                        logger.info(line)
                                        log_emit.info(line)

                                    for line in stderr:
                                        logger.error(line)
                                        log_emit.error(line)

                        elif msg['storage_mode'] in [StorageMode.shared_mount.value, StorageMode.ceph.value,
                                                     StorageMode.glusterfs.value]:
                            if self.guest.isActive():
                                flags |= libvirt.VIR_MIGRATE_LIVE
                                flags |= libvirt.VIR_MIGRATE_TUNNELLED

                            else:
                                flags |= libvirt.VIR_MIGRATE_OFFLINE

                        if self.guest.migrateToURI(duri=msg['duri'], flags=flags) == 0:
                            if msg['storage_mode'] == StorageMode.local.value:
                                for _disk in root.findall('devices/disk'):
                                    _file_path = _disk.find('source').get('file')
                                    if _file_path is not None:
                                        os.remove(_file_path)

                        else:
                            raise RuntimeError('Unknown storage mode.')

                elif msg['_object'] == 'disk':
                    if msg['action'] == 'create':

                        if msg['storage_mode'] == StorageMode.glusterfs.value:
                            Guest.dfs_volume = msg['dfs_volume']
                            Guest.init_gfapi()

                            if not Disk.make_qemu_image_by_glusterfs(gf=Guest.gf, dfs_volume=msg['dfs_volume'],
                                                                     image_path=msg['image_path'], size=msg['size']):
                                raise RuntimeError('Create disk failure with glusterfs.')

                        elif msg['storage_mode'] in [StorageMode.local.value, StorageMode.shared_mount.value]:
                            if not Disk.make_qemu_image_by_local(image_path=msg['image_path'], size=msg['size']):
                                raise RuntimeError('Create disk failure with local storage mode.')

                    elif msg['action'] == 'delete':

                        if msg['storage_mode'] == StorageMode.glusterfs.value:
                            Guest.dfs_volume = msg['dfs_volume']
                            Guest.init_gfapi()

                            if Disk.delete_qemu_image_by_glusterfs(gf=Guest.gf, image_path=msg['image_path']) \
                                    is not None:
                                raise RuntimeError('Delete disk failure with glusterfs.')

                        elif msg['storage_mode'] in [StorageMode.local.value, StorageMode.shared_mount.value]:
                            if Disk.delete_qemu_image_by_local(image_path=msg['image_path']) is not None:
                                raise RuntimeError('Delete disk failure with local storage mode.')

                    elif msg['action'] == 'resize':

                        if 'size' not in msg:
                            _log = u'添加磁盘缺少 disk 或 disk["size"] 参数'
                            raise KeyError(_log)

                        used = False

                        if msg['guest_uuid'].__len__() == 36:
                            used = True

                        if used:
                            self.refresh_guest_mapping()

                            if msg['guest_uuid'] not in self.guest_mapping_by_uuid:

                                if config['DEBUG']:
                                    _log = u' '.join([u'uuid', msg['uuid'], u'在宿主机', self.hostname, u'中未找到.'])
                                    logger.debug(_log)
                                    log_emit.debug(_log)

                                raise RuntimeError('Resize disk failure, because the uuid ' + msg['guest_uuid'] +
                                                   ' not found in current domains.')

                            self.guest = self.guest_mapping_by_uuid[msg['guest_uuid']]
                            if not isinstance(self.guest, libvirt.virDomain):
                                raise RuntimeError('Resize disk failure, because the guest is not a domain.')

                        # 在线磁盘扩容
                        if used and self.guest.isActive():
                                if 'device_node' not in msg:
                                    _log = u'添加磁盘缺少 disk 或 disk["device_node|size"] 参数'
                                    raise KeyError(_log)

                                # 磁盘大小默认单位为KB,乘以两个 1024,使其单位达到GB
                                msg['size'] = int(msg['size']) * 1024 * 1024

                                if self.guest.blockResize(disk=msg['device_node'], size=msg['size']) != 0:
                                    raise RuntimeError('Online resize disk failure in blockResize method.')

                        # 离线磁盘扩容
                        else:
                            if not all([key in msg for key in ['storage_mode', 'dfs_volume', 'image_path']]):
                                _log = u'添加磁盘缺少 disk 或 disk["storage_mode|dfs_volume|image_path|size"] 参数'
                                raise KeyError(_log)

                            if msg['storage_mode'] == StorageMode.glusterfs.value:
                                if not Disk.resize_qemu_image_by_glusterfs(dfs_volume=msg['dfs_volume'],
                                                                           image_path=msg['image_path'],
                                                                           size=msg['size']):
                                    raise RuntimeError('Offline resize disk failure with glusterfs.')

                            elif msg['storage_mode'] in [StorageMode.local.value, StorageMode.shared_mount.value]:
                                if not Disk.resize_qemu_image_by_local(image_path=msg['image_path'], size=msg['size']):
                                    raise RuntimeError('Offline resize disk failure with local storage mode.')

                else:
                    _log = u'未支持的 _object:' + msg['_object']
                    logger.error(_log)
                    log_emit.error(_log)

                response_emit.success(_object=msg['_object'], action=msg['action'], uuid=msg['uuid'],
                                      data=extend_data, passback_parameters=msg.get('passback_parameters'))

            except redis.exceptions.ConnectionError as e:
                logger.error(traceback.format_exc())
                # 防止循环线程,在redis连接断开时,混水写入日志
                time.sleep(5)

            except:
                logger.error(traceback.format_exc())
                log_emit.error(traceback.format_exc())
                response_emit.failure(_object=msg['_object'], action=msg.get('action'), uuid=msg.get('uuid'),
                                      passback_parameters=msg.get('passback_parameters'))
コード例 #18
0
ファイル: app.py プロジェクト: squadran2003/mstay
def start():
    help_text()
    run = True
    hotel_name = None
    hotel_address = None
    hotel_created = False
    while run:
        if not hotel_name:
            hotel_name = input("Hotel name? ").upper()
        if not hotel_address:
            hotel_address = input("Hotel address? ").upper()
        if not hotel_name and not hotel_address:
            continue
        if not hotel_created:
            hotel = Hotel(hotel_name, hotel_address)
        hotel_created = True
        clear_screen()
        user_choice = input("What would you like to do? ").upper()
        if user_choice not in ['C', 'R', 'L', 'LR1', 'LR2', 'LR3', 'Q', 'H']:
            print("sorry dont recognise that choice!")
            continue
        if user_choice == 'Q':
            clear_screen()
            print("Good bye!")
            run = False
        if user_choice == 'H':
            clear_screen()
            help_text()
        if user_choice == 'LR1':
            clear_screen()
            hotel.list_rooms(1)
        if user_choice == 'LR2':
            clear_screen()
            hotel.list_rooms(2)
        if user_choice == 'LR3':
            clear_screen()
            hotel.list_rooms(3)
        if user_choice == 'C':
            clear_screen()
            reservation_id = input("What is the reservation id? ")
            if not reservation_id:
                print("You did not enter a reservation id")
                continue
            checkout(int(reservation_id), hotel)
        if user_choice == 'R':
            clear_screen()
            guest_name = input("Name of the Guest? ")
            guest_address = input("Address ? ")
            guest_phone = input("Phone number? ")
            if not guest_name or not guest_address or not guest_phone:
                print("You missed some key guest information!")
                continue
            guest = Guest(guest_name, guest_address, guest_phone)
            clear_screen()
            print("What kind of room do you want to reserve?")
            room_type = input("1 for single, 2 for double, 3 for suite ")
            if not room_type:
                print("you did not enter a room type!")
                continue
            print("len of single rooms before the pop {}".format(
                len(hotel.single_bedrooms)))
            # get a room from the hotel
            if room_type == '1':
                if len(hotel.single_bedrooms) < 1:
                    print("No single rooms available")
                    continue
                room = hotel.single_bedrooms.pop()
            if room_type == '2':
                if len(hotel.double_bedrooms) < 1:
                    print("No double rooms available")
                    continue
                room = hotel.double_bedrooms.pop()
            if room_type == '3':
                print("hello")
                if len(hotel.suites) < 1:
                    print("No suites available")
                    continue
                room = hotel.suites.pop()
            print("how long will you be staying")
            date_from = input("From date? ")
            date_to = input("To date? ")
            if not date_from or not date_to:
                print("""If you dont provide how long you will be staying,
                    we will assume you are staing a day""")
                res = Reservation(random_res_id(), guest, room)
            else:
                res = Reservation(random_res_id(), guest, room, date_from,
                                  date_to)
            hotel.reservations.append(res)
            print("reservation made!")
            clear_screen()
        if user_choice == 'L':
            clear_screen()
            hotel.list_reservations()
class TestHasManyThroughMiniProj(unittest.TestCase):

    global guest_1
    guest_1 = Guest("Dwight Schrute")
    global guest_2
    guest_2 = Guest("Michael Scott")
    global guest_3
    guest_3 = Guest("Pam Beasley")
    global dinner_party_1
    dinner_party_1 = DinnerParty("Office Christmas Party")
    global dinner_party_2
    dinner_party_2 = DinnerParty("Your parent's friend's")
    global dinner_party_3
    dinner_party_3 = DinnerParty("Friend's House Warming")
    global invite_1
    invite_1 = Invite(dinner_party_1, guest_1)
    global invite_2
    invite_2 = Invite(dinner_party_1, guest_2)
    global invite_3
    invite_3 = Invite(dinner_party_1, guest_3)
    global invite_4
    invite_4 = Invite(dinner_party_2, guest_1)
    global invite_5
    invite_5 = Invite(dinner_party_3, guest_1)
    global recipe_1
    recipe_1 = Recipe("Disaster")
    global recipe_2
    recipe_2 = Recipe("Punch")
    global recipe_3
    recipe_3 = Recipe("Cookies")
    global recipe_4
    recipe_4 = Recipe("Punch")
    global recipe_5
    recipe_5 = Recipe("Cookies")
    global recipe_6
    recipe_6 = Recipe("Punch")
    global course_1
    course_1 = Course(dinner_party_1, recipe_1)
    global course_2
    course_2 = Course(dinner_party_1, recipe_2)
    global course_3
    course_3 = Course(dinner_party_1, recipe_3)
    global course_4
    course_4 = Course(dinner_party_1, recipe_4)
    global course_5
    course_5 = Course(dinner_party_2, recipe_5)
    global course_6
    course_6 = Course(dinner_party_2, recipe_6)
    global course_7
    course_7 = Course(dinner_party_2, recipe_2)
    global review_1
    review_1 = Review(guest_1, recipe_1, 3,
                      "the Disaster wasn't as bad as I would've liked")
    global review_2
    review_2 = Review(guest_2, recipe_1, 5,
                      "It was total chaos, exceeded expectations")
    global review_3
    review_3 = Review(guest_3, recipe_1, 4, "Just disastrous, nothing more")
    global review_4
    review_4 = Review(guest_1, recipe_2, 2, "way too much pineapple juice!")
    global review_5
    review_5 = Review(guest_2, recipe_2, 2, "not enough pineapple juice!")
    global review_6
    review_6 = Review(
        guest_3, recipe_2, 3,
        "right amount of pineapple juice, but wasn't anything to write home about"
    )
    global review_7
    review_7 = Review(guest_1, recipe_3, 2,
                      "I don't like cookies, that's all.")
    global review_8
    review_8 = Review(guest_2, recipe_1, 4, "Pretty disastrous, nothing more")
    global review_9
    review_9 = Review(guest_3, recipe_1, 4, "Meh, I've seen more bedlam")
    global review_10
    review_10 = Review(guest_1, recipe_4, 1,
                       "It was more of a slap in the face")

    def test_guest_class_methods(self):
        self.assertItemsEqual(Guest.all(), [guest_1, guest_2, guest_3])
        self.assertEqual(Guest.most_popular(), guest_1)
        self.assertEqual(Guest.toughest_critic(), guest_1)
        self.assertEqual(Guest.most_active_critic(), guest_1)

    def test_guest_instance_methods(self):
        self.assertEqual(guest_1.rsvp(invite_1, True), True)
        self.assertEqual(guest_1.number_of_invites(), 3)
        self.assertEqual(
            len(
                guest_1.review_recipe(
                    recipe_1, 3,
                    "The disaster just wasn't disastrous enough!")), 6)
        Review._all.pop()
        self.assertEqual(guest_1.favorite_recipe(), recipe_1)

    def test_invite_class_methods(self):
        self.assertItemsEqual(
            Invite._all, [invite_1, invite_2, invite_3, invite_4, invite_5])
        self.assertItemsEqual(
            Invite.all(), [invite_1, invite_2, invite_3, invite_4, invite_5])

    def test_invite_instance_methods(self):
        self.assertEqual(guest_1.rsvp(invite_1, True), True)
        self.assertEqual(invite_1.accepted, True)
        self.assertEqual(invite_1.dinner_party, dinner_party_1)

    def test_dinner_party_class_methods(self):
        self.assertItemsEqual(DinnerParty.all(),
                              [dinner_party_1, dinner_party_2, dinner_party_3])

    def test_dinner_party_instance_methods(self):
        self.assertItemsEqual(dinner_party_1.reviews(), [
            review_1, review_2, review_3, review_4, review_5, review_6,
            review_7, review_8, review_9, review_10
        ])
        self.assertItemsEqual(dinner_party_1.recipes(),
                              [recipe_1, recipe_2, recipe_3, recipe_4])
        self.assertEqual(dinner_party_1.recipe_count(), 4)
        self.assertEqual(dinner_party_1.highest_rated_recipe(), recipe_1)
        invite_1.accepted = True
        invite_2.accepted = True
        invite_3.accepted = True
        self.assertEqual(dinner_party_1.number_of_attendees(), 3)

    def test_review_class_methods(self):
        self.assertItemsEqual(Review._all, [
            review_1, review_2, review_3, review_4, review_5, review_6,
            review_7, review_8, review_9, review_10
        ])
        self.assertItemsEqual(Review.all(), [
            review_1, review_2, review_3, review_4, review_5, review_6,
            review_7, review_8, review_9, review_10
        ])

    def test_review_instance_methods(self):
        self.assertEqual(review_1.rating, 3)
        self.assertEqual(review_1.reviewer, guest_1)
        self.assertEqual(review_1.recipe, recipe_1)
        self.assertEqual(review_1.comment,
                         "the Disaster wasn't as bad as I would've liked")

    def test_recipe_class_methods(self):
        self.assertItemsEqual(
            Recipe.all(),
            [recipe_1, recipe_2, recipe_3, recipe_4, recipe_5, recipe_6])
        self.assertItemsEqual(Recipe.top_three(),
                              [recipe_1, recipe_2, recipe_3])
        self.assertItemsEqual(Recipe.bottom_three(),
                              [recipe_4, recipe_2, recipe_3])

    def test_recipe_instance_methods(self):
        self.assertItemsEqual(
            recipe_1.top_five_reviews(),
            [review_1, review_2, review_8, review_3, review_9])
コード例 #20
0
    def instruction_process_engine(self):

        ps = r.pubsub(ignore_subscribe_messages=False)
        ps.subscribe(config['instruction_channel'])

        while True:
            if Utils.exit_flag:
                msg = 'Thread instruction_process_engine say bye-bye'
                print msg
                logger.info(msg=msg)
                return

            threads_status['instruction_process_engine'] = {
                'timestamp': ji.Common.ts()
            }

            msg = dict()
            extend_data = dict()

            try:
                msg = ps.get_message(timeout=config['engine_cycle_interval'])

                if msg is None or 'data' not in msg or not isinstance(
                        msg['data'], basestring):
                    continue

                try:
                    msg = json.loads(msg['data'])

                    if msg['action'] == 'pong':
                        continue

                    if msg['action'] == 'ping':
                        # 通过 ping pong 来刷存在感。因为经过实际测试发现,当订阅频道长时间没有数据来往,那么订阅者会被自动退出。
                        r.publish(config['instruction_channel'],
                                  message=json.dumps({'action': 'pong'}))
                        continue

                except ValueError as e:
                    log_emit.error(e.message)
                    continue

                if 'node_id' in msg and int(msg['node_id']) != self.node_id:
                    continue

                # 下列语句繁琐写法如 <code>if '_object' not in msg or 'action' not in msg:</code>
                if not all([key in msg for key in ['_object', 'action']]):
                    continue

                logger.info(msg=msg)
                if msg['_object'] == 'guest':

                    self.refresh_dom_mapping()
                    if msg['action'] not in ['create']:
                        self.dom = self.dom_mapping_by_uuid[msg['uuid']]
                        assert isinstance(self.dom, libvirt.virDomain)

                    if msg['action'] == 'create':
                        t = threading.Thread(target=Guest.create,
                                             args=(self.conn, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'reboot':
                        Guest.reboot(dom=self.dom)

                    elif msg['action'] == 'force_reboot':
                        Guest.force_reboot(dom=self.dom, msg=msg)

                    elif msg['action'] == 'shutdown':
                        Guest.shutdown(dom=self.dom)

                    elif msg['action'] == 'force_shutdown':
                        Guest.force_shutdown(dom=self.dom)

                    elif msg['action'] == 'boot':
                        Guest.boot(dom=self.dom, msg=msg)

                    elif msg['action'] == 'suspend':
                        Guest.suspend(dom=self.dom)

                    elif msg['action'] == 'resume':
                        Guest.resume(dom=self.dom)

                    elif msg['action'] == 'delete':
                        Guest.delete(dom=self.dom, msg=msg)

                    elif msg['action'] == 'reset_password':
                        Guest.reset_password(dom=self.dom, msg=msg)

                    elif msg['action'] == 'attach_disk':
                        Guest.attach_disk(dom=self.dom, msg=msg)

                    elif msg['action'] == 'detach_disk':
                        Guest.detach_disk(dom=self.dom, msg=msg)

                    elif msg['action'] == 'update_ssh_key':
                        Guest.update_ssh_key(dom=self.dom, msg=msg)

                    elif msg['action'] == 'allocate_bandwidth':
                        t = threading.Thread(target=Guest.allocate_bandwidth,
                                             args=(self.dom, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'adjust_ability':
                        t = threading.Thread(target=Guest.adjust_ability,
                                             args=(self.dom, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'migrate':
                        Guest().migrate(dom=self.dom, msg=msg)

                elif msg['_object'] == 'disk':

                    if msg['action'] == 'create':
                        Storage(storage_mode=msg['storage_mode'],
                                dfs_volume=msg['dfs_volume']).make_image(
                                    path=msg['image_path'], size=msg['size'])

                    elif msg['action'] == 'delete':
                        Storage(storage_mode=msg['storage_mode'],
                                dfs_volume=msg['dfs_volume']).delete_image(
                                    path=msg['image_path'])

                    elif msg['action'] == 'resize':
                        mounted = True if msg['guest_uuid'].__len__(
                        ) == 36 else False

                        if mounted:
                            self.refresh_dom_mapping()
                            self.dom = self.dom_mapping_by_uuid[
                                msg['guest_uuid']]

                        # 在线磁盘扩容
                        if mounted and self.dom.isActive():
                            # 磁盘大小默认单位为KB,乘以两个 1024,使其单位达到 GiB
                            msg['size'] = int(msg['size']) * 1024 * 1024

                            # https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainBlockResize
                            self.dom.blockResize(disk=msg['device_node'],
                                                 size=msg['size'])
                            Guest.quota(dom=self.dom, msg=msg)

                        # 离线磁盘扩容
                        else:
                            Storage(storage_mode=msg['storage_mode'],
                                    dfs_volume=msg['dfs_volume']).resize_image(
                                        path=msg['image_path'],
                                        size=msg['size'])

                    elif msg['action'] == 'quota':
                        self.refresh_dom_mapping()
                        self.dom = self.dom_mapping_by_uuid[msg['guest_uuid']]
                        Guest.quota(dom=self.dom, msg=msg)

                elif msg['_object'] == 'snapshot':

                    self.refresh_dom_mapping()
                    self.dom = self.dom_mapping_by_uuid[msg['uuid']]

                    if msg['action'] == 'create':
                        t = threading.Thread(target=Guest.create_snapshot,
                                             args=(self.dom, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'delete':
                        t = threading.Thread(target=Guest.delete_snapshot,
                                             args=(self.dom, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'revert':
                        t = threading.Thread(target=Guest.revert_snapshot,
                                             args=(self.dom, msg))
                        t.setDaemon(False)
                        t.start()
                        continue

                    elif msg['action'] == 'convert':
                        t = threading.Thread(target=Guest.convert_snapshot,
                                             args=(msg, ))
                        t.setDaemon(False)
                        t.start()
                        continue

                elif msg['_object'] == 'os_template_image':
                    if msg['action'] == 'delete':
                        Storage(storage_mode=msg['storage_mode'],
                                dfs_volume=msg['dfs_volume']).delete_image(
                                    path=msg['template_path'])

                elif msg['_object'] == 'global':
                    if msg['action'] == 'refresh_guest_state':
                        t = threading.Thread(target=Host().refresh_guest_state,
                                             args=())
                        t.setDaemon(False)
                        t.start()
                        continue

                    if msg['action'] == 'upgrade':
                        try:
                            log = self.upgrade(msg['url'])
                            log_emit.info(msg=log)

                        except subprocess.CalledProcessError as e:
                            log_emit.warn(e.output)
                            self.rollback()
                            continue

                        log = self.restart()
                        log_emit.info(msg=log)

                    if msg['action'] == 'restart':
                        log = self.restart()
                        log_emit.info(msg=log)

                else:
                    err = u'未支持的 _object:' + msg['_object']
                    log_emit.error(err)

                response_emit.success(
                    _object=msg['_object'],
                    action=msg['action'],
                    uuid=msg['uuid'],
                    data=extend_data,
                    passback_parameters=msg.get('passback_parameters'))

            except KeyError as e:
                log_emit.warn(e.message)
                if msg['_object'] == 'guest':
                    if msg['action'] == 'delete':
                        response_emit.success(
                            _object=msg['_object'],
                            action=msg['action'],
                            uuid=msg['uuid'],
                            data=extend_data,
                            passback_parameters=msg.get('passback_parameters'))

            except:
                # 防止循环线程,在redis连接断开时,混水写入日志
                time.sleep(5)
                log_emit.error(traceback.format_exc())
                response_emit.failure(
                    _object=msg['_object'],
                    action=msg.get('action'),
                    uuid=msg.get('uuid'),
                    passback_parameters=msg.get('passback_parameters'))
コード例 #21
0
 def test_guest_can_be_instanciated(self):
     guest = Guest()
     self.assertIsInstance(guest, Guest)
コード例 #22
0
ファイル: hotel.py プロジェクト: emenzie/hotel-terminal
## Trying filename open / closing, IO, loops and classes
## Eric Menzie 9/8/19
## Hotel game

from guest import Guest
from roomservice import RoomService

filename = 'hotelguests.txt'
the_guest = Guest('')
call_roomservice = RoomService('')

the_guest.welcome()

with open(filename, 'a') as file_object:
    while True:
        a_guest = input('What is your, and your guest'
                        's, names? (Enter "q" if finished): ')

        if a_guest == 'q':
            break
        else:
            file_object.write(a_guest + "\n")
            print(f'Welcome {a_guest}!')

the_guest.greet_guests()
call_roomservice.offerDrinks()
from review import Review
from invite import Invite
from dinnerparty import DinnerParty
from recipe import Recipe
from guest import Guest
from course import Course

#Create guests
stacy = Guest('Stacy')
bob = Guest('Bob')

#Create Parties
party1 = DinnerParty('party1')

#Create Invites
invite1 = Invite(party1, stacy)
invite2 = Invite('party2', stacy)
invite3 = Invite('party3', bob)

#Create Recipes
recipe1 = Recipe('Borscht')
recipe2 = Recipe('Burgers')
recipe3 = Recipe('Sushi')
recipe4 = Recipe('Pizza')
recipe5 = Recipe('Oysters')

#Create Reviews
review1 = Review(stacy, recipe1, 5, 'Soup is too cold')
review2 = Review(stacy, recipe2, 4, 'My kids dont respect me')
review3 = Review(bob, recipe3, 3, 'I am happy')
review4 = Review(bob, recipe4, 1, 'YUM')
コード例 #24
0
    #for device in p.getElementsByTagName('disk'):
    for index, device in enumerate(
            p.getElementsByTagName('disk')):  #enumerate(xxx, , start=1)
        if device.getAttribute('device') != 'disk':
            continue
        d = kvmDisc(device, domain.name())
        discos.append(d)
        print(index)
    print(discos)

#logging.basicConfig(filename='logfile', level=logging.DEBUG)
#logging.info('Domain deleted!')

from guest import Guest

guest = Guest()
xml = guest.guestGetXML("john-boot", "johnyin-cdrom", "vm_name", "vmdescssss",
                        "1024", "4").replace('\n', '')
print(xml)

domains = get_domains(libvirt_conn)
print(domains)
#dom = conn.createXML(xml, 0)
#dom = conn.defineXML(xml)
#if not dom:
#    print "Cannot create/define domain"
#    sys.exit(1)

#try:
#    self.conn.defineXML(newxml)
#except Exception as e:
コード例 #25
0
from room import Room
from guest import Guest

room_1 = Room(25)
customer = Guest("Cher", 70, "Believe")

room_1.check_in(customer)
print(room_1.check_total_tab())
コード例 #26
0
from datetime import date
from manage import find_available_room_for_customer, generate_rooms, book_room_for_customer, checkout_guest
from guest import Guest

if __name__ == "__main__":
    # Hotel structure
    # First three values are number of rooms with 1, 2, 3 beds respectively in level 1
    # Second three values are number of rooms with 1, 2, 3 beds respectively in level 2
    count_of_rooms_by_type = [2, 3, 4, 3, 4, 5]

    rooms = generate_rooms(count_of_rooms_by_type)

    # New guests
    new_guest = Guest('A', False, 3, 2, 1000, date(2020, 9, 27),
                      date(2020, 9, 28))
    new_guest1 = Guest('B', True, 1, 2, 500, date(2020, 9, 27),
                       date(2020, 9, 29))

    # Find available rooms
    find_available_room_for_customer(rooms, new_guest)
    find_available_room_for_customer(rooms, new_guest1)