1+ import fnmatch
12import os
23import sys
34from pathlib import Path
910from github .GitRelease import GitRelease
1011from github .Repository import Repository
1112
12- from mkdocs_markmap .__meta__ import PACKAGE_NAME , PROJECT_NAME , PROJECT_VERSION , REPOSITORY
13+ from mkdocs_markmap .__meta__ import PACKAGE_NAME , PROJECT_NAME , PROJECT_VERSION , REPOSITORY_NAME
1314
1415
1516PROJECT_PATH : Path = Path (__file__ ).parent .parent .parent .absolute ()
1617DIST_PATH : Path = PROJECT_PATH / 'dist'
1718CHANGELOG_PATH : Path = PROJECT_PATH / 'changelog'
1819
19- GZ_WILDCARD : str = f'{ PROJECT_NAME } -{ PROJECT_VERSION } *.gz'
20- WHL_WILDCARD : str = f'{ PACKAGE_NAME } -{ PROJECT_VERSION } *.whl'
20+ GZ_WILDCARD : str = f'{ PROJECT_NAME } -{{version} }*.gz'
21+ WHL_WILDCARD : str = f'{ PACKAGE_NAME } -{{version} }*.whl'
2122
2223
2324class GithubHandler (object ):
@@ -28,23 +29,41 @@ def __init__(self, tag: str) -> None:
2829 print ('environment variable "GITHUB_TOKEN" is not set' )
2930 sys .exit (1 )
3031 self .github : Github = Github (github_token )
31- self .repository : Repository = self .github .get_repo (REPOSITORY )
32+ self .repository : Repository = self .github .get_repo (REPOSITORY_NAME )
3233
3334
3435class AssetCollector (object ):
36+ def __init__ (self , tag : str = None ) -> None :
37+ self .tag = tag
38+
39+ version = PROJECT_VERSION if tag is None else tag [1 :]
40+ self .gz_wildcard = GZ_WILDCARD .format (version = version )
41+ self .whl_wildcard = WHL_WILDCARD .format (version = version )
42+
3543 def get_assets (self ) -> List [str ]:
36- gz_assets : List [str ] = list (str (p ) for p in DIST_PATH .glob (GZ_WILDCARD ))
37- whl_assets : List [str ] = list (str (p ) for p in DIST_PATH .glob (WHL_WILDCARD ))
44+ gz_assets : List [str ] = list (str (p ) for p in DIST_PATH .glob (self .gz_wildcard ))
45+ whl_assets : List [str ] = list (str (p ) for p in DIST_PATH .glob (self .whl_wildcard ))
46+
47+ help_text = ': run "inv build" first' if self .tag is None else ''
48+
49+ try :
50+ assert len (gz_assets ) == 1 , \
51+ f'release asset "{ self .gz_wildcard } " is missing in { DIST_PATH } ' + help_text
52+ assert len (whl_assets ) == 1 , \
53+ f'release asset "{ self .whl_wildcard } " is missing in { DIST_PATH } ' + help_text
3854
39- assert len (gz_assets ) == 1 , \
40- f'release asset "{ GZ_WILDCARD } " is missing in { self .dist_path } : run "inv build" first'
41- assert len (whl_assets ) == 1 , \
42- f'release asset "{ WHL_WILDCARD } " is missing in { self .dist_path } : run "inv build" first'
55+ except AssertionError as e :
56+ print (e )
57+ sys .exit (1 )
4358
4459 return gz_assets + whl_assets
4560
4661
4762class AssetDownloader (GithubHandler ):
63+ def __init__ (self , tag : str ) -> None :
64+ super ().__init__ (tag )
65+ self ._collector = AssetCollector (tag )
66+
4867 def get_assets_from_release (self ) -> List [str ]:
4968 try :
5069 release : GitRelease = next (r for r in self .repository .get_releases () if r .tag_name == self .tag )
@@ -53,10 +72,16 @@ def get_assets_from_release(self) -> List[str]:
5372 sys .exit (1 )
5473
5574 DIST_PATH .mkdir (exist_ok = True )
56- assets = []
5775
5876 http : PoolManager = PoolManager ()
5977 for asset in release .get_assets ():
78+ if not any (
79+ pattern
80+ for pattern in (self ._collector .gz_wildcard , self ._collector .whl_wildcard )
81+ if fnmatch .fnmatch (asset .browser_download_url , pattern )
82+ ):
83+ continue
84+
6085 response : HTTPResponse = http .request ('GET' , asset .browser_download_url )
6186 if response .status != 200 :
6287 print (f'Download of asset "{ asset .name } " failed: { asset .browser_download_url } ({ response .status } )' )
@@ -66,9 +91,7 @@ def get_assets_from_release(self) -> List[str]:
6691 with open (file_path , 'wb' ) as fp :
6792 fp .write (response .data )
6893
69- assets .append (str (file_path ))
70-
71- return assets
94+ return self ._collector .get_assets ()
7295
7396
7497class ChangelogLoader :
0 commit comments