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
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
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
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))
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
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
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
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
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)
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)
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)
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)
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)
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)
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")
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 : "))
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'))
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])
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'))
def test_guest_can_be_instanciated(self): guest = Guest() self.assertIsInstance(guest, Guest)
## 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')
#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:
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())
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)