File: service.py

package info (click to toggle)
pyamf 0.6.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 7,692 kB
  • sloc: python: 17,944; xml: 455; makefile: 116; sql: 38; java: 11; sh: 7
file content (146 lines) | stat: -rw-r--r-- 4,444 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
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
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.

import sys, os.path, operator
import logging

import pyamf
from pyamf import sol


def default_folder():
    """
    Return default platform specific Shared Objects folder.

    @rtype: str
    """
    if sys.platform.startswith('linux'):
        folder = "~/.macromedia/Flash_Player/#SharedObjects"
    elif sys.platform.startswith('win'):
        folder = '~\\AppData\\Roaming\Macromedia\\Flash Player\\#SharedObjects'
    elif sys.platform.startswith('darwin'):
        folder = "~/Library/Preferences/Macromedia/Flash Player/#SharedObjects"
    else:
        import warnings

        warnings.warn("Could not find a platform specific folder " \
            "function for '%s'" % sys.platform, RuntimeWarning)

    return os.path.expanduser(folder)
    
class SharedObjectService:
    """
    AMF service for Local Shared Object example.
    """
    
    def __init__(self, path, pattern):
        self.logger = logging
        self.path = path
        self.pattern = pattern
        
    def getApps(self):
        """
        Get list of applications, containing one or more .sol files,
        sorted by domain.
        """
        extList = []
        apps = []
        
        # convert pattern string to file extensions
        for ext in self.pattern.split(';'):
            extList.append(ext.lstrip('*'))

        self.logger.debug('Path: %s' % self.path)
        self.logger.debug('File extension(s): %s' % extList)
        
        # walk the tree to get apps
        for directory in os.walk(self.path):
            files = self._soDirectory(directory, extList)
            
            if len(files) > 0:
                dup = False
                for app in apps:
                    if files[0].domain == app.domain:
                        dup = True
                        break
                    
                if dup == False:
                    newapp = App()
                    newapp.path = directory[0]
                    newapp.name = os.path.basename(newapp.path)
                    newapp.files = files
                    newapp.domain = files[0].domain
                    apps.append(newapp)               
                else:
                    app.files.extend(files)
                    
        # sort apps by domain
        apps.sort(key=operator.attrgetter('domain'))

        self.logger.debug('Total apps: %d' % len(apps))
        
        return (self.path, apps)

    def getDetails(self, path):
        """
        Read and return Shared Object.
        """
        lso = sol.load(path)
        
        return lso
    
    def _soFiles(self, dirList, typeList):
        """
        Return files that match to file extension(s).
        """
        files = []
        
        for lso in dirList[2]:
            file_info = os.path.splitext(lso)
            
            for ext in typeList:
                if file_info[1] == ext:
                    so = SharedObject()
                    so.name = file_info[0]
                    so.filename = lso
                    so.path = os.path.abspath(os.path.join(dirList[0], lso))
                    so.app = os.path.basename(dirList[0])
                    so.size = os.path.getsize(so.path)
                    so.domain = so.path[len(self.path)+1:].rsplit(os.sep)[1]
                    files.append(so)
                    
                    self.logger.debug(' -- '.rjust(5) + repr(so))
                    break
                
        return files
    
    def _soDirectory(self, dirEntry, typeList):
        """
        Return each sub-directory.
        """        
        return self._soFiles(dirEntry, typeList)

class App(object):
    def __init__(self):
        self.name = ''
        self.path = ''
        self.domain = ''
        self.files = []
        
    def __repr__(self):
        return '<%s name=%s files=%s path=%s>' % (App.__name__, self.name, len(self.files), self.path)

pyamf.register_class(App, 'org.pyamf.examples.sharedobject.vo.App')

class SharedObject(object):
    def __init__(self):
        self.name = ''
        self.app = ''
        self.path = ''
        self.domain = ''
        self.size = 0
        
    def __repr__(self):
        return '<%s app=%s size=%s filename=%s>' % (SharedObject.__name__, self.app, self.size, self.filename)

pyamf.register_class(SharedObject, 'org.pyamf.examples.sharedobject.vo.SharedObject')