22import os
33import shutil
44import requests
5+ import re
56
67from pygeppetto .data_model import GeppettoProject
78from pygeppetto .services .data_manager import GeppettoDataManager
1516CACHE_DEFAULT_DIR = f"{ CACHE_DIRNAME } /"
1617
1718
18- class NWBFileNotFound (FileNotFoundError ): pass
19+ class NWBFileNotFound (FileNotFoundError ):
20+ pass
1921
2022
2123def get_file_path (file_name_or_url ):
@@ -38,8 +40,18 @@ def get_file_from_url(file_url, fname=None, cache_dir=CACHE_DEFAULT_DIR):
3840 if not os .path .exists (file_name ):
3941 if not os .path .exists (os .path .dirname (file_name )):
4042 os .makedirs (os .path .dirname (file_name ))
41- logging .info ('Downloading {} to {}...' .format (file_url , file_name ))
42- response = requests .get (file_url )
43+ logging .info ('Downloading {}' .format (file_url ))
44+ response = requests .get (file_url , allow_redirects = True )
45+ if response .status_code != 200 :
46+ raise Exception (f"Error downloading file { file_url } " )
47+ if not fname and 'content-disposition' in response .headers :
48+ fname = re .findall ('filename="(.+)"' ,
49+ response .headers ['content-disposition' ])[0 ]
50+ file_name = get_cache_path (response .url , fname , cache_dir )
51+
52+ dirname = os .path .dirname (file_name )
53+ if not os .path .exists (dirname ):
54+ os .makedirs (dirname )
4355 with open (file_name , 'wb' ) as f :
4456 f .write (response .content )
4557 logging .info ('Downloaded file to: {}' .format (file_name ))
@@ -48,7 +60,7 @@ def get_file_from_url(file_url, fname=None, cache_dir=CACHE_DEFAULT_DIR):
4860
4961
5062def get_cache_path (file_url , fname = None , cache_dir = CACHE_DEFAULT_DIR ):
51- return os .path .join (cache_dir , ( os . path . basename ( file_url ) if not fname else fname ) )
63+ return os .path .join (cache_dir , file_url . strip ( '/' ). split ( '//' )[ 1 ] if not fname else fname )
5264
5365
5466class NWBDataManager (GeppettoDataManager , metaclass = Singleton ):
@@ -61,8 +73,10 @@ def get_project_from_url(self, nwbfile):
6173 except Exception as e :
6274 raise Exception ("Error retrieving file" + nwbfile ) from e
6375 try :
64- model_interpreter = NWBModelInterpreter (nwbfilename , source_url = nwbfile )
65- add_model_interpreter (model_interpreter .library .id , model_interpreter )
76+ model_interpreter = NWBModelInterpreter (
77+ nwbfilename , source_url = nwbfile )
78+ add_model_interpreter (
79+ model_interpreter .library .id , model_interpreter )
6680
6781 geppetto_model = model_interpreter .create_model ()
6882 project = GeppettoProject (id = self .last_id , name = 'NWB file {}' .format (os .path .basename (nwbfilename )),
0 commit comments