From dd63b169f177389602e17bc6ced53bd0f1ba0de3 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Sat, 10 Oct 2015 16:51:21 -0400 Subject: Allow files to be read from strings per #37 Adds a loads() method to the top level module which generates a GerberFile or ExcellonFile from a string --- gerber/common.py | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'gerber/common.py') diff --git a/gerber/common.py b/gerber/common.py index 78da2cd..50ba728 100644 --- a/gerber/common.py +++ b/gerber/common.py @@ -15,6 +15,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +from . import rs274x +from . import excellon +from .utils import detect_file_format + def read(filename): """ Read a gerber or excellon file and return a representative object. @@ -30,10 +34,9 @@ def read(filename): CncFile object representing the file, either GerberFile or ExcellonFile. Returns None if file is not an Excellon or Gerber file. """ - from . import rs274x - from . import excellon - from .utils import detect_file_format - fmt = detect_file_format(filename) + with open(filename, 'r') as f: + data = f.read() + fmt = detect_file_format(data) if fmt == 'rs274x': return rs274x.read(filename) elif fmt == 'excellon': @@ -41,3 +44,28 @@ def read(filename): else: raise TypeError('Unable to detect file format') +def loads(data): + """ Read gerber or excellon file contents from a string and return a + representative object. + + Parameters + ---------- + data : string + gerber or excellon file contents as a string. + + Returns + ------- + file : CncFile subclass + CncFile object representing the file, either GerberFile or + ExcellonFile. Returns None if file is not an Excellon or Gerber file. + """ + + fmt = detect_file_format(data) + if fmt == 'rs274x': + return rs274x.loads(data) + elif fmt == 'excellon': + return excellon.loads(data) + else: + raise TypeError('Unable to detect file format') + + -- cgit