def execute_run(self, command): print '\n' current_directory = os.getcwd() if self.changedir: os.chdir(self.program_path) if not self.log: tempname = current_directory + '/make-templog.txt' else: tempname = os.path.abspath(self.log) TEMPFILE = open(tempname, 'wb') if self.makelog: if not (metadata.makelog_started and os.path.isfile(self.makelog)): raise CritError(messages.crit_error_nomakelog % self.makelog) # Open main log file try: LOGFILE = open(self.makelog, 'ab') except Exception as errmsg: print errmsg raise CritError(messages.crit_error_log % self.makelog) try: # Execute command and print content to LOGFILE print 'Executing: ', command print >>LOGFILE, '\n\nExecute: ', command subprocess.check_call(command, shell = True, stdout = TEMPFILE, stderr = TEMPFILE) TEMPFILE.close() LOGFILE.write(open(tempname, 'rU').read()) LOGFILE.close() except Exception as errmsg: # If fails then print errors to LOGFILE TEMPFILE.close() LOGFILE.write(open(tempname, 'rU').read()) print messages.crit_error_bad_command % command, '\n', str(errmsg) print >> LOGFILE, messages.crit_error_bad_command % command, '\n', str(errmsg) LOGFILE.close() else: try: # Execute command print 'Executing: ', command subprocess.check_call(command, shell = True, stdout = TEMPFILE, stderr = TEMPFILE) TEMPFILE.close() except Exception as errmsg: # If fails then print errors TEMPFILE.close() print messages.crit_error_bad_command % command, '\n', str(errmsg) print >> TEMPFILE, messages.crit_error_bad_command % command, '\n', str(errmsg) if not self.log: os.remove(tempname) if self.changedir: os.chdir(current_directory)
def get_asset_data(self): import requests split_url = urlparse.urlsplit(self.url) path = split_url.path path = path.split("/") clean_path = [] assetid = None for i in range(len(path)): if bool(path[i]): clean_path.append(path[i]) if len(clean_path) != 6: raise SyntaxError(messages.syn_error_url) organization, repo, releases, download, tag, assetname = clean_path prelim_path = "https://" + self.token + ":@api.github.com/repos/" paste_prelim = "https://" + "[token]" + ":@api.github.com/repos/" releasepath = prelim_path + organization + "/" + repo + "/" + \ releases + "/" + "tags" + "/" + tag releasepath_paste = paste_prelim + organization + "/" + repo + "/" + \ releases + "/" + "tags" + "/" + tag # Accessing GitHub API for asset ID try: s = requests.session() json_release = s.get(releasepath) json_output = json_release.content json_split = json_output.split(",") json_name = '"name":"' + assetname + '"' except: raise CritError(messages.crit_error_github % releasepath_paste) # Finding asset ID in JSON output for i in range(len(json_split)): if json_split[i] == json_name: assetid = json_split[i - 1] assetid = assetid.split(":") assetid = assetid[1] # Creating download url if assetid is None: raise CritError(messages.crit_error_assetid % (assetname, tag)) else: assetpath = prelim_path + organization + "/" + repo + "/" + \ releases + "/" + "assets" + "/" + assetid paste_assetpath = paste_prelim + organization + "/" + repo + "/" + \ releases + "/" + "assets" + "/" + assetid self.url = assetpath self.paste_url = paste_assetpath self.file = assetname
def add_error_to_log(makelog): if not makelog: return if not (metadata.makelog_started and os.path.isfile(makelog)): raise CritError(messages.crit_error_nomakelog % makelog) LOGFILE = open(makelog, 'ab') print_error(LOGFILE) LOGFILE.close()
def error_check(self, prog): if (self.osname != 'posix') & (self.osname != 'nt'): raise CritError(messages.crit_error_unknown_system % self.osname) ext = metadata.extensions[prog] if self.program_ext == '': self.program_ext = ext if self.program_ext: self.program = self.program_name + self.program_ext self.program_full = os.path.join(self.program_path, self.program) if not os.path.isfile(self.program_full): raise CritError(messages.crit_error_no_file % self.program_full) if self.program_ext != ext: raise CritError(messages.crit_error_extension % self.program_full)
def option_overlap_error_check(self, kwargs): prog = [prog for prog, ext in metadata.extensions.iteritems() if ext == self.program_ext][0] option_overlaps = metadata.option_overlaps.get(prog) if not option_overlaps: return for opt in option_overlaps: if self.option_dict.has_key(option_overlaps[opt]) and kwargs.has_key(opt): raise CritError(messages.crit_error_option_overlap % (opt, option_overlaps[opt]))
def move_log(self, default_log): if self.makelog: if not (metadata.makelog_started and os.path.isfile(self.makelog)): raise CritError(messages.crit_error_nomakelog % self.makelog) if os.path.abspath(default_log) != os.path.abspath(self.log): # Append default_log to main log LOGFILE = open(self.makelog, 'ab') try: LOGFILE.write(open(default_log, 'rU').read()) except Exception as errmsg: print errmsg raise CritError(messages.crit_error_no_file % default_log) LOGFILE.close() # Save default_log as self.log if self.log: shutil.copy2(default_log, self.log) os.remove(default_log)
def command(self, quiet): try: shutil.copy('%s%s' % (self.dir, self.file), '%s%s' % (self.outdir, self.outfile)) print >> self.logfile, messages.success_copy % ( self.dir, self.file, self.outdir, self.outfile) except: raise CritError(messages.crit_error_copyincomplete % (self.dir, self.file))
def end_logging(LOGFILE, makelog, logtype): time_end = datetime.datetime.now().replace(microsecond=0) print >> LOGFILE, messages.note_logend % logtype, time_end LOGFILE.close() if not makelog: return if not (metadata.makelog_started and os.path.isfile(makelog)): raise CritError(messages.crit_error_nomakelog % makelog) MAKE_LOGFILE = open(makelog, 'ab') MAKE_LOGFILE.write(open(LOGFILE.name, 'rU').read()) MAKE_LOGFILE.close() os.remove(LOGFILE.name)
def input_to_array(filename): # Import file try: FILENAME = open(filename, 'rU') except: raise CritError(messages.crit_error_file % filename) # Delete header filearray = [] for line in FILENAME: if (not re.match('rev', line) and not re.match('linkpath', line) and not re.match('\s*\#', line) and not re.match('\s*$', line) and not re.match('url', line)): filearray.append(line.rstrip('\n')) FILENAME.close() return filearray
def error_check(self, prog): if (self.osname != 'posix') & (self.osname != 'nt'): raise CritError(messages.crit_error_unknown_system % self.osname) if self.package and not os.path.isfile(self.package): raise CritError(messages.crit_error_no_package % self.package)