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

#! /usr/bin/env python3 

# -*- coding: utf-8 -*- 

 

#       Copyright 2011, Marten de Vries 

# 

#       This file is part of OpenTeacher. 

# 

#       OpenTeacher is free software: you can redistribute it and/or modify 

#       it under the terms of the GNU General Public License as published by 

#       the Free Software Foundation, either version 3 of the License, or 

#       (at your option) any later version. 

# 

#       OpenTeacher is distributed in the hope that it will be useful, 

#       but WITHOUT ANY WARRANTY; without even the implied warranty of 

#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

#       GNU General Public License for more details. 

# 

#       You should have received a copy of the GNU General Public License 

#       along with OpenTeacher.  If not, see <http://www.gnu.org/licenses/>. 

 

import collections 

 

class AuthorsModule: 

        """This module keeps track of the authors of OpenTeacher. Every 

           installed module can use it to add authors itself. This way, it's 

           possible to also give credit to third party module authors. Just 

           call the `registerAuthor` method. 

 

           If you're writing a module which depends on other OT modules and 

           shows credits in some way, this module is the ideal data source. 

           Give the `registeredAuthors` property a look. 

 

        """ 

        def __init__(self, moduleManager, *args, **kwargs): 

                super().__init__(*args, **kwargs) 

                self._mm = moduleManager 

 

                self.type = "authors" 

 

        def registerAuthor(self, category, name): 

                """Registers author `name` for his/her work in `category`. Both 

                   arguments should be convertible with `str()`. 

 

                   Returns a function which, when called, removes the author 

                   again from the list. Handy if you want to retranslate the 

                   category for example. 

 

                """ 

                data = (str(category), str(name)) 

                self._authors.update((data,)) 

                return lambda: self._authors.subtract((data,)) 

 

        @property 

        def registeredAuthors(self): 

                """Returns an iterable type which contains `(category, name)` 

                   tuples of authors. You're free to modify the data type you 

                   get, it won't damage this module. 

 

                        Tuple attribute description: 

                   `category`: the type of work this author was involved in. 

                   `name`: the name of the author. 

 

                   Both are guaranteed to be strings. All authors are only listed once, 

                   no matter if they were or were not added multiple times. 

 

                """ 

                return set((a for a in self._authors if self._authors[a] > 0)) 

 

        def enable(self): 

                self._authors = collections.Counter() 

 

                self.active = True 

 

        def disable(self): 

                self.active = False 

 

                del self._authors 

 

def init(moduleManager): 

        return AuthorsModule(moduleManager)