Package ajango :: Package generator :: Package views
[hide private]
[frames] | no frames]

Source Code for Package ajango.generator.views

  1  ########################################################################### 
  2  #                                                                         # 
  3  #  Copyright (C) 2016  Rafal Kobel <rafyco1@gmail.com>                    # 
  4  #                                                                         # 
  5  #  This program is free software: you can redistribute it and/or modify   # 
  6  #  it under the terms of the GNU General Public License as published by   # 
  7  #  the Free Software Foundation, either version 3 of the License, or      # 
  8  #  (at your option) any later version.                                    # 
  9  #                                                                         # 
 10  #  This program is distributed in the hope that it will be useful,        # 
 11  #  but WITHOUT ANY WARRANTY; without even the implied warranty of         # 
 12  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the           # 
 13  #  GNU General Public License for more details.                           # 
 14  #                                                                         # 
 15  #  You should have received a copy of the GNU General Public License      # 
 16  #  along with this program.  If not, see <http://www.gnu.org/licenses/>.  # 
 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 
58 59 -class ViewFactoryObject(FactoryBase):
60 """ Klasa obiektu fabryki generatorow widoku. """
61 - def init(self):
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()
76 - def execution(self, fun):
77 """ Wykonanie zadan obiektu. """ 78 return fun(self.object['xmldoc'], 79 self.object['imp_renderer'], 80 self.object['app'])
81
82 -def view_factory(param):
83 """ Fabryka generatorow widoku. """ 84 return ViewFactoryObject(param).get_from_params()
85
86 #pylint: disable=R0902 87 -class ViewBase(XMLReader, Generable):
88 """ Klasa abstrakcyjna generatora widokow. """ 89 __metaclass__ = abc.ABCMeta 90 DEFAULT_APP_TITLE = "My new Application"
91 - def __init__(self, xmldoc, importRenderer, app):
92 self.name = xmldoc.getAttribute('id').lower() 93 if self.name == '': 94 self.name = 'index' 95 self.app = app 96 self.code = "" 97 self.type = "" 98 self.title = self.DEFAULT_APP_TITLE 99 self.header = "" 100 if isinstance(importRenderer, dict): 101 self.renderer = importRenderer 102 else: 103 self.renderer = {} 104 self.renderer['code'] = DefRenderer(self.name, 'request') 105 self.renderer['import'] = importRenderer 106 self.xml_name = "VIEW" 107 self.add_permited(["TITLE", "HEADER"]) 108 XMLReader.__init__(self, xmldoc)
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
118 - def get_renderer(self, key):
119 """ Pobranie renderera. """ 120 return self.renderer.get(key)
121 - def get_title(self):
122 """ Pobranie tytulu. """ 123 if self.title == "" or self.title == self.DEFAULT_APP_TITLE: 124 return self.name 125 return self.title
126 - def add_line(self, text, tab=0):
127 """ Dadanie polecenia do kodu vidoku""" 128 self.renderer['code'].add_line(text, tab)
129 - def add_import(self, imp, from_elem=None):
130 """Dodanie importu do biblioteki""" 131 self.renderer['import'].add_import(imp, from_elem)
132 - def get_name(self):
133 """ Pobranie nazwy. """ 134 return self.name
135 - def make_view_execute(self, view_name="view"):
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)
144 - def make_execute(self, view_name="view"):
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()
156 - def __str__(self):
157 return self.get_name()
158 #pylint: disable=R0201
159 - def is_display_in_menu(self):
160 """ Informacja na temat widocznosci w menu glownym aplikacji. """ 161 return False
162