Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions .github/workflows/pylint.yml

This file was deleted.

23 changes: 23 additions & 0 deletions .github/workflows/python-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Lint Python

on: [push]

jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pylint
- name: Analysing the code with pylint
run: |
pylint $(git ls-files '*.py')
23 changes: 23 additions & 0 deletions .github/workflows/python-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Test Python

on: [push]

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pathtraits
- name: Unit tests
run: |
python -m unittest discover
11 changes: 11 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./test",
"-p",
"*test.py"
],
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true
}
25 changes: 1 addition & 24 deletions pathtraits/access.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,8 @@ def get(path, db_path, verbose):
if verbose:
logging.basicConfig(level=logging.DEBUG)

abs_path = os.path.abspath(path)
leaf_dir = os.path.dirname(abs_path) if os.path.isfile(abs_path) else abs_path
dirs = leaf_dir.split("/")

db = TraitsDB(db_path)

# get traits from path and its parents
dirs_data = []
data = db.get("data", path=abs_path)
if data:
dirs_data.append(data)
for i in reversed(range(0, len(dirs))):
cur_path = "/".join(dirs[0 : i + 1])
data = db.get("data", path=cur_path)
if data:
dirs_data.append(data)

# inherit traits: children overwrite parent path traits
res = {}
for cur_data in reversed(dirs_data):
for k, v in cur_data.items():
if v and k != "path":
res[k] = v

# output
res = db.get_dict(path)
if len(res) > 0:
print(yaml.safe_dump(res))
else:
Expand Down
24 changes: 24 additions & 0 deletions pathtraits/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,30 @@ def get(self, table, cols="*", condition=None, **kwargs):
res = {k: v for k, v in zip(keys, values)}
return res

def get_dict(self, path):
abs_path = os.path.abspath(path)
leaf_dir = os.path.dirname(abs_path) if os.path.isfile(abs_path) else abs_path
dirs = leaf_dir.split("/")

# get traits from path and its parents
dirs_data = []
data = self.get("data", path=abs_path)
if data:
dirs_data.append(data)
for i in reversed(range(0, len(dirs))):
cur_path = "/".join(dirs[0 : i + 1])
data = self.get("data", path=cur_path)
if data:
dirs_data.append(data)

# inherit traits: children overwrite parent path traits
res = {}
for cur_data in reversed(dirs_data):
for k, v in cur_data.items():
if v and k != "path":
res[k] = v
return res

def put_path_id(self, path):
get_row_query = f"SELECT id FROM path WHERE path = '{path}' LIMIT 1;"
res = self.execute(get_row_query).fetchone()
Expand Down
Empty file added test/__init__.py
Empty file.
38 changes: 38 additions & 0 deletions test/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# pylint: disable-all

"""
Test module
"""

import unittest
import tempfile
import pathtraits.db
import pathtraits.scan


class TestMain(unittest.TestCase):
def test_example(self):
db_path = tempfile.mkstemp()[1]
pathtraits.scan.batch("test/example", db_path, False)

db = pathtraits.db.TraitsDB(db_path)
self.assertTrue(db is not None)

source = db.get_dict("test/example/EU/de.txt")
target = {
"description_TEXT": "Germany data",
"has_sidecar_meta_file_BOOL": 1,
"is_example_BOOL": 1,
"score_TEXT": "zero",
"score_REAL": 3.5,
}
for k, v in target.items():
self.assertEqual(source[k], v)

source = len(db.execute("SELECT * FROM data;").fetchall())
target = 4
self.assertEqual(source, target)


if __name__ == "__main__":
unittest.main()
Loading