1
0
Fork 0
mirror of https://github.com/Findus23/matomo4-plugins.git synced 2024-09-19 15:23:43 +02:00
matomo4-plugins/api.py

85 lines
2.5 KiB
Python
Raw Normal View History

2020-08-31 20:27:19 +02:00
import json
from collections import OrderedDict
from typing import List, Dict
import requests
import yaml
from config import FAKE_API
2020-10-10 21:18:30 +02:00
BASEURL = "https://plugins.matomo.org/api/2.0/"
2020-08-31 20:27:19 +02:00
2023-02-13 00:42:32 +01:00
def load_additional_data(majorversion: int):
with open(f"data{majorversion}.yaml") as f:
2020-08-31 20:27:19 +02:00
return yaml.safe_load(f)
2023-02-13 00:42:32 +01:00
def fetch_plugins(version, themes=False) -> List[Dict]:
2020-08-31 20:27:19 +02:00
if FAKE_API:
2023-02-13 00:42:32 +01:00
with open(f"{version}_{themes}.json") as f:
2020-08-31 20:27:19 +02:00
return json.load(f)["plugins"]
2020-10-10 21:18:30 +02:00
r = requests.get(BASEURL + ("themes" if themes else "plugins") + "?piwik=" + version)
2023-02-13 00:42:32 +01:00
with open(f"{version}_{themes}.json", "w") as f:
json.dump(r.json(),f,indent=2)
2020-08-31 20:27:19 +02:00
return r.json()["plugins"]
def preprocess_plugin_data(plugin):
requires = plugin["versions"][-1]["requires"]
if "matomo" in requires:
plugin["supports_version"] = requires["matomo"]
else:
plugin["supports_version"] = requires["piwik"]
del plugin["versions"]
return plugin
2023-02-13 00:42:32 +01:00
def get_all_plugins(majorversion: int):
2020-08-31 20:27:19 +02:00
plugins = OrderedDict()
2023-02-13 00:42:32 +01:00
matomo_new_plugins = fetch_plugins(f"{majorversion}.0.0")
matomo_new_plugins += fetch_plugins(f"{majorversion}.0.0", themes=True)
2020-08-31 20:42:49 +02:00
supported_plugins = 0
unsupported_plugins = 0
2023-02-13 00:42:32 +01:00
for plugin in matomo_new_plugins:
plugin["supports_new"] = True
2020-08-31 20:42:49 +02:00
supported_plugins += 1
2020-08-31 20:27:19 +02:00
plugin = preprocess_plugin_data(plugin)
plugins[plugin["name"]] = plugin
2023-02-13 00:42:32 +01:00
matomo_previous_plugins = fetch_plugins(f"{majorversion - 1}.30.0")
matomo_previous_plugins += fetch_plugins(f"{majorversion - 1}.30.0", themes=True)
2020-08-31 20:27:19 +02:00
2023-02-13 00:42:32 +01:00
for plugin in matomo_previous_plugins:
plugin["supports_new"] = False
2020-08-31 20:27:19 +02:00
plugin = preprocess_plugin_data(plugin)
name = plugin["name"]
if name not in plugins:
2020-08-31 20:42:49 +02:00
unsupported_plugins += 1
2020-08-31 20:27:19 +02:00
plugins[name] = plugin
def function(plugin):
downloads = plugin[1]["numDownloads"]
if not downloads:
return 0
return -downloads
2023-02-13 00:42:32 +01:00
# if majorversion == 4:
# for name in {"CustomDimensions"}:
# CustomDimensions became a core plugin
# del plugins[name]
# unsupported_plugins -= 1
2020-08-31 20:27:19 +02:00
2023-02-13 00:42:32 +01:00
data = load_additional_data(majorversion)
2020-08-31 20:27:19 +02:00
plugins_new = {}
for name, plugin in plugins.items():
if name in data:
plugin = {**plugin, **data[name]}
plugins_new[name] = plugin
plugins = plugins_new
plugins = OrderedDict(
sorted(plugins.items(),
key=function))
2020-08-31 20:42:49 +02:00
return plugins, supported_plugins, unsupported_plugins