1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """
20 Modul generowania widokow.
21
22 Modul posiada mechanizmy umozliwiajace wygenerowanie kodu do wywolania widokow
23 stron dostepnych za pomoca platfromy L{ajango}.
24
25 Dostepne parametry
26 ==================
27
28 - I{type} - Typ widoku do stworzenia.
29 - I{id} - Unikatowy indentyfikator strony.
30 - I{main} - (opcja) Przyjmuje wartosc I{main}. Zaznaczenie jako widoku
31 glownego.
32
33 Dostepne widoki
34 ===============
35
36 System pozwala na wygenerowanie nastepujacych
37 L{widokow<ajango.generator.views>}.
38
39 - L{widok pusty <ajango.generator.views.empty>}
40 - L{widok wprowadzania danych <ajango.generator.views.input>}
41 - L{widok wyswietlania danych <ajango.generator.views.display>}
42 - L{widok listy <ajango.generator.views.list>}
43 - L{widok edycji danych <ajango.generator.views.editable>}
44 - L{widok raportu <ajango.generator.views.raport>}
45 - L{agregacja widoku <ajango.generator.views.container>}
46
47 W celu zapoznania sie z modulem obslugujacym strony w wygenerowanej aplikacji
48 zajzyj do L{ajango.site.sites}
49 """
50
51 from xml.dom import minidom
52 from ajango.core.factory import FactoryBase
53 from ajango.core.XMLReader import XMLReader
54 from ajango.generator.renderer import DefRenderer
55 from ajango.core.generable import Generable
56 from django.core.management.base import CommandError
57 import abc
60 """ Klasa obiektu fabryki generatorow widoku. """
62 """ Metoda inicjalizacyjna. """
63 self.set_items('View', {
64 'empty' : 'ajango.generator.views.empty',
65 'input' : 'ajango.generator.views.input',
66 'list' : 'ajango.generator.views.list',
67 'display' : 'ajango.generator.views.display',
68 'editable' : 'ajango.generator.views.editable',
69 'raport' : 'ajango.generator.views.raport',
70 'container' : 'ajango.generator.views.container',
71 })
72 if self.object['xmldoc'].tagName.upper() != 'VIEW':
73 raise CommandError("Cannot create application from %r" %
74 self.object['xmldoc'].tagName)
75 self.str = self.object['xmldoc'].getAttribute('type').lower()
77 """ Wykonanie zadan obiektu. """
78 return fun(self.object['xmldoc'],
79 self.object['imp_renderer'],
80 self.object['app'])
81
85
88 """ Klasa abstrakcyjna generatora widokow. """
89 __metaclass__ = abc.ABCMeta
90 DEFAULT_APP_TITLE = "My new Application"
91 - def __init__(self, xmldoc, importRenderer, app):
109 - def check(self, name, xmldoc_elem):
110 """ Oczytanie nodow wewnetrznych. """
111 if name == 'TITLE':
112 self.title = xmldoc_elem.getAttribute('value')
113 return True
114 elif name == 'HEADER':
115 self.header = xmldoc_elem.getAttribute('value')
116 return True
117 return False
119 """ Pobranie renderera. """
120 return self.renderer.get(key)
122 """ Pobranie tytulu. """
123 if self.title == "" or self.title == self.DEFAULT_APP_TITLE:
124 return self.name
125 return self.title
127 """ Dadanie polecenia do kodu vidoku"""
128 self.renderer['code'].add_line(text, tab)
130 """Dodanie importu do biblioteki"""
131 self.renderer['import'].add_import(imp, from_elem)
133 """ Pobranie nazwy. """
134 return self.name
136 """ Budowanie widoku w funkcjach wewnetrzych. """
137 if self.type == "":
138 raise CommandError("This view must have set type")
139 self.add_import("site_factory", "ajango.site.sites")
140 self.add_line("%s = site_factory(%r, {'request' : request,"
141 "'appName' : %r, 'viewName' : %r})" %
142 (view_name, self.type, self.app.get_name(), self.name))
143 self.execute(None, view_name)
145 """ Budowanie kodu, funkcja eksportowana na zewnatrz. """
146 self.make_view_execute(view_name)
147 self.add_line("%s.set_title(%r)" % (view_name, self.title))
148 if self.header != "":
149 self.add_line("%s.set_header(%r)" % (view_name, self.header))
150 self.add_line("%s.set_menu(default_menu())" % view_name)
151 self.add_line("return %s.make_site()" % view_name)
152 @abc.abstractmethod
153 - def execute(self, view, view_name="view"):
154 """ Wykonanie zadan obiektu. """
155 raise NotImplementedError()
158
160 """ Informacja na temat widocznosci w menu glownym aplikacji. """
161 return False
162