def start(): stocks = Setting.xm_index() + Setting.xm_fx() schedular = Schedular() for stock in stocks: for timeframe in Timeframe.timeframes(): schedular.addTask(keyOfData(stock, timeframe), timeframe) is_initial = True while loop: for stock in stocks: server = MT5Bind(stock) for timeframe in Timeframe.timeframes(): if is_initial or schedular.shouldDoNow( keyOfData(stock, timeframe)): (tbegin, tend) = handler.rangeOfTime(stock, timeframe) data = server.acquireRange(timeframe, tend, TimeUtility.nowJst()) logger.debug(stock + ' ' + timeframe.symbol + 'Download Length: ' + str(len(data))) if len(data) > 1: handler.update(stock, timeframe, data) print(stock, timeframe.symbol, 'Download done ', len(data)) is_initial = False
def __init__(self): """Initialize the game, and create game resource.""" pygame.init() self.settings = Setting() self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) #self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN) #self.settings.screen_width = self.screen.get_rect().width #self.settings.screen_height = self.screen.get_rect().height pygame.display.set_caption("Alien_Invation") # Create instance to store game statistics. self.stats = GameStats(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() self._create_fleet() # Make the play button. self.play_button = Button(self, "Play") # Set background color. self.bg_color = self.settings.bg_color
def open_dict(self): try: with open(Setting().usrs_info_path, 'rb') as usr_file: self.usrs_dict = pk.load(usr_file) except FileNotFoundError: with open(Setting().usrs_info_path, 'wb') as usr_file: self.usrs_dict = {'1': 'ZhngHexuan', '3': "RenTianyi"} pk.dump(self.usrs_dict, usr_file) usr_file.close()
def plot_configuration(config_name, policy_names): #set the regrets setting = Setting() regrets = setting.set_regrets() num_regrets = len(regrets) #load experiments loader = DataLoader() experiments = loader.load_config_experiments(config_name, policy_names) num_exp = len(list(experiments.values())[0]) #retrieve configuration config = list(experiments.values())[0][0].config #retrive time horizon N = config.N #retrive policies policies = [] for exp_list in experiments.values(): policies = policies + [exp_list[0].policy] num_policies = len(policies) #compute the regrets regret = np.zeros((num_exp, num_policies, num_regrets, N)) for pol_idx in range(num_policies): curr_policy = policies[pol_idx] for exp_idx in range(num_exp): curr_exp = experiments[curr_policy.name][exp_idx] pulls = curr_exp.pulls for reg_idx in range(num_regrets): curr_regr = regrets[reg_idx] regret[exp_idx, pol_idx, reg_idx, :] = curr_regr.compute_regret( pulls, curr_exp.config) mean_regret = np.mean(regret, axis=0) #varianza del regret std_regret = np.std(regret, axis=0) error = 2 * np.true_divide(std_regret, num_exp**0.5) #plot the regrets titles = [] labels = [] filename = config_name + '_' for policy in policies: filename = filename + policy.name + '-' labels = labels + [policy.name] filename = filename[:-1] + '_' for reg_type in regrets: titles = titles + [reg_type.description] filename = filename + reg_type.name + '-' plt = Plotter() plt.plot_regret(mean_regret, error, None, titles, labels, filename[:-1])
def get_sources(self): source_list = [0] vedio_Paths = [ os.path.join(Setting().vedio_path, f) for f in os.listdir(Setting().vedio_path) ] for vedio_Path in vedio_Paths: if os.path.split(vedio_Path)[-1].split('.')[-1] in ['avi', 'mp4']: source_list.append(vedio_Path) return source_list
def face_save(self, img, max_face): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) if max_face[2] > 30: self.number += 1 print(self.number) print(Setting().face_image_path + "/people." + str(int(self.face_id)) + '.' + str(self.number) + ".jpg") cv2.imwrite(Setting().face_image_path + "/people." + str(int(self.face_id)) + '.' + str(self.number) + ".jpg", gray[max_face[1]:max_face[1]+max_face[3], max_face[0]:max_face[0]+max_face[2]]) return
class CLI: def __init__(self): self.s = Setting() self.printLicense() self.initMotionScheduler() self.initKbThread() self.initRPC() self.printFooter() try: while(True): time.sleep(100) except KeyboardInterrupt: print(''' Thanks for playing!''') sys.exit() def initMotionScheduler(self): self.motionScheduler = MotionScheduler() if(self.s.get('motion_scheduler_autostart', True)): print('Motion scheduler service - started') else: print('Motion scheduler service - stopped') def initKbThread(self): if(self.s.get('kb_autostart',True)): self.kbthread = KeyboardThread(motionScheduler = self.motionScheduler) print('Keyboard service - started') else: print('Keyboard service - stopped') def initRPC(self): if(self.s.get('rpc_autostart',True)): self.rpcserver = SRPCServer(motionScheduler = self.motionScheduler) print('RPC service - started') else: print('RPC service - stopped') def printLicense(self): print('''AllMyServos - Fun with PWM Copyright (C) 2015 Donate BTC:14rVTppdYQzLrqay5fp2FwP3AXvn3VSZxQ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. ''') def printFooter(self): print(''' Use Ctrl+C to exit Use GUI.py to change configuration''')
def get_show_users_dict(self): s = {} for user_id, user_name in self.users_dict.items(): s["0"*(6-len(user_id))+user_id] = [user_name + " "*(20-len(user_name)), 0] img_paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] for img_path in img_paths: user_id = os.path.split(img_path)[-1].split('.')[1] if user_id in self.users_dict: s["0"*(6-len(user_id))+user_id][1] += 1 self.show_users_dict = s
def __init__(self): self.face_recognizer = cv2.face.LBPHFaceRecognizer_create( grid_x=16, grid_y=16) self.face_recognizer.read(Setting().train_result_path) self.face_detector = cv2.CascadeClassifier( Setting().face_classification_file_path) self.eyes_detector = cv2.CascadeClassifier( Setting().eyes_classification_file_path) self.predict_number = 0 self.number = 0 self.face_id = None self.usrs_dict = None self.open_dict() self.predict_dict = {}
def show_user_image_by_id(self): chanage = False while True: id_search = input("\n>请输入要查找的编号,或输入b退出,或输入s查看用户表:") if id_search == 'b': break if id_search == 's': self.show_users() continue if (not id_search.isdigit()) or len(str(int(id_search))) > 6: print("【错误】请输入合法(小于等于6位数字)编号。") continue if id_search not in self.users_dict.keys(): print("【错误】数据库中没有改编号用户。") continue img_paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] for img_path in img_paths: user_id = int(os.path.split(img_path)[-1].split('.')[1]) if user_id == int(id_search): img = plt.imread(img_path) plt.title(self.users_dict[id_search] + ":" + os.path.split(img_path)[-1]) plt.imshow(img, cmap="gray") plt.axis('off') plt.show() command = input( "\n>>直接按回车键(其他)查看下一张,输入d删除本张照片,输入b退出查看该编号:") while command == 'd': if input("\n>>>按回车确认,输入其他取消:") == '': os.remove(img_path) chanage = True print("【通知】已经成功删除。") command = input("\n>>直接按回车键(其他)查看下一张,输入b退出查看该编号:") if command == 'd': command = '' else: print("【通知】已经取消删除。") command = input( "\n>>直接按回车键(其他)查看下一张,输入d删除本张照片,输入b退出查看该编号:") if command == 'b': break else: continue if chanage: print("【通知】由于您删除了图片,正在重新训练模型") self.face_tools.face_train() self.press_enter_continue()
def download(): print(download.__name__) if Setting.need_download_stock_list(): download_stock_list() Setting.write_to_database(Constants.SETTING_KEY_DOWNLOAD_STOCK_LIST, "1") stock_tuple_list = read_stock_tuple_list_from_database() if Utility.is_empty(stock_tuple_list): print("stock_tuple_list is empty, return") return index = Utility.read_download_index_from_config_ini() i = 0 for stock_tuple in stock_tuple_list: i += 1 if i < index: continue Utility.write_download_index_to_config_ini(i) stock = Stock(stock_tuple) if stock is None: continue if not check_out(stock): continue print(i, stock.get_code(), stock.get_name()) stock_data_list = download_stock_data(stock) time_to_market = get_time_to_market(stock_data_list) stock.set_time_to_market(time_to_market) download_information_data(stock) download_financial_data(stock) download_share_bonus(stock) download_total_share(stock) # download_share_holder(stock) stock.update_to_database() Utility.write_download_index_to_config_ini(0) print("download done")
def addSetting(self, name, optionType, default, callback, sunrise=SHOWBASE_PREINIT, options=None, description=""): if (name and len(name) > 0) and (not name in self.registry.keys()): if not sunrise in [SHOWBASE_PREINIT, SHOWBASE_POSTINIT]: raise ValueError( "Invalid sunrise type for Setting %s.".format(name)) if not optionType in [ DATATYPE_INT, DATATYPE_STR, DATATYPE_TUPLE, DATATYPE_LIST, DATATYPE_BOOL, DATATYPE_FLOAT ]: raise ValueError( "Invalid option type for Setting %s.".format(name)) setting = Setting(self, name, optionType, default, callback, sunrise, options, description) self.registry.update({name: setting}) else: raise ValueError("You must specify a Setting name!")
def __init__(self): # 初始化pygame pygame.init() self.setting = Setting() self.offset = {pygame.K_LEFT: 0, pygame.K_RIGHT: 0, pygame.K_UP: 0, pygame.K_DOWN: 0} # 初始化游戏 self.screen = pygame.display.set_mode(self.setting.windows) # 初始化一个用于显示的窗口 pygame.display.set_caption('This is my first pygame-program') # 设置窗口标题 self.background = pygame.image.load('image/background.jpg') self.feiji = pygame.image.load('image/fj.png') self.bullet = pygame.image.load('image/bullet.png') self.enemy_img = pygame.image.load('image/enemy.png') self.gameover_img = pygame.image.load('image/gameover.jpg') self.pass_img = pygame.image.load('image/pass.jpg') # 创建敌人组 self.enemy_group = pygame.sprite.Group() # 创建击毁敌人组 self.enemy_down_group = pygame.sprite.Group() # 飞机出事位置 feiji_pos = [(self.setting.windows[0] - self.feiji.get_rect().width) / 2, self.setting.windows[1] - 100] # 飞机对象 self.heros = Hero(self.feiji, feiji_pos) # 限制游戏帧数 self.clock = pygame.time.Clock() # 重绘次数 self.ticks = 0 # 分数 self.makes = 0 # 最高分数 self.makesMax = 99999
def run_game(): pygame.init() pygame.display.set_caption('Alien Invasion') ai_setings = Setting() screen = pygame.display.set_mode( (ai_setings.screen_width, ai_setings.screen_height), pygame.FULLSCREEN) play_button = Button(ai_setings, screen, 'Play') setting_button = S_Button(ai_setings, screen, 'Setting') q_button = Q_Button(ai_setings, screen, 'Quit') ship = Ship(ai_setings, screen) bullet = Group() alien = Alien(ai_setings, screen, scale) aliens = Group() gf.create_fleet(ai_setings, screen, ship, aliens) stats = GameStats(ai_setings) sb = scoreboard(ai_setings, screen, stats) gf.update_screen(ai_setings, screen, stats, sb, ship, bullet, aliens, play_button, setting_button, q_button) while True: gf.check_events(ai_setings, screen, stats, sb, play_button, setting_button, q_button, ship, aliens, bullet) if stats.game_active: ship.update() gf.update_screen(ai_setings, screen, stats, sb, ship, bullet, aliens, play_button, setting_button, q_button) gf.update_bullet(ai_setings, screen, stats, sb, ship, bullet, aliens) gf.update_aliens(ai_setings, stats, screen, sb, ship, aliens, bullet)
def open_users_dict(self): try: with open(Setting().usrs_info_path, 'rb') as usr_file: self.users_dict = pk.load(usr_file) usr_file.close() except FileNotFoundError: print("【异常】出现严重错误,数据可能会坏。")
def save_users_dict(self): try: with open(Setting().usrs_info_path, 'wb') as usr_file: pk.dump(self.users_dict, usr_file) except FileNotFoundError: print("【异常】出现错误") usr_file.close()
def __init__(self, img, init_pos): pygame.sprite.Sprite.__init__(self) self.image = img self.rect = self.image.get_rect() self.rect.topleft = init_pos self.speed = 2 self.borld = Setting().windows
def main(): #set configuration N = 2**17 num_repetitions = 5 setting = Setting() configs = setting.set_configurations(N) # make an experiment for each configuration for config in configs: print('Experiment: ', config.name) start_time = time.clock() config.gen_stochastic_processes() run_experiment(config, setting, num_repetitions) exp_time = time.clock() - start_time print('TIME TO PERFORM EXPERIMENT ', config.name, 'CONFIGURATION: ', exp_time)
def run_game(): set = Setting() catapult = Controller.create_catapult(set) generals = Controller.create_general(set) while True: Controller.update_window(catapult,generals,set)
def __init__(self): pygame.init() self.setting = Setting() self.screen = pygame.display.set_mode( (self.setting.WIDTH, self.setting.HIGH), 0, 32) self.food = Food(self) self.snake = Snake(self) self.message = Message(self) self.map = Map(self)
def __init__(self): """ Initializes the Command Line Interface """ self.s = Setting() self.notifier = Notifier() self.printLicense() self.initScheduler() self.initTrayIcon() self.initSpec() self.initMotionScheduler() self.initKbThread() self.initRPC() self.initCamera() self.printFooter() try: while(True): time.sleep(100) except KeyboardInterrupt: self.shutDown()
def face_train_thread(self): img_Paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] faces = [] ids = [] for img_Path in img_Paths: img = cv2.imread(img_Path, cv2.IMREAD_GRAYSCALE) img_numpy = np.array(img, 'uint8') user_id = os.path.split(img_Path)[-1].split('.')[1] if user_id in self.usrs_dict.keys(): user_id = int(user_id) faces.append(img_numpy) ids.append(user_id) before = time.time() self.face_recognizer.train(np.array(faces), np.array(ids)) print('训练时间:' + str(time.time()-before)) self.face_recognizer.write(Setting().train_result_path) print('写入时间:' + str(time.time()-before)) print("\n【通知】训练完成。请继续在此进行您的输入:") return
def __init__(self, view): self.view = view self.setting = Setting(self.view) self.folder = None for folder in self.view.window().folders(): if folder == self.view.file_name()[:len(folder)]: self.folder = folder break if self.folder is None: raise CTagsException('CTags needs a sublime folder to work') self.tagsFile = self.folder + "/.tags" + self.setting.getSyntax() if not os.path.exists(self.tagsFile): raise CTagsException('CTags file not found: ' + self.tagsFile)
def show_user_image_by_name(self): while True: name = input("\n>请输入要查找的姓名,或输入b退出,或输入s查看用户表:") if name == 'b': break if name == 's': self.show_users() continue if not len(name) in range(2, 21): print("【错误】这不是一个合法(2~20字符)用户名。") continue if not name in self.users_dict.values(): print("【错误】没有改用户名。") continue ids = [] for key, value in self.users_dict.items(): if value == name: ids.append(key) img_paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] show_paths = {} for id_search in ids: for img_path in img_paths: user_id = int(os.path.split(img_path)[-1].split('.')[1]) if user_id == int(id_search): show_paths[user_id] = img_path break size = len(show_paths) i = 1 plt.figure() for key, value in show_paths.items(): img = plt.imread(value) plt.subplot(1, size, i) i = i+1 plt.title("id: " + str(key)) plt.imshow(img, cmap='gray'), plt.axis('off') plt.show() self.press_enter_continue()
def run_game(): #initialize game and create a dispaly object pygame.init() setting = Setting() globalvar.init(setting) pygame.display.set_caption("BB king") globalvar.set_player(character.start_game(1, globalvar.screen)) # game loop while True: # supervise keyboard and mouse item # change stat of objects check_event() update_screen(setting)
def __init__(self): self.s = Setting() self.printLicense() self.initMotionScheduler() self.initKbThread() self.initRPC() self.printFooter() try: while(True): time.sleep(100) except KeyboardInterrupt: print(''' Thanks for playing!''') sys.exit()
def __init__(self): settingWindow_form.__init__(self) QMainWindow.__init__(self) self.setupUi(self) self.setting_data = Setting() self.setting_okay_flag = 0 # Events # grading setting events self.gs_beauty_hSlider.valueChanged.connect(self.update_gs_beauty) self.gs_report_hSlider.valueChanged.connect(self.update_gs_report) self.gs_test_1_spinBox.valueChanged.connect(self.update_test_1) self.gs_test_1_lineEdit.textChanged.connect(self.update_test_1) self.gs_test_2_spinBox.valueChanged.connect(self.update_test_2) self.gs_test_2_lineEdit.textChanged.connect(self.update_test_2) self.gs_file_names_lineEdit.textChanged.connect(self.update_file_names) self.gs_img_output_lineEdit.textChanged.connect(self.update_img_tests) # output setting events self.os_excel_checkBox.stateChanged.connect(self.update_excel_state) self.os_pdf_checkBox.stateChanged.connect(self.update_pdf_state) self.os_grade_checkBox.stateChanged.connect(self.update_output_type) self.os_mos_checkBox.stateChanged.connect(self.update_output_type) self.os_mos_grade_checkBox.stateChanged.connect( self.update_output_type) self.os_cheat_hSlider.valueChanged.connect(self.cheat_limit) self.os_pyDefault_radioButton.toggled.connect(self.PythonPython) # advance setting events self.adv_bulid_lineEdit.textChanged.connect(self.build_keyWord_update) self.adv_cppTest_lineEdit.textChanged.connect( self.cppTest_keyWord_update) self.adv_pyTest_lineEdit.textChanged.connect( self.pyTest_keyWord_update) self.adv_minus_lineEdit.textChanged.connect(self.minus_keyWord_update) self.ok_Button.clicked.connect(self.ok_button_callback) self.cancel_Button.clicked.connect(self.cancel_button_callback)
class Stage: number = 0 setting = None game = None max = 3 def __init__(self, game): self.game = game self.setting = Setting(self.game) @property def folder(self): return "./stages/" + str(self.number) + "/" @property def folder_sound(self): return self.folder + "sound/" @property def folder_image(self): return self.folder + "image/" @property def folder_setting(self): return self.folder + "setting/" def next(self): if self.number < self.max: self.number += 1 self.setting.load() return True else: return False def show(self): self.game.game_text.show(650, 10, "Stage : " + str(self.number), (255, 255, 255), 32)
class Stage: number = 3 setting = None game = None def __init__(self, game, number): self.number = number self.game = game def load(self): self.setting = Setting(self.folder + "setting/setting.json") self.setting.load() @property def folder(self): return "./stages/" + str(self.number) + "/" @property def folder_sound(self): return self.folder + "/sound" @property def folder_image(self): return self.folder + "/images"
def __init__(self, img, init_pos): pygame.sprite.Sprite.__init__(self) self.image = img self.borld = Setting().windows self.rect = self.image.get_rect() self.rect.topleft = init_pos self.init_pos = init_pos self.speed = 6 self.is_hit = False self.life = 1 self.lifeC = [] # 子弹1的Group self.bullets1 = pygame.sprite.Group() self.bullets2 = pygame.sprite.Group() self.bullets3 = pygame.sprite.Group() self.lifeGroup = pygame.sprite.Group()
def rebuild(view): folders = view.window().folders() if len(folders) > 0: for folder in folders: for lang in Setting.getSupportedLanguages(): cTagsBinary = None if os.path.exists('/usr/bin/ctags'): cTagsBinary = '/usr/bin/ctags' if os.path.exists('/opt/local/bin/ctags'): cTagsBinary = '/opt/local/bin/ctags' if cTagsBinary is None: raise CTagsException('YAC: ctags binary not found') cTagsFile = os.path.join(folder, '.tags' + lang) if os.path.exists(cTagsFile): os.remove(cTagsFile) cmd = cTagsBinary + ' -R --languages=' + lang + ' -f "' + cTagsFile + '" "' + folder + '"' os.popen(cmd) else: raise CTagsException('No folders detected')
def __init__(self): pygame.init() # pygame初期化 pygame.display.set_mode((1200, 675), 0, 32) # 画面設定 self.screen = pygame.display.get_surface() pygame.display.set_caption('catch a star game') # ウィンドウタイトル # 各ゲームモードのインスタンスの生成 self.media = Media() self.menu = Menu(self.media) self.play = Play(self.media) self.setting = Setting(self.media) self.bye = Bye(self.media) self.ranking = Ranking(self.media) self.media.play_bgm(1) # 各モードへ分岐するための辞書型 self.game_mode_list = { Mode.MENU: self.menu, Mode.PLAY: self.play, Mode.SETTING: self.setting, Mode.RANKING: self.ranking, Mode.BYE: self.bye }
def rename_photo(self, users_id, new_id): img_paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] i = 0 for img_path in img_paths: user_id = os.path.split(img_path)[-1].split('.')[1] if user_id in users_id: i += 1 os.rename(img_path, Setting().face_image_path + "/temp." + str(i) + ".jpg") i = 0 img_paths = [os.path.join(Setting().face_image_path, f) for f in os.listdir(Setting().face_image_path)] for img_path in img_paths: flag = os.path.split(img_path)[-1].split('.')[0] if flag == 'temp': i += 1 os.rename(img_path, (Setting().face_image_path + "/people." + new_id + '.' + str(i) + ".jpg"))
#--------------------------- run the exp ---------------------------- if 1: k = 5 fold = 10 dataset = Dataset('', '') dataset.file_folder_path = '../data/input/' method = Method('', '') method.k = k evaluation = Evaluation('') result = Result('', '') result.k = k setting = Setting('', '', dataset, method, result, evaluation) setting.fold = fold setting.load_classify_save() if 1: fold = 10 k = 5 result = Result('', '') result.k = k evaluation = Evaluation('') evaluation_result_of_each_fold = [] for fold_count in range(1, fold + 1): final_result = result.load(fold_count) predict_result = final_result['predict_result']
import sys import pygame from Setting import Setting from bullet import Bullet import time from Setting import * from alien import * from Setting_button import * ai_setings = Setting() Shoot = pygame.USEREVENT + 1 def check_keydown_events(event, ai_setings, stats, screen, play_button, setting_button, ship, aliens, bullet): if event.key == pygame.K_d: ship.moving_right = True elif event.key == pygame.K_a: ship.moving_left = True elif event.key == pygame.K_w: ship.moving_up = True elif event.key == pygame.K_s: ship.moving_down = True elif event.key == pygame.K_SPACE: pygame.time.set_timer(Shoot, ai_setings.reload) pygame.event.get(Shoot) elif event.key == pygame.K_p: ai_setings.initialize_dynamic_settings() stats.reset_stats() stats.game_active = True aliens.empty()
def test_aaa_createCTagsFile(self): CTags.rebuild(self.view) for lang in Setting.getSupportedLanguages(): self.assertEqual(os.path.exists(os.path.join(Setting.getResourcesPath(), '.tags' + lang)), True)
def setUp(self): self.view = View(Setting.getResourcesPath(), os.path.join(Setting.getResourcesPath(), 'test.php')) self.setting = Setting(self.view) self.cTags = CTags(self.view)
class CTags(object): def __init__(self, view): self.view = view self.setting = Setting(self.view) self.folder = None for folder in self.view.window().folders(): if folder == self.view.file_name()[:len(folder)]: self.folder = folder break if self.folder is None: raise CTagsException('CTags needs a sublime folder to work') self.tagsFile = self.folder + "/.tags" + self.setting.getSyntax() if not os.path.exists(self.tagsFile): raise CTagsException('CTags file not found: ' + self.tagsFile) @staticmethod def rebuild(view): folders = view.window().folders() if len(folders) > 0: for folder in folders: for lang in Setting.getSupportedLanguages(): cTagsBinary = None if os.path.exists('/usr/bin/ctags'): cTagsBinary = '/usr/bin/ctags' if os.path.exists('/opt/local/bin/ctags'): cTagsBinary = '/opt/local/bin/ctags' if cTagsBinary is None: raise CTagsException('YAC: ctags binary not found') cTagsFile = os.path.join(folder, '.tags' + lang) if os.path.exists(cTagsFile): os.remove(cTagsFile) cmd = cTagsBinary + ' -R --languages=' + lang + ' -f "' + cTagsFile + '" "' + folder + '"' os.popen(cmd) else: raise CTagsException('No folders detected') def getRelativeFilePath(self, filePath): return filePath[len(os.path.dirname(self.tagsFile))+1:] def getClassFromName(self, searchString): if searchString: return self._getClasses(searchString)[0] else: return None def getClassesFromName(self, searchString): if searchString: return self._getClasses(searchString) else: return [] def _getClasses(self, searchString): results = [] f = os.popen("grep \"^" + searchString + "\" '" + self.tagsFile + "' | grep \"[c|i]$\"") for i in f.readlines(): className = i[:i.find("\t")] classFileName = i[i.find("\t")+1:i.find("\t", i.find("\t") + 1)] line = i[i.find('/^')+2:i.find('$/;"')] if line.find('extends') >= 0: parentClassName = line[line.find('extends')+7:].strip().split()[0] else: parentClassName = None results.append(Class(className, classFileName, parentClassName)) return results def _getMethodsFromClass(self, searchClass, prefix=None): results = [] cmd = '' if prefix: cmd = "grep '^" + prefix + "' '" + self.tagsFile + "' | grep -F \"\t" + searchClass.getFile() + "\t\" | grep \"f$\"" else: cmd = "grep -F \"\t" + searchClass.getFile() + "\t\" " + self.tagsFile + " | grep \"f$\"" f = os.popen(cmd) for i in f.readlines(): results.append(self._extractMethod(i, searchClass)) return results def _extractMethod(self, tagsLine, classObject): name = tagsLine[:tagsLine.find("\t")-1] line = tagsLine[tagsLine.find('/^')+2:tagsLine.find('$/;"')] line.strip() line = line[line.find('function')+8:line.find('{')] method = Method(name, classObject, line) return method def getMethodsFromClass(self, currentClass, prefix=None): results = [] i = 0 while isinstance(currentClass, Class) and currentClass.classExists(): i = i + 1 if i > 10: raise Exception('YAC: Recursion limit reached') for result in self._getMethodsFromClass(currentClass, prefix): results.append(result) currentClass = self.getClassFromName(currentClass.getParentClassName()) return results def getFunctionsFromName(self, name): results = [] f = os.popen("grep \"^" + name + "\" '" + self.tagsFile + "' | grep \"f$\"") for i in f.readlines(): functionName = i[:i.find("\t")] functionFileName = i[i.find("\t")+1:i.find("\t", i.find("\t") + 1)] line = i[i.find('/^')+2:i.find('$/;"')] results.append(Function(functionName, functionFileName, line)) return results