Skip to content

Commit 6505d0a

Browse files
authored
Threadsafe avro import (#175)
* Make the avro import magic threadsafe * cache mypy on TravisCI
1 parent 290486d commit 6505d0a

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

.travis.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
sudo: false
22
language: python
3-
cache: pip
3+
cache:
4+
pip: true
5+
directories:
6+
- .mypy_cache
47
python:
58
- 2.7
69
- 3.4

schema_salad/__init__.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import sys
55
import typing
6+
import threading
67

78
import six
89

@@ -13,24 +14,27 @@
1314
_logger.addHandler(logging.StreamHandler())
1415
_logger.setLevel(logging.INFO)
1516

17+
__TMPDIR_LOCK = threading.Lock()
18+
1619
if six.PY3:
1720

18-
if onWindows:
21+
if onWindows():
1922
# create '/tmp' folder if not present
2023
# required by autotranslate module
2124
# TODO: remove when https://github.com/PythonCharmers/python-future/issues/295
2225
# is fixed
2326
if not os.path.exists("/tmp"):
24-
try:
25-
os.makedirs("/tmp")
26-
except OSError as exception:
27-
_logger.error(u"Cannot create '\\tmp' folder in root needed for",
28-
"'cwltool' Python 3 installation.")
29-
exit(1)
30-
31-
from past import autotranslate # type: ignore
32-
autotranslate(['avro', 'avro.schema'])
33-
import avro
34-
import avro.schema
35-
from past.translation import remove_hooks # type: ignore
36-
remove_hooks()
27+
with __TMPDIR_LOCK:
28+
try:
29+
os.makedirs("/tmp")
30+
except OSError as exception:
31+
_logger.error(u"Cannot create '\\tmp' folder in root needed for"
32+
"'cwltool' Python 3 installation.")
33+
exit(1)
34+
with __TMPDIR_LOCK:
35+
from past import autotranslate # type: ignore
36+
from past.translation import remove_hooks # type: ignore
37+
autotranslate(['avro', 'avro.schema'])
38+
import avro
39+
import avro.schema # pylint: disable=no-name-in-module,import-error
40+
remove_hooks()

0 commit comments

Comments
 (0)