Auto optimize imports

* Remove unused
* Rearrange imports (module > partial > project)
This commit is contained in:
Rotzbua 2022-12-31 15:52:55 +01:00 committed by Florian Festi
parent 20032e50be
commit ad38bb1eaf
60 changed files with 102 additions and 102 deletions

View File

@ -14,27 +14,29 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import math
import sys
import argparse import argparse
from argparse import ArgumentParser
import re
from functools import wraps
from xml.sax.saxutils import quoteattr
from contextlib import contextmanager
import copy import copy
import math
import random
import re
import sys
from argparse import ArgumentParser
from contextlib import contextmanager
from functools import wraps
from shlex import quote from shlex import quote
from xml.sax.saxutils import quoteattr
from shapely.geometry import * from shapely.geometry import *
from shapely.ops import split from shapely.ops import split
import random
from boxes import edges from boxes import edges
from boxes import formats from boxes import formats
from boxes import svgutil
from boxes import gears from boxes import gears
from boxes import pulley
from boxes import parts from boxes import parts
from boxes.Color import * from boxes import pulley
from boxes import svgutil
from boxes.Color import *
### Helpers ### Helpers

View File

@ -1,10 +1,11 @@
import math
import datetime import datetime
from affine import Affine import math
from boxes.extents import Extents
from boxes.Color import Color as bColor
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
from affine import Affine
from boxes.extents import Extents
EPS = 1e-4 EPS = 1e-4
PADDING = 10 PADDING = 10

View File

@ -14,14 +14,15 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import math
import inspect
import argparse
import re
import abc import abc
import argparse
import inspect
import math
import re
from boxes import gears from boxes import gears
def argparseSections(s): def argparseSections(s):
""" """
Parse sections parameter Parse sections parameter

View File

@ -15,12 +15,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import subprocess
import tempfile
import os import os
import shutil import shutil
import subprocess
import tempfile
from boxes.drawing import SVGSurface, PSSurface, LBRN2Surface, Context from boxes.drawing import SVGSurface, PSSurface, LBRN2Surface, Context
class Formats: class Formats:
pstoedit_candidates = ["/usr/bin/pstoedit", "pstoedit", "pstoedit.exe"] pstoedit_candidates = ["/usr/bin/pstoedit", "pstoedit", "pstoedit.exe"]

View File

@ -40,8 +40,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Fixed https://github.com/jnweiger/inkscape-gears-dev Fixed https://github.com/jnweiger/inkscape-gears-dev
''' '''
from os import devnull # for debugging
from math import pi, cos, sin, tan, radians, degrees, ceil, asin, acos, sqrt from math import pi, cos, sin, tan, radians, degrees, ceil, asin, acos, sqrt
from os import devnull # for debugging
two_pi = 2 * pi two_pi = 2 * pi
import argparse import argparse
from boxes.vectors import kerf, vdiff, vlength from boxes.vectors import kerf, vdiff, vlength

View File

@ -1,6 +1,7 @@
import pkgutil
import inspect
import importlib import importlib
import inspect
import pkgutil
import boxes import boxes
ui_groups_by_name = {} ui_groups_by_name = {}

View File

@ -16,6 +16,7 @@
import math import math
from functools import partial from functools import partial
from boxes import Boxes, edges from boxes import Boxes, edges
from .dividertray import ( from .dividertray import (
SlotDescriptionsGenerator, SlotDescriptionsGenerator,

View File

@ -15,8 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
import copy
class AngledBox(Boxes): class AngledBox(Boxes):
"""Box with both ends cornered""" """Box with both ends cornered"""

View File

@ -1,9 +1,6 @@
"""Generator for a split atreus keyboard.""" """Generator for a split atreus keyboard."""
from copy import deepcopy from boxes import Boxes, restore
from boxes import Boxes, Color, holeCol, restore, boolarg
from boxes.edges import FingerJointSettings
from .keyboard import Keyboard from .keyboard import Keyboard

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math, copy
class BinFrontEdge(edges.BaseEdge): class BinFrontEdge(edges.BaseEdge):
char = "B" char = "B"

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class FrontEdge(edges.BaseEdge): class FrontEdge(edges.BaseEdge):
char = "a" char = "a"

View File

@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import math import math
from boxes import Boxes, boolarg from boxes import Boxes, boolarg

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Display(Boxes): class Display(Boxes):
"""Diplay for flyers or leaflets""" """Diplay for flyers or leaflets"""

View File

@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from functools import partial
from boxes import Boxes, edges, boolarg
import math import math
from functools import partial
from boxes import Boxes, edges, boolarg
class NotchSettings(edges.Settings): class NotchSettings(edges.Settings):

View File

@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import boxes
import math import math
import boxes
class DoubleFlexDoorBox(boxes.Boxes): class DoubleFlexDoorBox(boxes.Boxes):
"""Box with two part lid with living hinges and round corners""" """Box with two part lid with living hinges and round corners"""

View File

@ -14,8 +14,9 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
import boxes import boxes
from boxes import *
class DrillStand(Boxes): class DrillStand(Boxes):
"""Box for drills with each compartment of a different height""" """Box for drills with each compartment of a different height"""

View File

@ -14,11 +14,11 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from shapely.geometry import *
import random
import time import time
from boxes import *
class FillTest(Boxes): # Change class name! class FillTest(Boxes): # Change class name!
"""Piece for testing different settings for hole filling""" """Piece for testing different settings for hole filling"""

View File

@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import boxes
import math import math
import boxes
class FlexBox(boxes.Boxes): class FlexBox(boxes.Boxes):
"""Box with living hinge and round corners""" """Box with living hinge and round corners"""

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class FlexBox2(Boxes): class FlexBox2(Boxes):
"""Box with living hinge and top corners rounded""" """Box with living hinge and top corners rounded"""

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class FlexBox3(Boxes): class FlexBox3(Boxes):

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class FlexBox4(Boxes): class FlexBox4(Boxes):

View File

@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import boxes
import math import math
import boxes
class FlexBox5(boxes.Boxes): class FlexBox5(boxes.Boxes):
"""Box with living hinge and round corners""" """Box with living hinge and round corners"""

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Folder(Boxes): class Folder(Boxes):

View File

@ -15,9 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
from shapely.geometry import *
import random
import time
class HolePattern(Boxes): class HolePattern(Boxes):
"""Generate hole patterns in different simple shapes""" """Generate hole patterns in different simple shapes"""

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Hook(Boxes): class Hook(Boxes):
"""A hook wit a rectangular mouth to mount at the wall""" """A hook wit a rectangular mouth to mount at the wall"""

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import random
class JigsawPuzzle(Boxes): # change class name here and below class JigsawPuzzle(Boxes): # change class name here and below

View File

@ -14,9 +14,11 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import re
import argparse import argparse
from boxes import Boxes, boolarg import re
from boxes import boolarg
class Keyboard: class Keyboard:
""" """

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
""" """
22x7.5x7cm 22x7.5x7cm

View File

@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from math import * from math import *
from boxes import *
class LaptopStand(Boxes): # Change class name! class LaptopStand(Boxes): # Change class name!
"""A simple X shaped frame to support a laptop on a given angle""" """A simple X shaped frame to support a laptop on a given angle"""

View File

@ -13,7 +13,6 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import decimal
from boxes import Boxes, edges, boolarg from boxes import Boxes, edges, boolarg

View File

@ -17,8 +17,9 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from math import *
from boxes import * from boxes import *
from math import *
pitches = ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#' ,'b'] pitches = ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#' ,'b']

View File

@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import math import math
from boxes import Boxes from boxes import Boxes

View File

@ -16,6 +16,7 @@
import math import math
from functools import partial from functools import partial
from boxes import Boxes, edges from boxes import Boxes, edges

View File

@ -15,7 +15,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Planetary(Boxes): class Planetary(Boxes):

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Planetary2(Boxes): class Planetary2(Boxes):

View File

@ -15,9 +15,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
from boxes.edges import FingerJointBase, FingerJointEdge from boxes.edges import FingerJointEdge
from math import sin, pi
class UnevenFingerJointEdge(FingerJointEdge): class UnevenFingerJointEdge(FingerJointEdge):
"""Uneven finger joint edge """ """Uneven finger joint edge """

View File

@ -16,7 +16,6 @@
from boxes import * from boxes import *
from boxes import pulley from boxes import pulley
import math
class Pulley(Boxes): class Pulley(Boxes):

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.generators.rack19box import Rack19Box from boxes.generators.rack19box import Rack19Box
class Rack10Box(Rack19Box): class Rack10Box(Rack19Box):

View File

@ -1,7 +1,7 @@
"""Half 19inch rack unit for musical equipment.""" """Half 19inch rack unit for musical equipment."""
from boxes import Boxes from boxes import Boxes
from boxes.edges import Edge
class Rack19HalfWidth(Boxes): class Rack19HalfWidth(Boxes):
"""Half width 19inch rack unit for musical equipment.""" """Half width 19inch rack unit for musical equipment."""

View File

@ -16,7 +16,7 @@
from boxes import * from boxes import *
from boxes.generators.bayonetbox import BayonetBox from boxes.generators.bayonetbox import BayonetBox
import copy
class RegularBox(BayonetBox): class RegularBox(BayonetBox):
"""Box with regular polygon as base""" """Box with regular polygon as base"""

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import copy
class SlotEdge(edges.Edge): class SlotEdge(edges.Edge):

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class Stachel(Boxes): class Stachel(Boxes):
"""Bass Recorder Endpin""" """Bass Recorder Endpin"""

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
import math
class ShadyEdge(edges.BaseEdge): class ShadyEdge(edges.BaseEdge):
char = "s" char = "s"

View File

@ -14,10 +14,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys, re
from boxes import *
import boxes import boxes
import argparse from boxes import *
class TrayLayout(Boxes): class TrayLayout(Boxes):

View File

@ -16,7 +16,7 @@
from boxes import * from boxes import *
from boxes.lids import _TopEdge, _ChestLid from boxes.lids import _TopEdge, _ChestLid
import math
class UBox(_TopEdge, _ChestLid): class UBox(_TopEdge, _ChestLid):
"""Box various options for different stypes and lids""" """Box various options for different stypes and lids"""

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
class WallCaliper(_WallMountedBox): class WallCaliper(_WallMountedBox):

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
class WallConsole(_WallMountedBox): class WallConsole(_WallMountedBox):

View File

@ -15,8 +15,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import * from boxes import *
from .drillstand import DrillStand
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
from .drillstand import DrillStand
class WallDrillBox(DrillStand, _WallMountedBox): class WallDrillBox(DrillStand, _WallMountedBox):
"""Box for drills with each compartment with a different height""" """Box for drills with each compartment with a different height"""

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
class WallEdges(_WallMountedBox): class WallEdges(_WallMountedBox):

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
class WallPlaneHolder(_WallMountedBox): class WallPlaneHolder(_WallMountedBox):

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from boxes import *
from boxes.walledges import _WallMountedBox from boxes.walledges import _WallMountedBox
class WallStairs(_WallMountedBox): class WallStairs(_WallMountedBox):

View File

@ -1,6 +1,8 @@
from math import * from math import *
from boxes import vectors from boxes import vectors
def arcOnCircle(spanning_angle, outgoing_angle, r=1.0): def arcOnCircle(spanning_angle, outgoing_angle, r=1.0):
angle = spanning_angle + 2 * outgoing_angle angle = spanning_angle + 2 * outgoing_angle
radius = r * sin(radians(0.5 * spanning_angle)) / sin(radians(180 - outgoing_angle - 0.5 * spanning_angle)) radius = r * sin(radians(0.5 * spanning_angle)) / sin(radians(180 - outgoing_angle - 0.5 * spanning_angle))

View File

@ -12,6 +12,7 @@
// pulley diameter checked and modelled from data at http://www.sdp-si.com/D265/HTML/D265T016.html // pulley diameter checked and modelled from data at http://www.sdp-si.com/D265/HTML/D265T016.html
""" """
from math import * from math import *
from boxes.vectors import * from boxes.vectors import *

View File

@ -1,5 +1,3 @@
import boxes
__all__ = [ __all__ = [
"RobotArg", "RobotArg",
"RobotArmMM", "RobotArmMM",

View File

@ -1,6 +1,8 @@
import boxes.vectors
import math import math
import boxes.vectors
class EyeEdge(boxes.edges.FingerHoleEdge): class EyeEdge(boxes.edges.FingerHoleEdge):
char = "m" char = "m"

View File

@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import re, datetime import re
from xml.etree import ElementTree from xml.etree import ElementTree
ElementTree.register_namespace("","http://www.w3.org/2000/svg") ElementTree.register_namespace("","http://www.w3.org/2000/svg")
@ -76,7 +76,6 @@ def svgMerge(box, inkscape, output):
off_y = (src_view[1]+src_view[3]) * -scale_y + dest_height * scale_y off_y = (src_view[1]+src_view[3]) * -scale_y + dest_height * scale_y
for el in src_tree.getroot(): for el in src_tree.getroot():
import sys
dest_root.append(el) dest_root.append(el)
if el.tag.endswith("g"): if el.tag.endswith("g"):
el.set("transform", "matrix(%f,0,0,%f, %f, %f)" % ( el.set("transform", "matrix(%f,0,0,%f, %f, %f)" % (

View File

@ -1,7 +1,9 @@
from .edges import Settings, BaseEdge
from boxes import Boxes, edges
import math import math
from boxes import Boxes, edges
from .edges import Settings, BaseEdge
class _WallMountedBox(Boxes): class _WallMountedBox(Boxes):
ui_group = "WallMounted" ui_group = "WallMounted"

View File

@ -14,11 +14,10 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import argparse import argparse
import os.path import os.path
import sys
from xml.sax.saxutils import quoteattr from xml.sax.saxutils import quoteattr
from urllib.parse import unquote_plus
try: try:
import boxes.generators import boxes.generators

View File

@ -14,9 +14,9 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os.path
import argparse import argparse
import os.path
import sys
try: try:
import boxes.generators import boxes.generators

View File

@ -14,25 +14,23 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import argparse import argparse
import html
import tempfile
import os.path
import threading
import time
import codecs
import mimetypes
import re
import markdown
import gettext import gettext
import glob import glob
import html
import mimetypes
import os.path
import re
import sys
import tempfile
import threading
import time
import traceback import traceback
from urllib.parse import unquote_plus, quote
from urllib.parse import parse_qs from urllib.parse import parse_qs
from wsgiref.util import setup_testing_defaults from urllib.parse import unquote_plus, quote
from wsgiref.simple_server import make_server from wsgiref.simple_server import make_server
import wsgiref.util
import markdown
try: try:
import boxes.generators import boxes.generators