コード例 #1
0
    async def fetch_all_files_async(self, folder_corpus_path: str) -> List[str]:
        formatted_corpus_path = self._format_corpus_path(folder_corpus_path)
        if formatted_corpus_path is None:
            return None

        result = []
        if formatted_corpus_path == '/' :
            result.append(self.DATABASE_MANIFEST)
            return result;

        if not formatted_corpus_path.endswith('/') :
            formatted_corpus_path = formatted_corpus_path + '/'

        formatted_corpus_path = StringUtils.trim_start(formatted_corpus_path, '/')
        paths = formatted_corpus_path.split('/')
        # paths[0]: databasename
        # paths[1]: empty as path ends with /
        if len(paths) != 2:
            raise Exception('Syms adapter: Conversion from corpus path {folderCorpusPath} to adpater is failed. Path must be in format : <databasename>/.')

        url = '{}/{}/tables?{}'.format(self._base_uri, paths[0], self.API_VERSION)
        continuation_token = None
        results = []

        while True:
            if continuation_token is None:
                request = self._build_request('{}'.format(url), 'GET')
            else:
                request = self._build_request('{}?continuation={}'.format(url, continuation_token), 'GET')

            cdm_response = await self._http_client._send_async(request, self.wait_time_callback, self.ctx)

            if cdm_response.status_code == HTTPStatus.OK:
                continuation_token = cdm_response.response_headers.get(self._http_xms_continuation)
                data = json.loads(cdm_response.content)
                for path in data['items']:
                    results.append(path['name'] + '.cdm.json')

            if continuation_token is None:
                break

        return results
コード例 #2
0
    def create_adapter_path(self, corpus_path: str) -> str:
        formatted_corpus_path = self._format_corpus_path(corpus_path)
        if formatted_corpus_path is not None:
            if formatted_corpus_path == '/':
                return '{}?{}'.format(self._base_uri, self.API_VERSION)
            if formatted_corpus_path == '/' + self.DATABASE_MANIFEST or formatted_corpus_path == self.DATABASE_MANIFEST:
                return '{}?{}'.format(self._base_uri, self.API_VERSION)

            formatted_corpus_path = StringUtils.trim_start(formatted_corpus_path, '/')
            paths = formatted_corpus_path.split('/')
            if len(paths) == 2: # 2 level is supported currently
                # paths[0]: databasename
                # paths[1]: filename
                if paths[1].endswith('.manifest.cdm.json'):
                     return '{}/{}/?{}'.format(self._base_uri, paths[0], self.API_VERSION)
                if paths[1].endswith('.cdm.json'):
                    return '{}/{}/tables/{}?{}'.format(self._base_uri, paths[0], paths[1].replace('.cdm.json', ''), self.API_VERSION)
                else:
                    raise Exception('Syms adapter: Failed to convert to adapter path from corpus path. Invalid corpus path :' + corpus_path + '. Supported file format are manifest.cdm.json and .cdm.json')
            elif len(paths) == 3: # 3 level is supported for relationship and entitydefinitions
                # paths[0]: database name
                # paths[1]: filename
                if paths[1].endswith('.manifest.cdm.json') and paths[2] == 'relationships':
                    return '{}/{}/relationships?{}'.format(self._base_uri, paths[0], self.API_VERSION)
                elif paths[1].endswith('.manifest.cdm.json') and paths[2] == 'entitydefinition':
                    return '{}/{}/tables?{}'.format(self._base_uri, paths[0], self.API_VERSION)
                else:
                    raise Exception('Syms adapter: Failed to convert to adapter path from corpus path' + corpus_path + '. corpus path must be in following form: /<databasename>/<filename>.manifest.cdm.json/relationships or /<databasename>/<filename>.manifest.cdm.json/entitydefinition.')
            elif len(paths) == 4: # 4 level is supported for relationship
                # paths[0]: databasename
                # paths[1]: filename
                if paths[1].endswith('.manifest.cdm.json') and paths[2] == 'relationships':
                    return '{}/{}/relationships/{}?{}'.format(self._base_uri, paths[0], paths[3], self.API_VERSION)
                else:
                    raise Exception('Syms adapter: Failed to convert to adapter path from corpus path' + corpus_path + '. + Corpus path must be in following form: /<databasename>/<filename>.manifest.cdm.json/relationships/<relationshipname>.')

            else:
                raise Exception('Syms adapter: Failed to convert to adapter path from corpus path' + corpus_path + '. Corpus path must be in following form: /<databasename>/<filename>.manifest.cdm.json/relationships/<relationshipname>, /<databasename>/<filename>.manifest.cdm.json/relationships or /<databasename>/<filename>.manifest.cdm.json/entitydefinition>.')
        return None