- info = self._zip_info(f)
- approach = self._zip_segment(f, info, 0)
- retract = self._zip_segment(f, info, 1)
- assert approach.info['name'] == 'approach', approach.info['name']
- assert retract.info['name'] == 'retract', retract.info['name']
- return ([approach, retract],
- self._zip_translate_params(info, retract.info['raw info']))
- finally:
- if f != None:
- f.close()
+ zip_info = self._zip_info(f)
+ segments = []
+ for i in range(len([p for p in f.namelist()
+ if p.endswith('segment-header.properties')])):
+ segments.append(self._zip_segment(f, path, info, zip_info, i))
+ if zip_info['file-format-version'] not in ['0.5']:
+ raise NotImplementedError(
+ 'JPK file version %s not supported (yet).'
+ % zip_info['file-format-version'])
+ for name in ['approach', 'retract']:
+ if len([s for s in segments if s.info['name'] == name]) == 0:
+ raise ValueError(
+ 'No segment for %s in %s, only %s'
+ % (name, path, [s.info['name'] for s in segments]))
+ curve_info = self._zip_translate_params(zip_info,
+ segments[0].info['raw info'])
+ for segment in segments:
+ segment.info['spring constant (N/m)'] = \
+ curve_info['spring constant (N/m)']
+ return (segments, curve_info)