23 string. This is because it should actually be Bytes but we want an index on |
23 string. This is because it should actually be Bytes but we want an index on |
24 it for fast querying. |
24 it for fast querying. |
25 """ |
25 """ |
26 from __future__ import print_function |
26 from __future__ import print_function |
27 |
27 |
28 __docformat__ = "restructuredtext en" |
|
29 |
|
30 from threading import Lock |
28 from threading import Lock |
31 from datetime import datetime |
29 from datetime import datetime |
32 from base64 import b64encode |
|
33 from contextlib import contextmanager |
30 from contextlib import contextmanager |
34 from os.path import basename |
31 from os.path import basename |
35 import re |
32 import re |
36 import itertools |
33 import itertools |
37 import zipfile |
34 import zipfile |
38 import logging |
35 import logging |
39 import sys |
36 import sys |
40 |
37 |
41 from six import PY2, text_type, binary_type, string_types |
38 from six import PY2, text_type, string_types |
42 from six.moves import range, cPickle as pickle |
39 from six.moves import range, cPickle as pickle |
43 |
40 |
44 from logilab.common.decorators import cached, clear_cache |
41 from logilab.common.decorators import cached, clear_cache |
45 from logilab.common.configuration import Method |
42 from logilab.common.configuration import Method |
46 from logilab.common.shellutils import getlogin, ASK |
43 from logilab.common.shellutils import getlogin, ASK |