def open_node_container(zip_path): ''' Opens a zip file containing nodes and yields (flight_pk, nodes, attrs) tuples. TODO: Do not compress to the current directory. :param zip_path: Path of node container zip file. :type zip_path: str ''' with zipfile.ZipFile(zip_path, 'r') as zip_file: filenames = set(zip_file.namelist()) flight_filenames = defaultdict(dict) for filename in filenames: match = re.match('^(?P<flight_pk>\d+) - (?P<node_name>[-\w\d\s\*()%\[\]]+).nod$', filename) if not match: if not re.match('^(?P<flight_pk>\d+)\.json$', filename): print("Skipping invalid filename '%s'" % filename) continue groupdict = match.groupdict() flight_filenames[groupdict['flight_pk']][groupdict['node_name']] = filename for flight_pk, node_filenames in six.iteritems(flight_filenames): nodes = {} for node_name, filename in six.iteritems(node_filenames): nodes[node_name] = loads(zip_file.read(filename)) json_filename = '%s.json' % flight_pk attrs = simplejson.loads(zip_file.read(json_filename)) if json_filename in filenames else {} yield flight_pk, nodes, attrs
def open_node_container(zip_path): ''' Opens a zip file containing nodes and yields (flight_pk, nodes, attrs) tuples. TODO: Do not compress to the current directory. :param zip_path: Path of node container zip file. :type zip_path: str ''' with zipfile.ZipFile(zip_path, 'r') as zip_file: filenames = set(zip_file.namelist()) flight_filenames = defaultdict(dict) for filename in filenames: match = re.match('^(?P<flight_pk>\d+) - (?P<node_name>[\w\d\s\*()]+).nod$', filename) if not match: if not re.match('^(?P<flight_pk>\d+)\.json$', filename): print "Skipping invalid filename '%s'" % filename continue groupdict = match.groupdict() flight_filenames[groupdict['flight_pk']][groupdict['node_name']] = filename for flight_pk, node_filenames in flight_filenames.iteritems(): nodes = {} for node_name, filename in node_filenames.iteritems(): nodes[node_name] = loads(zip_file.read(filename)) json_filename = '%s.json' % flight_pk attrs = simplejson.loads(zip_file.read(json_filename)) if json_filename in filenames else {} yield flight_pk, nodes, attrs
def open_node_container(zip_path): ''' Opens a zip file containing nodes. TODO: Do not compress to the current directory. ''' with zipfile.ZipFile(zip_path, 'r') as zip_file: filenames = zip_file.namelist() flight_filenames = defaultdict(dict) for filename in filenames: match = re.match('^(?P<flight_pk>\d+) - (?P<node_name>[\w\d\s()]+).nod$', filename) if not match: print "Skipping invalid filename '%s'" % filename continue groupdict = match.groupdict() flight_filenames[groupdict['flight_pk']][groupdict['node_name']] = filename for flight_pk, node_filenames in flight_filenames.iteritems(): nodes = {} for node_name, filename in node_filenames.iteritems(): nodes[node_name] = loads(zip_file.read(filename)) yield flight_pk, nodes