def _get_metadata_from_file()

in index-tool/migrationtools/documentdb_index_tool.py [0:0]


    def _get_metadata_from_file(self, filepath):
        """
        Given a path to a metadata file, return the JSON data structure parsed
        from the contents, formatted.
        """
        with open(filepath, 'rt') as metadata_file:
            logging.debug("Getting metadata from file: %s", filepath)

            file_metadata = json.load(metadata_file)
            collection_metadata = AutovivifyDict()
            indexes = file_metadata.get(self.INDEXES, None)

            # every collection should have at least the _id_ index. If no indexes are listed, the
            # metadata document is malformed and we should error out
            if indexes is None:
                raise Exception(
                    "Malformed metadata document {} has no indexes.".format(
                        filepath))

            if (len(indexes) == 0):
                # no indexes for this collection
                db_name = os.path.basename(os.path.dirname(filepath))
                thisFileName = os.path.basename(filepath)
                collection_name = thisFileName[0:(len(thisFileName)-len(self.METADATA_FILE_SUFFIX_PATTERN)-1)]
            else:
                first_index = indexes[0]
                if self.NAMESPACE in first_index:
                    first_index_namespace = first_index[self.NAMESPACE]
                    (db_name, collection_name) = first_index_namespace.split('.', 1)
                else:
                    db_name = os.path.basename(os.path.dirname(filepath))
                    thisFileName = os.path.basename(filepath)
                    collection_name = thisFileName[0:(len(thisFileName)-len(self.METADATA_FILE_SUFFIX_PATTERN)-1)]

            collection_metadata[self.FILE_PATH] = filepath

            for index in indexes:
                index_name = index.pop(self.INDEX_NAME)
                collection_metadata[self.INDEXES][index_name] = index

                if self.OPTIONS in file_metadata:
                    collection_metadata[self.OPTIONS] = file_metadata[
                        self.OPTIONS]

            return db_name, collection_name, collection_metadata