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

# http://pyrocko.org - GPLv3 

# 

# The Pyrocko Developers, 21st Century 

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

 

import math 

 

from pyrocko.guts import Object 

from pyrocko import util 

 

 

g_tmin, g_tmax = util.get_working_system_time_range()[:2] 

 

 

def time_or_none_to_str(x, format): 

if x is None: 

return '...'.ljust(17) 

else: 

return util.time_to_str(x, format=format) 

 

 

class Content(Object): 

''' 

Base class for Pyrocko content objects. 

''' 

 

@property 

def str_codes(self): 

return '.'.join(self.codes) 

 

@property 

def str_time_span(self): 

tmin, tmax = self.time_span 

deltat = getattr(self, 'deltat', 0) 

if deltat > 0: 

fmt = min(9, max(0, -int(math.floor(math.log10(self.deltat))))) 

else: 

fmt = 6 

 

if tmin == tmax: 

return '%s' % time_or_none_to_str(tmin, fmt) 

else: 

return '%s - %s' % ( 

time_or_none_to_str(tmin, fmt), time_or_none_to_str(tmax, fmt)) 

 

@property 

def summary(self): 

return '%s %-16s %s' % ( 

self.__class__.__name__, self.str_codes, self.str_time_span) 

 

def __lt__(self, other): 

return self.__key__() < other.__key__() 

 

def __key__(self): 

return self.codes, self.time_span_g_clipped 

 

@property 

def time_span_g_clipped(self): 

tmin, tmax = self.time_span 

return ( 

tmin if tmin is not None else g_tmin, 

tmax if tmax is not None else g_tmax)