| 1 |
- {"nodes": [{"id": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "label": "storage.py", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L1"}, {"id": "core_storage_guess_preview_content_type", "label": "_guess_preview_content_type()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L34"}, {"id": "core_storage_convert_heic_to_jpeg", "label": "convert_heic_to_jpeg()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L61"}, {"id": "core_storage_process_image_content", "label": "process_image_content()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L76"}, {"id": "core_storage_basestorage", "label": "BaseStorage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L85"}, {"id": "core_storage_basestorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L88"}, {"id": "core_storage_basestorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L92"}, {"id": "core_storage_basestorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L96"}, {"id": "core_storage_basestorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L100"}, {"id": "core_storage_basestorage_presigned_download_url", "label": ".presigned_download_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L104"}, {"id": "core_storage_basestorage_presigned_preview_url", "label": ".presigned_preview_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L110"}, {"id": "core_storage_localstorage", "label": "LocalStorage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L115"}, {"id": "core_storage_localstorage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L118"}, {"id": "core_storage_localstorage_ensure_dir", "label": "._ensure_dir()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122"}, {"id": "core_storage_localstorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L128"}, {"id": "core_storage_localstorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L134"}, {"id": "core_storage_localstorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L149"}, {"id": "core_storage_localstorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L158"}, {"id": "core_storage_localstorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L175"}, {"id": "core_storage_qiniustorage", "label": "QiniuStorage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L180"}, {"id": "core_storage_qiniustorage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L183"}, {"id": "core_storage_qiniustorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L192"}, {"id": "core_storage_qiniustorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L198"}, {"id": "core_storage_qiniustorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L213"}, {"id": "core_storage_qiniustorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L221"}, {"id": "core_storage_qiniustorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L232"}, {"id": "core_storage_ossstorage", "label": "OSSStorage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L237"}, {"id": "core_storage_ossstorage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L240"}, {"id": "core_storage_ossstorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L250"}, {"id": "core_storage_ossstorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L256"}, {"id": "core_storage_ossstorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L267"}, {"id": "core_storage_ossstorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L275"}, {"id": "core_storage_ossstorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L284"}, {"id": "core_storage_miniostorage", "label": "MinIOStorage", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L289"}, {"id": "core_storage_miniostorage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L292"}, {"id": "core_storage_miniostorage_build_presign_client", "label": "._build_presign_client()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L312"}, {"id": "core_storage_miniostorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L334"}, {"id": "core_storage_miniostorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L340"}, {"id": "core_storage_miniostorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L357"}, {"id": "core_storage_miniostorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L365"}, {"id": "core_storage_miniostorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L374"}, {"id": "core_storage_miniostorage_extract_object_key", "label": "._extract_object_key()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L378"}, {"id": "core_storage_miniostorage_presigned_download_url", "label": ".presigned_download_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L394"}, {"id": "core_storage_miniostorage_presigned_preview_url", "label": ".presigned_preview_url()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L412"}, {"id": "core_storage_get_storage", "label": "get_storage()", "file_type": "code", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L433"}, {"id": "core_storage_rationale_1", "label": "\u6587\u4ef6\u5b58\u50a8\u5de5\u5177\u6a21\u5757 \u652f\u6301\u591a\u79cd\u5b58\u50a8\u65b9\u5f0f\uff1a 1. \u672c\u5730\u5b58\u50a8 (local) - \u9ed8\u8ba4 2. \u4e03\u725b\u4e91\u5b58\u50a8 (qiniu) - \u63a8\u8350\u751f\u4ea7\u73af\u5883\u4f7f\u7528 3. \u963f\u91cc\u4e91OSS (", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L1"}, {"id": "core_storage_rationale_35", "label": "\u6309\u5bf9\u8c61\u952e\u540e\u7f00\u63a8\u65ad\u5185\u8054\u9884\u89c8 Content-Type\uff08\u7ea0\u6b63\u4e0a\u4f20\u65f6\u672a\u5199\u5165 MIME \u7684\u60c5\u51b5\uff09\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L35"}, {"id": "core_storage_rationale_62", "label": "\u5c06 HEIC/HEIF \u683c\u5f0f\u8f6c\u6362\u4e3a JPEG \u683c\u5f0f", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L62"}, {"id": "core_storage_rationale_77", "label": "\u5904\u7406\u56fe\u7247\u5185\u5bb9\uff0c\u5982\u679c\u662f HEIC \u683c\u5f0f\u5219\u8f6c\u6362\u4e3a JPEG", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L77"}, {"id": "core_storage_rationale_107", "label": "\u5e26\u4e0b\u8f7d\u6587\u4ef6\u540d\u7684\u8bbf\u95ee URL\uff1b\u9ed8\u8ba4\u5b9e\u73b0\u4e3a\u666e\u901a\u8bbf\u95ee\u5730\u5740\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L107"}, {"id": "core_storage_rationale_111", "label": "\u6d4f\u89c8\u5668\u5185\u8054\u9884\u89c8 URL\uff1b\u9ed8\u8ba4\u5b9e\u73b0\u4e3a\u666e\u901a\u8bbf\u95ee\u5730\u5740\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L111"}, {"id": "core_storage_rationale_313", "label": "\u4ece MINIO_BASE_URL \u89e3\u6790\u516c\u7f51 endpoint\uff1b\u672a\u914d\u7f6e\u6216\u4e0e\u5185\u7f51\u76f8\u540c\u65f6\u590d\u7528 self.client\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L313"}, {"id": "core_storage_rationale_397", "label": "MinIO \u9884\u7b7e\u540d\u4e0b\u8f7d URL\uff0c\u643a\u5e26\u539f\u59cb\u6587\u4ef6\u540d\u3002", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L397"}, {"id": "core_storage_rationale_413", "label": "MinIO \u9884\u7b7e\u540d\u5185\u8054\u9884\u89c8 URL\uff08\u56fe\u7247\u65b0\u6807\u7b7e\u9875 / PDF iframe \u7b49\uff09\u3002 \u4e0a\u4f20\u65f6 put_object \u672a\u5199 content_typ", "file_type": "rationale", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L413"}], "edges": [{"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "mimetypes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L21", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L22", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L23", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "base64", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L24", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L25", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L26", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "urllib_parse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L27", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L28", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L29", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L31", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_guess_preview_content_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L34", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_convert_heic_to_jpeg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L61", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_process_image_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L76", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_basestorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L85", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L88", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L92", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L96", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L100", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_presigned_download_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L104", "weight": 1.0}, {"source": "core_storage_basestorage", "target": "core_storage_basestorage_presigned_preview_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L110", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_localstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L115", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L115", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L118", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_ensure_dir", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L128", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L134", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L149", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L158", "weight": 1.0}, {"source": "core_storage_localstorage", "target": "core_storage_localstorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L175", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_qiniustorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L180", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L180", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L183", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L192", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L198", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L213", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L221", "weight": 1.0}, {"source": "core_storage_qiniustorage", "target": "core_storage_qiniustorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L232", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_ossstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L237", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L237", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L240", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L250", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L256", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L267", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L275", "weight": 1.0}, {"source": "core_storage_ossstorage", "target": "core_storage_ossstorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L284", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_miniostorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L289", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L289", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L292", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_build_presign_client", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L312", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L334", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L340", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L357", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L365", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L374", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_extract_object_key", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L378", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_presigned_download_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L394", "weight": 1.0}, {"source": "core_storage_miniostorage", "target": "core_storage_miniostorage_presigned_preview_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L412", "weight": 1.0}, {"source": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "core_storage_get_storage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L433", "weight": 1.0}, {"source": "core_storage_process_image_content", "target": "core_storage_convert_heic_to_jpeg", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L81", "weight": 1.0}, {"source": "core_storage_basestorage_presigned_download_url", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L108", "weight": 1.0}, {"source": "core_storage_basestorage_presigned_preview_url", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L112", "weight": 1.0}, {"source": "core_storage_localstorage_upload_file", "target": "core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L137", "weight": 1.0}, {"source": "core_storage_localstorage_upload_file", "target": "core_storage_localstorage_ensure_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L139", "weight": 1.0}, {"source": "core_storage_localstorage_upload_file", "target": "core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L140", "weight": 1.0}, {"source": "core_storage_localstorage_upload_file", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L147", "weight": 1.0}, {"source": "core_storage_localstorage_upload_base64", "target": "core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L156", "weight": 1.0}, {"source": "core_storage_qiniustorage_upload_file", "target": "core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L203", "weight": 1.0}, {"source": "core_storage_qiniustorage_upload_file", "target": "core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L205", "weight": 1.0}, {"source": "core_storage_qiniustorage_upload_file", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L210", "weight": 1.0}, {"source": "core_storage_qiniustorage_upload_base64", "target": "core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L219", "weight": 1.0}, {"source": "core_storage_ossstorage_upload_file", "target": "core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L259", "weight": 1.0}, {"source": "core_storage_ossstorage_upload_file", "target": "core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L261", "weight": 1.0}, {"source": "core_storage_ossstorage_upload_file", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L264", "weight": 1.0}, {"source": "core_storage_ossstorage_upload_base64", "target": "core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L273", "weight": 1.0}, {"source": "core_storage_miniostorage_init", "target": "core_storage_miniostorage_build_presign_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L308", "weight": 1.0}, {"source": "core_storage_miniostorage_upload_file", "target": "core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L343", "weight": 1.0}, {"source": "core_storage_miniostorage_upload_file", "target": "core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L345", "weight": 1.0}, {"source": "core_storage_miniostorage_upload_file", "target": "core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L355", "weight": 1.0}, {"source": "core_storage_miniostorage_upload_base64", "target": "core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L363", "weight": 1.0}, {"source": "core_storage_miniostorage_presigned_download_url", "target": "core_storage_miniostorage_extract_object_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L398", "weight": 1.0}, {"source": "core_storage_miniostorage_presigned_preview_url", "target": "core_storage_miniostorage_extract_object_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L418", "weight": 1.0}, {"source": "core_storage_miniostorage_presigned_preview_url", "target": "core_storage_guess_preview_content_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L422", "weight": 1.0}, {"source": "core_storage_get_storage", "target": "core_storage_qiniustorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L438", "weight": 1.0}, {"source": "core_storage_get_storage", "target": "core_storage_ossstorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L440", "weight": 1.0}, {"source": "core_storage_get_storage", "target": "core_storage_miniostorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L442", "weight": 1.0}, {"source": "core_storage_get_storage", "target": "core_storage_localstorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L444", "weight": 1.0}, {"source": "core_storage_rationale_1", "target": "users_zlwu_work_00code_shanxia2_0_backend_app_core_storage_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L1", "weight": 1.0}, {"source": "core_storage_rationale_35", "target": "core_storage_guess_preview_content_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L35", "weight": 1.0}, {"source": "core_storage_rationale_62", "target": "core_storage_convert_heic_to_jpeg", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L62", "weight": 1.0}, {"source": "core_storage_rationale_77", "target": "core_storage_process_image_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L77", "weight": 1.0}, {"source": "core_storage_rationale_107", "target": "core_storage_basestorage_presigned_download_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L107", "weight": 1.0}, {"source": "core_storage_rationale_111", "target": "core_storage_basestorage_presigned_preview_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L111", "weight": 1.0}, {"source": "core_storage_rationale_313", "target": "core_storage_miniostorage_build_presign_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L313", "weight": 1.0}, {"source": "core_storage_rationale_397", "target": "core_storage_miniostorage_presigned_download_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L397", "weight": 1.0}, {"source": "core_storage_rationale_413", "target": "core_storage_miniostorage_presigned_preview_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L413", "weight": 1.0}], "raw_calls": [{"caller_nid": "core_storage_guess_preview_content_type", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L36"}, {"caller_nid": "core_storage_guess_preview_content_type", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L36"}, {"caller_nid": "core_storage_guess_preview_content_type", "callee": "items", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L48"}, {"caller_nid": "core_storage_guess_preview_content_type", "callee": "endswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L49"}, {"caller_nid": "core_storage_guess_preview_content_type", "callee": "guess_type", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L51"}, {"caller_nid": "core_storage_guess_preview_content_type", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L52"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "open", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L67"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L67"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "to_pillow", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L68"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L69"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "save", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L70"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L71"}, {"caller_nid": "core_storage_convert_heic_to_jpeg", "callee": "Exception", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L73"}, {"caller_nid": "core_storage_process_image_content", "callee": "what", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L79"}, {"caller_nid": "core_storage_process_image_content", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L81"}, {"caller_nid": "core_storage_localstorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L119"}, {"caller_nid": "core_storage_localstorage_ensure_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L124"}, {"caller_nid": "core_storage_localstorage_ensure_dir", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L124"}, {"caller_nid": "core_storage_localstorage_ensure_dir", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L124"}, {"caller_nid": "core_storage_localstorage_ensure_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L125"}, {"caller_nid": "core_storage_localstorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L130"}, {"caller_nid": "core_storage_localstorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L131"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "open", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L143"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "write", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L144"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L146"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L146"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L146"}, {"caller_nid": "core_storage_localstorage_upload_file", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L146"}, {"caller_nid": "core_storage_localstorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L153"}, {"caller_nid": "core_storage_localstorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L155"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L162"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L163"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L163"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L165"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "Path", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L167"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L168"}, {"caller_nid": "core_storage_localstorage_delete_file", "callee": "unlink", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L169"}, {"caller_nid": "core_storage_qiniustorage_init", "callee": "Auth", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L186"}, {"caller_nid": "core_storage_qiniustorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L188"}, {"caller_nid": "core_storage_qiniustorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L190"}, {"caller_nid": "core_storage_qiniustorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L194"}, {"caller_nid": "core_storage_qiniustorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L195"}, {"caller_nid": "core_storage_qiniustorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L195"}, {"caller_nid": "core_storage_qiniustorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L195"}, {"caller_nid": "core_storage_qiniustorage_upload_file", "callee": "upload_token", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L206"}, {"caller_nid": "core_storage_qiniustorage_upload_file", "callee": "put_data", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L208"}, {"caller_nid": "core_storage_qiniustorage_upload_file", "callee": "Exception", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L211"}, {"caller_nid": "core_storage_qiniustorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L216"}, {"caller_nid": "core_storage_qiniustorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L218"}, {"caller_nid": "core_storage_qiniustorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L226"}, {"caller_nid": "core_storage_qiniustorage_delete_file", "callee": "delete", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L227"}, {"caller_nid": "core_storage_ossstorage_init", "callee": "Auth", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L243"}, {"caller_nid": "core_storage_ossstorage_init", "callee": "Bucket", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L245"}, {"caller_nid": "core_storage_ossstorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L246"}, {"caller_nid": "core_storage_ossstorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L248"}, {"caller_nid": "core_storage_ossstorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L252"}, {"caller_nid": "core_storage_ossstorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L253"}, {"caller_nid": "core_storage_ossstorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L253"}, {"caller_nid": "core_storage_ossstorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L253"}, {"caller_nid": "core_storage_ossstorage_upload_file", "callee": "put_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L262"}, {"caller_nid": "core_storage_ossstorage_upload_file", "callee": "Exception", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L265"}, {"caller_nid": "core_storage_ossstorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L270"}, {"caller_nid": "core_storage_ossstorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L272"}, {"caller_nid": "core_storage_ossstorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L278"}, {"caller_nid": "core_storage_ossstorage_delete_file", "callee": "delete_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L279"}, {"caller_nid": "core_storage_miniostorage_init", "callee": "Minio", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L295"}, {"caller_nid": "core_storage_miniostorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L303"}, {"caller_nid": "core_storage_miniostorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L310"}, {"caller_nid": "core_storage_miniostorage_build_presign_client", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L314"}, {"caller_nid": "core_storage_miniostorage_build_presign_client", "callee": "urlparse", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L317"}, {"caller_nid": "core_storage_miniostorage_build_presign_client", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L322"}, {"caller_nid": "core_storage_miniostorage_build_presign_client", "callee": "bool", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L323"}, {"caller_nid": "core_storage_miniostorage_build_presign_client", "callee": "minio_cls", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L326"}, {"caller_nid": "core_storage_miniostorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L336"}, {"caller_nid": "core_storage_miniostorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L337"}, {"caller_nid": "core_storage_miniostorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L337"}, {"caller_nid": "core_storage_miniostorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L337"}, {"caller_nid": "core_storage_miniostorage_upload_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L347"}, {"caller_nid": "core_storage_miniostorage_upload_file", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L348"}, {"caller_nid": "core_storage_miniostorage_upload_file", "callee": "put_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L349"}, {"caller_nid": "core_storage_miniostorage_upload_file", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L353"}, {"caller_nid": "core_storage_miniostorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L360"}, {"caller_nid": "core_storage_miniostorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L362"}, {"caller_nid": "core_storage_miniostorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L368"}, {"caller_nid": "core_storage_miniostorage_delete_file", "callee": "remove_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L369"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L379"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "split", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L383"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L385"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L386"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L387"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L387"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "find", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L389"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "len", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L391"}, {"caller_nid": "core_storage_miniostorage_extract_object_key", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L392"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L400"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "strip", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L401"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L401"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "decode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L402"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "encode", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L402"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "quote", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L403"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "presigned_get_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L405"}, {"caller_nid": "core_storage_miniostorage_presigned_download_url", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L408"}, {"caller_nid": "core_storage_miniostorage_presigned_preview_url", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L420"}, {"caller_nid": "core_storage_miniostorage_presigned_preview_url", "callee": "presigned_get_object", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L425"}, {"caller_nid": "core_storage_miniostorage_presigned_preview_url", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L428"}, {"caller_nid": "core_storage_get_storage", "callee": "lower", "is_member_call": true, "source_file": "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L435"}]}
|