def __init__(self): self.players = [p1, p2] self.ship_names = [ 'aircraft carrier', 'battleship', 'submarine', 'destroyer', 'patrol' ] self.ship_lengths = [5, 4, 3, 3, 2] self.play_view = View()
def showMessageBox(self, msg): warning = QMessageBox(self) warning.setFont(View.labelsFont()) warning.setStyleSheet('QMessageBox {background: white}') warning.setWindowTitle("Error") warning.setText(msg) warning.setIcon(QMessageBox.Warning) warning.addButton("Ok", QMessageBox.AcceptRole).setFont(View.editsFont()) warning.exec_()
def __init__(self, display, text, font_index=7, size=config.CLOCK_FONT_SIZE): View.__init__(self, display) self.text = text self.size = size self.font_path = f"./fonts/{config.FONTS[font_index][0]}" self._create_font()
def create(attributes_transaction: dict): try: new_transaction = Transaction(**attributes_transaction) new_transaction.save() return View.get_response(new_transaction) except BaseException: return None
def main(debug=False, run=True): # loop loop = async_loop.new_event_loop() asyncio.set_event_loop(loop) # database database = PostgresqlDatabase(database=settings.DATABASE) # templates view = View({"HTML_TEMPLATES_DIR": settings.TEMPLATES_DIR}) # app app = make_app(view, database) app.blueprint(sessions, db=database, db_name='sessions', loop=loop) app.blueprint(users, db=database, db_name='users', loop=loop, sessions_db_name='sessions') app.blueprint(entries, db=database, db_name=BLOG_ENTRY_DB_NAME, loop=loop) app.blueprint(entries, db=database, db_name=COMMENT_ENTRY_DB_NAME, loop=loop) app.blueprint(entries, db=database, db_name=FILES_ENTRY_DB_NAME, loop=loop) app.blueprint(registration, view=view) app.blueprint(login, view=view) app.blueprint(logout, view=view) app.blueprint(files, view=view) app.blueprint(blog, view=view) if run: app.run(host="0.0.0.0", port=8000, loop=loop, debug=debug) return app, loop, view, database
def paint(self): log_paint.debug("ClockView::paint()") # Background self.display.draw.rectangle((0, 0, self.display.mx, self.display.my), fill=config.BG, outline=config.FG) # Clock clock_text = self._clock_text() text_width, text_height = self.display.draw.textsize(clock_text, font=self.font) self.display.draw.text((self.display.cx - text_width // 2, self.display.cy - text_height // 2), clock_text, font=self.font, fill=config.FG) View.paint(self) self.last_clock_text = clock_text
def __init__(self): self.engine = create_engine( "mysql+pymysql://root:admin@localhost:3306/oc_p5") self.session = Session(self.engine) self.controller = Controller(session=self.session) self.controller.add_categories_to_bdd( categories=self.controller.generate_categories( ["sandwichs", "bonbons", "jambons", "chips"])) self.view = View(session=self.session, controller=self.controller)
def get(card_number: str, page=1): try: cursor = Transaction.objects.raw({ 'card_number': card_number }).limit(per_page).skip(per_page * page) transactions = list(cursor) return View.get_response(transactions) except errors.DoesNotExist: return None
class Controller: def __init__(self): self.view = View() self.TodoDB = TodoDB() def add_todo(self): content = self.view.get_todo_content() return Todo(content) # Main function def run(self): user_choice = self.view.welcome_menu() if int(user_choice) == 1: todo = self.add_todo() self.TodoDB.add(todo) elif int(user_choice) == 2: self.TodoDB.get_all_todos() else: self.view.error_message()
def __init__(self, user=None): self.api = DribleAPI() self.view = View() self.user = user self.player = MPDClient() self.current_station = None ## Setup MPDClient self.player.timeout = 10 self.player.idletimeout = None self.player.connect("localhost", 6600)
def __init__(self, parent=None): super(SyncWindow, self).__init__(parent) # Sets up several UI aspects self.tray = QSystemTrayIcon(self) self.tray.setIcon(QIcon(QPixmap(':/resources/icon.png'))) self.tray.show() self.setStyleSheet('SyncWindow {background: white}') self.setWindowTitle('IQBox') self.setWindowIcon(QIcon(QPixmap(':/resources/logobar.png'))) self.statusBar().setFont(View.labelsFont()) self.syncThread = None # Initializes the window with a `LoginView` widget. self.loginView()
def __init__(self, session): self.app = wx.App(False) self.session = session self.view = View(None, name=self.session.subj.name, n_lick_show=self.session.lr.ACCUM_SIZE) # bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.run_session) self.view.pause_button.Bind(wx.EVT_BUTTON, self.pause_session) self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_reward(evt, temp)) self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_reward(evt, temp)) self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_puff(evt, temp)) self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_puff(evt, temp)) self.view.Bind(wx.EVT_CLOSE, self.on_close) self.view.Show()
def __init__(self): self.map = Map(MAP_SIZE_W, MAP_SIZE_H, BLOCKSIZE) pygame.init() window = pygame.display.set_mode((WIDTH,HEIGHT)) pygame.display.set_caption('def') self.screen = pygame.display.get_surface() self.model = Model( self.map) self.camera = Camera(self.screen.get_width(),self.screen.get_height()) self.entity_controller = EntityController(self.map) self.entity_view = EntityView(self.entity_controller) self.view = View(self.screen, self.camera, self.entity_view) self.camera_lock = True self.camera_follow_player = False
def make_app(view=None, database=None): if not view: view = View({"HTML_TEMPLATES_DIR": settings.TEMPLATES_DIR}) if not database: database = PostgresqlDatabase(database=settings.DATABASE) app = Sanic(__name__) app.config = Config() app.config.LOGO = "Atlantis! Go FAST!" app.config.REQUEST_MAX_SIZE = 2000000 # 2 megababies app.config.REQUEST_TIMEOUT = 60 * 5 # 5 min app.static('/static', settings.STATIC_DIR) @app.middleware('response') async def halt_response(request, response): response.headers['Content-Security-Policy'] = \ "default-src 'self' 'unsafe-inline';" return app
class SchoolController: def __init__(self): self.view = View() self.db = SchoolDB() def run(self): self.view.welcome_screen() user_selection = int(self.view.menu()) if user_selection == 1: all_students = self.db.all_students() self.view.parse_students(all_students) elif user_selection == 2: name = self.view.get_student_name() age = self.view.get_student_age() new_student = Student(name, age) self.db.add_student(new_student) elif user_selection == 3: student = self.db.get_student() return self.run()
def __init__(self): # Make app self.app = wx.App(False) # Generate view subs_list = list_subjects() self.view = View(None, subs=subs_list) if False:#not config.TESTING_MODE: sys.stdout=self.view.redir_out sys.stderr=self.view.redir_err setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err) self.tcpip = TCPIP(config.scanimage_tcpip_address) # Button bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff) self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare) self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause) self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip) self.view.Bind(wx.EVT_CLOSE, self.evt_close) self.view.lighton_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.set_light(evt, temp)) self.view.lightoff_but.Bind(wx.EVT_BUTTON, lambda evt, temp=0: self.set_light(evt, temp)) self.view.puff_but.Bind(wx.EVT_BUTTON, self.evt_puff) self.view.deliver_but.Bind(wx.EVT_BUTTON, self.evt_deliver) self.view.roi_but.Bind(wx.EVT_BUTTON, self.evt_roi) self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam) self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput) self.view.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.on_slide) self.view.ax_interactive.figure.canvas.mpl_connect('button_press_event', self.evt_interactive_click) # Runtime self.selection_pts = [] self.selecting = False self.update_state(self.STATE_NULL) self.n_updates = 0 # Run #self.view.Show() self.app.MainLoop()
def __init__(self, data_dir=r'D:\\deverett', wf_calib_path=r'C:\\WF\\calibration.npz'): # Make app self.app = wx.App(False) self.view = View(None) self.view.Bind(wx.EVT_CLOSE, self.evt_close) # Button bindings self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.but_load.Bind(wx.EVT_BUTTON, self.evt_load) self.view.but_reg.Bind(wx.EVT_BUTTON, self.evt_reg) self.view.but_freg.Bind(wx.EVT_BUTTON, self.evt_freg) self.view.but_save.Bind(wx.EVT_BUTTON, self.evt_save) # load initial info self.data_dir = data_dir subs = os.listdir(self.data_dir) self.view.add_sub(subs) try: with np.load(wf_calib_path) as cf: self.ppm_y = cf['pix_per_micron_y'] self.ppm_x = cf['pix_per_micron_x'] except FileNotFoundError: raise Exception('Calibration file not found. Please calibrate before registering.') # runtime self.cam = Camera() self.mp285 = MP285() self.current_sub = None self.register_mode = None self.result = None self.update() # Run self.app.MainLoop()
init(autoreset=True) if "--help" in sys.argv: f.instructions() time.sleep(10) else: pass print(40 * "*") print(Fore.GREEN + """Welcome to the Website Availability Python Terminal Application!""") print(40 * "*") while True: website_address = input("Which website would you like to check? \n") get_new_website = View(website_address) new_website = get_new_website.get_website() print("*" * 40) print(new_website[1]) print("*" * 40) if new_website[0] is True: break elif new_website[0] is False: continue while True: try: get_new_website = View(website_address) options = get_new_website.show_options() individual_website_response = input(options)
def __init__(self, display): View.__init__(self, display) random.seed() self._randomize()
class Controller(): def __init__(self, user=None): self.api = DribleAPI() self.view = View() self.user = user self.player = MPDClient() self.current_station = None ## Setup MPDClient self.player.timeout = 10 self.player.idletimeout = None self.player.connect("localhost", 6600) def login(self): while True: username = self.view.login() if username == "exit()": break self.user = User.get(username=username) ## User not found if self.user is None: ans = self.view.user_not_found(username) if ans == 'y' or ans == 'Y': if User.create(username=username) is None: self.view.error() continue else: self.__user_menu() def __user_menu(self): while True: choice = self.view.user_menu(self.user.username) ## Logout if choice == '5': break elif choice == '1': current_station = self.api.get_random_station() self.player.add(current_station['streamurl']) self.player.play() while True: choice = self.view.player_menu(current_station['name'], self.player.status()['volume']) if choice == '1': ## Make sure connection try: self.player.connect("localhost", 6600) except ConnectionError: ## already connected pass self.player.stop() self.player.clear() break elif choice == '2': vol = self.view.user_prompt('Set volume to (0~100): ') try: self.player.setvol(vol) except CommandError: self.view.error("Invalid volume value, only accept an integer between 0-100") else: continue
class Controller: REFRESH_INTERVAL = 500 #ms STATE_NULL = 0 STATE_PREPARED = 1 STATE_RUNNING = 2 STATE_KILLED_SESSION = 3 STATE_RUN_COMPLETE = 4 def __init__(self): # Make app self.app = wx.App(False) # Generate view subs_list = list_subjects() self.view = View(None, subs=subs_list) if False:#not config.TESTING_MODE: sys.stdout=self.view.redir_out sys.stderr=self.view.redir_err setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err) self.tcpip = TCPIP(config.scanimage_tcpip_address) # Button bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff) self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare) self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause) self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip) self.view.Bind(wx.EVT_CLOSE, self.evt_close) self.view.lighton_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.set_light(evt, temp)) self.view.lightoff_but.Bind(wx.EVT_BUTTON, lambda evt, temp=0: self.set_light(evt, temp)) self.view.puff_but.Bind(wx.EVT_BUTTON, self.evt_puff) self.view.deliver_but.Bind(wx.EVT_BUTTON, self.evt_deliver) self.view.roi_but.Bind(wx.EVT_BUTTON, self.evt_roi) self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam) self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput) self.view.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.on_slide) self.view.ax_interactive.figure.canvas.mpl_connect('button_press_event', self.evt_interactive_click) # Runtime self.selection_pts = [] self.selecting = False self.update_state(self.STATE_NULL) self.n_updates = 0 # Run #self.view.Show() self.app.MainLoop() def update_state(self, st=None): if st is not None: self.state = st if self.state == self.STATE_NULL: self.view.prepare_button.Enable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Enable() self.view.start_button.Disable() self.view.pause_button.Disable() self.view.update_sub_choices() elif self.state == self.STATE_PREPARED: self.view.usrinput_box.SetValue('(notes)') self.view.prepare_button.SetLabel('Cancel Session') self.view.prepare_button.Enable() self.view.add_sub_button.Disable() self.view.start_button.SetLabel("Run Session") self.view.start_button.SetBackgroundColour((0,255,0)) self.view.start_button.Enable() self.view.pause_button.Disable() elif self.state == self.STATE_RUNNING: self.view.prepare_button.Disable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Disable() self.view.start_button.Disable() self.view.start_button.SetLabel('End Session') self.view.start_button.SetBackgroundColour((255,0,0)) self.view.pause_button.Enable() elif self.state == self.STATE_KILLED_SESSION: self.view.start_button.SetLabel('Ending...') self.view.start_button.Disable() self.view.pause_button.Disable() if self.session.session_on: self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_state) else: self.update_state(self.STATE_RUN_COMPLETE) elif self.state == self.STATE_RUN_COMPLETE: self.view.SetTitle('Puffs Experiment Control') self.update_timer.Stop() self.view.start_button.SetLabel("Run Session") self.view.start_button.SetBackgroundColour((0,255,0)) self.view.prepare_button.Enable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Enable() self.view.start_button.Disable() self.view.pause_button.Disable() self.view.update_sub_choices() def update(self): if (not self.session.session_on) and self.state == self.STATE_RUNNING: self.update_state(self.STATE_RUN_COMPLETE) return # checks if self.view.trial_n_widg.GetValue() == str(self.session.trial_idx): new_trial_flag = False else: new_trial_flag = True # clocks self.view.session_runtime_widg.SetValue(pretty_time(self.session.session_runtime)) self.view.trial_runtime_widg.SetValue(pretty_time(self.session.trial_runtime)) # plots try: aq = self.session.ar.get_accum() self.view.set_live_data((None,aq), (None,self.session.eyelid_buffer)) except Queue.Empty: pass # movie cam_frame = self.session.im #self.view.panel_mov.set_frame(cam_frame) self.mov_im.set_data(cam_frame) self.view.ax_interactive.figure.canvas.draw() # trial if new_trial_flag: self.update_trial() # past if self.session.past_flag != False: cs,us = self.session.past_flag self.session.past_flag = False self.view.set_past_data(self.session.eyelid_buffer_ts,self.session.eyelid_buffer,cs,us) # pauses if self.session.paused: self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif not self.session.paused: self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,150,150)) if self.session.session_on and not self.session.session_kill: self.view.start_button.Enable() self.n_updates += 1 self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update) def update_trial(self): if self.session.trial_idx < 0: return self.view.trial_n_widg.SetValue("%s"%(str(self.session.trial_idx))) self.view.trial_type_widg.SetValue(self.session.current_stim_state) ####### EVENTS ######## def evt_prepare(self, evt): if self.state == self.STATE_PREPARED: self.session.end() self.update_state(self.STATE_NULL) else: sel_sub = self.view.sub_box.GetSelection() if wx.NOT_FOUND in [sel_sub]: dlg = wx.MessageDialog(self.view, message='Selections not made.', caption='Preparation not performed.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() return sub_name = self.view.sub_names[sel_sub] imaging = self.view.imaging_box.GetValue() sub = Subject(sub_name) ph = ParamHandler(sub, imaging=imaging) self.session = Session(ph.params, ax_interactive=self.view.ax_interactive) # tcpip communication if imaging: si_path = config.si_data_path+r'\\{}'.format(sub_name) seshname = self.session.name_as_str() dic = dict(path=si_path, name=seshname, idx=1) cont = True while cont: suc = self.tcpip.send(dic) if not suc: dlg = wx.MessageDialog(self.view, caption='ScanImage preparation failed.', message='Try again?', style=wx.YES_NO) res = dlg.ShowModal() dlg.Destroy() cont = res==wx.ID_YES if cont: self.evt_tcpip(None) else: cont = False #self.view.setup_axlive() self.view.SetTitle('Subject {}'.format(sub_name)) _,im = self.session.cam.get() self.view.ax_interactive.clear() self.view.ax_interactive.axis('off') self.mov_im = self.view.ax_interactive.imshow(im, cmap=pl.cm.Greys_r) self.update_state(self.STATE_PREPARED) self.update() def evt_tcpip(self, evt): bi = wx.BusyInfo('Connecting TCPIP; click connect on remote machine...', self.view) suc = self.tcpip.reconnect() bi.Destroy() if not suc: dlg = wx.MessageDialog(self.view, caption='TCPIP reconnection failed.', message='TCPIP not active.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() else: logging.info('TCPIP connected.') def evt_onoff(self, evt): if self.state != self.STATE_RUNNING: self.update_state(self.STATE_RUNNING) self.run_th = threading.Thread(target=self.session.run) self.run_th.start() elif self.state == self.STATE_RUNNING: self.session.session_kill = True self.update_state(self.STATE_KILLED_SESSION) def evt_pause(self, evt): if not self.session.paused: self.session.pause(True) self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif self.session.paused: self.session.pause(False) self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,100,200)) self.view.start_button.Enable() def evt_close(self, evt): if self.state in [self.STATE_RUNNING]: dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() evt.Veto() elif self.state in [self.STATE_NULL, self.STATE_RUN_COMPLETE, self.STATE_PREPARED]: dlg = wx.MessageDialog(self.view, message="", caption="Exit Experiment?", style=wx.OK|wx.CANCEL) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: if self.state == self.STATE_PREPARED: self.session.end() self.update_state(self.STATE_KILLED_SESSION) while self.state != self.STATE_RUN_COMPLETE: pass self.tcpip.end() self.view.Destroy() else: evt.Veto() def evt_addsub(self, evt): dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:') ret = dlg.ShowModal() if ret == wx.ID_OK: self.view.add_sub(dlg.GetValue().strip().lower()) else: pass def set_light(self, evt, state): if self.state in [self.STATE_PREPARED,self.STATE_RUNNING,self.STATE_KILLED_SESSION]: self.session.dummy_light(state) else: dummy_light(state) def evt_puff(self, evt): if self.state in [self.STATE_PREPARED,self.STATE_RUNNING,self.STATE_KILLED_SESSION]: self.session.dummy_puff() else: dummy_puff() def evt_deliver(self, evt): if self.state in [self.STATE_RUNNING]: self.session.deliver_override = True logging.info('Manual trial delivering.') else: logging.info('No session running to deliver trial.') def update_usrinput(self, evt): self.session.notes = self.view.usrinput_box.GetValue() logging.info('Metadata updated.') def evt_roi(self, evt): if self.state not in [self.STATE_PREPARED, self.STATE_RUNNING]: logging.info('No session for ROI selection.') return if not self.selecting: self.view.roi_but.SetLabel('DONE') im = self.session.im self.mov_im.set_data(im) self.view.ax_interactive.axis([0,im.shape[1],0,im.shape[0]]) self.view.ax_interactive.figure.canvas.draw() logging.info('Select ROI now, and press DONE to stop.') self.selecting = True elif self.selecting: self.session.roi_pts = np.copy(self.selection_pts) self.session.acquire_mask() self.view.roi_but.SetLabel('ROI') self.selection_pts = [] self.selecting = False def evt_resetcam(self, evt): if self.state in [self.STATE_PREPARED, self.STATE_RUNNING]: self.session.cam.reset_cams() def evt_interactive_click(self, event): if self.selecting: self.selection_pts.append((event.xdata, event.ydata)) lims = self.view.ax_interactive.axis() self.view.ax_interactive.plot(event.xdata,event.ydata,'rx') self.view.ax_interactive.axis(lims) self.view.ax_interactive.figure.canvas.draw() def on_slide(self, evt): if self.state in [self.STATE_PREPARED, self.STATE_RUNNING]: self.session.eyelid_thresh = self.view.slider.GetValue() self.view.update_thresh()
class MasterController: def __init__(self): self.map = Map(MAP_SIZE_W, MAP_SIZE_H, BLOCKSIZE) pygame.init() window = pygame.display.set_mode((WIDTH,HEIGHT)) pygame.display.set_caption('def') self.screen = pygame.display.get_surface() self.model = Model( self.map) self.camera = Camera(self.screen.get_width(),self.screen.get_height()) self.entity_controller = EntityController(self.map) self.entity_view = EntityView(self.entity_controller) self.view = View(self.screen, self.camera, self.entity_view) self.camera_lock = True self.camera_follow_player = False #music here atm # pygame.mixer.music.load("src/music/04.ogg") # pygame.mixer.music.play() def menu_mode(self): self.menu = Menu() while 1: self.screen.fill((0,0,0)) self.menu.draw(self.screen) def run(self): self.map.load_map("map1.map") #self.map.load_map("test.out") # self.map.init_adjacent() self.entity_controller.update_enemy_path() self.entity_controller.add_entity() while 1: self.screen.fill((0,0,50)) self.update() self.handle_events(pygame.event.get()) self.view.draw_level(self.screen, self.map) self.entity_controller.update() pygame.display.update() pygame.display.flip() def update(self): # CAMERA MOUSE self.update_camera() if not self.camera_lock and not self.camera_follow_player: self.camera.update() elif self.camera_follow_player: self.camera.set_pos( ((WIDTH/2)-(self.entity_controller.get_player_pos().get_pos()[0]*BLOCKSIZE*self.camera.get_zoom()), (HEIGHT/2)-(self.entity_controller.get_player_pos().get_pos()[1]*BLOCKSIZE*self.camera.get_zoom()) ) ) def update_camera(self): #PREVENT ouside window mouse scrolling # if not pygame.mouse.get_focused(): # self.camera.set_speed((0,0)) # return if self.view.freeze_camera_movement_areas(pygame.mouse.get_pos()): self.camera.set_speed((0,0)) return if pygame.mouse.get_pos()[0] < self.screen.get_width()/10: self.camera.set_speed((CAMERA_SPEED,self.camera.get_speed()[1])) if pygame.mouse.get_pos()[0] > self.screen.get_width()-(self.screen.get_width()/10): self.camera.set_speed((-1*CAMERA_SPEED,self.camera.get_speed()[1])) if self.camera.get_speed()[0] != 0 and pygame.mouse.get_pos()[0] > self.screen.get_width()/10 and pygame.mouse.get_pos()[0] < self.screen.get_width() -(self.screen.get_width()/10): self.camera.set_speed((0,self.camera.get_speed()[1])) # UP N DOWN if pygame.mouse.get_pos()[1] < self.screen.get_height()/10: self.camera.set_speed((self.camera.get_speed()[0],CAMERA_SPEED)) # dont scroll on hud if pygame.mouse.get_pos()[1] > self.screen.get_height()-200: self.camera.set_speed((self.camera.get_speed()[0],-1*CAMERA_SPEED)) if self.camera.get_speed()[1] != 0 and pygame.mouse.get_pos()[1] > self.screen.get_height()/10 and pygame.mouse.get_pos()[1] < self.screen.get_height()-300:#self.screen.get_height() -(self.screen.get_height()/10): self.camera.set_speed((self.camera.get_speed()[0],0)) def handle_events(self, events): for event in events: if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() # HANDLE SAVEINPUT N STUFF if event.key == K_UP: self.map.save_map("test.out") if event.key == K_DOWN: self.map.load_map() self.entity_controller.set_map(self.map) if event.key == K_SPACE: # add entity(enemy).. self.entity_controller.add_entity() if event.key == K_c: self.camera.center_map() if event.key == K_F1: self.view.toggle_lines() if event.key == K_F2: if self.camera_lock: self.camera_lock = False else: self.camera_lock = True if event.key == K_F3: if self.camera_follow_player: self.camera_follow_player = False else: self.camera_follow_player = True if event.type == QUIT: pygame.quit() sys.exit() self.view.handle_event(event,self.map) if event.type == pygame.MOUSEBUTTONDOWN: if pygame.mouse.get_pressed()[0] == 1: self.map.change_color_at((pygame.mouse.get_pos()[0]-self.camera.get_x() ,pygame.mouse.get_pos()[1]-self.camera.get_y()) , self.view.get_selected_color(), self.camera.get_zoom()) if event.button == 5: self.camera.set_zoom(self.camera.get_zoom()/2.0) if event.button == 4: self.camera.set_zoom(self.camera.get_zoom()*2.0) if pygame.mouse.get_pressed()[2] == 1: self.entity_controller.add_tower(self.map.tile_at(pygame.mouse.get_pos()))
def main(): controller = Controller(View(), Game()) controller.run()
def __init__(self): self.players = [p1, p2] self.ship_names = ['aircraft carrier', 'battleship','submarine','destroyer','patrol'] self.ship_lengths = [5,4,3,3,2] self.play_view = View()
def test_render_with_context(): view = View({"HTML_TEMPLATES_DIR": 'templates'}) html = view.render('example', {'name': 'AKJWFaawkjfbaw'}) assert '<!DOCTYPE html>' in html assert '<h1>hello! AKJWFaawkjfbaw</h1>' in html
def __init__(self): self.view = View()
class Controller: REFRESH_INTERVAL = 300 #ms def __init__(self, session): self.app = wx.App(False) self.session = session self.view = View(None, name=self.session.subj.name, n_lick_show=self.session.lr.ACCUM_SIZE) # bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.run_session) self.view.pause_button.Bind(wx.EVT_BUTTON, self.pause_session) self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_reward(evt, temp)) self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_reward(evt, temp)) self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_puff(evt, temp)) self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_puff(evt, temp)) self.view.Bind(wx.EVT_CLOSE, self.on_close) self.view.Show() def run(self): self.trial_n = self.session.trial_idx self.update_vals() self.app.MainLoop() def give_reward(self, evt, side): self.session.spout.go(side) def give_puff(self, evt, side): self.session.stimulator.go(side, dur=self.session.stim_duration) def pretty_time(self, t): if t<60: return '%0.0f s'%t else: return '%0.0f m, %0.0f s'%(np.floor(t/60.),t%60.) def update_vals(self): # values self.view.trial_n_widg.SetValue("%s (%s)"%(str(self.session.valid_trial_idx),str(self.session.trial_idx))) self.view.session_runtime_widg.SetValue(self.pretty_time(self.session.session_runtime)) self.view.trial_runtime_widg.SetValue(self.pretty_time(self.session.trial_runtime)) # plots self.view.set_lick_data(self.session.lr.get_accum()) # movie self.view.panel_mov.set_frame(self.session.cam.get_current_frame(self.session.cam.cS)) # trial trn = self.session.trial_idx if trn != self.trial_n and self.session.session_on: self.trial_n = trn if self.session.use_trials: self.view.set_trial_data(self.session.trials[self.trial_n], self.session.stim_phase_intro_duration, self.session.phase_durations[self.session.PHASE_DELAY], self.session.stim_phase_end_duration) self.view.set_perf_data(*self.session.get_cum_performance()) self.view.rewarded_widg.SetValue(str(self.session.rewards_given)) self.view.perc_widg.SetValue(' / '.join(['%0.2f [%i]'%(p,n) for p,n in zip(self.session.percentages[::-1], self.session.side_ns[::-1])])) self.view.bias_widg.SetValue(' / '.join(['%0.2f'%s for s in self.session.bias_correction_percentages[::-1]])+' [%i]'%self.session.bias_correction_window) self.view.pvalid_widg.SetValue('%0.2f'%self.session.perc_valid) # controls if self.session.session_complete or self.session.session_kill: self.view.start_button.Disable() # pauses if self.session.paused: self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif not self.session.paused: self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,150,150)) if self.session.session_on and not self.session.session_kill: self.view.start_button.Enable() self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_vals) def run_session(self, evt): if not self.session.session_on: self.run_th = threading.Thread(target=self.session.run) self.run_th.start() self.view.start_button.SetLabel('End Session') self.view.start_button.SetBackgroundColour((255,0,0)) self.view.pause_button.Enable() elif self.session.session_on: self.session.session_kill = True self.view.start_button.Disable() self.view.puffr_but.Disable() self.view.puffl_but.Disable() self.view.rewardr_but.Disable() self.view.rewardl_but.Disable() self.view.pause_button.Disable() def pause_session(self, evt): if not self.session.paused: self.session.paused += 1 self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif self.session.paused: self.session.paused = max(self.session.paused-1,0) self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,100,200)) self.view.start_button.Enable() def on_close(self, evt): if self.session.session_on: dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() else: dlg = wx.MessageDialog(self.view, message="Some data may be lost.", caption="Exit Experiment?", style=wx.OK|wx.CANCEL) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: self.update_timer.Stop() self.view.Destroy()
class Controller: REFRESH_INTERVAL = 500 #ms STATE_NULL = 0 STATE_PREPARED = 1 STATE_RUNNING = 2 STATE_KILLED_SESSION = 3 STATE_RUN_COMPLETE = 4 def __init__(self): # Make app self.app = wx.App(False) self.update_timer = None # Generate view subs_list = list_subjects() self.cond_list = sorted(conditions.keys()) self.manip_list = sorted(manipulations.keys()) self.view = View(None, subs=subs_list, conditions=self.cond_list, manipulations=self.manip_list) self.mp285_view = MP285View(None) if False:#not config.TESTING_MODE: sys.stdout=self.view.redir_out sys.stderr=self.view.redir_err setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err) self.tcpip = TCPIP(config.scanimage_tcpip_address) self.mp285 = MP285(**config.mp285_params) self.actuator = LActuator(**config.actuator_params) # Button bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff) self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare) self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause) self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip) self.view.mp285_button.Bind(wx.EVT_BUTTON, self.evt_mp285) self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam) self.view.resetlact_button.Bind(wx.EVT_BUTTON, self.evt_resetlact) self.view.Bind(wx.EVT_CLOSE, self.evt_close) self.view.cal_but.Bind(wx.EVT_BUTTON, self.calib) self.view.puffc_but.Bind(wx.EVT_BUTTON, lambda evt: puff_check()) self.view.locklev_but.Bind(wx.EVT_BUTTON, self.locklev) self.view.levu_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.change_level(evt,temp)) self.view.levd_but.Bind(wx.EVT_BUTTON, lambda evt, temp=-1: self.change_level(evt,temp)) self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_reward(evt, temp)) self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_reward(evt, temp)) self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_puff(evt, temp)) self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_puff(evt, temp)) self.view.optoon_but.Bind(wx.EVT_BUTTON, self.opto_on) self.view.optooff_but.Bind(wx.EVT_BUTTON, self.opto_off) self.view.maniptog_but.Bind(wx.EVT_BUTTON, self.manip_toggle) self.view.act_ext_but.Bind(wx.EVT_BUTTON, self.actuator_extend) self.view.act_ret_but.Bind(wx.EVT_BUTTON, self.actuator_retract) self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput) # Button bindings (mp285 view) self.mp285_view.Bind(wx.EVT_CLOSE, self.evt_mp285_close) self.mp285_view.but_set_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_set(evt, temp)) self.mp285_view.but_set_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_set(evt, temp)) self.mp285_view.but_set_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_set(evt, temp)) self.mp285_view.but_goto_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_goto(evt, temp)) self.mp285_view.but_goto_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_goto(evt, temp)) self.mp285_view.but_goto_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_goto(evt, temp)) for direc in self.mp285_view.ctrl_buttons: for mag in self.mp285_view.ctrl_buttons[direc]: for ax in self.mp285_view.ctrl_buttons[direc][mag]: self.mp285_view.ctrl_buttons[direc][mag][ax].Bind(wx.EVT_BUTTON, lambda evt, temp=(direc,mag,ax): self.evt_mp285_move(evt,temp)) # Runtime self.update_state(self.STATE_NULL) self.last_cam_frame = None self.n_updates = 0 # Run #self.view.Show() self.app.MainLoop() def update_state(self, st=None): if st is not None: self.state = st if self.state == self.STATE_NULL: self.view.prepare_button.Enable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Enable() self.view.start_button.Disable() self.view.cal_but.Enable() self.view.levu_but.Disable() self.view.levd_but.Disable() self.view.puffr_but.Disable() self.view.puffl_but.Disable() self.view.rewardr_but.Enable() self.view.rewardl_but.Enable() self.view.optoon_but.Disable() self.view.optooff_but.Disable() self.view.maniptog_but.Disable() self.view.pause_button.Disable() self.view.update_sub_choices(list_rewards()) self.view.locklev_but.Disable() self.mp285_view.but_set_lick.Enable() self.mp285_view.but_set_home.Enable() self.mp285_view.but_set_stim.Enable() elif self.state == self.STATE_PREPARED: self.view.usrinput_box.SetValue('(notes)') self.view.prepare_button.SetLabel('Cancel Session') self.view.prepare_button.Enable() self.view.add_sub_button.Disable() self.view.cal_but.Disable() self.view.start_button.SetLabel("Run Session") self.view.start_button.SetBackgroundColour((0,255,0)) self.view.start_button.Enable() self.view.puffr_but.Enable() self.view.puffl_but.Enable() self.view.optoon_but.Enable() self.view.optooff_but.Enable() self.view.maniptog_but.Enable() self.view.levu_but.Disable() self.view.levd_but.Disable() self.view.rewardr_but.Enable() self.view.rewardl_but.Enable() self.view.pause_button.Disable() self.view.locklev_but.SetLabel('Lock') self.view.locklev_but.Enable() self.mp285_view.but_set_lick.Disable() self.mp285_view.but_set_home.Disable() self.mp285_view.but_set_stim.Disable() elif self.state == self.STATE_RUNNING: self.view.prepare_button.Disable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Disable() self.view.cal_but.Disable() self.view.start_button.Disable() self.view.puffr_but.Enable() self.view.puffl_but.Enable() self.view.levu_but.Enable() self.view.levd_but.Enable() self.view.rewardr_but.Enable() self.view.rewardl_but.Enable() self.view.optoon_but.Enable() self.view.optooff_but.Enable() self.view.maniptog_but.Enable() self.view.start_button.SetLabel('End Session') self.view.start_button.SetBackgroundColour((255,0,0)) self.view.pause_button.Enable() self.view.locklev_but.Enable() self.mp285_view.but_set_lick.Disable() self.mp285_view.but_set_home.Disable() self.mp285_view.but_set_stim.Disable() elif self.state == self.STATE_KILLED_SESSION: self.view.start_button.SetLabel('Ending...') self.view.start_button.Disable() self.view.cal_but.Disable() self.view.puffr_but.Disable() self.view.puffl_but.Disable() self.view.levu_but.Disable() self.view.levd_but.Disable() self.view.rewardr_but.Disable() self.view.rewardl_but.Disable() self.view.optoon_but.Disable() self.view.optooff_but.Disable() self.view.maniptog_but.Disable() self.view.pause_button.Disable() self.view.locklev_but.Disable() self.mp285_view.but_set_lick.Disable() self.mp285_view.but_set_home.Disable() self.mp285_view.but_set_stim.Disable() if self.session.session_on: self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_state) else: self.update_state(self.STATE_RUN_COMPLETE) elif self.state == self.STATE_RUN_COMPLETE: pos = get_mp285_home() self.mp285.goto(pos) self.view.SetTitle('Puffs Experiment Control') self.update_timer.Stop() self.view.start_button.SetLabel("Run Session") self.view.start_button.SetBackgroundColour((0,255,0)) self.view.prepare_button.Enable() self.view.prepare_button.SetLabel('Prepare Session') self.view.add_sub_button.Enable() self.view.startlevel_box.SetValue('(level override)') self.view.cal_but.Enable() self.view.start_button.Disable() self.view.puffr_but.Disable() self.view.puffl_but.Disable() self.view.rewardr_but.Enable() self.view.rewardl_but.Enable() self.view.levu_but.Disable() self.view.levd_but.Disable() self.view.optoon_but.Disable() self.view.optooff_but.Disable() self.view.maniptog_but.Disable() self.view.pause_button.Disable() self.view.update_sub_choices(list_rewards()) self.view.locklev_but.SetLabel('Lock') self.view.locklev_but.Disable() self.mp285_view.but_set_lick.Enable() self.mp285_view.but_set_home.Enable() self.mp285_view.but_set_stim.Enable() self.view.imaging_box.SetValue(False) self.view.manip_box.SetSelection(0) self.view.cond_box.SetSelection(0) def update(self): if (not self.session.session_on) and self.state == self.STATE_RUNNING: self.update_state(self.STATE_RUN_COMPLETE) return # checks if self.view.trial_n_widg.GetValue() == str(self.session.th.idx): new_trial_flag = False else: new_trial_flag = True # clocks self.view.session_runtime_widg.SetValue(pretty_time(self.session.session_runtime)) self.view.trial_runtime_widg.SetValue(pretty_time(self.session.trial_runtime)) # plots try: self.view.set_lick_data(self.session.ar.get_accum()) except Queue.Empty: pass except: logging.error('Interface could not update lick info.') try: self.view.fig_lock.release() except: pass # movie cam_frame = self.session.cam.get() self.view.set_cam(cam_frame) # commented out b/c causes lags #if self.last_cam_frame is not None and self.n_updates>60 and cam_frame is not None: # cc = np.corrcoef(cam_frame, self.last_cam_frame)[0,1] # if cc < 0.85: # self.evt_resetcam(None) #self.last_cam_frame = cam_frame # trial if new_trial_flag: self.update_trial() # pauses if self.session.paused: self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif not self.session.paused: self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,150,150)) if self.session.session_on and not self.session.session_kill: self.view.start_button.Enable() self.n_updates += 1 self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update) def update_trial(self): try: if self.session.th.idx < 0: return self.view.trial_n_widg.SetValue("%s (%s)"%(str(self.session.th.idx),str(self.session.th.valid_idx))) self.view.set_trial_data(self.session.th, self.session) self.view.rewarded_widg.SetValue(str(self.session.rewards_given)) self.view.set_bias(self.session.th.biases) self.view.set_manip(manip_strs[self.session.th.manip]) if self.session.th.idx > 0: self.view.set_history(self.session.th) except: logging.error('Interface could not update trial info.') ####### EVENTS ######## def evt_prepare(self, evt): if self.state == self.STATE_PREPARED: self.mp285.saver = None self.session.end() self.update_state(self.STATE_NULL) else: sel_sub = self.view.sub_box.GetSelection() sel_cond = self.view.cond_box.GetSelection() sel_manip = self.view.manip_box.GetSelection() if wx.NOT_FOUND in [sel_sub,sel_cond,sel_manip]: dlg = wx.MessageDialog(self.view, message='Selections not made.', caption='Preparation not performed.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() return sub_name = self.view.sub_names[sel_sub] cond_name = self.cond_list[sel_cond] manip_name = self.manip_list[sel_manip] if manip_name != 'none': logging.info('Manipulation: {}'.format(manip_name)) imaging = self.view.imaging_box.GetValue() startlevel = self.view.startlevel_box.GetValue() if startlevel == '(level override)': startlevel = -1 try: startlevel = int(startlevel) except: startlevel = -1 logging.info('Start level not understood. Using default.') sub = Subject(sub_name) #self.mp285.goto(sub.get_position('stim')) # session can handle this ph = ParamHandler(sub, condition=conditions[cond_name], manipulation=manipulations[manip_name], imaging=imaging, start_level=startlevel, position=self.mp285.get_pos().tolist()) self.session = Session(ph.params, mp285=self.mp285, actuator=self.actuator) self.session.live_figure = (self.view.fig,self.view.fig_lock) self.mp285.saver = self.session.saver # tcpip communication if imaging: si_path = config.si_data_path+r'\\{}'.format(sub_name) seshname = self.session.name_as_str() dic = dict(path=si_path, name=seshname, idx=1) cont = True while cont: suc = self.tcpip.send(dic) if not suc: dlg = wx.MessageDialog(self.view, caption='ScanImage preparation failed.', message='Try again?', style=wx.YES_NO) res = dlg.ShowModal() dlg.Destroy() cont = res==wx.ID_YES if cont: self.evt_tcpip(None) else: cont = False self.view.setup_axlick() self.view.SetTitle('{} - {} - {}'.format(sub_name,cond_name,manip_name)) self.update_state(self.STATE_PREPARED) self.update() def evt_mp285(self, evt): self.mp285_view.Show() self.mp285_view.SetFocus() self.mp285_view.Raise() def evt_mp285_close(self, evt): evt.Veto() self.mp285_view.Hide() def evt_mp285_set(self, evt, detail): pos = self.mp285.get_pos() if detail in ['stim','lick']: sel_sub = self.view.sub_box.GetSelection() if sel_sub == wx.NOT_FOUND: dlg = wx.MessageDialog(self.view, message='No subject selected.', caption='Position not set.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() return sub_name = self.view.sub_names[sel_sub] sub = Subject(sub_name) sub.set_position(pos, kind=detail) elif detail == 'home': set_mp285_home(pos) def evt_mp285_goto(self, evt, detail): if detail in ['stim','lick']: sel_sub = self.view.sub_box.GetSelection() if sel_sub == wx.NOT_FOUND: dlg = wx.MessageDialog(self.view, message='No subject selected.', caption='Position not set.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() return sub_name = self.view.sub_names[sel_sub] sub = Subject(sub_name) pos = sub.get_position(kind=detail) self.mp285.goto(pos) elif detail == 'home': pos = get_mp285_home() self.mp285.goto(pos) def evt_mp285_move(self, evt, detail): direc,mag,ax = detail change = np.zeros(3) spot = dict(x=0,y=1,z=2)[ax] sign = dict(up=1,down=-1)[direc] change[spot] += sign*float(mag) curpos = self.mp285.get_pos() pos = curpos + change self.mp285.goto(pos) def evt_resetcam(self, evt): if self.state != self.STATE_RUNNING: return self.session.cam.reset_cams() def evt_resetlact(self, evt): logging.info('Resetting actuator...') self.actuator.end() self.actuator = LActuator(**config.actuator_params) def evt_tcpip(self, evt): bi = wx.BusyInfo('Connecting TCPIP; click connect on remote machine...', self.view) suc = self.tcpip.reconnect() bi.Destroy() if not suc: dlg = wx.MessageDialog(self.view, caption='TCPIP reconnection failed.', message='TCPIP not active.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() else: logging.info('TCPIP connected.') def evt_onoff(self, evt): #if self.state!=self.STATE_RUNNING and self.state!=self.STATE_PREPARED,: # dlg = wx.MessageDialog(self.view, message='', caption='No session prepared.', style=wx.OK) # res = dlg.ShowModal() # dlg.Destroy() # return if self.state != self.STATE_RUNNING: self.update_state(self.STATE_RUNNING) self.run_th = threading.Thread(target=self.session.run) self.run_th.start() elif self.state == self.STATE_RUNNING: # store log in session data self.mp285.saver = None self.session.notes['stdout'] = self.view.redir_out.text_ctrl.GetValue() self.session.notes['stderr'] = self.view.redir_err.text_ctrl.GetValue() self.session.session_kill = True self.update_state(self.STATE_KILLED_SESSION) def evt_pause(self, evt): if not self.session.paused: self.session.pause(True) self.view.pause_button.SetLabel('Unpause') self.view.pause_button.SetBackgroundColour((0,255,0)) self.view.start_button.Disable() elif self.session.paused: self.session.pause(False) self.view.pause_button.SetLabel('Pause') self.view.pause_button.SetBackgroundColour((0,100,200)) self.view.start_button.Enable() def evt_close(self, evt): if self.state in [self.STATE_RUNNING]: dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK) res = dlg.ShowModal() dlg.Destroy() evt.Veto() elif self.state in [self.STATE_NULL, self.STATE_RUN_COMPLETE, self.STATE_PREPARED]: dlg = wx.MessageDialog(self.view, message="", caption="Exit Experiment?", style=wx.OK|wx.CANCEL) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: if self.state == self.STATE_PREPARED: self.session.end() self.update_state(self.STATE_KILLED_SESSION) while self.state != self.STATE_RUN_COMPLETE: pass if self.update_timer is not None: self.update_timer.Stop() self.mp285.end() self.actuator.end() self.tcpip.end() self.mp285_view.Destroy() self.view.Destroy() else: evt.Veto() def evt_addsub(self, evt): dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:') ret = dlg.ShowModal() if ret == wx.ID_OK: self.view.add_sub(dlg.GetValue().strip().lower(), rewards=list_rewards()) else: pass def give_reward(self, evt, side): if self.state in [self.STATE_RUNNING,self.STATE_PREPARED]: self.session.spout.go(side) else: give_reward(side) logging.info('Manual reward given.') def give_puff(self, evt, side): self.session.stimulator.go(side) logging.info('Manual puff given.') def change_level(self, evt, inc): self.session.th.change_level(inc) def calib(self,evt): if self.view.cal_but.GetLabel() == 'OPEN': open_valves() self.view.cal_but.SetLabel('CLOSE') elif self.view.cal_but.GetLabel() == 'CLOSE': close_valves() self.view.cal_but.SetLabel('OPEN') def locklev(self, evt): if self.session.th.level_locked: self.session.th.level_locked = False self.view.locklev_but.SetLabel('Lock') logging.info('Level unlocked.') elif not self.session.th.level_locked: self.session.th.level_locked = True self.view.locklev_but.SetLabel('Unlock') logging.info('Level locked.') def opto_on(self, evt): self.session.opto.set(1) def opto_off(self, evt): self.session.opto.set(0) def manip_toggle(self, evt): if self.session.th.force_manip is None: # Disable manip self.session.th.force_manip = default_manipulation self.view.maniptog_but.SetLabel('ENABLE') logging.info('Manipulation disabled.') elif self.session.th.force_manip is not None: # Enable manip self.session.th.force_manip = None self.view.maniptog_but.SetLabel('DISABLE') logging.info('Manipulation enabled.') def actuator_extend(self, evt): self.actuator.extend() def actuator_retract(self, evt): self.actuator.retract() def update_usrinput(self, evt): self.session.notes['notes'] = self.view.usrinput_box.GetValue() logging.info('Metadata updated.')
def __init__(self): self.view = View() self.db = SchoolDB()
def __init__(self, display): View.__init__(self, display) self.font = ImageFont.truetype(f"./fonts/{config.FONTS[3][0]}", floor(8 * config.FONTS[3][1]))
class App: """ Represent Category table """ def __init__(self): self.db = DbOpenFoodFacts() self.view = View() def save_category(self): """ Save a new category to OFF database. """ r_cat = requests.get('https://fr.openfoodfacts.org/categories&json=1') data_json = r_cat.json() data_tags = data_json.get('tags') data_cat = [data.get('name') for data in data_tags] self.db.save_category(data_cat) def read(self): data = self.db.read_category() self.view.display_category(data) def save_product(self, categoryId, name): """ Save a new product to OFF database with categoryId. """ load_data = { 'action': 'process', 'tagtype_0': 'categories', 'tag_contains_0': 'contains', 'sort_by': 'unique_scans_n', 'countries': 'France', 'json': 1, 'page': 1, 'tag_0': name, } r_product = requests.get('https://fr.openfoodfacts.org/cgi/search.pl', params=load_data) data_json = r_product.json() data_tags = data_json.get('products') lst_product = [] for data in data_tags[:50]: new_product = ( data.get('product_name'), data.get('nutrition_grades'), data.get('ingredients_text'), data.get('nova_group'), data.get('url'), data.get('stores'), ) lst_product.append(new_product) self.db.save_p(new_product) productId = self.db.get_product(new_product[0]) print(productId, categoryId) self.db.save_product_category(categoryId, productId) def process(self): """Get CategoryId and name Product""" self.save_category() list_tuple = self.db.get_category_id_name() for id, name in list_tuple: self.save_product(id, name) def import_db(self): """import db in local by API OFF""" choice = int( input("Que souhaitez-vous faire ? \n" "1 - Importer la base de donnée OFF \n" "2 - Menu Principal \n" "3 - Supprimer les données \n" "4 - Quitter le programme \n" "Votre choix > ")) if choice == 1: self.process() elif choice == 2: pass elif choice == 3: self.db.delete_all_data_off() self.import_db() else: return exit() def scenario(self): value = self.view.intro() if value == 1: cat_id, cat_name = self.view.choose_category( self.db.get_category_id_name()) print(cat_name) prod = self.view.choose_product( self.db.get_product_by_category(cat_id)) if self.view.save_product(prod): self.db.save_product_substitut(prod[0], prod[0]) print("Votre produit a été sauvegarder dans substitut.") elif value == 2: lst = self.db.get_substitut() f_lst = self.db.get_all_substitute(lst) self.view.substitue(f_lst) elif value == 3: lst = self.db.get_substitut() f_lst = self.db.get_all_substitute(lst) choice_product = self.view.choose_substitute(f_lst) self.db.delete_product_substitute(lst[choice_product][0]) print(f"Le produit {f_lst[choice_product]} a été supprimé.") elif value == 4: return exit(0) else: self.scenario()
def test_render_not_found_template(): view = View({"HTML_TEMPLATES_DIR": 'templates'}) with pytest.raises(view.ViewError) as excinfo: view.render('example.html') excinfo.match(r'View "html" .*TemplateNotFound.*example\.html\.html')
def __init__(self): self.db = DbOpenFoodFacts() self.view = View()
def test_render_without_context(): view = View({"HTML_TEMPLATES_DIR": 'templates'}) html = view.render('example') assert '<!DOCTYPE html>' in html assert '<h1>hello! </h1>' in html
def test_get_website(self): website = View("sdfgsdfhsfh") result = website.get_website() self.assertFalse(result[0]) website = View(os.environ.get("TEST_DOMAIN")) result = website.get_website() self.assertTrue(result[0]) website_address = f"https://{os.environ.get('TEST_DOMAIN')}" website = View(website_address) result = website.get_website() self.assertTrue(result[0]) website_address = f"http://{os.environ.get('TEST_DOMAIN')}" website = View(website_address) result = website.get_website() self.assertTrue(result[0])
class Battleship: def __init__(self): self.players = [p1, p2] self.ship_names = ['aircraft carrier', 'battleship','submarine','destroyer','patrol'] self.ship_lengths = [5,4,3,3,2] self.play_view = View() def set_up(self): for each_player in self.players: for i in range(5): self.play_view.boardDisplay([], [],each_player.ships, [], [], []) x = Ship(self.ship_names[i], self.ship_lengths[i]) print ("Place your {} (length {}).".format(x.name, x.length)) valid_placement = 'invalid' while valid_placement == 'invalid': row = self.play_view.inputRowOrColumn('ROW', 'ship\'s starting ') column = self.play_view.inputRowOrColumn('COLUMN', 'ship\'s starting ') direction = self.play_view.inputDirection() placement = x.place_ship(row,column,direction, each_player.ships) if placement == True: break each_player.ships.append(x) self.play_view.boardDisplay([], [], each_player.ships, [], [], []) end_turn = input('Finished placing ships.\n\nENTER to clear the screen.') def play(self): while True: self.play_view.boardDisplay([], [], [], [], [], []) begin_turn = input('{}, ENTER to begin your turn.'.format(self.players[0].name)) self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships) print(self.players[0].name) while True: row = self.play_view.inputRowOrColumn('ROW') column = self.play_view.inputRowOrColumn('COLUMN') shot = [row, column] if shot in self.players[0].misses or shot in self.players[0].hits: print('You already took this shot, jackass...') else: break hit_or_miss = 'miss' for each_ship in self.players[-1].ships: if shot in each_ship.location: hit_or_miss = 'hit' if hit_or_miss == 'hit': self.players[0].hits.append(shot) else: self.players[0].misses.append(shot) self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships) if len(self.players[0].hits) == 17: input("- - - {} WINS! - - -".format(self.players[0].name)) break end_turn = input('{}, {} is a {}. \n\nENTER to clear the screen and end your turn.'.format(self.players[0].name,shot, hit_or_miss.upper())) next_player = self.players.pop() self.players.insert(0, next_player)
class Battleship: def __init__(self): self.players = [p1, p2] self.ship_names = [ 'aircraft carrier', 'battleship', 'submarine', 'destroyer', 'patrol' ] self.ship_lengths = [5, 4, 3, 3, 2] self.play_view = View() def set_up(self): for each_player in self.players: for i in range(5): self.play_view.boardDisplay([], [], each_player.ships, [], [], []) x = Ship(self.ship_names[i], self.ship_lengths[i]) print("Place your {} (length {}).".format(x.name, x.length)) valid_placement = 'invalid' while valid_placement == 'invalid': row = self.play_view.inputRowOrColumn( 'ROW', 'ship\'s starting ') column = self.play_view.inputRowOrColumn( 'COLUMN', 'ship\'s starting ') direction = self.play_view.inputDirection() placement = x.place_ship(row, column, direction, each_player.ships) if placement == True: break each_player.ships.append(x) self.play_view.boardDisplay([], [], each_player.ships, [], [], []) end_turn = input( 'Finished placing ships.\n\nENTER to clear the screen.') def play(self): while True: self.play_view.boardDisplay([], [], [], [], [], []) begin_turn = input('{}, ENTER to begin your turn.'.format( self.players[0].name)) self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships) print(self.players[0].name) while True: row = self.play_view.inputRowOrColumn('ROW') column = self.play_view.inputRowOrColumn('COLUMN') shot = [row, column] if shot in self.players[0].misses or shot in self.players[ 0].hits: print('You already took this shot, jackass...') else: break hit_or_miss = 'miss' for each_ship in self.players[-1].ships: if shot in each_ship.location: hit_or_miss = 'hit' if hit_or_miss == 'hit': self.players[0].hits.append(shot) else: self.players[0].misses.append(shot) self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships) if len(self.players[0].hits) == 17: input("- - - {} WINS! - - -".format(self.players[0].name)) break end_turn = input( '{}, {} is a {}. \n\nENTER to clear the screen and end your turn.' .format(self.players[0].name, shot, hit_or_miss.upper())) next_player = self.players.pop() self.players.insert(0, next_player)
def __init__(self): self.view = View() self.TodoDB = TodoDB()
class Controller: REFRESH_INTERVAL = 100 #ms NEW,EXISTS = 0,1 def __init__(self, data_dir=r'D:\\deverett', wf_calib_path=r'C:\\WF\\calibration.npz'): # Make app self.app = wx.App(False) self.view = View(None) self.view.Bind(wx.EVT_CLOSE, self.evt_close) # Button bindings self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.but_load.Bind(wx.EVT_BUTTON, self.evt_load) self.view.but_reg.Bind(wx.EVT_BUTTON, self.evt_reg) self.view.but_freg.Bind(wx.EVT_BUTTON, self.evt_freg) self.view.but_save.Bind(wx.EVT_BUTTON, self.evt_save) # load initial info self.data_dir = data_dir subs = os.listdir(self.data_dir) self.view.add_sub(subs) try: with np.load(wf_calib_path) as cf: self.ppm_y = cf['pix_per_micron_y'] self.ppm_x = cf['pix_per_micron_x'] except FileNotFoundError: raise Exception('Calibration file not found. Please calibrate before registering.') # runtime self.cam = Camera() self.mp285 = MP285() self.current_sub = None self.register_mode = None self.result = None self.update() # Run self.app.MainLoop() def evt_close(self, evt): self.update_timer.Stop() self.cam.end() self.mp285.end() cv2.destroyAllWindows() pl.close('all') self.view.Destroy() def update(self): self.imshow('Live Camera',self.cam.get()) self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update) def get_paths(self, sub): if not os.path.exists(os.path.join(self.data_dir, self.current_sub)): os.mkdir(os.path.join(self.data_dir, self.current_sub)) subdir = os.path.join(self.data_dir, self.current_sub) fov_files = [re.match('fov_(\d*)_.*.npy',f) for f in os.listdir(subdir)] date = time.strftime('%Y%m%d') if not any(fov_files): idx = -1 cpath = None else: idx = max([int(i.groups()[0]) for i in fov_files]) cpath = os.path.join(self.data_dir,self.current_sub,'fov_{:03d}_{}.npy'.format(idx, date)) npath = os.path.join(self.data_dir,self.current_sub,'fov_{:03d}_{}.npy'.format(idx+1, date)) return cpath,npath def evt_load(self, evt): sub = self.view.sub_box.GetSelection() if sub == wx.NOT_FOUND: return self.current_sub = self.view.sub_names[sub] self.current_path,self.next_path = self.get_paths(self.current_sub) if self.current_path: self.register_mode = self.EXISTS self.template = np.load(self.current_path) elif not self.current_path: self.register_mode = self.NEW self.template = np.zeros(self.cam.frame_shape) self.imshow('Existing Template: {}'.format(self.current_sub),self.template) self.result = None def evt_reg(self, evt): if self.register_mode is None: return if self.register_mode == self.NEW: before_reg = self.cam.get(n=5) result = self.cam.get(n=5) score = 1.0 elif self.register_mode == self.EXISTS: before_reg = self.cam.get(n=5) self.update_timer.Stop() reg,score = register_imgs(self.template, self.cam) apply_registration(reg, self.mp285, np.array([self.ppm_x,self.ppm_y])) result = self.cam.get(n=5) self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update) pl.subplot(2,2,1) self.plshow('Loaded Template: {}'.format(self.current_sub), self.template) pl.subplot(2,2,2) self.plshow('Original FOV today: {}'.format(self.current_sub), before_reg) pl.subplot(2,2,3) self.plshow('Adjusted FOV (and new template): {}'.format(self.current_sub), result) pl.subplot(2,2,4) diff = np.abs(result-self.template) diff = diff.astype(float) self.plshow('Difference b/t old and new fov\nScore: {:0.3f}'.format(score), diff) self.register_mode = None self.result = result dlg = wx.MessageDialog(self.view, 'Remember to save.', 'Registered.', wx.OK) _ = dlg.ShowModal() dlg.Destroy() def evt_save(self, evt): if self.result is None: return np.save(self.next_path, self.result) def evt_freg(self, evt): if self.register_mode is None: return if self.register_mode == self.NEW: before_reg = self.cam.get(n=5) result = self.cam.get(n=5) score = 1.0 elif self.register_mode == self.EXISTS: before_reg = self.cam.get(n=5) self.update_timer.Stop() # note no registration process occurs here; this is forced registration result = self.cam.get(n=5) self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update) pl.subplot(2,2,1) self.plshow('Loaded Template: {}'.format(self.current_sub), self.template) pl.subplot(2,2,2) self.plshow('Original FOV today: {}'.format(self.current_sub), before_reg) pl.subplot(2,2,3) self.plshow('Adjusted FOV (and new template): {}'.format(self.current_sub), result) pl.subplot(2,2,4) diff = np.abs(result-self.template) diff = diff.astype(float) self.plshow('Difference b/t old and new fov', diff) self.register_mode = None self.result = result def evt_addsub(self, evt): dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:') ret = dlg.ShowModal() if ret == wx.ID_OK: self.view.add_sub(dlg.GetValue().strip().lower()) else: pass def imshow(self, win, im): im = cv2.resize(im, tuple(np.array(im.shape[::-1])/3)) cv2.imshow(win, im) def plshow(self, txt, im): pl.imshow(im, cmap='gray') pl.axis('off') pl.title(txt)
def __init__(self, display): View.__init__(self, display)
def get_profile(user_id: str): try: user = User.objects.get({'_id': fields.ObjectId(user_id)}) return View.get_response(user) except errors.DoesNotExist: return None
def __init__(self, display): View.__init__(self, display) self._set_clock_font()
def __init__(self): # Make app self.app = wx.App(False) self.update_timer = None # Generate view subs_list = list_subjects() self.cond_list = sorted(conditions.keys()) self.manip_list = sorted(manipulations.keys()) self.view = View(None, subs=subs_list, conditions=self.cond_list, manipulations=self.manip_list) self.mp285_view = MP285View(None) if False:#not config.TESTING_MODE: sys.stdout=self.view.redir_out sys.stderr=self.view.redir_err setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err) self.tcpip = TCPIP(config.scanimage_tcpip_address) self.mp285 = MP285(**config.mp285_params) self.actuator = LActuator(**config.actuator_params) # Button bindings self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff) self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare) self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause) self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip) self.view.mp285_button.Bind(wx.EVT_BUTTON, self.evt_mp285) self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam) self.view.resetlact_button.Bind(wx.EVT_BUTTON, self.evt_resetlact) self.view.Bind(wx.EVT_CLOSE, self.evt_close) self.view.cal_but.Bind(wx.EVT_BUTTON, self.calib) self.view.puffc_but.Bind(wx.EVT_BUTTON, lambda evt: puff_check()) self.view.locklev_but.Bind(wx.EVT_BUTTON, self.locklev) self.view.levu_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.change_level(evt,temp)) self.view.levd_but.Bind(wx.EVT_BUTTON, lambda evt, temp=-1: self.change_level(evt,temp)) self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_reward(evt, temp)) self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_reward(evt, temp)) self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_puff(evt, temp)) self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_puff(evt, temp)) self.view.optoon_but.Bind(wx.EVT_BUTTON, self.opto_on) self.view.optooff_but.Bind(wx.EVT_BUTTON, self.opto_off) self.view.maniptog_but.Bind(wx.EVT_BUTTON, self.manip_toggle) self.view.act_ext_but.Bind(wx.EVT_BUTTON, self.actuator_extend) self.view.act_ret_but.Bind(wx.EVT_BUTTON, self.actuator_retract) self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub) self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput) # Button bindings (mp285 view) self.mp285_view.Bind(wx.EVT_CLOSE, self.evt_mp285_close) self.mp285_view.but_set_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_set(evt, temp)) self.mp285_view.but_set_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_set(evt, temp)) self.mp285_view.but_set_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_set(evt, temp)) self.mp285_view.but_goto_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_goto(evt, temp)) self.mp285_view.but_goto_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_goto(evt, temp)) self.mp285_view.but_goto_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_goto(evt, temp)) for direc in self.mp285_view.ctrl_buttons: for mag in self.mp285_view.ctrl_buttons[direc]: for ax in self.mp285_view.ctrl_buttons[direc][mag]: self.mp285_view.ctrl_buttons[direc][mag][ax].Bind(wx.EVT_BUTTON, lambda evt, temp=(direc,mag,ax): self.evt_mp285_move(evt,temp)) # Runtime self.update_state(self.STATE_NULL) self.last_cam_frame = None self.n_updates = 0 # Run #self.view.Show() self.app.MainLoop()
from django.conf.urls.defaults import patterns, url from django.views.generic.simple import redirect_to from views import Inbox, View, Delete, Compose, Undelete, Unread, Read urlpatterns = patterns('', url(r'^$', redirect_to, {'url': 'inbox/'}), url(r'^inbox/$', Inbox.as_view(), name='messages_inbox'), url(r'^view/(?P<pk>[\d]+)/$', View.as_view(), name='messages_view'), url(r'^delete_list/$', Delete.as_view(), name='messages_delete_list'), url(r'^delete/(?P<pk>[\d]+)/$', Delete.as_view(), name='messages_delete'), url(r'^compose/$', Compose.as_view(), name='messages_compose'), url(r'^compose/(?P<to>[\d]+)/$', Compose.as_view(), name='messages_compose_to'), url(r'^undelete/$', Undelete.as_view(), name='messages_undelete'), url(r'^mark_as_unread/$', Unread.as_view(), name='messages_unread'), url(r'^mark_as_read/$', Read.as_view(), name='messages_read'), )