mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-19 21:30:10 +01:00
do not assume app
is an App instance, support API usage
When using fdroidserver methods as an API, the full setup might not have taken place. `app` instances can always just be a dict, the App class is mostly just a typing shortcut. This is incremental, it only affects a couple of functions in fdroidserver/update.py.
This commit is contained in:
parent
a1df5ef86a
commit
9442a9e614
@ -1891,7 +1891,7 @@ def apply_info_from_latest_apk(apps, apks):
|
|||||||
bestver = apk['versionCode']
|
bestver = apk['versionCode']
|
||||||
bestapk = apk
|
bestapk = apk
|
||||||
|
|
||||||
if app['NoSourceSince']:
|
if app.get('NoSourceSince'):
|
||||||
apk['antiFeatures'].add('NoSourceSince')
|
apk['antiFeatures'].add('NoSourceSince')
|
||||||
|
|
||||||
if not app['added']:
|
if not app['added']:
|
||||||
@ -1901,12 +1901,12 @@ def apply_info_from_latest_apk(apps, apks):
|
|||||||
|
|
||||||
if bestver == UNSET_VERSION_CODE:
|
if bestver == UNSET_VERSION_CODE:
|
||||||
|
|
||||||
if app['Name'] is None:
|
if app.get('Name') is None:
|
||||||
app['Name'] = app['AutoName'] or appid
|
app['Name'] = app['AutoName'] or appid
|
||||||
app['icon'] = None
|
app['icon'] = None
|
||||||
logging.debug("Application " + appid + " has no packages")
|
logging.debug("Application " + appid + " has no packages")
|
||||||
else:
|
else:
|
||||||
if app['Name'] is None:
|
if app.get('Name') is None:
|
||||||
app['Name'] = bestapk['name']
|
app['Name'] = bestapk['name']
|
||||||
app['icon'] = bestapk['icon'] if 'icon' in bestapk else None
|
app['icon'] = bestapk['icon'] if 'icon' in bestapk else None
|
||||||
if app['CurrentVersionCode'] is None:
|
if app['CurrentVersionCode'] is None:
|
||||||
@ -2095,10 +2095,10 @@ def read_added_date_from_all_apks(apps, apks):
|
|||||||
for apk in apks:
|
for apk in apks:
|
||||||
if apk['packageName'] == appid:
|
if apk['packageName'] == appid:
|
||||||
if 'added' in apk:
|
if 'added' in apk:
|
||||||
if not app.added or apk['added'] < app.added:
|
if not app.get('added') or apk['added'] < app['added']:
|
||||||
app.added = apk['added']
|
app['added'] = apk['added']
|
||||||
if not app.lastUpdated or apk['added'] > app.lastUpdated:
|
if not app.get('lastUpdated') or apk['added'] > app['lastUpdated']:
|
||||||
app.lastUpdated = apk['added']
|
app['lastUpdated'] = apk['added']
|
||||||
|
|
||||||
|
|
||||||
def read_names_from_apks(apps, apks):
|
def read_names_from_apks(apps, apks):
|
||||||
|
BIN
tests/Virgin-islands-british_centralamerica_2.obf.zip
Normal file
BIN
tests/Virgin-islands-british_centralamerica_2.obf.zip
Normal file
Binary file not shown.
@ -18,6 +18,7 @@ import yaml
|
|||||||
import zipfile
|
import zipfile
|
||||||
import textwrap
|
import textwrap
|
||||||
from binascii import unhexlify
|
from binascii import unhexlify
|
||||||
|
from datetime import datetime
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
from testcommon import TmpCwd
|
from testcommon import TmpCwd
|
||||||
|
|
||||||
@ -57,6 +58,12 @@ DONATION_FIELDS = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Options:
|
||||||
|
allow_disabled_algorithms = False
|
||||||
|
clean = False
|
||||||
|
rename_apks = False
|
||||||
|
|
||||||
|
|
||||||
class UpdateTest(unittest.TestCase):
|
class UpdateTest(unittest.TestCase):
|
||||||
'''fdroid update'''
|
'''fdroid update'''
|
||||||
|
|
||||||
@ -452,6 +459,56 @@ class UpdateTest(unittest.TestCase):
|
|||||||
reset = fdroidserver.update.get_cache()
|
reset = fdroidserver.update.get_cache()
|
||||||
self.assertEqual(2, len(reset))
|
self.assertEqual(2, len(reset))
|
||||||
|
|
||||||
|
def test_scan_repo_files(self):
|
||||||
|
config = dict()
|
||||||
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
fdroidserver.common.config = config
|
||||||
|
fdroidserver.update.config = config
|
||||||
|
|
||||||
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
|
os.chdir(testdir)
|
||||||
|
os.mkdir('repo')
|
||||||
|
os.mkdir('stats')
|
||||||
|
with open(os.path.join('stats', 'known_apks.txt'), 'w') as fp:
|
||||||
|
fp.write('se.manyver_30.apk se.manyver 2018-10-10\n')
|
||||||
|
filename = 'Virgin-islands-british_centralamerica_2.obf.zip'
|
||||||
|
shutil.copy(os.path.join(self.basedir, filename), 'repo')
|
||||||
|
knownapks = fdroidserver.common.KnownApks()
|
||||||
|
files, fcachechanged = fdroidserver.update.scan_repo_files(dict(), 'repo', knownapks, False)
|
||||||
|
knownapks.writeifchanged()
|
||||||
|
self.assertTrue(fcachechanged)
|
||||||
|
|
||||||
|
info = files[0]
|
||||||
|
self.assertEqual(filename, info['apkName'])
|
||||||
|
self.assertEqual(datetime, type(info['added']))
|
||||||
|
self.assertEqual(os.path.getsize(os.path.join('repo', filename)), info['size'])
|
||||||
|
self.assertEqual('402ee0799d5da535276b5a3672fb049d6df3e1727cfb35369c8962c4a42cac3d',
|
||||||
|
info['packageName'])
|
||||||
|
|
||||||
|
def test_read_added_date_from_all_apks(self):
|
||||||
|
config = dict()
|
||||||
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
fdroidserver.common.config = config
|
||||||
|
fdroidserver.update.config = config
|
||||||
|
fdroidserver.update.options = Options
|
||||||
|
os.chdir(os.path.join(localmodule, 'tests'))
|
||||||
|
apps = fdroidserver.metadata.read_metadata()
|
||||||
|
knownapks = fdroidserver.common.KnownApks()
|
||||||
|
apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks)
|
||||||
|
fdroidserver.update.read_added_date_from_all_apks(apps, apks)
|
||||||
|
|
||||||
|
def test_apply_info_from_latest_apk(self):
|
||||||
|
config = dict()
|
||||||
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
fdroidserver.common.config = config
|
||||||
|
fdroidserver.update.config = config
|
||||||
|
fdroidserver.update.options = Options
|
||||||
|
os.chdir(os.path.join(localmodule, 'tests'))
|
||||||
|
apps = fdroidserver.metadata.read_metadata()
|
||||||
|
knownapks = fdroidserver.common.KnownApks()
|
||||||
|
apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks)
|
||||||
|
fdroidserver.update.apply_info_from_latest_apk(apps, apks)
|
||||||
|
|
||||||
def test_scan_apk(self):
|
def test_scan_apk(self):
|
||||||
config = dict()
|
config = dict()
|
||||||
fdroidserver.common.fill_config_defaults(config)
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
@ -599,6 +656,7 @@ class UpdateTest(unittest.TestCase):
|
|||||||
_, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks,
|
_, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', knownapks,
|
||||||
False)
|
False)
|
||||||
# Don't care about the date added to the repo and relative apkName
|
# Don't care about the date added to the repo and relative apkName
|
||||||
|
self.assertEqual(datetime, type(apk['added']))
|
||||||
del apk['added']
|
del apk['added']
|
||||||
del apk['apkName']
|
del apk['apkName']
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user