Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

# encoding: utf-8 

from __future__ import print_function, division, absolute_import 

 

from functools import singledispatch 

import io 

import sys 

 

from .db_objects import SiteDbo, PictureDbo, ParameterDbo, SourceTypeDbo 

from .domain_objects import Site, Picture, Parameter, Parameters, SourceType 

 

 

def pretty_log(log_function, what): 

 

lines = pretty_str(what).split("\n") 

# pretty_prints a final "\n" which produces an empty line in the logs, so we remove 

# trailing empty lines: 

if lines[-1] == "": 

lines = lines[:-1] 

for line in lines: 

log_function(line) 

 

 

def pretty_str(what): 

file = io.StringIO() 

pretty_print(what, file=file) 

return file.getvalue() 

lines = file.getvalue().split("\n") 

# pretty_prints a final "\n" which produces an empty line in the logs, so we remove 

# trailing empty lines: 

if lines[-1] == "": 

lines = lines[:-1] 

for line in lines: 

log_function(line) 

 

""" 

we use single dispatch on first argument to find appropriate pretty printing function. 

see https://docs.python.org/3/library/functools.html#functools.singledispatch 

""" 

 

 

@singledispatch 

def pretty_print(what, file=sys.stdout, indent=""): 

raise RuntimeError("single dispatch on pretty_print for {!r} failed".format(what)) 

 

 

def _pretty_print_site(type_name, dd, file, indent): 

 

lines = "" 

lines += "{indent}{type_name} {name}:\n" 

lines += "{indent} street : {street}\n" 

lines += "{indent} city : {city}\n" 

lines += "{indent} x, y, z : {coord_x}, {coord_y}, {coord_z}\n" 

lines += "{indent} description : {description}\n" 

 

pictures = dd["pictures"] 

if not pictures: 

lines += "{indent} pictures : none\n" 

 

txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd) 

print(txt, file=file) 

for p in dd["pictures"]: 

pretty_print(p, file=file, indent=indent + " ") 

 

 

def _pretty_print_picture(type_name, dd, file, indent): 

 

lines = "" 

lines += "{indent}{type_name}:\n" 

lines += "{indent} filename : {filename}\n" 

lines += "{indent} date : {date}\n" 

lines += "{indent} filesize : {filesize}\n" 

lines += "{indent} description : {description}\n" 

 

txt = lines.rstrip().format(indent=indent, type_name=type_name, filesize=len(dd["data"]), **dd) 

print(txt, file=file) 

 

 

def _pretty_print_parameter(type_name, dd, file, indent): 

 

lines = "" 

lines += "{indent}{type_name}:\n" 

lines += "{indent} name : {name}\n" 

lines += "{indent} description : {description}\n" 

lines += "{indent} unit : {unit}\n" 

 

txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd) 

print(txt, file=file) 

 

 

def _pretty_print_source_type(type_name, dd, file, indent): 

 

lines = "" 

lines += "{indent}{type_name}:\n" 

lines += "{indent} name : {name}\n" 

lines += "{indent} description : {description}\n" 

 

txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd) 

print(txt, file=file) 

 

 

def _pretty_print_parameters(type_name, parameters, file, indent): 

 

all_lines = "" 

all_lines += "{indent}{type_name}:\n" 

for parameter in parameters: 

 

lines = "" 

lines += "{indent} name : {parameter.name}\n" 

lines += "{indent} description : {parameter.description}\n" 

lines += "{indent} unit : {parameter.unit}\n\n" 

txt = lines.format(indent=indent, parameter=parameter) 

all_lines += txt 

 

txt = all_lines.rstrip().format(indent=indent, type_name=type_name) 

print(txt, file=file) 

 

 

@pretty_print.register(Site) 

def pretty_print_site(site, file=sys.stdout, indent=""): 

_pretty_print_site("Site", site, file, indent) 

 

 

@pretty_print.register(SiteDbo) 

def pretty_print_site(site, file=sys.stdout, indent=""): 

attributes = vars(site) 

attributes["pictures"] = site.pictures 

_pretty_print_site("SiteDbo", attributes, file, indent) 

 

 

@pretty_print.register(Picture) 

def pretty_print_picture(picture, file=sys.stdout, indent=""): 

_pretty_print_picture("Picture", picture, file, indent) 

 

 

@pretty_print.register(PictureDbo) 

def pretty_print_site(picture, file=sys.stdout, indent=""): 

_pretty_print_picture("PictureDbo", vars(picture), file, indent) 

 

 

@pretty_print.register(Parameter) 

def pretty_print_picture(parameter, file=sys.stdout, indent=""): 

_pretty_print_parameter("Parameter", parameter, file, indent) 

 

 

@pretty_print.register(SourceType) 

def pretty_print_picture(source_type, file=sys.stdout, indent=""): 

_pretty_print_source_type("SourceType", source_type, file, indent) 

 

 

@pretty_print.register(SourceTypeDbo) 

def pretty_print_picture(source_type, file=sys.stdout, indent=""): 

_pretty_print_source_type("SourceTypeDbo", vars(source_type), file, indent) 

 

 

@pretty_print.register(Parameters) 

def pretty_print_picture(parameters, file=sys.stdout, indent=""): 

_pretty_print_parameters("Parameters", parameters, file, indent) 

 

 

@pretty_print.register(ParameterDbo) 

def pretty_print_site(parameter, file=sys.stdout, indent=""): 

_pretty_print_parameter("ParameterDbo", vars(parameter), file, indent)