You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
generate_netlist(**kwargs) method of skidl.Circuit.Circuit instance
Return a netlist and also write it to a file/stream.
Args:
file_: Either a file object that can be written to, or a string
containing a file name, or None.
I think that it should be possible to use StringIO, instead I'm getting: AttributeError: '_io.StringIO' object has no attribute 'mode'
To Reproduce
aws:skidl/ (master) $ python
Python 3.9.1 (default, Dec 13 2020, 11:55:53)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from skidl import *
WARNING: KICAD_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched.
>>> import sys
>>> generate_netlist(file_=sys.stdout)
No errors or warnings found during netlist generation.
(export (version D)
(design
(source "/home/aws/git/skidl/skidl/Circuit.py")
(date "01/15/2021 10:54 PM")
(tool "SKiDL (0.0.30)"))
(components)
(nets)
)
'(export (version D)\n (design\n (source "/home/aws/git/skidl/skidl/Circuit.py")\n (date "01/15/2021 10:54 PM")\n (tool "SKiDL (0.0.30)"))\n (components)\n (nets)\n)\n'
>>> import io
>>> output = io.StringIO()
>>> generate_netlist(file_=output)
No errors or warnings found during netlist generation.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/aws/git/skidl/skidl/Circuit.py", line 445, in generate_netlist
with opened(file_ or (get_script_name() + ".net"), "w") as f:
File "/usr/lib/python3.9/contextlib.py", line 117, in __enter__
return next(self.gen)
File "/home/aws/git/skidl/skidl/utilities.py", line 732, in opened
if mode.replace("+", "") == f_or_fn.mode.replace("+", ""):
AttributeError: '_io.StringIO' object has no attribute 'mode'
Expected behavior
Using StringIO should be possible:
aws:skidl/ (master✗) $ python
Python 3.9.1 (default, Dec 13 2020, 11:55:53)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from skidl import *
WARNING: KICAD_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched.
>>> import io
>>> output = io.StringIO()
>>> generate_netlist(file_=output)
No errors or warnings found during netlist generation.
'(export (version D)\n (design\n (source "/home/aws/git/skidl/skidl/Circuit.py")\n (date "01/15/2021 10:58 PM")\n (tool "SKiDL (0.0.30)"))\n (components)\n (nets)\n)\n'
>>> print(output.getvalue())
(export (version D)
(design
(source "/home/aws/git/skidl/skidl/Circuit.py")
(date "01/15/2021 10:58 PM")
(tool "SKiDL (0.0.30)"))
(components)
(nets)
)
Although this is probably not a solution I did something like this in order to get expected behavior presented above (and didn't analyze this any further):
diff --git a/skidl/utilities.py b/skidl/utilities.py
index f175ef3..083b3e3 100644
--- a/skidl/utilities.py+++ b/skidl/utilities.py@@ -729,13 +729,7 @@ def opened(f_or_fn, mode):
with open(f_or_fn, mode, encoding="utf-8") as f:
yield f
elif hasattr(f_or_fn, "fileno"):
- if mode.replace("+", "") == f_or_fn.mode.replace("+", ""):- # same mode, can reuse file handle- yield f_or_fn- else:- # open in new mode- with os.fdopen(f_or_fn.fileno(), mode) as f:- yield f+ yield f_or_fn
else:
raise TypeError(
"argument must be a filename or a file-like object (is: {})".format(
Desktop (please complete the following information):
on linux
Python version Python 3.9.1
SKiDL version 0.0.30
The text was updated successfully, but these errors were encountered:
Describe the bug
According to this description:
I think that it should be possible to use
StringIO
, instead I'm getting:AttributeError: '_io.StringIO' object has no attribute 'mode'
To Reproduce
Expected behavior
Using
StringIO
should be possible:Although this is probably not a solution I did something like this in order to get expected behavior presented above (and didn't analyze this any further):
Desktop (please complete the following information):
Python 3.9.1
0.0.30
The text was updated successfully, but these errors were encountered: