Exemplo n.º 1
0
 def start():
     """Start of the program"""
     print("LOADING Config...", end=" ")
     CONFIG.load()
     print("DONE")
     print("SETTING UP DATABASE...", end=" ")
     Database.setup()
     print("DONE")
     print("LOADING AUTHENTICATION...", end=" ")
     Auth.start()
     print("DONE")
     print("LOADING SCRAPER...", end=" ")
     Scraper.start()
     print("DONE")
     print("LOADING LIBRARIES...", end=" ")
     Library.start()
     print("DONE")
     if Ripper.enabled:
         print("STARTING RIPPER...", end=" ")
         Ripper.start()
         print("DONE")
     print("STARTING WEBSERVICES...", end=" ")
     Webserver.start()
     print("DONE")
     print("TACKEM HAS STARTED")
Exemplo n.º 2
0
 def __init__(self, db_config):
     """
     Creates a Database() object and passes it to Scraper/Connector upon creation.
     """
     self.db = Database(db_config)
     self.sc = Scraper(self.db)
     self.co = Connector(self.db)
Exemplo n.º 3
0
    def GET(self, **kwargs) -> str:
        """GET Function"""

        if "tmdbid" not in kwargs:
            return self._return_data(
                "Scraper",
                "Grab By TMDBID",
                False,
                error="Missing TMDBID",
                errorNumber=0,
            )

        tvshow = Scraper.get_tvshow_details(kwargs["tmdbid"])
        data = model_to_dict(tvshow, backrefs=True)

        return self._return_data(
            "Scraper", "Grab By TMDBID", True, data=data, images=Scraper.image_config
        )
Exemplo n.º 4
0
    def GET(self, **kwargs) -> str:
        """POST Function"""

        if "name" not in kwargs:
            return self._return_data(
                "Scraper",
                "TV Show Search",
                False,
                error="Missing Name",
                errorNumber=0,
            )

        data = Scraper.search_for_tvshow(kwargs["name"], kwargs.get("page", 1))
        return self._return_data("Scraper",
                                 "TV Show Search",
                                 True,
                                 data=data,
                                 images=Scraper.image_config)
Exemplo n.º 5
0
    def GET(self, **kwargs) -> str:
        """GET Function"""

        if "imdbid" not in kwargs:
            return self._return_data(
                "Scraper",
                "Grab By IMDBID",
                False,
                error="Missing IMDBID",
                errorNumber=0,
            )

        data = Scraper.imdb_id(kwargs["imdbid"])

        return self._return_data("Scraper",
                                 "Grab By IMDBID",
                                 True,
                                 data=data,
                                 images=Scraper.image_config)
Exemplo n.º 6
0
    def html_show_data(self, read_only: bool = False) -> dict:
        """returns the data for html"""
        data = Scraper.get_movie_details(self.tmdb_id)
        return_dict = {
            "poster_url":
            Scraper.image_base + Scraper.image_config["poster_sizes"][2] +
            data.poster_path,
            "title":
            data.title,
            "original_title":
            data.original_title,
            "original_language":
            data.original_language,
            "release_date":
            data.release_date,
            "overview":
            data.overview,
            "tracks": [
                x.html_create_data(i + 1, read_only)
                for i, x in enumerate(self.tracks)
            ],
        }

        return return_dict
Exemplo n.º 7
0
class Builder:
    """
    Dedicated to building the DB, mostly by calling Scraper/Connector.
    """

    # self.sc = Scraper()
    # self.co = Connector()
    # self.db = Database()

    def __init__(self, db_config):
        """
        Creates a Database() object and passes it to Scraper/Connector upon creation.
        """
        self.db = Database(db_config)
        self.sc = Scraper(self.db)
        self.co = Connector(self.db)

    def build(self, editions):
        self.update_build_time()

        self.sc.build_edition_list(editions)
        self.co.build_edition_list(editions)

        scrape_start = time.time()
        self.sc.build(editions)
        scrape_took = time.time() - scrape_start

        if editions is None:
            translated_editions = None
        else:
            edition_dict = self.get_rel_edition_dict()
            translated_editions = [
                edition_dict[edition] or edition for edition in editions
            ]

        connect_start = time.time()
        self.co.build(translated_editions)
        connect_took = time.time() - connect_start

        log.info("Scraping took {}.".format(self.readable_time(scrape_took)))
        log.info("Connecting took {}.".format(
            self.readable_time(connect_took)))

    def readable_time(self, seconds):
        m, s = divmod(seconds, 60)
        h, m = divmod(m, 60)
        return "%d:%02d:%02d" % (h, m, s)

    def scrape(self, editions):
        self.sc.build(editions)

    def connect(self, editions):
        self.co.build(translated_editions)

    def get_rel_edition_dict(self):
        '''
        This is a semi-duplicate of linker.get_rel_edition_lists.
        '''
        query = """ SELECT editions.id, code
                    FROM editions
                        INNER JOIN rel_editions
                            ON rel_editions.id_cr = editions.id
                        INNER JOIN sdk_editions
                            ON sdk_editions.code = rel_editions.id_sdk

                    UNION ALL

                    SELECT editions.id, code
                    FROM editions
                        JOIN sdk_editions
                            ON editions.id = sdk_editions.code; """
        result = self.db.query(query)

        double_dict = {}
        for edition in result:
            double_dict[edition[0]] = edition[1]
        return double_dict

    def load_sql(self, filename):
        with open(filename, "rt", encoding='utf-8') as in_file:
            contents = in_file.read()
            statements = contents.split(';')
            for statement in statements:

                # trim whitespace
                statement = statement.strip()

                if statement is not "":
                    log.debug(
                        "executing SQL statement:\n+++{}+++".format(statement))
                    self.db.insert(statement)

    def update_build_time(self):
        """ Inserts current time into the DB as build time into `info`.`created`. """
        dtime = time.strftime('%Y-%m-%d %H:%M:%S')
        query = """
            INSERT INTO info (`key`, `created`) VALUES (1, "{}") ON DUPLICATE KEY UPDATE `created` = "{}";
            """.format(dtime, dtime)
        self.db.insert(query)

    def get_build_time(self):
        """ Returns current build time from DB. """
        query = """SELECT `created` from `info` WHERE `key`=1;"""
        result = self.db.query(query)
        return result[0][0]

    def get_db_info(self):
        """
        Fetches, combines and returns database statistics in the form of a list of strings.
        """
        info = {
            'db_built_time': self.get_build_time(),
            'scrapper': self.sc.get_db_info(),
            'connector': self.co.get_db_info()
        }
        return info