Last active
September 14, 2020 02:10
-
-
Save devxoul/6fe972cb4ab64c1ef92bc32621961b30 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import io | |
import requests | |
import subprocess | |
import zipfile | |
FIREBASE_VERSION = '6.29.0' | |
def main(): | |
json_urls = [ | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseAuthBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseDatabaseBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseDynamicLinksBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseMessagingBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseProtobufBinary.json", | |
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseRemoteConfigBinary.json", | |
] | |
downloader = Downloader(json_urls) | |
framework_maps = downloader.download() | |
print(ProjectYMLFormatter(framework_maps).get_formatted()) | |
print(RomefileFormatter(framework_maps).get_formatted()) | |
class Downloader: | |
def __init__(self, json_urls): | |
self.json_urls = json_urls | |
def download(self): | |
all_frameworks_maps = [] | |
for json_url in self.json_urls: | |
zip_url = self._get_zip_url(json_url) | |
print(zip_url) | |
z = self._download_zip(zip_url) | |
frameworks_maps = self._get_framework_maps(json_url=json_url, | |
zip_namelist=z.namelist()) | |
all_frameworks_maps += frameworks_maps | |
return all_frameworks_maps | |
def _get_zip_url(self, json_url): | |
r = requests.get(json_url) | |
return r.json()[FIREBASE_VERSION] | |
def _download_zip(self, zip_url): | |
r = requests.get(zip_url, stream=True) | |
z = zipfile.ZipFile(io.BytesIO(r.content)) | |
return z | |
def _get_framework_maps(self, json_url, zip_namelist): | |
frameworks_dict = {} | |
all_frameworks = [name for name in zip_namelist if name.endswith('.framework/')] | |
for framework in all_frameworks: | |
directory_name = framework.split('/')[0] | |
frameworks_dict.setdefault(directory_name, set()) | |
frameworks_dict[directory_name].add(framework.split('/')[1]) | |
framework_maps = [] | |
for (directory_name, frameworks) in frameworks_dict.items(): | |
framework_map = FrameworkMap(json_url=json_url, | |
directory_name=directory_name, | |
frameworks=frameworks) | |
framework_maps.append(framework_map) | |
return sorted(framework_maps, key=lambda m: m.directory_name) | |
class FrameworkMap: | |
def __init__(self, json_url, directory_name, frameworks): | |
self.json_url = json_url | |
self.directory_name = directory_name | |
self.frameworks = sorted(set(frameworks)) | |
class ProjectYMLFormatter: | |
def __init__(self, framework_maps): | |
self.framework_maps = framework_maps | |
def get_formatted(self): | |
formatted = '' | |
for framework_map in self.framework_maps: | |
for framework in framework_map.frameworks: | |
formatted += f" - carthage: {framework.split('.')[0]}\n" | |
formatted += ' embed: false\n' | |
return formatted | |
class RomefileFormatter: | |
def __init__(self, framework_maps): | |
self.framework_maps = framework_maps | |
def get_formatted(self): | |
formatted = '' | |
for framework_map in self.framework_maps: | |
carthage_name = framework_map.json_url.split('/')[-1].split('.json')[0] | |
formatted += f'- {carthage_name}:\n' | |
for framework in framework_map.frameworks: | |
formatted += f" - name: {framework.split('.framework')[0]}\n" | |
return formatted | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example Output
project.yml
Romefile