Commit 802bc6ef authored by Tiago Peixoto's avatar Tiago Peixoto
Browse files

Add fediverse entry

parent 8426d557
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Tiago de Paula Peixoto <tiago@skewed.de>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
from .. import *
title = "Fediverse network (2018)"
description = """An early snapshot of the federation network among web publishers using the ActivityPub protocol. Nodes are instances, and a directed edge exists if an instance follows another instance."""
tags = ['Social', 'Online', 'Information']
url = 'https://gist.github.com/Gargron/48e67b1b14723cd178c951fe7f373a38'
citation = [('Eugen Rochko, "Map of the fediverse" (2018)', 'https://gist.github.com/Gargron/48e67b1b14723cd178c951fe7f373a38')]
icon_hash = None
upstream_prefix = 'https://gist.github.com/Gargron/48e67b1b14723cd178c951fe7f373a38/raw/e57de7329d981adc2fbbab9264f0eb8ce3a8db46'
files = [('map.gdf', None, 'gdf')]
def fetch_upstream(force=False):
return fetch_upstream_files(__name__.split(".")[-1], upstream_prefix, files,
force)
@cache_network()
@coerce_props()
@annotate()
def parse(alts=None):
global files
name = __name__.split(".")[-1]
for fnames, alt, fmt in files:
if alts is not None and alt not in alts:
continue
if isinstance(fnames, str):
fnames = [fnames]
with ExitStack() as stack:
fs = [stack.enter_context(open_upstream_file(name, fn, "r")) for fn in fnames]
g = Graph()
g.vp.domain = g.new_vp("string")
for line in fs[0]:
if line.startswith("nodedef>"):
continue
if line.startswith("edgedef>"):
break
vals = line.strip().split(",")
v = g.add_vertex()
g.vp.domain[v] = ",".join(vals[1:])
for line in fs[0]:
vals = line.strip().split(",")
g.add_edge(int(vals[0]) - 1, int(vals[1]) -1)
yield alt, g
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment