srlp/remote.py

65 lines
2.1 KiB
Python
Raw Normal View History

2021-10-09 14:02:10 +02:00
import os
import requests
import arguments
2021-10-09 23:39:16 +02:00
import catalog
2021-10-09 14:02:10 +02:00
import hypertext
2021-10-09 14:36:53 +02:00
ARCHITECTURES = ['x86_64', 'i686']
2021-10-09 21:39:10 +02:00
ARCHITECTURES_BITS = {
2021-10-09 22:26:39 +02:00
'x86_64': 64,
'i686': 32,
2021-10-09 21:39:10 +02:00
}
ARCHITECTURES_SUBSYSTEMS = {
2021-10-09 22:26:39 +02:00
'x86_64': ['msys', 'clang64', 'mingw64', 'ucrt64'],
'i686': ['msys', 'clang32', 'mingw32'],
2021-10-09 21:39:10 +02:00
}
2021-10-09 23:52:19 +02:00
CATALOG = '.files'
2021-10-09 14:02:10 +02:00
CHARSET = 'u8'
DISTRIBUTION = 'distrib'
2021-10-09 20:45:16 +02:00
MINGW = 'mingw'
2021-10-09 14:36:53 +02:00
SIGNATURE = '.sig'
2021-10-09 21:39:10 +02:00
SUBSYSTEMS = ['msys', 'clang', 'mingw', 'ucrt']
2021-10-09 14:02:10 +02:00
class Remote:
def __init__(self, args):
self.location = args[arguments.REMOTE]
2021-10-09 19:46:11 +02:00
self.architectures = args[arguments.ARCHITECTURES]
2021-10-09 20:01:02 +02:00
self.subsystems = args[arguments.SUBSYSTEMS]
2021-10-09 14:36:53 +02:00
self.load()
2021-10-09 14:02:10 +02:00
2021-10-09 14:36:53 +02:00
def load(self):
2021-10-09 20:45:16 +02:00
a = {}
c = {}
2021-10-09 19:46:11 +02:00
for architecture in self.architectures:
2021-10-09 23:39:16 +02:00
location = os.path.join(self.location, DISTRIBUTION, architecture)
2021-10-10 03:46:44 +02:00
a[architecture] = hypertext.HyperText(location).archive
2021-10-09 20:45:16 +02:00
#
2021-10-09 21:59:07 +02:00
c[architecture] = {}
2021-10-09 21:39:10 +02:00
for ss in self.subsystems:
location = self.location
if ss == SUBSYSTEMS[0]:
subsystem = ss
location = os.path.join(location, subsystem, architecture)
else:
subsystem = f'{ss}{ARCHITECTURES_BITS[architecture]}'
location = os.path.join(location, MINGW, subsystem)
if subsystem in ARCHITECTURES_SUBSYSTEMS[architecture]:
2021-10-09 23:52:19 +02:00
location = os.path.join(location, f'{subsystem}{CATALOG}')
2021-10-09 23:39:16 +02:00
binary = requests.get(location).content
c[architecture][subsystem] = catalog.Catalog(binary)
2021-10-09 20:45:16 +02:00
self.archives = a
self.catalogs = c
2021-10-09 14:02:10 +02:00
def __str__(self):
2021-10-09 14:55:05 +02:00
lines = [f'Location: {self.location}',
'Archives:']
2021-10-09 14:59:07 +02:00
for architecture, archive in reversed(sorted(self.archives.items())):
2021-10-09 14:55:05 +02:00
lines.append(f'{architecture}{archive}')
2021-10-09 21:59:07 +02:00
lines.append('Subsystems:')
2021-10-09 22:26:39 +02:00
for arch, ss in reversed(sorted(self.catalogs.items())):
lines.append(f'{arch}{list(ss.keys())}')
2021-10-09 14:55:05 +02:00
return os.linesep.join(lines)