1#!/usr/bin/env python
2# coding=utf-8
3
4"""Unit tests"""
5
6import tempfile
7import logging
8
9logger = logging.getLogger(__name__)
10
11TESTDB_TMPDIR = None
12_URL = (
13 "http://www.idiap.ch/software/bob/data/bob/bob.med.tb/master/_testdb.zip"
14)
15_RCKEY = "bob.med.tb.montgomery.datadir"
16_FOLDER_NAME = "MontgomerySet_Light"
17
18
19def teardown_package():
20 global TESTDB_TMPDIR
21 if TESTDB_TMPDIR is not None:
22 logger.info(f"Removing temporary directory {TESTDB_TMPDIR.name}...")
23 TESTDB_TMPDIR.cleanup()
24
25
26def mock_dataset():
27 global TESTDB_TMPDIR
28 from bob.extension import rc
29
30 if (TESTDB_TMPDIR is not None) or (_RCKEY in rc):
31 logger.info("Test database already set up - not downloading")
32 else:
33 logger.info("Test database not available, downloading...")
34 import zipfile
35 import urllib.request
36
37 # Download the file from `url` and save it locally under `file_name`:
38 with urllib.request.urlopen(_URL) as r, tempfile.TemporaryFile() as f:
39 f.write(r.read())
40 f.flush()
41 f.seek(0)
42 TESTDB_TMPDIR = tempfile.TemporaryDirectory(prefix=__name__ + "-")
43 print(f"Creating test database at {TESTDB_TMPDIR.name}...")
44 logger.info(f"Creating test database at {TESTDB_TMPDIR.name}...")
45 with zipfile.ZipFile(f) as zf:
46 zf.extractall(TESTDB_TMPDIR.name)
47
48 from ..data import montgomery
49
50 if TESTDB_TMPDIR is None:
51 # if the user has the Montgomery directory ready, then we do a normal return
52 return rc["bob.med.tb.montgomery.datadir"]
53
54 # else, we do a "mock" return
55 return TESTDB_TMPDIR.name + "/" + _FOLDER_NAME+ "/"