File: score.py

package info (click to toggle)
mc-foo 0.0.13
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 268 kB
  • ctags: 532
  • sloc: python: 1,967; makefile: 6
file content (107 lines) | stat: -rw-r--r-- 2,985 bytes parent folder | download
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
import UserDict

class TagProfile(UserDict.UserDict):
    def opinion_on_tag(self, tagname, tagvalue, adjust):
        if not self.data.has_key(tagname):
            self.data[tagname]={}
        if not self.data[tagname].has_key(tagvalue):
            self.data[tagname][tagvalue]=0

        self.data[tagname][tagvalue]=self.data[tagname][tagvalue]+adjust

        if self.data[tagname][tagvalue]==0:
            del self.data[tagname][tagvalue]
        if self.data[tagname]=={}:
            del self.data[tagname]

    def getScore(self, filename):
        #TODO
        return 0

    def as_data(self):
        return self.data

class SongProfile(UserDict.UserDict):
    def incScore(self, filename, inc=1):
        if not self.data.has_key(filename):
            self.data[filename]=0

        self.data[filename]+=inc

        if self.data[filename]==0:
            del self.data[filename]

    def as_data(self):
        return self.data

    def getScore(self, filename):
        return self.get(filename, 0)

class Profile:
    def __init__(self):
        self.songs=SongProfile()
        self.tags=TagProfile()
        self.include=[]

    def as_data(self):
        return {'include': self.include,
                'songs': self.songs.as_data(),
                'tags': self.tags.as_data()}

    def getScore(self, filename):
        return self.songs.getScore(filename) + self.tags.getScore(filename)

    def incScore(self, filename, inc=1):
        self.songs.incScore(filename, inc)

    def __repr__(self):
        return repr(self.as_data())

class UserProfile(UserDict.UserDict):
    def __init__(self):
        UserDict.UserDict.__init__(self)
        self.data['default']=Profile()
        self.def_read=['default']
        self.def_write=['default']

    def as_data(self):
        d={}
        for k,v in self.data.items():
            d[k]=v.as_data()
        return d

    def incScore(self, filename, inc=1):
        profileName=self.def_write[0]
        del self.def_write[0]
        self.def_write.append(profileName)

        if not self.has_key(profileName):
            self[profileName]=Profile()
        print "profile %s=%s"%(profileName, repr(self[profileName]))
        self[profileName].incScore(filename, inc)

    def addprofile(self, profilename):
        if not self.data.has_key(profilename):
            self.data[profilename]=Profile()
        return self.data[profilename]

    def getScore(self, filename):
        sum=0
        for profileName in self.def_read:
            sum+=self[profileName].getScore(filename)
        return sum

class ProfileTable(UserDict.UserDict):
    def __init__(self):
        UserDict.UserDict.__init__(self)

    def adduser(self, user):
        if not self.data.has_key(user):
            self.data[user]=UserProfile()
        return self.data[user]

    def getScore(self, filename):
        sum=0
        for user, profile in self.items():
            sum+=profile.getScore(filename)
        return sum