Skip to content
Snippets Groups Projects
serializers.py 3.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
    def serialize_domain(data):
        return {"name": data["name"]}
    
    
    
    def serialize_check(raw):
        data = {
            "up": raw["up"],
            "time": raw["time"].isoformat(),
            "usage": {
                "users": {
                    "total": raw["usage_users_total"],
                    "activeHalfyear": raw["usage_users_active_half_year"],
                    "activeMonth": raw["usage_users_active_month"],
                },
                "listenings": {"total": raw["usage_listenings_total"]},
    
                "downloads": {"total": raw["usage_downloads_total"]},
    
            },
            "library": {
                "music": {"hours": raw["library_music_hours"]},
                "tracks": {"total": raw["library_tracks_total"]},
                "albums": {"total": raw["library_albums_total"]},
                "artists": {"total": raw["library_artists_total"]},
            },
            "settings": {
                "federationEnabled": raw["federation_enabled"],
                "openRegistrations": raw["open_registrations"],
                "anonymousCanListen": raw["anonymous_can_listen"],
            },
            "software": {
                "name": raw["software_name"],
                "versionDetail": {
                    "major": raw["software_version_major"],
                    "minor": raw["software_version_minor"],
                    "patch": raw["software_version_patch"],
                    "prerelease": raw["software_prerelease"],
                    "build": raw["software_build"],
                },
            },
        }
        try:
            data["software"]["version"] = semver.format_version(
                major=raw["software_version_major"],
                minor=raw["software_version_minor"],
                patch=raw["software_version_patch"],
                prerelease=raw["software_prerelease"],
                build=raw["software_build"],
            )
        except (TypeError, ValueError):
            data["software"]["version"] = ""
        return data
    
    
    def serialize_domain_from_check(data):
        data = data.copy()
    
        data.pop("name", None)
        data.pop("blocked", None)
    
        if "time" in data:
            data["time"] = data["time"].isoformat()
        name = data.pop("domain")
    
        return {
            "name": name,
            "node_name": data.pop("node_name"),
            "first_seen": data.pop("first_seen").isoformat(),
            "lastCheck": data,
        }
    
    
    
    def serialize_rss_feed_from_checks(checks):
        feed = [
            '<?xml  version="1.0" encoding="UTF-8" ?>',
            '<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">',
            "  <channel>",
            "    <title>Latest Funkwhale pods</title>",
            "    <link>https://network.funkwhale.audio/dashboards/</link>",
            "    <description>Latest known pods from the Funkwhale network.</description>",
            "    <language>en</language>",
        ]
    
        sorted_checks = sorted(checks, key=lambda check: check["first_seen"], reverse=True)
        for check in sorted_checks:
            first_seen = check["first_seen"]
            ctime = first_seen.ctime()
            pub_date = "{}, {:02d} {}".format(
                ctime[0:3], first_seen.day, ctime[4:7]
            ) + first_seen.strftime(" %Y %H:%M:%S %z")
            feed += [
                "    <item>",
                "      <title>{}</title>".format(check["domain"]),
                "      <link>https://{}/about</link>".format(check["domain"]),
                "      <pubDate>{}</pubDate>".format(pub_date),
                "    </item>",
            ]
        feed += [
            "  </channel>",
            "</rss>",
        ]
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        return "".join(feed)