Ejemplo n.º 1
0
    def test_create_when_already_exists(self):
        with self.assertRaises(Exception):
            q = Project()
            q.new(os.path.join(tempfile.gettempdir(), uuid.uuid4().hex))

        with self.assertRaises(Exception):
            q = Project()
            q.open(os.path.join(tempfile.gettempdir(), uuid.uuid4().hex))
Ejemplo n.º 2
0
    def test_creation(self):
        test_file = temp_proj_name
        with self.assertRaises(FileNotFoundError):
            p = Project()
            p.load(test_file)

        p = Project()
        p.new(test_file)
        p.conn.close()
Ejemplo n.º 3
0
    def test_connection_with_new_project(self):
        temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                        uuid.uuid4().hex)
        proj = Project()
        proj.new(temp_proj_folder)
        proj.close()

        proj = Project()
        proj.open(temp_proj_folder)
        conn = database_connection()
        cursor = conn.cursor()
        cursor.execute('select count(*) from links')

        self.assertEqual(cursor.fetchone()[0], 0,
                         "Returned more links thant it should have")
        proj.close()
Ejemplo n.º 4
0
    def setUp(self) -> None:
        os.environ['PATH'] = os.path.join(
            tempfile.gettempdir(), 'temp_data') + ';' + os.environ['PATH']
        self.temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                             uuid.uuid4().hex)
        copytree(no_triggers_project, self.temp_proj_folder)
        self.proj = Project()
        self.proj.open(self.temp_proj_folder)
        self.curr = self.proj.conn.cursor()

        # Modes to add
        sql = 'INSERT INTO modes (mode_name, mode_id) VALUES (?, ?);'
        for mid in ['p', 'l', 'g', 'x', 'y', 'd', 'k', 'a', 'r', 'n', 'm']:
            self.curr.execute(sql, [f'mode_{mid}', mid])

        self.proj.conn.commit()

        curr = self.proj.conn.cursor()
        self.rtree = True
        try:
            curr.execute("SELECT rtreecheck('idx_nodes_geometry');")
        except Exception as e:
            self.rtree = False
            warn(f'RTREE not available --> {e.args}')

        root = os.path.dirname(os.path.realpath(__file__)).replace('tests', '')
        qry_file = os.path.join(
            root, "database_specification/triggers/modes_table_triggers.sql")
        with open(qry_file, "r") as sql_file:
            self.queries = sql_file.read()
        self.queries = [cmd for cmd in self.queries.split("#")]
Ejemplo n.º 5
0
    def doWork(self):
        self.emit_messages(message="Initializing project", value=0, max_val=1)
        self.project = Project()
        self.project.new(self.output_file)
        self.project.conn.close()
        self.project.conn = qgis.utils.spatialite_connect(self.output_file)
        self.project.network.conn = self.project.conn
        self.project.network.create_empty_tables()

        # Add the required extra fields to the link layer
        self.emit_messages(
            message="Adding extra network data fields to database",
            value=0,
            max_val=1)
        self.additional_fields_to_layers('links', self.link_layer,
                                         self.link_fields)
        self.additional_fields_to_layers('nodes', self.node_layer,
                                         self.node_fields)

        conn = qgis.utils.spatialite_connect(self.output_file)

        self.transfer_layer_features("links", self.link_layer,
                                     self.link_fields)
        self.transfer_layer_features("nodes", self.node_layer,
                                     self.node_fields)

        self.emit_messages(message="Creating layer triggers",
                           value=0,
                           max_val=1)
        self.project.network.add_triggers()
        self.emit_messages(message="Spatial indices", value=0, max_val=1)
        self.project.network.add_spatial_index()
        self.ProgressText.emit("DONE")
Ejemplo n.º 6
0
    def setUp(self) -> None:
        self.file = os.path.join(gettempdir(),
                                 "aequilibrae_project_test.sqlite")
        self.project = Project(self.file, True)

        self.file2 = os.path.join(gettempdir(),
                                  "aequilibrae_project_test2.sqlite")
        self.conn = sqlite3.connect(self.file2)
        self.conn.enable_load_extension(True)
        plat = platform.platform()
        pth = os.getcwd()
        if "WINDOWS" in plat.upper():
            par = Parameters()
            spatialite_path = par.parameters["system"]["spatialite_path"]
            if os.path.isfile(
                    os.path.join(spatialite_path, "mod_spatialite.dll")):
                os.chdir(spatialite_path)
        try:
            self.conn.load_extension("mod_spatialite")
        except Exception as e:
            warn(
                f"AequilibraE might not work as intended without spatialite. {e.args}"
            )
        os.chdir(pth)
        self.network = Network(self)
Ejemplo n.º 7
0
    def setUp(self) -> None:
        os.environ['PATH'] = os.path.join(gettempdir(), 'temp_data') + ';' + os.environ['PATH']
        self.proj_dir = os.path.join(gettempdir(), uuid.uuid4().hex)
        copytree(siouxfalls_project, self.proj_dir)

        self.project = Project()
        self.project.open(self.proj_dir)
Ejemplo n.º 8
0
 def setUp(self) -> None:
     os.environ['PATH'] = os.path.join(gettempdir(), 'temp_data') + ';' + os.environ['PATH']
     self.proj_path = os.path.join(gettempdir(), f'aeq_{uuid.uuid4().hex}')
     copytree(siouxfalls_project, self.proj_path)
     self.siouxfalls = Project()
     self.siouxfalls.open(self.proj_path)
     remove_triggers(self.siouxfalls.conn)
     add_triggers(self.siouxfalls.conn)
Ejemplo n.º 9
0
 def test_opening_wrong_folder(self):
     temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                     uuid.uuid4().hex)
     self.proj.close()
     with self.assertRaises(FileNotFoundError):
         proj = Project()
         proj.open(temp_proj_folder)
     self.proj.open(self.temp_proj_folder)
Ejemplo n.º 10
0
    def setUp(self) -> None:
        proj_dir = os.path.join(gettempdir(), uuid.uuid4().hex)
        copytree(siouxfalls_project, proj_dir)

        self.project = Project()
        self.project.open(proj_dir)
        self.matrices = self.project.matrices
        self.matrices.reload()
        self.curr = self.project.conn.cursor()
Ejemplo n.º 11
0
    def setUp(self) -> None:
        os.environ["PATH"] = os.path.join(gettempdir(), "temp_data") + ";" + os.environ["PATH"]

        self.proj_dir = os.path.join(gettempdir(), uuid.uuid4().hex)
        copytree(siouxfalls_project, self.proj_dir)

        self.project = Project()
        self.project.open(self.proj_dir)
        self.network = self.project.network
        self.curr = self.project.conn.cursor()
 def final_steps(self):
     self.project = Project(self.output_path.text(), True)
     self.project.network.create_empty_tables()
     curr = self.project.conn.cursor()
     curr.execute("""ALTER TABLE links ADD COLUMN osm_id integer""")
     curr.execute("""ALTER TABLE nodes ADD COLUMN osm_id integer""")
     self.project.conn.commit()
     self.project.conn.close()
     self.builder = OSMBuilder(self.downloader.json, self.project.source)
     self.run_thread()
Ejemplo n.º 13
0
 def setUp(self) -> None:
     os.environ["PATH"] = os.path.join(
         tempfile.gettempdir(), "temp_data") + ";" + os.environ["PATH"]
     self.temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                          uuid4().hex)
     copytree(siouxfalls_project, self.temp_proj_folder)
     self.project = Project()
     self.project.open(self.temp_proj_folder)
     self.project.network.build_graphs()
     self.graph = self.project.network.graphs["c"]
Ejemplo n.º 14
0
 def setUp(self) -> None:
     self.file = os.path.join(gettempdir(),
                              "aequilibrae_project_test.sqlite")
     self.project = Project()
     self.project.new(self.file)
     self.source = self.file
     self.file2 = os.path.join(gettempdir(),
                               "aequilibrae_project_test2.sqlite")
     self.conn = sqlite3.connect(self.file2)
     self.conn = spatialite_connection(self.conn)
     self.network = Network(self)
Ejemplo n.º 15
0
    def setUp(self) -> None:
        self.temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                             uuid.uuid4().hex)
        copytree(no_triggers_project, self.temp_proj_folder)
        self.proj = Project()
        self.proj.open(self.temp_proj_folder)
        self.curr = self.proj.conn.cursor()

        letters = [
            random.choice(string.ascii_letters + '_') for x in range(20)
        ]
        self.random_string = ''.join(letters)
Ejemplo n.º 16
0
    def setUp(self) -> None:
        self.matrix = AequilibraeMatrix()
        self.matrix.load(siouxfalls_demand)
        self.matrix.computational_view()

        self.project = Project(siouxfalls_project)
        self.project.network.build_graphs()
        self.car_graph = self.project.network.graphs['c']  # type: Graph
        self.car_graph.set_graph('free_flow_time')
        self.car_graph.set_blocked_centroid_flows(False)

        self.assignment = TrafficAssignment()
        self.assigclass = TrafficClass(self.car_graph, self.matrix)
Ejemplo n.º 17
0
    def run_load_project(self):
        formats = ["AequilibraE Project(*.sqlite)"]
        path, dtype = GetOutputFileName(
            QtWidgets.QDialog(),
            "AequilibraE Project",
            formats,
            ".sqlite",
            standard_path(),
        )

        # Cleans the project descriptor
        tab_count = 1
        for i in range(tab_count):
            self.projectManager.removeTab(i)

        if dtype is not None:
            self.contents = []
            self.showing.setVisible(True)
            self.project = Project()
            self.project.load(path)
            self.project.conn = qgis.utils.spatialite_connect(path)
            self.project.network.conn = self.project.conn

            uri = QgsDataSourceUri()
            uri.setDatabase(path)
            uri.setDataSource('', 'links', 'geometry')
            self.link_layer = QgsVectorLayer(uri.uri(), 'links', 'spatialite')
            QgsProject.instance().addMapLayer(self.link_layer)

            uri.setDataSource('', 'nodes', 'geometry')
            self.node_layer = QgsVectorLayer(uri.uri(), 'nodes', 'spatialite')
            QgsProject.instance().addMapLayer(self.node_layer)

            descr = QWidget()
            descrlayout = QVBoxLayout()
            # We create a tab with the main description of the project
            p1 = QLabel('Project: {}'.format(path))
            p2 = QLabel('Modes: {}'.format(', '.join(
                self.project.network.modes())))
            p3 = QLabel('Total Links: {:,}'.format(
                self.project.network.count_links()))
            p4 = QLabel('Total Nodes: {:,}'.format(
                self.project.network.count_nodes()))

            for p in [p1, p2, p3, p4]:
                descrlayout.addWidget(p)

            descr.setLayout(descrlayout)
            self.tabContents = [(descr, "Project")]
            self.projectManager.addTab(descr, "Project")
Ejemplo n.º 18
0
    def setUp(self) -> None:
        os.environ['PATH'] = os.path.join(
            gettempdir(), '../../temp_data') + ';' + os.environ['PATH']

        self.proj_dir = os.path.join(gettempdir(), uuid.uuid4().hex)
        copytree(siouxfalls_project, self.proj_dir)

        self.project = Project()
        self.project.open(self.proj_dir)
        self.network = self.project.network
        self.curr = self.project.conn.cursor()

        self.links = self.network.links
        self.modes = self.network.modes
        self.links = self.network.links
        self.lid = randint(1, 24)
        self.link = self.links.get(self.lid)
 def signal_handler(self, val):
     if val[0] == "Value":
         self.progressbar.setValue(val[1])
     elif val[0] == "maxValue":
         self.progressbar.setRange(0, val[1])
     elif val[0] == "text":
         self.progress_label.setText(val[1])
     elif val[0] == "finished_threaded_procedure":
         self.project = Project(self.output_path.text())
         self.progress_label.setText('Adding spatial indices')
         self.project.network.add_spatial_index()
         self.project.network.add_triggers()
         l = self.project.network.count_links()
         n = self.project.network.count_nodes()
         self.report.append(reporter(f'{l:,} links generated'))
         self.report.append(reporter(f'{n:,} nodes generated'))
         self.leave()
Ejemplo n.º 20
0
    def test_create_from_osm(self):
        thresh = 0.05
        if os.environ.get('GITHUB_WORKFLOW', 'ERROR') == 'Code coverage':
            thresh = 1.01

        if random() < thresh:
            self.siouxfalls.close()
            self.project = Project()
            self.project.new(self.proj_path2)
            # self.network.create_from_osm(west=153.1136245, south=-27.5095487, east=153.115, north=-27.5085, modes=["car"])
            self.project.network.create_from_osm(west=-112.185,
                                                 south=36.59,
                                                 east=-112.179,
                                                 north=36.60)
            curr = self.project.conn.cursor()

            curr.execute("""select count(*) from links""")
            lks = curr.fetchone()[0]

            curr.execute("""select count(distinct osm_id) from links""")
            osmids = curr.fetchone()[0]

            if osmids == 0:
                warn('COULD NOT RETRIEVE DATA FROM OSM')
                return

            if osmids >= lks:
                self.fail("OSM links not broken down properly")

            curr.execute("""select count(*) from nodes""")
            nds = curr.fetchone()[0]

            if lks > nds:
                self.fail(
                    "We imported more links than nodes. Something wrong here")
            self.project.close()
            self.siouxfalls.open(self.proj_path)
        else:
            print('Skipped check to not load OSM servers')
Ejemplo n.º 21
0
    def test_exclude_links(self):
        p = Project()
        p.load(siouxfalls_project)
        p.network.build_graphs()

        g = p.network.graphs['c']  # type: Graph

        # excludes a link before any setting or preparation
        g.exclude_links([12])

        g.set_graph('distance')
        r1 = PathResults()
        r1.prepare(g)
        r1.compute_path(1, 14)
        self.assertEqual(list(r1.path), [2, 6, 10, 34])

        # We exclude one link that we know was part of the last shortest path
        g.exclude_links([10])
        r2 = PathResults()
        r2.prepare(g)
        r2.compute_path(1, 14)
        self.assertEqual(list(r2.path), [2, 7, 36, 34])

        p.conn.close()
Ejemplo n.º 22
0
 def setUp(self) -> None:
     self.temp_proj_folder = os.path.join(tempfile.gettempdir(),
                                          uuid.uuid4().hex)
     self.proj = Project()
     self.proj.new(self.temp_proj_folder)
Ejemplo n.º 23
0
    def test_creation(self):
        test_file = temp_proj_name
        self.assertRaises(FileNotFoundError, Project, test_file)

        p = Project(test_file, True)
        p.conn.close()