1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

# http* * ://pyrocko.org - GPLv3 

# 

# The Pyrocko Developers, 21st Century 

# ---|P------/S----------~Lg---------- 

 

from __future__ import absolute_import, print_function 

 

import os 

 

from pyrocko.guts import Object, String 

from pyrocko import config 

 

from . import error 

 

guts_prefix = 'pf' 

 

 

g_db_filename = 'nuts.sqlite' 

g_cache_dirname = 'cache' 

 

 

def get_squirrel_path(path=None): 

if path is None: 

path = os.curdir 

 

path = os.path.abspath(path) 

if os.path.isdir(path) and os.path.exists( 

os.path.join(path, g_db_filename)): 

return path 

 

while True: 

for entry in ['squirrel', '.squirrel']: 

candidate = os.path.join(path, entry) 

if os.path.isdir(candidate) \ 

and os.path.exists(os.path.join(candidate, g_db_filename)): 

 

return candidate 

 

path_new = os.path.dirname(path) 

if path_new == path: 

break 

 

path = path_new 

 

return os.path.join(config.config().cache_dir, 'squirrel') 

 

 

def get_environment(path=None): 

if path is None: 

path = os.curdir 

 

squirrel_path = get_squirrel_path(path) 

 

return SquirrelEnvironment.make(squirrel_path) 

 

 

def init_environment(path=None): 

if path is None: 

path = os.curdir 

 

squirrel_path = os.path.abspath(os.path.join(path, '.squirrel')) 

try: 

os.mkdir(squirrel_path) 

except OSError: 

raise error.SquirrelError( 

'Cannot create squirrel directory: %s' % squirrel_path) 

 

from .base import Squirrel 

env = SquirrelEnvironment.make(squirrel_path) 

sq = Squirrel(env) 

del sq 

 

 

class SquirrelEnvironment(Object): 

database_path = String.T(optional=True) 

cache_path = String.T(optional=True) 

persistent = String.T(optional=True) 

 

@classmethod 

def make(cls, squirrel_path): 

return cls( 

database_path=os.path.join(squirrel_path, g_db_filename), 

cache_path=os.path.join(squirrel_path, g_cache_dirname)) 

 

 

__all__ = [ 

'get_squirrel_path', 

'get_environment', 

'init_environment', 

'SquirrelEnvironment']