Beispiel #1
0
def relation_fixture():
    r1 = relation.Relation()
    r1.header = ["id", "name", "city"]
    data = {
        ("1", "Gabriel", "Belén"),
        ("23", "Rodrigo", "Belén"),
        ("12", "Mercedes", "Las Juntas"),
        ("2", "Diego", "Santiago del Estero")
    }
    for d in data:
        r1.insert(d)

    r2 = relation.Relation()
    r2.header = ["id", "skill"]
    data = {
        ("3", "Ruby"),
        ("1", "Python"),
        ("12", "Rocas"),
        ("23", "Games")
    }
    for d in data:
        r2.insert(d)

    r3 = relation.Relation()
    r3.header = ["date"]
    data = {
        ("2015-12-12"),
        ("2012-07-09"),
        ("1998-12-09")
    }
    for d in data:
        r3.insert(d)
    return r1, r2, r3
Beispiel #2
0
def test_difference(qtbot):
    r = relation.Relation()
    r.header = ["patente"]
    data = {
        ("ass-002",), ("dde-456",), ("agt-303",),
        ("tsv-360",), ("k-23526",), ("cdd-479",),
        ("cdt-504",), ("exs-900",), ("beo-825",),
        ("afs-448",), ("fvj-530",), ("fvv-120",),
        ("gaa-589",)
    }
    for i in data:
        r.insert(i)
    r2 = relation.Relation()
    r2.header = ["patente"]
    data = {
        ("dde-456",), ("dde-456",), ("beo-825",),
        ("k-23526",), ("gaa-589",), ("ass-002",),
        ("ass-002",), ("fvj-530",), ("tsv-360",),
        ("tsv-360",), ("cdt-504",), ("cdt-504",)
    }
    for i in data:
        r2.insert(i)
    expected = {
        ("agt-303",), ("cdd-479",), ("exs-900",),
        ("afs-448",), ("fvv-120",)
    }
    assert r.cardinality() == 13
    new = r.difference(r2)
    assert new.content == expected
    assert new.cardinality() == 5
Beispiel #3
0
    def create_database(self, data):
        for table in data.get('tables'):
            # Get data
            table_name = table.get('name')
            header = table.get('header')
            tuples = table.get('tuples')

            # Creo el objeto Relation
            rela = relation.Relation()
            rela.header = header
            # Relleno el objeto con las tuplas
            for _tuple in tuples:
                rela.insert(_tuple)
            # Se usa el patrón Modelo/Vista/Delegado
            # Para entender más, leer el código de cáda módulo
            # src.gui.model
            # src.gui.view
            # src.gui.delegate
            _view = self.create_table(rela, table_name)
            # Add relation to relations dict
            self.table_widget.add_relation(table_name, rela)
            # Add table to stacked
            self.table_widget.stacked.addWidget(_view)
            # Add table name to list widget
            self.lateral_widget.relation_list.add_item(table_name,
                                                       rela.cardinality(),
                                                       rela.degree())
Beispiel #4
0
def test_wrong_size_relation():
    r = relation.Relation()
    r.header = ["aaa", "bbb"]
    data = {
        ("a", "b", "c", "d"),
        ("e", "f", "g", "h")
    }
    with pytest.raises(relation.WrongSizeError):
        for d in data:
            r.insert(d)
 def test_remove_column(self):
     rela = relation.Relation()
     rela.header = ['id', 'name', 'city']
     content = [['1', 'Gabriel', 'Belén'], ['23', 'Rodrigo', 'Belén']]
     for t in content:
         rela.insert(t)
     expected_header = ['id', 'city']
     expected_content = [['1', 'Belén'], ['23', 'Belén']]
     rela.remove_column(1)
     self.assertEqual(expected_header, rela.header)
     self.assertEqual(expected_content, rela.content.content)
    def setUp(self):
        # Relation 1
        self.r1 = relation.Relation()
        # Fields
        f1 = ['id', 'name', 'city']
        self.r1.header = f1

        # Data
        data1 = [['1', 'Gabriel', 'Belén'], ['23', 'Rodrigo', 'Belén']]
        for i in data1:
            self.r1.insert(i)

        # Relation 2
        self.r2 = relation.Relation()
        # Fields
        f2 = ['id', 'skill']
        self.r2.header = f2
        # Data
        data2 = [['3', 'Ruby'], ['1', 'Python']]
        for i in data2:
            self.r2.insert(i)

        # Relation 3
        self.r3 = relation.Relation()
        # Fields
        self.r3.header = ['date']
        data3 = [["2015-12-12"], ["2012-07-09"], ["1998-12-09"]]
        for i in data3:
            self.r3.insert(i)

        # Relation 4
        self.r4 = relation.Relation()
        self.r4.header = ['id', 'skill']
        data4 = [["192", "Ruby"], ["43", "Go"]]
        for i in data4:
            self.r4.insert(i)
Beispiel #7
0
def test_selection3():
    r = relation.Relation()
    r.header = ["curso", "precio"]
    data = {
        ("curso1", "400"),
        ("curso2", "104"),
        ("curso3", "500"),
        ("curso4", "1000"),
        ("curso5", "200")
    }
    for d in data:
        r.insert(d)
    assert r.cardinality() == 5
    assert r.degree() == 2
    sel = r.select("precio > 400")
    expected = {("curso3", "500"), ("curso4", "1000")}
    assert sel.content == expected
Beispiel #8
0
    def load_relation(self, filenames):
        for filename in filenames:
            with open(filename) as f:
                csv_reader = csv.reader(f)
                header = next(csv_reader)
                rel = relation.Relation()
                rel.header = header
                for i in csv_reader:
                    rel.insert(i)
                relation_name = file_manager.get_basename(filename)
                if not self.table_widget.add_relation(relation_name, rel):
                    QMessageBox.information(
                        self, self.tr("Información"),
                        self.tr("Ya existe una relación "
                                "con el nombre  "
                                "'{}'".format(relation_name)))
                    return False

            self.table_widget.add_table(rel, relation_name)
            # self.lateral_widget.add_item(relation_name, rel.cardinality())
            return True
Beispiel #9
0
def test_cardinality():
    r = relation.Relation()
    r.header = ["id", "nombre"]
    for i in {("1", "gabriel"), ("3", "rodrigo"), ("2", "mechi")}:
        r.insert(i)
    assert r.cardinality() == 3
Beispiel #10
0
def test_valid_header():
    r = relation.Relation()
    with pytest.raises(relation.InvalidFieldNameError):
        r.header = ["id", "nombre foo", "skills"]
    def _create(self):

        relation_name = self._line_relation_name.text().strip()
        if not relation_name:
            QMessageBox.critical(self, "Error",
                                 self.tr("Relation name "
                                         "not specified"))
            return
        central = Pireal.get_service("central")
        if relation_name in central.get_active_db().table_widget.relations:
            QMessageBox.information(
                self,
                "Error",
                self.tr("Ya existe una relación con el nombre "
                        "<b>{}</b>.".format(relation_name))
            )
            return
        # Table model
        model = self._view.model()
        # Row and column count
        nrow = model.rowCount()
        ncol = model.columnCount()
        # Create new relation object
        rela = relation.Relation()

        # Header
        try:
            header = []
            for i in range(ncol):
                text = model.horizontalHeaderItem(i).text().strip()
                header.append(text)
            rela.header = header
        except Exception as reason:
            QMessageBox.critical(self,
                                 self.tr("Header error"),
                                 str(reason))
            return

        # Load relation
        for row in range(nrow):
            tuples = []
            for column in range(ncol):
                item = model.item(row, column)
                try:
                    if not item.text().strip():
                        raise Exception
                except:
                    QMessageBox.information(
                        self,
                        "Algo ha salido mal",
                        self.tr("Los espacios en blanco son tan aburridos :/."
                                "<br><br>Por favor ingrese un dato en la "
                                "fila <b>{}</b>, columna:<b>{}</b>".format(
                                    row + 1, column + 1)))
                    return
                tuples.append(item.text().strip())
            rela.insert(tuple(tuples))

        # Data
        # self.data = rela, relation_name
        self.created.emit(rela, relation_name)
        self.close()