Package ajango :: Package database :: Module query
[hide private]
[frames] | no frames]

Source Code for Module ajango.database.query

  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 zarzadzania zapytaniami do bazy danych. 
 21   
 22  Umozliwia wykonanie zapytania SQL dla wybranych elementow. 
 23   
 24  Dostepne znaczniki 
 25  ================== 
 26   
 27      1. B{TABLE} - Tabela do ktorej nalezy wstawic dane. 
 28          - I{name} - Nazwa tabeli 
 29  """ 
 30   
 31  from django.core.management.base import CommandError 
 32  from ajango.core.generable       import Generable 
 33  from ajango.core.hybrid          import Hybrid 
 34  from ajango.database             import get_table_by_name 
35 36 -class Result(object):
37 """ Obiekt odpowiedzi. """
38 - def __init__(self, data):
39 self.data = data
40 - def get_element(self, key):
41 """ Pobierz odpowiedni element. """ 42 return self.data.serializable_value(key)
43 - def set_data(self, data):
44 """ Ustawienie danych. """ 45 self.data = data
46
47 -class Query(Hybrid, Generable):
48 """ Obiekt zapytania. """
49 - def __init__(self, param):
50 self.xml_name = "QUERY" 51 self.xml_permited = ["TABLE"] 52 self.table = "" 53 self.models = None 54 self._table_object = None 55 Hybrid.__init__(self, param)
56 - def read_from_xml(self, xmldoc):
57 """ Inicjalizacja z danych XML. """ 58 pass
59 - def read_from_dict(self, param):
60 """ Inicjalizacja ze zmiennej slownikowej. """ 61 self.table = param['table']
62 - def check(self, name, xmldoc_elem):
63 """ Odczytanie nodow wewnetrznych. """ 64 if name == "TABLE": 65 if self.table != "": 66 raise CommandError("There are only one table name.") 67 self.table = xmldoc_elem.getAttribute('name')
68 - def set_models(self, models):
69 """ Ustawienie modelu. """ 70 self.models = models
71 - def execute(self, view, view_name='view'):
72 """ Wykonanie zadan obiektu. """ 73 view.add_import("models", ".") 74 view.add_import("Query", "ajango.database.query") 75 view.add_line("query = Query({ 'table': %r })" % self.table) 76 view.add_line("query.set_models(models)") 77 view.add_line("%s.set_query(query)" % view_name)
78 - def _get_table_object(self):
79 """ Zwraca obiekt tabeli zgodny z biblioteka minidom. """ 80 if self._table_object == None: 81 self._table_object = get_table_by_name(self.table, self.models) 82 return self._table_object
83 @staticmethod
84 - def _get_base(elems):
85 """ Czesc wspolna dla metod pobierajacych dane 'get'. """ 86 results = [] 87 for elem in elems: 88 results.append(Result(elem)) 89 return results
90 - def get_by_filter(self, option):
91 """ Pobiera dane na podstawie filtra. """ 92 table = self._get_table_object() 93 id_param = option['id'] 94 elems = table.objects.filter(id=id_param) 95 return Query._get_base(elems)
96 - def get_all(self):
97 """ Pobiera wszystkie dane z tabeli. """ 98 table = self._get_table_object() 99 elems = table.objects.all() 100 return Query._get_base(elems)
101
102 -class DataCreate(object):
103 """ Klasa wprowadzajaca dane do bazy. """
104 - def __init__(self, table):
105 self.table = table 106 self.models = None 107 self._table_object = None 108 self.data = None
109 - def set_models(self, models):
110 """ Ustawienie modelu. """ 111 self.models = models
112 - def _get_table_object(self):
113 """ Zwraca obiekt tabeli zgodny z biblioteka minidom. """ 114 if self._table_object == None: 115 self._table_object = get_table_by_name(self.table, self.models) 116 return self._table_object
117 - def create_from_post(self, post):
118 """ Wprowadz do bazy dane na podstawie odpowiedzi formularza. """ 119 table = self._get_table_object() 120 table_inputs = [] 121 for elem in post.keys(): 122 if elem == 'view_id' or elem.find('middlewaretoken') > -1: 123 continue 124 table_inputs.append(elem) 125 data = table() 126 for elem in table_inputs: 127 setattr(data, elem, post[elem]) 128 self.data = data
129 - def save(self):
130 """ Zapisanie danych do bazy. """ 131 self.data.save()
132
133 -class DataEdit(object):
134 """ Klasa edytujaca dane do bazy. """
135 - def __init__(self, table, editable_ob):
136 self.table = table 137 self.editable_ob = editable_ob
138 - def edit_with_post(self, post):
139 """ Wprowadz do bazy dane na podstawie odpowiedzi formularza. """ 140 table_inputs = [] 141 for elem in post.keys(): 142 if elem == 'view_id' or elem.find('middlewaretoken') > -1 or elem == 'identity': 143 print ("Element pominiety: %s" % elem) 144 continue 145 print("Element: %s " % elem) 146 table_inputs.append(elem) 147 for elem in table_inputs: 148 setattr(self.editable_ob, elem, post[elem])
149 - def set_models(self, models):
150 """ 151 Ustawienie modelu. (metoda przestarzala) 152 """ 153 pass
154 - def save(self):
155 """ Zapisanie danych do bazy. """ 156 self.editable_ob.save()
157