1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """
20 Modul generujacy kod tworzonej aplikacji.
21
22 Opis pliku szkieletowego
23 ========================
24
25 Modul analizuje skrypt szkieletu i generuje na jego podstawie aplikacje zgodne
26 z frameworkiem Django. Przykladowy plik XML moze wygladac nastepujaco::
27
28 <ajango>
29 <application name="myfirstapp">
30 <view type="empty" id="nowa">
31 <echo> Ta strona nie jest jeszcze gotowa</echo>
32 </view>
33 </application>
34 </ajango>
35
36 Poprawnie sformatowany plik sklada sie noda glownego o nazwie B{AJANGO}.
37 Wewnatrz niego nalezy zdefinowac odpowiednie aplikacje (node B{APPLICATION}),
38 ktore skladaja sie z widokow (node B{VIEW}). Poszczegolne widoki definiowane
39 sa niezaleznie a ich struktura zalezna jest od typu.
40
41 Dostepne widoki
42 ===============
43
44 System pozwala na wygenerowanie nastepujacych
45 L{widokow<ajango.generator.views>}.
46
47 - L{widok pusty <ajango.generator.views.empty>}
48 - L{widok wprowadzania danych <ajango.generator.views.input>}
49 - L{widok wyswietlania danych <ajango.generator.views.display>}
50 - L{widok listy <ajango.generator.views.list>}
51 - L{widok edycji danych <ajango.generator.views.editable>} (niedostepne)
52 - L{widok raportu <ajango.generator.views.raport>}
53 - L{agregacja widoku <ajango.generator.views.container>}
54 """
55
56 from __future__ import print_function
57 from django.core.management.base import CommandError
58 from ajango.generator.project_manager import ProjectManager
59 from ajango.generator.application import Application
60 from ajango.generator.config_global import ConfigGlobal
61 from xml.dom import minidom
62 import os.path
63
65 """ Obiekt generujacy aplikacje na podstawie pliku szkieletowego. """
66 - def __init__(self, project_name, skeleton_file):
67 self.project = ProjectManager(project_name)
68 ConfigGlobal().set('project_manager', self.project)
69 self.options = None
70 self.apps = []
71 self.main_app = None
72 self.render(skeleton_file)
74 """ Ustawienie opcji dla obiektu. """
75 self.options = options
76 - def render(self, skeleton_file):
77 """ Budowanie zestawu obiektow dla pliku XML. """
78 if not os.path.isfile(skeleton_file):
79 raise CommandError(
80 "%r: File doesn't exist" % skeleton_file
81 )
82 print("Render: "+ skeleton_file)
83 xmldoc_main = minidom.parse(skeleton_file)
84 xmldoc = xmldoc_main.childNodes[0]
85 if xmldoc.tagName.upper() != 'AJANGO':
86 raise CommandError("This Ajango skeleton is not Valid")
87 for elem in xmldoc.childNodes:
88 if isinstance(elem, minidom.Element):
89
90 if elem.tagName.upper() == 'APPLICATION':
91 app = Application(elem)
92 for once in self.apps:
93
94 if app.get_name() == once.get_name():
95 raise CommandError("There are two or more "
96 "application named: %r" %
97 app.get_name())
98 if app.getAttribute("main").lower() == "main":
99
100 if self.main_app != None:
101 raise CommandError("There are two or more "
102 "application signed as 'main'")
103 self.main_app = app
104 self.apps.append(app)
105 self.project.add_main_view_url(app)
106 else:
107 raise CommandError("Unknown tag name: %r " % elem.tagName)
108 if self.main_app == None:
109
110 self.main_app = self.apps[0]
111 self.project.add_main_url(self.main_app)
122