def presentFrag(self, node): name = s4frag(s4ns(node.__class__.__module__), ".", s4fragname(node.__class__.__qualname__)) if len(node): if not self._inattr: # skip "(" for attributes, they will be added by presentElement() yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 self._path.append(0) for (i, child) in enumerate(node): if i == len(node) - 1: yield from child.present(self) else: lines = list(child.present(self)) for (j, line) in enumerate(lines): if j == len(lines) - 1: line.content += "," yield line self._path[-1] += 1 self._level -= 1 self._path.pop() if not self._inattr: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), ")")) else: if not self._inattr: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def copyone(urlread, urlwrite): strurlread = str(urlread) if urlread.isdir(): if args.recursive: for u in urlread.walkfiles(include=args.include, exclude=args.exclude, enterdir=args.enterdir, skipdir=args.skipdir, ignorecase=args.ignorecase): copyone(urlread / u, urlwrite / u) else: if args.verbose: msg = astyle.style_default( "ucp: ", astyle.style_url(strurlread), astyle.style_warn(" (directory skipped)")) stderr.writeln(msg) else: if args.verbose: msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), " -> ") stderr.write(msg) try: with contextlib.closing(urlread.open("rb")) as fileread: with contextlib.closing(urlwrite.open("wb")) as filewrite: size = 0 while True: data = fileread.read(262144) if data: filewrite.write(data) size += len(data) else: break if user or group: urlwrite.chown(user, group) except Exception as exc: if args.ignoreerrors: if args.verbose: exctype = misc.format_class(exc) excmsg = str(exc).replace("\n", " ").strip() msg = astyle.style_error( f" (failed with {exctype}: {excmsg})") stderr.writeln(msg) else: raise else: if args.verbose: msg = astyle.style_default(astyle.style_url(str(urlwrite)), f" ({size:,} bytes)") stderr.writeln(msg)
def presentAttrs(self, node): name = s4attrs(s4ns(node.__class__.__module__), ".", s4attrsname(node.__class__.__qualname__)) if len(node): globalattrs = {} localattrs = {} for ((attrxmlns, attrname), attrvalue) in node.items(): if attrxmlns is None: localattrs[attrname] = attrvalue else: globalattrs[(attrxmlns, attrname)] = attrvalue yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 if globalattrs: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), "{")) for (i, ((attrxmlns, attrname), attrvalue)) in enumerate(globalattrs.items()): self._path.append(attrname) attrname = astyle.style_default("{", s4ns(attrname[0]), ".", s4attrname(attrname[1])) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 self._level += 1 line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext)) if i != len(globalattrs) or not localattrs: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 line = astyle.style_default(self._indent(), "}") if localattrs: line += "," yield Line(node, node.startloc, self._path[:], line) for (i, (attrname, attrvalue)) in enumerate(localattrs.items()): self._path.append(attrname) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 line = astyle.style_default(self._indent(), s4attrname(attrname), "=", s4attrvalue(attrtext)) if i != len(localattrs) - 1: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")")) else: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def printone(url): if args.long: sep = style_pad(args.separator) stat = url.stat() owner = url.owner() group = url.group() mtime = datetime.datetime.fromtimestamp( stat.st_mtime).strftime("%Y-%m-%d %H:%M:%S") mode = "".join( [text[bool(stat.st_mode & bit)] for (bit, text) in modedata]) size = stat.st_size if args.human: s = "BKMGTP" for c in s: if size < 2048: if c == "B": size = str(int(size)) else: size = astyle.style_default( str(int(size)), style_sizeunit(c)) break size /= 1024. stdout.write(mode, sep, rpad(owner, 8), sep, rpad(group, 8), sep, lpad(size, 5 if args.human else 12), sep, lpad(stat.st_nlink, 3), sep, mtime, sep) if url.isdir(): stdout.writeln(style_dir(str(url))) else: stdout.writeln(style_file(str(url)))
def presentDocType(self, node): name = s4doctype(s4ns(node.__class__.__module__), ".", node.__class__.__qualname__) yield Line( node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(", s4doctypetext(repr(self._text(node.content))), ")"))
def presentProcInst(self, node): name = s4procinst(s4ns(node.__class__.__module__), ".", s4procinsttarget(node.__class__.__qualname__)) yield Line( node, node.startloc, self._path[:], astyle.style_default( self._indent(), name, "(", s4procinstcontent(repr(self._text(node.content))), ")"))
def presentText(self, node): if self._inattr: formatter = s4attrvalue else: formatter = s4text yield Line( node, node.startloc, self._path[:], astyle.style_default(self._indent(), formatter(repr(self._text(node.content)))))
def lpad(s, l): meas = str(s) if not isinstance(s, (str, astyle.Text)): s = str(s) if len(meas) < l: size = l - len(meas) psize = len(args.padding) repeats = (size + psize - 1) // psize padding = (args.padding * repeats)[:size] return astyle.style_default(style_pad(padding), s) return s
def copyone(urlread, urlwrite): strurlread = str(urlread) if urlread.isdir(): if args.recursive: for u in urlread.walkfiles(include=args.include, exclude=args.exclude, enterdir=args.enterdir, skipdir=args.skipdir, ignorecase=args.ignorecase): copyone(urlread/u, urlwrite/u) else: if args.verbose: msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), astyle.style_warn(" (directory skipped)")) stderr.writeln(msg) else: if args.verbose: msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), " -> ") stderr.write(msg) try: with contextlib.closing(urlread.open("rb")) as fileread: with contextlib.closing(urlwrite.open("wb")) as filewrite: size = 0 while True: data = fileread.read(262144) if data: filewrite.write(data) size += len(data) else: break if user or group: urlwrite.chown(user, group) except Exception as exc: if args.ignoreerrors: if args.verbose: exctype = misc.format_class(exc) excmsg = str(exc).replace("\n", " ").strip() msg = astyle.style_error(f" (failed with {exctype}: {excmsg})") stderr.writeln(msg) else: raise else: if args.verbose: msg = astyle.style_default(astyle.style_url(str(urlwrite)), f" ({size:,} bytes)") stderr.writeln(msg)
def presentFrag(self, node): name = s4frag(s4ns(node.__class__.__module__), ".", s4fragname(node.__class__.__qualname__)) if len(node): if not self._inattr: # skip "(" for attributes, they will be added by presentElement() yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 self._path.append(0) for (i, child) in enumerate(node): if i == len(node)-1: yield from child.present(self) else: lines = list(child.present(self)) for (j, line) in enumerate(lines): if j == len(lines)-1: line.content += "," yield line self._path[-1] += 1 self._level -= 1 self._path.pop() if not self._inattr: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), ")")) else: if not self._inattr: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def presentAttrs(self, node): name = s4attrs(s4ns(node.__class__.__module__), ".", s4attrsname(node.__class__.__qualname__)) if len(node): globalattrs = {} localattrs = {} for ((attrxmlns, attrname), attrvalue) in node.items(): if attrxmlns is None: localattrs[attrname] = attrvalue else: globalattrs[(attrxmlns, attrname)] = attrvalue yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 if globalattrs: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), "{")) for (i, ((attrxmlns, attrname), attrvalue)) in enumerate(globalattrs.items()): self._path.append(attrname) attrname = astyle.style_default("{", s4ns(attrname[0]), ".", s4attrname(attrname[1])) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 self._level += 1 line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext)) if i != len(globalattrs) or not localattrs: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 line = astyle.style_default(self._indent(), "}") if localattrs: line += "," yield Line(node, node.startloc, self._path[:], line) for (i, (attrname, attrvalue)) in enumerate(localattrs.items()): self._path.append(attrname) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 line = astyle.style_default(self._indent(), s4attrname(attrname), "=", s4attrvalue(attrtext)) if i != len(localattrs)-1: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")")) else: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def presentDocType(self, node): name = s4doctype(s4ns(node.__class__.__module__), ".", node.__class__.__qualname__) yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(", s4doctypetext(repr(self._text(node.content))), ")"))
def presentProcInst(self, node): name = s4procinst(s4ns(node.__class__.__module__), ".", s4procinsttarget(node.__class__.__qualname__)) yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(", s4procinstcontent(repr(self._text(node.content))), ")"))
def presentEntity(self, node): name = s4entity(s4ns(node.__class__.__module__), ".", s4entityname(node.__class__.__qualname__)) yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def presentText(self, node): if self._inattr: formatter = s4attrvalue else: formatter = s4text yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), formatter(repr(self._text(node.content)))))
def presentElement(self, node): name = s4element(s4ns(node.__class__.__module__), ".", s4elementname(node.__class__.__qualname__)) if len(node.content) or len(node.attrs): yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 self._path.append(0) for (i, child) in enumerate(node): if i == len(node)-1 and not node.attrs: yield from child.present(self) else: lines = list(child.present(self)) for (j, line) in enumerate(lines): if j == len(lines)-1: line.content += "," yield line self._path[-1] += 1 self._path.pop() pyattrs = [] otherattrs = [] for attrvalue in node.attrs.values(): if node.attrs.isdeclared(attrvalue): pyattrs.append((attrvalue.__class__.__name__, attrvalue)) elif attrvalue.__class__ is xsc.Attr: if attrvalue.xmlns is None: otherattrs.append((repr(attrvalue.xmlname), attrvalue)) else: otherattrs.append((repr(f"{{{attrvalue.xmlns}}}{attrvalue.xmlname}"), attrvalue)) else: otherattrs.append((f"{attrvalue.__class__.__module__}.{attrvalue.__class__.__qualname__}", attrvalue)) if otherattrs: yield Line(node.attrs, node.attrs.startloc, self._path[:], astyle.style_default(self._indent(), "{")) for (i, (attrname, attrvalue)) in enumerate(otherattrs): self._path.append(attrname) attrname = astyle.style_default(attrname) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 self._level += 1 line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext)) if i != len(otherattrs) or not pyattrs: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 line = astyle.style_default(self._indent(), "}") if pyattrs: line += "," yield Line(node.attrs, node.attrs.startloc, self._path[:], line) for (i, (pyname, attrvalue)) in enumerate(pyattrs): self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 line = astyle.style_default(self._indent(), s4attrname(pyname), "=", s4attrvalue(attrtext)) if i != len(pyattrs)-1: line += "," self._path.append(attrvalue.xmlname) yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")")) else: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
def presentElement(self, node): name = s4element(s4ns(node.__class__.__module__), ".", s4elementname(node.__class__.__qualname__)) if len(node.content) or len(node.attrs): yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(")) self._level += 1 self._path.append(0) for (i, child) in enumerate(node): if i == len(node)-1 and not node.attrs: yield from child.present(self) else: lines = list(child.present(self)) for (j, line) in enumerate(lines): if j == len(lines)-1: line.content += "," yield line self._path[-1] += 1 self._path.pop() pyattrs = [] otherattrs = [] for attrvalue in sorted(node.attrs.values(), key=xsc.Attrs._sortorder): if node.attrs.isdeclared(attrvalue): pyattrs.append((attrvalue.__class__.__name__, attrvalue)) elif attrvalue.__class__ is xsc.Attr: if attrvalue.xmlns is None: otherattrs.append((repr(attrvalue.xmlname), attrvalue)) else: otherattrs.append((repr("{{{}}}{}".format(attrvalue.xmlns, attrvalue.xmlname)), attrvalue)) else: otherattrs.append(("{}.{}".format(attrvalue.__class__.__module__, attrvalue.__class__.__qualname__), attrvalue)) if otherattrs: yield Line(node.attrs, node.attrs.startloc, self._path[:], astyle.style_default(self._indent(), "{")) for (i, (attrname, attrvalue)) in enumerate(otherattrs): self._path.append(attrname) attrname = astyle.style_default(attrname) self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 self._level += 1 line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext)) if i != len(otherattrs) or not pyattrs: line += "," yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 line = astyle.style_default(self._indent(), "}") if pyattrs: line += "," yield Line(node.attrs, node.attrs.startloc, self._path[:], line) for (i, (pyname, attrvalue)) in enumerate(pyattrs): self._inattr += 1 attrtext = self._formatattrvalue(attrvalue) self._inattr -= 1 line = astyle.style_default(self._indent(), s4attrname(pyname), "=", s4attrvalue(attrtext)) if i != len(pyattrs)-1: line += "," self._path.append(attrvalue.xmlname) yield Line(attrvalue, attrvalue.startloc, self._path[:], line) self._path.pop() self._level -= 1 yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")")) else: yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))