77# Badge setup
88SRC = '"https://colab.research.google.com/assets/colab-badge.svg"'
99ALT = '"Open In Colab"'
10+ BADGE_VAR = "{{ badge }}"
11+ BADGE_PATTERN = re .compile (r"<!--<badge>-->(.*?)<!--</badge>-->" )
12+ HREF_PATTERN = re .compile (r"href=[\"\'](.*?)[\"\']" )
1013
1114# Set repository
1215CURRENT_REPOSITORY = os .environ ['GITHUB_REPOSITORY' ]
@@ -77,12 +80,20 @@ def check_cells(data: dict, repo_name: str, branch: str, nb_path: str):
7780 for cell in data ["cells" ]:
7881 # Check only markdown cells
7982 if cell ["cell_type" ] == "markdown" :
80- # If a cell already has a badge - check the repo and branch
81- if UPDATE and any (["<!--<badge>-->" in line for line in cell ["source" ]]):
82- # Update repo, branch, file path
83- save = True if update_badge (cell , repo_name , branch , nb_path ) else save
84- # Add badge code, add metadata
85- save = True if add_badge (cell , repo_name , branch , nb_path ) else save
83+ text = cell ["source" ]
84+ for i , line in enumerate (text ):
85+ # If a cell already has a badge - check the repo and branch
86+ if UPDATE :
87+ # Update repo, branch, file path
88+ new_line = update_badge (line , repo_name , branch , nb_path )
89+ if new_line :
90+ text [i ] = new_line
91+ save = True if new_line else save
92+ # Add badge code
93+ new_line = add_badge (line , repo_name , branch , nb_path )
94+ if new_line :
95+ text [i ] = new_line
96+ save = True if new_line else save
8697 else :
8798 continue
8899
@@ -92,22 +103,15 @@ def check_cells(data: dict, repo_name: str, branch: str, nb_path: str):
92103 write_nb (data , nb_path )
93104
94105
95- def add_badge (cell : dict , repo_name : str , branch : str , nb_path : str ):
106+ def add_badge (line : str , repo_name : str , branch : str , nb_path : str ):
96107 """Inserts "Open in Colab" badge.
97108 """
98- modified = False
99- pattern = "{{ badge }}"
100- text = cell ["source" ]
101- for i , line in enumerate (text ):
102- if pattern in line :
103- badge = prepare_badge_code (repo_name , branch , nb_path )
104- print (f"{ nb_path } : Inserting badge..." )
105- new_line = line .replace (pattern , badge )
106- text [i ] = new_line
107- modified = True
108- else :
109- continue
110- return modified
109+ new_line = None
110+ if BADGE_VAR in line :
111+ badge = prepare_badge_code (repo_name , branch , nb_path )
112+ print (f"{ nb_path } : Inserting badge..." )
113+ new_line = line .replace (BADGE_VAR , badge )
114+ return new_line
111115
112116
113117def prepare_badge_code (repo_name : str , branch : str , nb_path : str ) -> str :
@@ -118,33 +122,25 @@ def prepare_badge_code(repo_name: str, branch: str, nb_path: str) -> str:
118122 return code
119123
120124
121- def update_badge (cell : dict , repo_name : str , branch : str , nb_path : str ):
125+ def update_badge (line : str , repo_name : str , branch : str , nb_path : str ):
122126 """Updates added badge code.
123127 """
124- modified = False
125- badge_pattern = re .compile (r"<!--<badge>-->(.*?)<!--</badge>-->" )
126- href_pattern = re .compile (r"href=[\"\'](.*?)[\"\']" )
127-
128128 new_href = f"https://colab.research.google.com/github/{ repo_name } /blob/{ branch } /{ nb_path } "
129- text = cell ["source" ]
130-
131- for i , line in enumerate (text ):
132- badges = badge_pattern .findall (line )
133- if badges :
134- for badge in badges :
135- href = href_pattern .findall (badge )[0 ]
136- repo_branch_nb = href .split ("/github/" )[- 1 ]
137- curr_repo , branch_nb = repo_branch_nb .split ("/blob/" )
138- curr_branch , curr_nb_path = branch_nb .split ("/" , 1 )
139-
140- if (curr_repo != repo_name ) or (curr_branch != branch ) or (curr_nb_path != nb_path ):
141- print (f"{ nb_path } : Updating badge info..." )
142- new_line = line .replace (href , new_href )
143- text [i ] = new_line
144- modified = True
145- else :
146- continue
147- return modified
129+ new_line = None
130+
131+ badges = BADGE_PATTERN .findall (line )
132+ if badges :
133+ for badge in badges :
134+ href = HREF_PATTERN .findall (badge )[0 ]
135+ repo_branch_nb = href .split ("/github/" )[- 1 ]
136+ curr_repo , branch_nb = repo_branch_nb .split ("/blob/" )
137+ curr_branch , curr_nb_path = branch_nb .split ("/" , 1 )
138+
139+ if (curr_repo != repo_name ) or (curr_branch != branch ) or (curr_nb_path != nb_path ):
140+ print (f"{ nb_path } : Updating badge info..." )
141+ new_line = line .replace (href , new_href )
142+
143+ return new_line
148144
149145
150146def write_nb (data : dict , file_path : str ) -> None :
0 commit comments