def file_type(self, filename): if not os.path.exists(filename): raise EArgument('%r does not exist.' % filename) if self._file_type is not 'auto': return self._file_type lname = filename.lower() if lname.endswith('.template'): lname = lname[:-9] if lname.endswith('.html') or lname.endswith('.htm'): return 'html' if lname.endswith('.xml'): return 'xml' if lname.endswith('.js'): return 'js' if (lname.endswith('.sh') or lname.endswith('.rc') or lname.endswith('.csh') or lname.endswith('.ksh') or lname.endswith('.ash') or lname.endswith('.bash') or lname.endswith('.profile') or lname.endswith('.bash_profile') or lname.endswith('.bashrc')): return 'shell' if isdir(filename): return 'directory' f = open(filename, 'r') try: for line in f.xreadlines(): if line.find('\x1b') != -1: return 'ansi-esc' finally: f.close() raise EArgument('can not determine file type of %r.' % filename)
def _and_handler(self, *args): property = self.pop_next() value = self.pop_next() if property is None or value is None: raise EArgument('--and requires property value arguments.') self._property_value_list.append((property, value)) return
def __call__(self, *args): property_name = self.pop_next() property_value = self.pop_next() if property_name is None: raise EArgument("pfileinfo equal command requires a property_name" " and a property_value as it's first and second" " arguments.") if property_value is None: raise EArgument("pfileinfo equal command requires a property_value" " name as it's second argument.") files = self.arguments() if not files: raise EArgument("pfileinfo equal command requires a list of file" " names after the property_value name argument.") for f in self.arguments(): if self.get(f, property_name) != property_value: return 2 return 0
def _load(self,argument_name): filename = self.pop_next() if filename is None: raise EArgument("Missing required %r argument." % argument_name) database = _Database(filename) database.load_script_file( filename, force=self.registered_command().root()._force ) return database
def _specific(self): property_name = self.pop_next() if property_name is None: raise EArgument("pfileinfo get command requires a property_name" " followed by a list of file names.") files = self.arguments() if not files: raise EArgument("pfileinfo get command requires a list of file" " names.") for f in self.arguments(): property_value = self.get(f, property_name) if property_value is None: property_value = self._no_property_text if self._value_only: self.put_stdout_msg("%s\n", property_value) else: self.put_stdout_msg("%s: %s = '%s'\n", f, property_name, property_value) return 0
def __call__(self, *args): if not self._property_value_list: property_name = self.pop_next() property_value = self.pop_next() if property_name is None or property_value is None: raise EArgument('pfileinfo set requires property_name' ' property_value arguments.') self._property_value_list.append((property_name, property_value)) files = self.arguments() if len(files) < 2: if len(files) == 1: raise EArgument("pfileinfo set command requires a target file" " or directory.") raise EArgument("pfileinfo set command requires at least one " " source file and a target file or directory.") target = files.pop() if len(files) > 1 and not os.path.isdir(target): raise EArgument("If more then one source file is specified, then" " the target must be a directory.") return self.set_properties(self._property_value_list, files, target)
def _load(self): filename = self.pop_next() if filename is None: filename = 'master.script' if self.arguments(): EArgument("Too many arguments.") self._database = _Database(filename) self._database.load_script_file( filename, force=self.registered_command().root()._force ) return
def _diff(self): self._db1 = self._load("database1-script-file") self._db2 = self._load("database2-script-file") if self.arguments(): EArgument("Too many arguments.") self._diff_tables_definitions() self._diff_tables_rows() self._diff_grants() self._diff_users() self._diff_aliases() self._diff_connections() return
def __call__(self, *args): files = self.arguments() if not files: raise EArgument("pfileinfo type command requires a list of file" " names.") for f in self.arguments(): try: file_type = self.file_type(f) except ECommand: file_type = self._unknown_type_text if self._value_only: self.put_stdout_msg("%s\n", file_type) else: self.put_stdout_msg("%s: %s\n", f, file_type) return 0
def _all(self): files = self.arguments() if not files: raise EArgument("pfileinfo get --all command requires a list of" " file names.") for f in self.arguments(): property_values = self.as_dict(f) property_names = property_values.keys() property_names.sort() for property_name in property_names: property_value = property_values[property_name] if self._value_only: self.put_stdout_msg("%s\n", property_value) else: self.put_stdout_msg("%s: %s = '%s'\n", f, property_name, property_value) return 0
def run_command(self, command): raise EArgument('pfileinfo requires a sub-command.')
def __call__(self, *args): self._load() if self.arguments(): EArgument("Too many arguments.") return 0