[Replicant] [replicant-scripts][PATCH 1/2] wikidata: Start using internal data model
Denis 'GNUtoo' Carikli
GNUtoo at cyberdimension.org
Thu Mar 19 17:18:05 UTC 2020
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>
---
data/wikidata/devices.py | 39 +++++++++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 10 deletions(-)
diff --git a/data/wikidata/devices.py b/data/wikidata/devices.py
index 50a9d21..87d2bb8 100755
--- a/data/wikidata/devices.py
+++ b/data/wikidata/devices.py
@@ -37,18 +37,26 @@ def is_a_smartphone_or_tablet_model(page):
return True
return False
-def list_all_compatible_devices(replicant_page):
- replicant_versions = replicant_page["claims"]["P348"]
- for replicant_version in replicant_versions:
- print("Replicant {}:".format(replicant_version.getTarget()))
- compatible_variants = replicant_version.toJSON().get('qualifiers', {}).get('P400', [])
+def get_all_compatible_devices(replicant_page):
+ # Example: {'6.0 0004': { 'GT-I9300': { 'device_name' : 'Galaxy SIII'}}}
+ results = {}
+
+ replicant_versions_data = replicant_page["claims"]["P348"]
+ for replicant_version_data in replicant_versions_data:
+ replicant_version = replicant_version_data.getTarget()
+ if replicant_version not in results:
+ results[replicant_version] = {}
+
+ compatible_variants = replicant_version_data.toJSON().get('qualifiers', {}).get('P400', [])
for compatible_variant in compatible_variants:
variant_version_id = "Q" + str(compatible_variant['datavalue']['value']['numeric-id'])
variant_page = pywikibot.ItemPage(repo, variant_version_id).get()
variant_name = variant_page['labels']['en']
+ if variant_name not in results[replicant_version]:
+ results[replicant_version][variant_name] = {}
+
# Try to find the associated device model name
- model_name = None
variant_superclasses = variant_page["claims"]["P279"]
# Check if the superclass is an instance of smartphone
for variant_superclass in variant_superclasses:
@@ -58,14 +66,25 @@ def list_all_compatible_devices(replicant_page):
nr_model_instances += 1
assert (nr_model_instances <= 1), "Multiple smartphone mode instances"
model_name = variant_superclass_page['labels']['en']
+ if model_name not in results[replicant_version][variant_name]:
+ results[replicant_version][variant_name]['device_name'] = model_name
+ return results
+
+def print_compatible_devices(data):
+ # Example: {'6.0 0004': { 'GT-I9300': { 'device_name' : 'Galaxy SIII'}}}
- if model_name:
- print("- {} ({})".format(model_name, variant_name))
+ for replicant_version in data.keys():
+ print("Replicant {}:".format(replicant_version))
+ for variant in data[replicant_version].keys():
+ device_name = data[replicant_version][variant].get('device_name', None)
+ if device_name:
+ print("- {} ({})".format(device_name, variant))
else:
- print("- {}".format(variant_name))
+ print("- {}".format(variant))
wikidata = pywikibot.Site("wikidata", "wikidata")
repo = wikidata.data_repository()
replicant_id = "Q7314062"
replicant_page = pywikibot.ItemPage(repo, replicant_id).get()
-list_all_compatible_devices(replicant_page)
+replicant_versions_data = get_all_compatible_devices(replicant_page)
+print_compatible_devices(replicant_versions_data)
--
2.25.2
More information about the Replicant
mailing list