Allow file-like object as input to Documents ctor and svg2paths function
parent
19df25b99b
commit
ce43c75cd8
|
@ -224,7 +224,7 @@ def flattened_paths_from_group(group_to_flatten, root, recursive=True,
|
|||
|
||||
|
||||
class Document:
|
||||
def __init__(self, filepath=None):
|
||||
def __init__(self, svg_file_name_or_file=None):
|
||||
"""A container for a DOM-style SVG document.
|
||||
|
||||
The `Document` class provides a simple interface to modify and analyze
|
||||
|
@ -235,19 +235,25 @@ class Document:
|
|||
The output Path objects will be transformed based on their parent groups.
|
||||
|
||||
Args:
|
||||
filepath (str): The filepath of the DOM-style object.
|
||||
svg_file_name_or_file (str or file-like): The filepath of the
|
||||
DOM-style object or a file-like object containing it.
|
||||
"""
|
||||
self.original_filepath = None
|
||||
|
||||
# remember location of original svg file
|
||||
self.original_filepath = filepath
|
||||
if filepath is not None and os.path.dirname(filepath) == '':
|
||||
self.original_filepath = os.path.join(os.getcwd(), filepath)
|
||||
# strings are interpreted as file location everything else is treated as
|
||||
# file-like object and passed to the xml parser directly
|
||||
if isinstance(svg_file_name_or_file, str):
|
||||
# remember location of original svg file if any
|
||||
self.original_filepath = svg_file_name_or_file
|
||||
if os.path.dirname(svg_file_name_or_file) == '':
|
||||
self.original_filepath = os.path.join(
|
||||
os.getcwd(), svg_file_name_or_file)
|
||||
|
||||
if filepath is None:
|
||||
if svg_file_name_or_file is None:
|
||||
self.tree = etree.ElementTree(Element('svg'))
|
||||
else:
|
||||
# parse svg to ElementTree object
|
||||
self.tree = etree.parse(filepath)
|
||||
self.tree = etree.parse(svg_file_name_or_file)
|
||||
|
||||
self.root = self.tree.getroot()
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ def line2pathd(l):
|
|||
)
|
||||
|
||||
|
||||
def svg2paths(svg_file_location,
|
||||
def svg2paths(svg_file_name_or_file,
|
||||
return_svg_attributes=False,
|
||||
convert_circles_to_paths=True,
|
||||
convert_ellipses_to_paths=True,
|
||||
|
@ -144,7 +144,9 @@ def svg2paths(svg_file_location,
|
|||
SVG Path, Line, Polyline, Polygon, Circle, and Ellipse elements.
|
||||
|
||||
Args:
|
||||
svg_file_location (string): the location of the svg file
|
||||
svg_file_name_or_file (string or file-like object): the location of the
|
||||
svg file on disk or a file-like object containing the content of a
|
||||
svg file
|
||||
return_svg_attributes (bool): Set to True and a dictionary of
|
||||
svg-attributes will be extracted and returned. See also the
|
||||
`svg2paths2()` function.
|
||||
|
@ -168,10 +170,14 @@ def svg2paths(svg_file_location,
|
|||
list: The list of corresponding path attribute dictionaries.
|
||||
dict (optional): A dictionary of svg-attributes (see `svg2paths2()`).
|
||||
"""
|
||||
if os_path.dirname(svg_file_location) == '':
|
||||
svg_file_location = os_path.join(getcwd(), svg_file_location)
|
||||
# strings are interpreted as file location everything else is treated as
|
||||
# file-like object and passed to the xml parser directly
|
||||
if isinstance(svg_file_name_or_file, str):
|
||||
if os_path.dirname(svg_file_name_or_file) == '':
|
||||
svg_file_name_or_file = os_path.join(
|
||||
getcwd(), svg_file_name_or_file)
|
||||
|
||||
doc = parse(svg_file_location)
|
||||
doc = parse(svg_file_name_or_file)
|
||||
|
||||
def dom2dict(element):
|
||||
"""Converts DOM elements to dictionaries of attributes."""
|
||||
|
@ -230,7 +236,7 @@ def svg2paths(svg_file_location,
|
|||
return path_list, attribute_dictionary_list
|
||||
|
||||
|
||||
def svg2paths2(svg_file_location,
|
||||
def svg2paths2(svg_file_name_or_file,
|
||||
return_svg_attributes=True,
|
||||
convert_circles_to_paths=True,
|
||||
convert_ellipses_to_paths=True,
|
||||
|
@ -241,7 +247,7 @@ def svg2paths2(svg_file_location,
|
|||
"""Convenience function; identical to svg2paths() except that
|
||||
return_svg_attributes=True by default. See svg2paths() docstring for more
|
||||
info."""
|
||||
return svg2paths(svg_file_location=svg_file_location,
|
||||
return svg2paths(svg_file_name_or_file=svg_file_name_or_file,
|
||||
return_svg_attributes=return_svg_attributes,
|
||||
convert_circles_to_paths=convert_circles_to_paths,
|
||||
convert_ellipses_to_paths=convert_ellipses_to_paths,
|
||||
|
|
Loading…
Reference in New Issue