+ except network.exceptions as exception:
+ print(f"WARNING: Exception '{type(exception)}' during fetching instances (fetch_instances) from domain='{row[0]}'")
+ instances.set_last_error(row[0], exception)
+
+ # DEBUG: print("DEBUG: Success - EXIT!")
+ return 0
+
+def fetch_oliphant(args: argparse.Namespace):
+ # DEBUG: print(f"DEBUG: args[]='{type(args)}' - CALLED!")
+ locking.acquire()
+
+ # Base URL
+ base_url = "https://codeberg.org/oliphant/blocklists/raw/branch/main/blocklists"
+
+ # URLs to fetch
+ blocklists = (
+ {
+ "blocker": "artisan.chat",
+ "csv_url": "mastodon/artisan.chat.csv",
+ },{
+ "blocker": "mastodon.art",
+ "csv_url": "mastodon/mastodon.art.csv",
+ },{
+ "blocker": "pleroma.envs.net",
+ "csv_url": "mastodon/pleroma.envs.net.csv",
+ },{
+ "blocker": "oliphant.social",
+ "csv_url": "mastodon/_unified_tier3_blocklist.csv",
+ },{
+ "blocker": "mastodon.online",
+ "csv_url": "mastodon/mastodon.online.csv",
+ },{
+ "blocker": "mastodon.social",
+ "csv_url": "mastodon/mastodon.social.csv",
+ },{
+ "blocker": "mastodon.social",
+ "csv_url": "other/missing-tier0-mastodon.social.csv",
+ },{
+ "blocker": "rage.love",
+ "csv_url": "mastodon/rage.love.csv",
+ },{
+ "blocker": "sunny.garden",
+ "csv_url": "mastodon/sunny.garden.csv",
+ },{
+ "blocker": "solarpunk.moe",
+ "csv_url": "mastodon/solarpunk.moe.csv",
+ },{
+ "blocker": "toot.wales",
+ "csv_url": "mastodon/toot.wales.csv",
+ },{
+ "blocker": "union.place",
+ "csv_url": "mastodon/union.place.csv",
+ }
+ )
+
+ domains = list()
+ for block in blocklists:
+ # Is domain given and not equal blocker?
+ if isinstance(args.domain, str) and args.domain != block["blocker"]:
+ # DEBUG: print(f"DEBUG: Skipping blocker='{block['blocker']}', not matching args.domain='{args.domain}'")
+ continue
+ elif args.domain in domains:
+ # DEBUG: print(f"DEBUG: args.domain='{args.domain}' already handled - SKIPPED!")
+ continue
+
+ # Fetch this URL
+ print(f"INFO: Fetching csv_url='{block['csv_url']}' for blocker='{block['blocker']}' ...")
+ response = fba.fetch_url(f"{base_url}/{block['csv_url']}", network.web_headers, (config.get("connection_timeout"), config.get("read_timeout")))
+
+ # DEBUG: print(f"DEBUG: response[]='{type(response)}'")
+ if response.ok and response.content != "":
+ # DEBUG: print(f"DEBUG: Fetched {len(response.content)} Bytes, parsing CSV ...")
+ reader = csv.DictReader(response.content.decode('utf-8').splitlines(), dialect="unix")
+
+ # DEBUG: print(f"DEBUG: reader[]='{type(reader)}'")
+ for row in reader:
+ domain = None
+ if "#domain" in row:
+ domain = row["#domain"]
+ elif "domain" in row:
+ domain = row["domain"]
+ else:
+ # DEBUG: print(f"DEBUG: row='{row}' does not contain domain column")
+ continue
+
+ # DEBUG: print(f"DEBUG: Marking domain='{domain}' as handled")
+ domains.append(domain)
+
+ # DEBUG: print(f"DEBUG: Processing domain='{domain}' ...")
+ processed = fba.process_domain(domain, block["blocker"], inspect.currentframe().f_code.co_name)
+
+ # DEBUG: print(f"DEBUG: processed='{processed}'")