3434
3535
3636class GitExamplesHandler (object ):
37+ """Handles logic related to cloning and checking out the ZenML Git
38+ repository, in relation to the `examples` dir."""
39+
3740 def __init__ (self , redownload : str = "" ) -> None :
3841 """Initialize the GitExamplesHandler class."""
3942 self .clone_repo (redownload )
4043
4144 def clone_repo (self , redownload_version : str = "" ) -> None :
42- """Clone ZenML git repo into global config directory if not already cloned"""
45+ """Clone ZenML git repo into global config directory if not already
46+ cloned"""
4347 installed_version = zenml_version_installed
4448 repo_dir = click .get_app_dir (APP_NAME )
4549 examples_dir = os .path .join (repo_dir , EXAMPLES_GITHUB_REPO )
@@ -54,39 +58,55 @@ def clone_repo(self, redownload_version: str = "") -> None:
5458 redownload_version
5559 or EXAMPLES_GITHUB_REPO not in config_directory_files
5660 ):
57- self .clone_from_zero (GIT_REPO_URL , examples_dir , installed_version )
61+ self .clone_from_zero (GIT_REPO_URL , examples_dir )
62+ repo = Repo (examples_dir )
63+ self .checkout_repository (repo , installed_version )
5864
59- def clone_from_zero (
60- self , git_repo_url : str , local_dir : str , version : str
61- ) -> None :
65+ def clone_from_zero (self , git_repo_url : str , local_dir : str ) -> None :
6266 """Basic functionality to clone a repo."""
6367 try :
64- Repo .clone_from (git_repo_url , local_dir , branch = version )
65- except GitCommandError :
66- error (
67- f"You just tried to download examples for version { version } . "
68- f"There is no corresponding release or version. Please try "
69- f"again with a version number corresponding to an actual release."
70- )
68+ Repo .clone_from (git_repo_url , local_dir , branch = "main" )
7169 except KeyboardInterrupt :
7270 self .delete_example_source_dir (local_dir )
71+ error ("Cancelled download of repository.. Rolled back." )
72+ return
7373
7474 def checkout_repository (
75- self , repository : Repo , desired_version : str
75+ self ,
76+ repository : Repo ,
77+ desired_version : str ,
78+ fallback_to_latest : bool = True ,
7679 ) -> None :
7780 """Checks out a branch or tag of a git repository
7881
7982 Args:
80- desired_version: a valid ZenML release version number
83+ repository: a Git repository reference.
84+ desired_version: a valid ZenML release version number.
85+ fallback_to_latest: Whether to default to the latest released
86+ version or not if `desired_version` does not exist.
8187 """
8288 try :
8389 repository .git .checkout (desired_version )
8490 except GitCommandError :
85- error (
86- f"You just tried to checkout the repository for version { desired_version } . "
87- f"There is no corresponding release or version. Please try "
88- f"again with a version number corresponding to an actual release."
89- )
91+ if fallback_to_latest :
92+ last_release = parse (repository .tags [- 1 ].name )
93+ repository .git .checkout (last_release )
94+ warning (
95+ f"You just tried to download examples for version "
96+ f"{ desired_version } . "
97+ f"There is no corresponding release or version. We are "
98+ f"going to "
99+ f"default to the last release: { last_release } "
100+ )
101+ else :
102+ error (
103+ f"You just tried to checkout the repository for version "
104+ f"{ desired_version } . "
105+ f"There is no corresponding release or version. Please try "
106+ f"again with a version number corresponding to an actual "
107+ f"release."
108+ )
109+ raise
90110
91111 def clone_when_examples_already_cloned (
92112 self , local_dir : str , version : str
@@ -95,20 +115,12 @@ def clone_when_examples_already_cloned(
95115 into the global config directory if they are already cloned."""
96116 local_dir_path = Path (local_dir )
97117 repo = Repo (str (local_dir_path ))
98-
99- last_release = parse (repo .tags [- 1 ].name )
100118 desired_version = parse (version )
101-
102- if last_release < desired_version :
103- warning (
104- f"You tried to download { desired_version } ."
105- f"The latest version you currently have available is { last_release } ."
106- f"Recloning the repository from scratch to try to obtain { desired_version } "
107- )
108- self .delete_example_source_dir (str (local_dir_path ))
109- self .clone_from_zero (GIT_REPO_URL , local_dir , str (desired_version ))
110- else :
111- self .checkout_repository (repo , str (desired_version ))
119+ self .delete_example_source_dir (str (local_dir_path ))
120+ self .clone_from_zero (GIT_REPO_URL , local_dir )
121+ self .checkout_repository (
122+ repo , str (desired_version ), fallback_to_latest = False
123+ )
112124
113125 def get_examples_dir (self ) -> str :
114126 """Return the examples dir"""
@@ -155,11 +167,13 @@ def delete_example_source_dir(self, source_path: str) -> None:
155167 path_utils .rm_dir (source_path )
156168 else :
157169 raise ValueError (
158- "You can only delete the source directory from your ZenML config directory"
170+ "You can only delete the source directory from your ZenML "
171+ "config directory"
159172 )
160173
161174 def delete_working_directory_examples_folder (self ) -> None :
162- """Delete the zenml_examples folder from the current working directory."""
175+ """Delete the zenml_examples folder from the current working
176+ directory."""
163177 cwd_directory_path = os .path .join (os .getcwd (), EXAMPLES_GITHUB_REPO )
164178 if os .path .exists (cwd_directory_path ):
165179 path_utils .rm_dir (str (cwd_directory_path ))
@@ -193,7 +207,8 @@ def list(git_examples_handler: Any) -> None:
193207# TODO: [MEDIUM] Use a better type for the git_examples_handler
194208def info (git_examples_handler : Any , example_name : str ) -> None :
195209 """Find out more about an example."""
196- # TODO: [MEDIUM] fix markdown formatting so that it looks nicer (not a pure .md dump)
210+ # TODO: [MEDIUM] fix markdown formatting so that it looks nicer (not a
211+ # pure .md dump)
197212 example_dir = os .path .join (
198213 git_examples_handler .get_examples_dir (), example_name
199214 )
@@ -221,7 +236,8 @@ def info(git_examples_handler: Any, example_name: str) -> None:
221236 "--force" ,
222237 "-f" ,
223238 is_flag = True ,
224- help = "Force the redownload of the examples folder to the ZenML config folder." ,
239+ help = "Force the redownload of the examples folder to the ZenML config "
240+ "folder." ,
225241)
226242@click .option (
227243 "--version" ,
0 commit comments