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

from hashlib import sha1 

from pyrocko.guts import Object, Bool 

 

 

class PluginConfig(Object): 

 

applied = Bool.T(default=False) 

 

def get_hash(self): 

sha = sha1() 

sha.update(str(self).encode()) 

return sha.hexdigest() 

 

 

class Plugin(object): 

 

def __init__(self, scene, config=None): 

self.scene = scene 

self.config = config or PluginConfig() 

 

def get_state_hash(self): 

return self.config.get_hash() 

 

def set_enabled(self, enable): 

assert isinstance(enable, bool) 

self.config.applied = enable 

self.update() 

 

def is_enabled(self): 

return self.config.applied 

 

def update(self): 

return self.scene.evChanged() 

 

def apply(self, displacement): 

raise NotImplementedError 

return displacement