13
13
import requests
14
14
15
15
16
- BUNDLE_DATA = "latest_bundle_data.json"
17
- BUNDLE_TAG = "latest_bundle_tag.json"
16
+ ADAFRUIT_BUNDLE_DATA = "latest_bundle_data.json"
17
+ ADAFRUIT_BUNDLE_TAG = "latest_bundle_tag.json"
18
+
19
+ COMMUNITY_BUNDLE_DATA = "latest_community_bundle_data.json"
20
+ COMMUNITY_BUNDLE_TAG = "latest_community_bundle_tag.json"
21
+
22
+ ADAFRUIT_BUNDLE_S3_URL = "https://adafruit-circuit-python.s3.amazonaws.com/bundles/adafruit/adafruit-circuitpython-bundle-{tag}.json"
23
+ COMMUNITY_BUNDLE_S3_URL = "https://adafruit-circuit-python.s3.amazonaws.com/bundles/community/circuitpython-community-bundle-{tag}.json"
18
24
19
25
LEARN_GUIDE_REPO = os .environ .get (
20
26
"LEARN_GUIDE_REPO" , "../Adafruit_Learning_System_Guides/"
36
42
SHOWN_FILETYPES_EXAMPLE = [s for s in SHOWN_FILETYPES if s != "py" ]
37
43
38
44
39
- def get_bundle (tag ):
40
- """Download the given bundle's data to BUNDLE_DATA """
41
- url = f"https://adafruit-circuit-python.s3.amazonaws.com/bundles/adafruit/adafruit-circuitpython-bundle-{ tag } .json" # pylint: disable=line-too-long
42
- print (f"get bundle metadata from { url } " )
43
- r = requests .get (url )
44
- with open (BUNDLE_DATA , "wb" ) as bundle_file :
45
+ def get_bundle (bundle_url , bundle_data_file ):
46
+ """Download the Adafruit and Community bundles data """
47
+ # url = f"https://adafruit-circuit-python.s3.amazonaws.com/bundles/adafruit/adafruit-circuitpython-bundle-{tag}.json" # pylint: disable=line-too-long
48
+ print (f"get bundle metadata from { bundle_url } " )
49
+ r = requests .get (bundle_url )
50
+ with open (bundle_data_file , "wb" ) as bundle_file :
45
51
bundle_file .write (r .content )
46
52
47
53
48
- LATEST_BUNDLE_VERSION = ""
49
-
50
-
51
54
def get_latest_release_from_url (url ):
52
55
"""
53
56
Find the tag name of the latest release by using HTTP HEAD and decoding the redirect.
@@ -65,44 +68,40 @@ def get_latest_release_from_url(url):
65
68
return tag
66
69
67
70
68
- def get_latest_tag ():
71
+ def get_latest_tag (repo_url ):
69
72
"""
70
73
Find the value of the latest tag for the Adafruit CircuitPython library
71
74
bundle.
72
75
:return: The most recent tag value for the project.
73
76
"""
74
- global LATEST_BUNDLE_VERSION # pylint: disable=global-statement
75
- if LATEST_BUNDLE_VERSION == "" :
76
- LATEST_BUNDLE_VERSION = get_latest_release_from_url (
77
- "https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/latest"
78
- )
79
- return LATEST_BUNDLE_VERSION
77
+
78
+ return get_latest_release_from_url (repo_url )
80
79
81
80
82
- def ensure_latest_bundle ():
81
+ def ensure_latest_bundle (bundle_url , bundle_s3_url , bundle_tag_file , bundle_data_file ):
83
82
"""
84
83
Ensure that there's a copy of the latest library bundle available so circup
85
84
can check the metadata contained therein.
86
85
"""
87
86
print ("Checking for library updates." )
88
- tag = get_latest_tag ()
87
+ tag = get_latest_tag (bundle_url )
89
88
old_tag = "0"
90
- if os .path .isfile (BUNDLE_TAG ):
91
- with open (BUNDLE_TAG , encoding = "utf-8" ) as data :
89
+ if os .path .isfile (bundle_tag_file ):
90
+ with open (bundle_tag_file , encoding = "utf-8" ) as data :
92
91
try :
93
92
old_tag = json .load (data )["tag" ]
94
93
except json .decoder .JSONDecodeError as _ :
95
94
# Sometimes (why?) the JSON file becomes corrupt. In which case
96
95
# log it and carry on as if setting up for first time.
97
- print (f"Could not parse { BUNDLE_TAG :r} " )
96
+ print (f"Could not parse { bundle_tag_file :r} " )
98
97
if tag > old_tag :
99
98
print (f"New version available { tag } ." )
100
99
try :
101
- get_bundle (tag )
102
- with open (BUNDLE_TAG , "w" , encoding = "utf-8" ) as data :
100
+ get_bundle (bundle_s3_url . replace ( "{ tag}" , tag ), bundle_data_file )
101
+ with open (bundle_tag_file , "w" , encoding = "utf-8" ) as data :
103
102
json .dump ({"tag" : tag }, data )
104
103
except requests .exceptions .HTTPError as _ :
105
- # See #20 for reason this this
104
+ # See #20 for reason this
106
105
print (
107
106
(
108
107
"There was a problem downloading the bundle. "
@@ -114,11 +113,19 @@ def ensure_latest_bundle():
114
113
print (f"Current library bundle up to date { tag } " )
115
114
116
115
117
- ensure_latest_bundle ()
116
+ ensure_latest_bundle ("https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/latest" ,
117
+ ADAFRUIT_BUNDLE_S3_URL ,
118
+ ADAFRUIT_BUNDLE_TAG , ADAFRUIT_BUNDLE_DATA )
119
+ ensure_latest_bundle ("https://github.com/adafruit/CircuitPython_Community_Bundle/releases/latest" ,
120
+ COMMUNITY_BUNDLE_S3_URL ,
121
+ COMMUNITY_BUNDLE_TAG , COMMUNITY_BUNDLE_DATA )
118
122
119
- with open ("latest_bundle_data.json" , "r" ) as f :
123
+ with open (ADAFRUIT_BUNDLE_DATA , "r" ) as f :
120
124
bundle_data = json .load (f )
121
125
126
+ with open (COMMUNITY_BUNDLE_DATA , "r" ) as f :
127
+ community_bundle_data = json .load (f )
128
+
122
129
123
130
def get_files_for_project (project_name ):
124
131
"""Get the set of files for a learn project"""
@@ -161,7 +168,7 @@ def get_libs_for_project(project_name):
161
168
162
169
for cur_import in found_imports :
163
170
cur_lib = cur_import .name .split ("." )[0 ]
164
- if cur_lib in bundle_data :
171
+ if cur_lib in bundle_data or cur_lib in community_bundle_data :
165
172
found_libs .add (cur_lib )
166
173
167
174
return found_libs
0 commit comments