diff --git a/kibot/PcbDraw/pybars/_compiler.py b/kibot/PcbDraw/pybars/_compiler.py index 103b0ebb..8dafc35f 100644 --- a/kibot/PcbDraw/pybars/_compiler.py +++ b/kibot/PcbDraw/pybars/_compiler.py @@ -42,23 +42,6 @@ __all__ = [ ] __metaclass__ = type - - -# This allows the code to run on Python 2 and 3 by -# creating a consistent reference for the appropriate -# string class -try: - str_class = unicode -except NameError: - # Python 3 support - str_class = str - -# backward compatibility for basestring for python < 2.3 -try: - basestring -except NameError: - basestring = str - # Flag for testing debug = False @@ -169,8 +152,8 @@ path ::= [ "path" [:segment]] => ("simple", segment) | [ "path" [+:segments] ] => ("complex", u"resolve(context, u'" + u"', u'".join(segments) + u"')" ) complexarg ::= [ "path" [+:segments] ] => u"resolve(context, u'" + u"', u'".join(segments) + u"')" | [ "subexpr" ["path" :name] [*:arguments] ] => u'resolve_subexpr(helpers, "' + name + '", context' + (u', ' + u', '.join(arguments) if arguments else u'') + u')' - | [ "literalparam" :value ] => {str_class}(value) -arg ::= [ "kwparam" :symbol :a ] => {str_class}(symbol) + '=' + a + | [ "literalparam" :value ] => {str}(value) +arg ::= [ "kwparam" :symbol :a ] => {str}(symbol) + '=' + a | pathseg ::= "/" => '' | "." => '' @@ -178,7 +161,7 @@ pathseg ::= "/" => '' | "this" => '' pathseg ::= :symbol => u''.join(symbol) """ # noqa: E501 -compile_grammar = compile_grammar.format(str_class=str_class.__name__) +compile_grammar = compile_grammar.format(str=str.__name__) class PybarsError(Exception): @@ -190,22 +173,13 @@ class strlist(list): """A quasi-list to let the template code avoid special casing.""" - def __str__(self): # Python 3 + def __str__(self): return ''.join(self) - def __unicode__(self): # Python 2 - return u''.join(self) - def grow(self, thing): """Make the list longer, appending for unicode, extending otherwise.""" - if type(thing) == str_class: + if type(thing) == str: self.append(thing) - - # This will only ever match in Python 2 since str_class is str in - # Python 3. - elif type(thing) == str: - self.append(unicode(thing)) # noqa: F821 undefined name 'unicode' - else: # Recursively expand to a flat list; may deserve a C accelerator at # some point. @@ -238,15 +212,8 @@ def pick(context, name, default=None): try: return context[name] except (KeyError, TypeError, AttributeError): - if isinstance(name, basestring): - try: - exists = hasattr(context, name) - except UnicodeEncodeError: - # Python 2 raises UnicodeEncodeError on non-ASCII strings - pass - else: - if exists: - return getattr(context, name) + if isinstance(name, str) and hasattr(context, name): + return getattr(context, name) if hasattr(context, 'get'): return context.get(name) return default @@ -291,14 +258,9 @@ class Scope: def __len__(self): return len(self.context) - # Added for Python 3 def __str__(self): return str(self.context) - # Only called in Python 2 - def __unicode__(self): - return unicode(self.context) # noqa: F821 undefined name 'unicode' - def resolve(context, *segments): carryover_data = False @@ -357,11 +319,11 @@ def prepare(value, should_escape): return u'' type_ = type(value) if type_ is not strlist: - if type_ is not str_class: + if type_ is not str: if type_ is bool: value = u'true' if value else u'false' else: - value = str_class(value) + value = str(value) if should_escape: value = escape(value) return value @@ -554,10 +516,10 @@ class CodeBuilder: # Ensure the result is a string and not a strlist if len(self.stack) == 0: self._result.grow(u" if called:\n") - self._result.grow(u" result = %s(result)\n" % str_class.__name__) + self._result.grow(u" result = %s(result)\n" % str.__name__) self._result.grow(u" return result\n") - source = str_class(u"".join(lines)) + source = str(u"".join(lines)) self._result = self.stack and self.stack[-1][0] self._locals = self.stack and self.stack[-1][1] @@ -819,7 +781,7 @@ class Compiler: A tuple of (function, source_code) """ - if not isinstance(source, str_class): + if not isinstance(source, str): raise PybarsError("Template source must be a unicode string") source = self.whitespace_control(source) diff --git a/kibot/PyPDF2/pdf.py b/kibot/PyPDF2/pdf.py index 1fab3529..7f3749b7 100644 --- a/kibot/PyPDF2/pdf.py +++ b/kibot/PyPDF2/pdf.py @@ -47,15 +47,8 @@ import struct import sys import uuid from sys import version_info -if version_info < ( 3, 0 ): - from cStringIO import StringIO -else: - from io import StringIO - -if version_info < ( 3, 0 ): - BytesIO = StringIO -else: - from io import BytesIO +from io import StringIO +from io import BytesIO from . import utils import warnings @@ -64,13 +57,7 @@ from .generic import * from .utils import readNonWhitespace, readUntilWhitespace, ConvertFunctionsToVirtualList from .utils import b_, formatWarning, isString, ord_, str_, u_ -if version_info < ( 2, 4 ): - from sets import ImmutableSet as frozenset - -if version_info < ( 2, 5 ): - from md5 import md5 -else: - from hashlib import md5 +from hashlib import md5 import uuid diff --git a/kibot/PyPDF2/utils.py b/kibot/PyPDF2/utils.py index 718a875c..bfea9036 100644 --- a/kibot/PyPDF2/utils.py +++ b/kibot/PyPDF2/utils.py @@ -34,18 +34,12 @@ __author_email__ = "biziqe@mathieu.fenniak.net" import sys -try: - import __builtin__ as builtins -except ImportError: # Py3 - import builtins +xrange_fn = range +_basestring = str - -xrange_fn = getattr(builtins, "xrange", range) -_basestring = getattr(builtins, "basestring", str) - -bytes_type = type(bytes()) # Works the same in Python 2.X and 3.X -string_type = getattr(builtins, "unicode", str) -int_types = (int, long) if sys.version_info[0] < 3 else (int,) +bytes_type = bytes +string_type = str +int_types = (int,) # Make basic type tests more consistent @@ -222,70 +216,51 @@ class PdfStreamError(PdfReadError): pass -if sys.version_info[0] < 3: - def b_(s): - return s -else: - B_CACHE = {} +B_CACHE = {} - def b_(s): - bc = B_CACHE - if s in bc: - return bc[s] - if type(s) == bytes: - return s - else: - r = s.encode('latin-1') - if len(s) < 2: - bc[s] = r - return r +def b_(s): + bc = B_CACHE + if s in bc: + return bc[s] + if type(s) == bytes: + return s + else: + r = s.encode('latin-1') + if len(s) < 2: + bc[s] = r + return r def u_(s): - if sys.version_info[0] < 3: - return unicode(s, 'unicode_escape') - else: - return s + return s def str_(b): - if sys.version_info[0] < 3: - return b + if type(b) == bytes: + return b.decode('latin-1') else: - if type(b) == bytes: - return b.decode('latin-1') - else: - return b + return b def ord_(b): - if sys.version_info[0] < 3 or type(b) == str: + if type(b) == str: return ord(b) else: return b def chr_(c): - if sys.version_info[0] < 3: - return c - else: - return chr(c) + return chr(c) def barray(b): - if sys.version_info[0] < 3: - return b - else: - return bytearray(b) + return bytearray(b) def hexencode(b): - if sys.version_info[0] < 3: - return b.encode('hex') - else: - import codecs - coder = codecs.getencoder('hex_codec') - return coder(b)[0] + import codecs + coder = codecs.getencoder('hex_codec') + return coder(b)[0] def hexStr(num): diff --git a/kibot/kicad/sexpdata.py b/kibot/kicad/sexpdata.py index 786e1d47..dcae7ecc 100644 --- a/kibot/kicad/sexpdata.py +++ b/kibot/kicad/sexpdata.py @@ -94,32 +94,8 @@ class SExpData(Exception): pass -# ** Python 3 compatibility - -try: - unicode - PY3 = False -except NameError: - basestring = unicode = str # Python 3 - PY3 = True - - -def uformat(s, *args, **kwds): - """Alias of ``unicode(s).format(...)``.""" - return tounicode(s).format(*args, **kwds) - - # ** Utility -def tounicode(string): - """ - Decode `string` if it is not unicode. Do nothing in Python 3. - """ - if not isinstance(string, unicode): - string = unicode(string, 'utf-8') - return string - - def return_as(converter): """ Decorator to convert result of a function. @@ -274,7 +250,7 @@ def dump(obj, filelike, **kwds): (a b) """ - filelike.write(unicode(dumps(obj))) + filelike.write(dumps(obj)) def dumps(obj, **kwds): @@ -404,7 +380,7 @@ def tosexp(obj, str_as='string', tuple_as='list', elif tuple_as == 'array': res = Bracket(obj, '[').tosexp(_tosexp) else: - raise ValueError(uformat("tuple_as={0!r} is not valid", tuple_as)) + raise ValueError("tuple_as={0!r} is not valid".format(tuple_as)) indent -= c elif obj is True: # must do this before ``isinstance(obj, int)`` res = true_as @@ -414,13 +390,13 @@ def tosexp(obj, str_as='string', tuple_as='list', res = none_as elif isinstance(obj, (int, float)): res = str(obj) - elif isinstance(obj, basestring): + elif isinstance(obj, str): if str_as == 'symbol': res = obj elif str_as == 'string': res = String(obj).tosexp() else: - raise ValueError(uformat("str_as={0!r} is not valid", str_as)) + raise ValueError("str_as={0!r} is not valid".format(str_as)) elif isinstance(obj, dict): res = _tosexp(dict_to_plist(obj)) elif isinstance(obj, SExpBase): @@ -428,16 +404,16 @@ def tosexp(obj, str_as='string', tuple_as='list', elif isinstance(obj, Sep): res = '\n' + ' '*indent else: - raise TypeError(uformat( + raise TypeError( "Object of type '{0}' cannot be converted by `tosexp`. " - "It's value is '{1!r}'", type(obj), obj)) + "It's value is '{1!r}'".format(type(obj), obj)) return res @return_as(list) def dict_to_plist(obj): for key in obj: - yield Symbol(uformat(":{0}", key)) + yield Symbol(":{0}".format(key)) yield obj[key] @@ -447,7 +423,7 @@ class SExpBase(object): self._val = val def __repr__(self): - return uformat("{0}({1!r})", self.__class__.__name__, self._val) + return "{0}({1!r})".format(self.__class__.__name__, self._val) def __eq__(self, other): if isinstance(other, self.__class__): @@ -471,7 +447,7 @@ class SExpBase(object): def quote(cls, string): for (s, q) in cls._lisp_quoted_specials: string = string.replace(s, q) - return tounicode(string) + return string @classmethod def unquote(cls, string): @@ -504,13 +480,13 @@ class String(SExpBase): _lisp_quoted_to_raw = {q: r for (r, q) in _lisp_quoted_specials} def tosexp(self, tosexp=None): - return uformat('"{0}"', self.quote(self._val)) + return '"{0}"'.format(self.quote(self._val)) class Quoted(SExpBase): def tosexp(self, tosexp=tosexp): - return uformat("'{0}", tosexp(self._val)) + return "'{0}".format(tosexp(self._val)) class Bracket(SExpBase): @@ -521,8 +497,7 @@ class Bracket(SExpBase): self._bra = bra def __repr__(self): - return uformat("{0}({1!r}, {2!r})", - self.__class__.__name__, self._val, self._bra) + return "{0}({1!r}, {2!r})".format(self.__class__.__name__, self._val, self._bra) def tosexp(self, tosexp=tosexp): bra = self._bra @@ -537,7 +512,7 @@ class Bracket(SExpBase): # Avoid spaces at the end of lines c = c.rstrip(' ') c += v - return uformat("{0}{1}{2}", bra, c, ke) + return "{0}{1}{2}".format(bra, c, ke) def bracket(val, bra): @@ -550,19 +525,19 @@ def bracket(val, bra): class ExpectClosingBracket(Exception): def __init__(self, got, expect): - super(ExpectClosingBracket, self).__init__(uformat( + super(ExpectClosingBracket, self).__init__( "Not enough closing brackets. " "Expected {0!r} to be the last letter in the sexp. " - "Got: {1!r}", expect, got)) + "Got: {1!r}".format(expect, got)) class ExpectNothing(Exception): def __init__(self, got): - super(ExpectNothing, self).__init__(uformat( + super(ExpectNothing, self).__init__( "Too many closing brackets. " "Expected no character left in the sexp. " - "Got: {0!r}", got)) + "Got: {0!r}".format(got)) class Parser(object):