22"""
33A Implement that you can use host name instead of its url.
44"""
5- from typing import Tuple
5+ from typing import Tuple , List
66
77from pyecharts .datasets import FILENAMES , EXTRA
8+ from django_echarts .utils .burl import BUrl
9+ from .localfiles import LocalFilesMixin , DownloaderResource
810
911__all__ = ['DependencyManager' ]
1012
11-
12- def pyecharts_resolve_dep_name (dep_name : str ) -> Tuple [bool , str ]:
13- if dep_name .startswith ("https://" ) or dep_name .startswith ('http://' ):
14- return True , dep_name
15- if dep_name in FILENAMES :
16- f , ext = FILENAMES [dep_name ]
17- return False , "{}.{}" .format (f , ext )
18- else :
19- for url , files in EXTRA .items ():
20- if dep_name in files :
21- f , ext = files [dep_name ]
22- return False , "{}.{}" .format (f , ext )
23- return False , '{}.js' .format (dep_name )
24-
25-
2613# The repo contains all dependencies
2714_BUILTIN_REPOS_ = {
2815 'pyecharts' : 'https://assets.pyecharts.org/assets/' ,
@@ -51,12 +38,13 @@ def d2f(dep_name: str):
5138 return f'{ dep_name } .js'
5239
5340
54- class DependencyManager :
41+ class DependencyManager ( LocalFilesMixin ) :
5542 def __init__ (self , * , context : dict = None , repo_name : str = None ):
5643 self ._context = context or {}
5744 self ._repo_dic = {}
5845 self ._custom_dep2url = {} # depname=> url
5946 self ._cur_repo_name = repo_name
47+ self ._baidu_map_ak = self ._context .get ('baidu_map_ak' )
6048
6149 def add_repo (self , repo_name : str , repo_url : str ):
6250 self ._repo_dic [repo_name ] = repo_url
@@ -70,12 +58,13 @@ def _resolve_dep(self, dep_name: str, repo_name: str = None) -> Tuple:
7058 if value .startswith ('#' ):
7159 repo_name = value [1 :]
7260 else :
61+ value = value .format (** self ._context )
7362 return value , d2f (dep_name )
7463 repo_name = repo_name or self ._cur_repo_name
7564 if repo_name not in self ._repo_dic :
7665 raise ValueError (f'Unknown dms repo: { repo_name } . Choices are:{ "," .join (self ._repo_dic .keys ())} ' )
7766
78- use_url , new_dep_name = pyecharts_resolve_dep_name (dep_name )
67+ use_url , new_dep_name = self . _pyecharts_resolve_dep_name (dep_name )
7968 if use_url :
8069 return new_dep_name , None
8170 filename = d2f (new_dep_name )
@@ -87,11 +76,35 @@ def resolve_url(self, dep_name: str, repo_name: str = None) -> str:
8776 url , _ = self ._resolve_dep (dep_name , repo_name )
8877 return url
8978
90- def iter_download_resources (self , dep_names : str , repo_name : str = None ):
79+ def get_download_resources (self , dep_names : List [str ], repo_name : str = None ) -> List [DownloaderResource ]:
80+ resources = []
9181 for dep_name in dep_names :
9282 url , filename = self ._resolve_dep (dep_name , repo_name )
93- if filename :
94- yield dep_name , url , filename
83+ local_ref_url , local_path = self .localize_url (filename )
84+ resources .append (
85+ DownloaderResource (url , local_ref_url , local_path , label = dep_name , catalog = 'Dependency' )
86+ )
87+ return resources
88+
89+ def _pyecharts_resolve_dep_name (self , dep_name : str ) -> Tuple [bool , str ]:
90+ if all ([
91+ self ._baidu_map_ak ,
92+ dep_name .startswith ('https://api.map.baidu.com/' ) or dep_name .startswith ('http://api.map.baidu.com/' ),
93+ 'ak=' in dep_name
94+ ]):
95+ # Replace baidu map ak with global settings.
96+ return True , BUrl (dep_name ).replace ('ak' , self ._baidu_map_ak ).url
97+ if dep_name .startswith ("https://" ) or dep_name .startswith ('http://' ):
98+ return True , dep_name
99+ if dep_name in FILENAMES :
100+ f , ext = FILENAMES [dep_name ]
101+ return False , "{}.{}" .format (f , ext )
102+ else :
103+ for url , files in EXTRA .items ():
104+ if dep_name in files :
105+ f , ext = files [dep_name ]
106+ return False , "{}.{}" .format (f , ext )
107+ return False , '{}.js' .format (dep_name )
95108
96109 @classmethod
97110 def create_default (cls , context : dict = None , repo_name : str = None ):
0 commit comments