Exemple #1
0
    def find_or_create(cls, session: 'Session', _url: str, title: str = ""):

        domain = DomainName.find_or_create(session, _url)
        path = Url.get_path(_url)

        try:
            return cls.query.filter(cls.path == path).filter(
                cls.domain == domain).one()
        except sqlalchemy.orm.exc.NoResultFound or sqlalchemy.exc.InterfaceError:
            try:
                new = cls(_url, title, domain)
                session.add(new)
                session.commit()
                return new
            except sqlalchemy.exc.IntegrityError or sqlalchemy.exc.DatabaseError:
                for i in range(10):
                    try:
                        print("doing a rollback")
                        session.rollback()
                        domain = DomainName.find_or_create(session, _url)
                        path = Url.get_path(_url)
                        print(
                            f"after rollback trying to find again: {domain.domain_name} + {path}"
                        )
                        u = cls.query.filter(cls.path == path).filter(
                            cls.domain == domain).first()
                        print("Found url after recovering from race")
                        return u
                    except Exception as e:
                        print("Exception of second degree in url..." + str(i) +
                              str(e))
                        time.sleep(random.randrange(1, 10) * 0.1)
                        continue
                    break
Exemple #2
0
 def find(cls, url, title=""):
     try:
         d = DomainName.find(Url.get_domain(url))
         return (cls.query.filter(cls.path == Url.get_path(url)).filter(
             cls.domain == d).one())
     except sqlalchemy.orm.exc.NoResultFound:
         return cls(url, title)
Exemple #3
0
    def find_or_create(cls, session: 'Session', _url: str, title: str = ""):

        domain = DomainName.find_or_create(session, _url)
        path = Url.get_path(_url)

        try:
            return cls.query.filter(cls.path == path).filter(
                cls.domain == domain).one()
        # except sqlalchemy.orm.exc.NoResultFound or sqlalchemy.exc.InterfaceError:
        except:
            try:
                new = cls(_url, title, domain)
                session.add(new)
                session.commit()
                return new
            # except sqlalchemy.exc.IntegrityError or sqlalchemy.exc.DatabaseError:
            except:

                for i in range(10):
                    try:
                        session.rollback()
                        u = cls.find(cls.path == path).filter(
                            cls.domain == domain).first()
                        print("found url after recovering from race")
                        return u
                    except:
                        print("exception of second degree in url..." + str(i))
                        time.sleep(0.3)
                        continue
                    break
Exemple #4
0
    def __init__(self, url: str, title: str = "", domain: DomainName = None):

        self.path = Url.get_path(url)
        self.title = title
        if domain:
            self.domain = domain
        else:
            self.domain = DomainName.for_url_string(url)
Exemple #5
0
 def find(cls, url, title = ""):
     try:
         d = DomainName.find(Url.get_domain(url))
         return (cls.query.filter(cls.path == Url.get_path(url))
                          .filter(cls.domain == d)
                          .one())
     except sqlalchemy.orm.exc.NoResultFound:
         return cls(url, title)
def set_default_exercise_based_prob():
    zeeguu.app.test_request_context().push()
    zeeguu.db.session.commit()

    urls = Url.query.all()

    for url in urls:
        url.path = Url.get_path(url.url)
        d = DomainName.find(Url.get_domain(url.url))
        url.domain = d

        zeeguu.db.session.add(url)
        zeeguu.db.session.add(d)
        zeeguu.db.session.commit()
def set_default_exercise_based_prob():
    zeeguu.app.test_request_context().push()
    zeeguu.db.session.commit()

    urls = Url.query.all()

    for url in urls:
        url.path = Url.get_path(url.url)
        d = DomainName.find(Url.get_domain(url.url))
        url.domain = d

        zeeguu.db.session.add(url)
        zeeguu.db.session.add(d)
        zeeguu.db.session.commit()
Exemple #8
0
    def test_one_domain_multiple_urls(self):
        """
        Tests that if multiple URLs are added to the database that their
        DomainName is not added to the database more than once
        """
        # Create an 'original' URL, which is saved to the Database
        url_random_obj_origin = UrlRule().url

        # Create a random number of URLs, each with the same DomainName
        random_num = random.randint(0, 10)
        for _ in range(0, random_num):
            url_random_extended = url_random_obj_origin.as_string() + self.faker.word()
            _ = Url(url_random_extended, self.faker.word())

        domain_for_query = url_random_obj_origin.domain_name()

        try:
            assert DomainName.find(domain_for_query)
        except NoResultFound:
            assert False, "No domains found in database"
        except MultipleResultsFound:
            assert False, "There were multiple DomainNames in the database"
Exemple #9
0
 def find(cls, url, title=""):
     d = DomainName.find(Url.get_domain(url))
     return (cls.query.filter(cls.path == Url.get_path(url)).filter(
         cls.domain == d).one())
Exemple #10
0
 def __init__(self, url, title):
     self.path = Url.get_path(url)
     self.domain = DomainName.find(Url.get_domain(url))
     self.title = title
Exemple #11
0
 def make_new(self, session, url: str, title: str):
     self.path = Url.get_path(url)
     self.domain = DomainName.for_url_string(url)
     self.title = title
     self.path = Url.get_path(url)
     self.domain = DomainName.find_or_create(Url.get_domain(url))
Exemple #12
0
 def __init__(self, url, title):
     self.path = Url.get_path(url)
     self.domain = DomainName.find(Url.get_domain(url))
     self.title = title