#!/usr/bin/env python3 """ Parent class for specific Journal """ from abc import ABCMeta, abstractmethod from bs4 import BeautifulSoup import requests from input.publication import Publication class JournalFetcher(metaclass=ABCMeta): """ This is a abstract-class for fetcher modules """ @staticmethod def get_soup(url: str) -> BeautifulSoup: """ Retrieves webside-html and returns a BeautifulSoup-instance Parameters: ----------- :type url: str :param url: doi-url to a publication :return: BeatifulSoup-instance """ try: req = requests.get(url) except requests.exceptions.HTTPError as err: raise SystemExit(err) return BeautifulSoup(req.content, 'html.parser') @staticmethod @abstractmethod def can_use_url(url: str) -> bool: """ Abstract-function to be implemented in subclass. Checks if given url links to a supported journal """ raise AttributeError("JournalFetcher for '{}' hasnt implemented 'can_use_url()'".format(url)) @staticmethod @abstractmethod def get_publication(url: str) -> Publication: """ Abstract-function to be implemented in subclass. Creates a Publication-instance. """ raise AttributeError("JournalFetcher for '{}' hasnt implemented 'get_publication()'".format(url))