Skip to content

Commit 451ec0e

Browse files
committed
Merge branch 'issue_1624_tests' into uploader
2 parents a68bc14 + 379be36 commit 451ec0e

File tree

9 files changed

+60
-109
lines changed

9 files changed

+60
-109
lines changed

.gitignore

+7-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ venv/
99
xchemalign/xchem_align.egg-info/
1010
xchemalign/_version.py
1111
test-data/outputs/upload_*
12+
test-data/outputs/upload-v2/upload_*
13+
test-data/outputs/upload-v2/*.log
14+
test-data/outputs/upload-v2/config.yaml
15+
16+
example-simple
17+
build
18+
1219
*~
1320
\#*#
1421
\#*
15-
example-simple
16-
build

scripts/align.py

+4-15
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,17 @@
1111
def main():
1212
parser = argparse.ArgumentParser(description="aligner")
1313

14-
parser.add_argument("-d", "--version-dir", required=True, help="Path to version dir")
15-
parser.add_argument(
16-
"-m", "--metadata_file", default=Constants.METADATA_XTAL_FILENAME.format(""), help="Metadata YAML file"
17-
)
18-
parser.add_argument("-a", "--assemblies", help="Assemblies YAML file")
14+
parser.add_argument("-d", "--dir", help="Working directory")
1915

20-
parser.add_argument("-l", "--log-file", help="File to write logs to")
2116
parser.add_argument("--log-level", type=int, default=0, help="Logging level")
2217
parser.add_argument("--validate", action="store_true", help="Only perform validation")
2318

2419
args = parser.parse_args()
2520

26-
if args.log_file:
27-
log = args.log_file
28-
else:
29-
log = str(Path(args.version_dir).parent / 'aligner.log')
30-
print("Using {} for log file".format(str(log)))
21+
print("aligner: ", args)
3122

32-
logger = utils.Logger(logfile=log, level=args.log_level)
33-
logger.info("aligner: ", args)
34-
35-
a = Aligner(args.version_dir, args.metadata_file, args.assemblies, logger=logger)
23+
a = Aligner(args.dir, log_level=args.log_level)
24+
logger = a.logger
3625
num_errors, num_warnings = a.validate()
3726

3827
if not args.validate:

scripts/collate.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
def main():
99
parser = argparse.ArgumentParser(description="collator")
1010

11-
parser.add_argument("-c", "--config-file", default="config.yaml", help="Configuration file")
12-
parser.add_argument("-l", "--log-file", help="File to write logs to")
11+
parser.add_argument("-d", "--dir", help="Working directory")
1312
parser.add_argument("--log-level", type=int, default=0, help="Logging level")
1413
parser.add_argument("-v", "--validate", action="store_true", help="Only perform validation")
1514

1615
args = parser.parse_args()
1716

18-
c = Collator(args.config_file, log_file=args.log_file, log_level=args.log_level)
17+
print("collator: ", str(args))
18+
19+
c = Collator(args.dir, log_level=args.log_level)
1920
logger = c.logger
20-
logger.info("collator: ", str(args))
2121

2222
meta = c.validate()
2323

src/xchemalign/aligner.py

+10-13
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,16 @@ def get_datasets_from_crystals(
194194

195195

196196
class Aligner:
197-
def __init__(self, dir, logger=None):
197+
def __init__(self, dir, log_file=None, log_level=0):
198198
self.num_alignments = 0
199199
self.errors = []
200200
self.warnings = []
201-
if logger:
202-
self.logger = logger
203-
else:
204-
self.logger = utils.Logger()
201+
205202
self._find_version_dir(dir) # sets self.working_dir and self.version_dir
203+
if not log_file:
204+
log_file = self.working_dir / 'upload-current' / 'aligner.log'
205+
self.logger = utils.Logger(logfile=log_file, level=log_level)
206+
self.logger.info("Using", self.version_dir, "as current version dir")
206207
self.base_dir = self.version_dir.parent # e.g. path/to
207208
self.aligned_dir = (
208209
self.version_dir / Constants.META_ALIGNED_FILES
@@ -246,8 +247,6 @@ def _find_version_dir(self, dir):
246247
else:
247248
break
248249

249-
self.logger.info("Using", version_dir, "as current version dir")
250-
251250
def _log_error(self, msg):
252251
self.logger.error(msg)
253252
self.errors.append(msg)
@@ -934,13 +933,11 @@ def main():
934933
else:
935934
log = 'aligner.log'
936935

937-
logger = utils.Logger(logfile=log, level=args.log_level)
938-
logger.info("aligner: ", args)
939-
logger.info("Using {} for log file".format(str(log)))
940-
utils.LOG = logger
941-
942936
try:
943-
a = Aligner(args.dir, logger=logger)
937+
a = Aligner(args.dir, log_file=log, log_level=args.log_level)
938+
logger = a.logger
939+
utils.LOG = logger
940+
944941
num_errors, num_warnings = a.validate()
945942

946943
if not args.validate:

src/xchemalign/collator.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1385,7 +1385,6 @@ def main():
13851385
parser = argparse.ArgumentParser(description="collator")
13861386

13871387
parser.add_argument("-d", "--dir", help="Working directory")
1388-
parser.add_argument("-l", "--log-file", help="File to write logs to")
13891388
parser.add_argument("--log-level", type=int, default=0, help="Logging level")
13901389
parser.add_argument("-v", "--validate", action="store_true", help="Only perform validation")
13911390
parser.add_argument("--no-git-info", action="store_false", help="Don't add GIT info to metadata")
@@ -1412,7 +1411,7 @@ def main():
14121411

14131412
logger = None
14141413
try:
1415-
c = Collator(working_dir, log_file=args.log_file, log_level=args.log_level, include_git_info=args.no_git_info)
1414+
c = Collator(working_dir, log_level=args.log_level, include_git_info=args.no_git_info)
14161415

14171416
logger = c.logger
14181417
logger.info("collator: ", str(args))

test-data/outputs/upload-current

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
upload-v2
File renamed without changes.

tests/conftest.py

+16-47
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ class Constants:
1515
CONFIG_1_FILE = "test-data/config_1.yaml"
1616
CONFIG_2_FILE = "test-data/config_2.yaml"
1717
CONFIG_3_FILE = "test-data/config_3.yaml"
18-
ASSEMBLIES_FILE = "test-data/outputs/assemblies.yaml"
1918
TEST_DIR = "test-data/outputs"
20-
UPLOAD_1_DIR = "test-data/outputs/upload_1"
21-
UPLOAD_2_DIR = "test-data/outputs/upload_2"
22-
UPLOAD_3_DIR = "test-data/outputs/upload_3"
19+
CONFIG_FILE = TEST_DIR + '/upload-current/config.yaml'
20+
UPLOAD_1_DIR = TEST_DIR + '/upload-current/upload_1'
21+
UPLOAD_2_DIR = TEST_DIR + '/upload-current/upload_2'
22+
UPLOAD_3_DIR = TEST_DIR + '/upload-current/upload_3'
2323
METADATA_FILE = "meta_collator.yaml"
2424

2525
return Constants()
@@ -50,19 +50,19 @@ def test_dir(constants):
5050

5151
@pytest.fixture(scope="session")
5252
def upload_1_dir(constants, test_dir):
53-
path = Path(constants.UPLOAD_1_DIR)
54-
if path.exists():
55-
shutil.rmtree(path)
53+
for path in [Path(constants.UPLOAD_3_DIR), Path(constants.UPLOAD_2_DIR), Path(constants.UPLOAD_1_DIR)]:
54+
if path.exists():
55+
shutil.rmtree(path)
5656
os.mkdir(path)
5757

5858
return path
5959

6060

6161
@pytest.fixture(scope="session")
6262
def upload_2_dir(constants, test_dir):
63-
path = Path(constants.UPLOAD_2_DIR)
64-
if path.exists():
65-
shutil.rmtree(path)
63+
for path in [Path(constants.UPLOAD_3_DIR), Path(constants.UPLOAD_2_DIR)]:
64+
if path.exists():
65+
shutil.rmtree(path)
6666
os.mkdir(path)
6767

6868
return path
@@ -78,59 +78,28 @@ def upload_3_dir(constants, test_dir):
7878
return path
7979

8080

81-
@pytest.fixture(scope="session")
82-
def upload_1_data_dir(constants, test_dir):
83-
path = Path(constants.INPUT_1_DIR)
84-
return path
85-
86-
87-
@pytest.fixture(scope="session")
88-
def upload_2_data_dir(constants, test_dir):
89-
path = Path(constants.INPUT_2_DIR)
90-
return path
91-
92-
93-
@pytest.fixture(scope="session")
94-
def upload_3_data_dir(constants, test_dir):
95-
path = Path(constants.INPUT_3_DIR)
96-
return path
97-
98-
9981
@pytest.fixture(scope="session")
10082
def config_1_file(
10183
constants,
10284
):
103-
path = Path(constants.CONFIG_1_FILE)
85+
path = Path(constants.CONFIG_FILE)
86+
shutil.copy(constants.CONFIG_1_FILE, constants.CONFIG_FILE)
10487
return path
10588

10689

10790
@pytest.fixture(scope="session")
10891
def config_2_file(
10992
constants,
11093
):
111-
path = Path(constants.CONFIG_2_FILE)
94+
path = Path(constants.CONFIG_FILE)
95+
shutil.copy(constants.CONFIG_2_FILE, constants.CONFIG_FILE)
11296
return path
11397

11498

11599
@pytest.fixture(scope="session")
116100
def config_3_file(
117101
constants,
118102
):
119-
path = Path(constants.CONFIG_3_FILE)
120-
return path
121-
122-
123-
@pytest.fixture(scope="session")
124-
def assemblies_file(
125-
constants,
126-
):
127-
path = Path(constants.ASSEMBLIES_FILE)
128-
return path
129-
130-
131-
@pytest.fixture(scope="session")
132-
def xtalforms_file(
133-
constants,
134-
):
135-
path = Path(constants.XTAFLORMS_FILE)
103+
path = Path(constants.CONFIG_FILE)
104+
shutil.copy(constants.CONFIG_3_FILE, constants.CONFIG_FILE)
136105
return path

tests/test_integration.py

+17-26
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,8 @@
88
from xchemalign.utils import Constants
99

1010

11-
def test_collator_upload_1(
12-
constants,
13-
test_dir,
14-
upload_1_dir,
15-
upload_1_data_dir,
16-
config_1_file,
17-
):
18-
c = Collator(
19-
str(config_1_file),
20-
)
11+
def test_collator_upload_1(constants, test_dir, config_1_file, upload_1_dir):
12+
c = Collator(constants.TEST_DIR)
2113
logger = c.logger
2214

2315
meta = c.validate()
@@ -31,8 +23,8 @@ def test_collator_upload_1(
3123

3224

3325
@pytest.mark.order(after="test_collator_upload_1")
34-
def test_aligner_upload_1(constants, assemblies_file, upload_1_dir):
35-
a = Aligner(upload_1_dir, constants.METADATA_FILE, assemblies_file)
26+
def test_aligner_upload_1(constants):
27+
a = Aligner(constants.TEST_DIR)
3628
num_errors, num_warnings = a.validate()
3729

3830
if num_errors:
@@ -44,35 +36,34 @@ def test_aligner_upload_1(constants, assemblies_file, upload_1_dir):
4436

4537

4638
@pytest.mark.order(after="test_aligner_upload_1")
47-
def test_collator_upload_2(
48-
constants,
49-
test_dir,
50-
upload_2_dir,
51-
upload_2_data_dir,
52-
config_2_file,
53-
):
54-
c = Collator(
55-
str(config_2_file),
56-
)
39+
def test_collator_upload_2(constants, config_2_file, upload_2_dir):
40+
c = Collator(constants.TEST_DIR)
5741
logger = c.logger
5842

5943
meta = c.validate()
6044

45+
print(meta)
46+
6147
if meta is None or len(logger.errors) > 0:
6248
print("There are errors, cannot continue")
6349
print(logger.errors)
6450
exit(1)
6551
else:
6652
c.run(meta)
6753
assert (
68-
len(meta[Constants.META_XTALS]["Mpro-i0130"][Constants.META_XTAL_FILES].get(Constants.META_BINDING_EVENT, {}))
54+
# len(meta[Constants.META_XTALS]["Mpro-i0130"][Constants.META_XTAL_FILES].get(Constants.META_BINDING_EVENT, {}))
55+
len(
56+
meta[Constants.META_XTALS]["Mpro-x0107_fake_P1"][Constants.META_XTAL_FILES].get(
57+
Constants.META_BINDING_EVENT, {}
58+
)
59+
)
6960
!= 0
7061
)
7162

7263

7364
@pytest.mark.order(after="test_collator_upload_2")
74-
def test_aligner_upload_2(constants, assemblies_file, upload_2_dir):
75-
a = Aligner(upload_2_dir, constants.METADATA_FILE, assemblies_file)
65+
def test_aligner_upload_2(constants):
66+
a = Aligner(constants.TEST_DIR)
7667
num_errors, num_warnings = a.validate()
7768

7869
if num_errors:
@@ -81,7 +72,7 @@ def test_aligner_upload_2(constants, assemblies_file, upload_2_dir):
8172
exit(1)
8273
else:
8374
a.run()
84-
assert "Mpro-i0130" in [x.name for x in (Path(upload_2_dir) / "aligned_files").glob("*")]
75+
assert "Mpro-i0130" in [x.name for x in (Path(constants.UPLOAD_2_DIR) / "aligned_files").glob("*")]
8576

8677

8778
# @pytest.mark.order(after="test_aligner_upload_2")

0 commit comments

Comments
 (0)