~mhall119/onehundredscopes/loco-team-portal

« back to all changes in this revision

Viewing changes to lens_builder.py

  • Committer: Michael Hall
  • Date: 2011-12-21 02:40:57 UTC
  • Revision ID: mhall119@ubuntu.com-20111221024057-mzv7rwg776kw5jk1
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import sys
 
2
import os
 
3
from gi.repository import GLib, GObject, Gio
 
4
from gi.repository import Dee
 
5
# FIXME: Some weird bug in Dee or PyGI makes Dee fail unless we probe
 
6
#        it *before* we import the Unity module... ?!
 
7
_m = dir(Dee.SequenceModel)
 
8
from gi.repository import Unity
 
9
 
 
10
 
 
11
class LensBuilder(type)
 
12
    '''
 
13
    MetaClass for building Lens classes and subclasses
 
14
    '''
 
15
 
 
16
    def __new__(cls, name, bases, attrs):
 
17
        super_new = super(LensBuilder, cls).__new__
 
18
        parents = [b for b in bases if isinstance(b, LensBuilder)]
 
19
        if not parents:
 
20
            # If this isn't a subclass of LensBuilder, don't do anything special.
 
21
            return super_new(cls, name, bases, attrs)
 
22
 
 
23
        # Create the class.
 
24
        module = attrs.pop('__module__')
 
25
        new_class = super_new(cls, name, bases, {'__module__': module})
 
26
 
 
27
        attr_meta = attrs.pop('Meta', None)
 
28
        if not attr_meta:
 
29
            meta = getattr(new_class, 'Meta', None)
 
30
        else:
 
31
            meta = attr_meta
 
32
        base_meta = getattr(new_class, '_meta', None)
 
33
 
 
34
        setattr(new_class, '_meta', LensMeta(meta))
 
35
 
 
36
        for aName, a in attrs.items():
 
37
            if isinstance(a, Unity.Scope):
 
38
                new_class._meta.scopes[aName] = a
 
39
                if not hasattr(meta, 'scope_order'):
 
40
                    new_class._meta.scope_order.append(aName)
 
41
            if isinstance(a, Unity.Category):
 
42
                new_class._meta.categories[aName] = a
 
43
                if not hasattr(meta, 'category_order'):
 
44
                    new_class._meta.category_order.append(aName)
 
45
            if isinstance(a, Unity.Filter):
 
46
                new_class._meta.filters[aName] = a
 
47
                if not hasattr(meta, 'filter_order'):
 
48
                    new_class._meta.filter_order.append(aName)
 
49
            else:
 
50
                setattr(new_class, aName, a)
 
51
 
 
52
class LensMeta(object):
 
53
    '''
 
54
    Metadata object for a Lens
 
55
    '''
 
56
 
 
57
    def __init__(self, meta):
 
58
        self.bus_name = getattr(meta, 'bus_name', None)
 
59
        self.bus_path = getattr(meta, 'bus_path', str(self.bus_name).replace('.', '/'))
 
60
        self.categories = dict()
 
61
        self.category_order = getattr(meta, 'catefory_order', [])
 
62
        self.filters = dict()
 
63
        self.filter_order = getattr(meta, 'filter_order', [])
 
64
        self.scopes = dict()
 
65
        self.scope_order getattr(meta, 'scope_order', [])
 
66
 
 
67
 
 
68
class Lens(object):
 
69
    __metaclass__ = LensBuilder
 
70
 
 
71
    class Meta:
 
72
        pass
 
73
 
 
74
    def __init__ (self):
 
75
        pass
 
76
 
 
77
class Scope(object):
 
78
    
 
79
    def search(self, phrase):
 
80
        '''
 
81
        Base search method, should be overwritten by a subclass
 
82
        '''
 
83
        return None
 
84
 
 
85
    def global_search(self, phrase):
 
86
        return self.search(phrase)