Skip to content
Snippets Groups Projects
journal_fetcher.py 1.41 KiB
Newer Older
#!/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))