@@ -35,7 +35,6 @@ def __init__(self, folder_path=None, url_path=None, app=None):
3535 self .url_path = '/apidoc'
3636
3737 self .app = None
38- self .__project_data = None
3938
4039 if app :
4140 self .init_app (app )
@@ -47,20 +46,19 @@ def init_app(self, app):
4746 if not self .url_path .endswith ('/' ):
4847 url += '/'
4948
50- app .add_url_rule (url , 'apidoc' , self .__view )
51- app .add_url_rule (url + '<path:path>' , 'apidoc' , self .__view )
49+ app .add_url_rule (url , 'apidoc' , self .__send_static_file )
50+ app .add_url_rule (url + '<path:path>' , 'apidoc' , self .__send_static_file )
5251
53- self .__project_data = self .__load_project_info ()
54-
55- def __load_project_info (self ):
52+ @lru_cache ()
53+ def __get_project_info (self ):
5654 file_name = join (self .app .static_folder , self .folder_path , 'api_project.json' )
5755
5856 with open (file_name , 'rt' ) as file :
5957 data = file .read ()
6058
6159 return json .loads (data )
6260
63- def __view (self , path = None ):
61+ def __send_static_file (self , path = None ):
6462 if not path :
6563 path = 'index.html'
6664
@@ -78,14 +76,15 @@ def __send_api_file(self, file_name):
7876 with open (file_name , 'rt' ) as file :
7977 data = file .read ()
8078
81- self .__project_data .get ('url' ).find ('' )
79+ project_info = self .__get_project_info ()
80+ url = project_info .get ('url' )
8281
83- data = self .__replace_api_url (data , self . __project_data . get ( ' url' ) )
82+ data = self .__replace_url (data , url , request . url_root )
8483
85- url = self . __project_data .get ('sampleUrl' )
84+ url = project_info .get ('sampleUrl' )
8685
8786 if isinstance (url , str ):
88- data = self .__replace_api_url (data , self . __project_data . get ( 'sampleUrl' ) )
87+ data = self .__replace_url (data , url , request . url_root )
8988
9089 headers = Headers ()
9190 headers ['Content-Length' ] = getsize (file_name )
@@ -100,12 +99,12 @@ def __send_api_file(self, file_name):
10099 return response
101100
102101 @staticmethod
103- def __replace_api_url (data , old_url ):
102+ def __replace_url (data , old_url , new_url ):
104103 i = old_url .find ('/' , 8 )
105104
106105 if i > - 1 :
107106 old_url = old_url [:i ]
108107
109- new_url = request . url_root .strip ('/' )
108+ new_url = new_url .strip ('/' )
110109
111110 return data .replace (old_url , new_url )
0 commit comments