Returns a clone instead of self
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import copy
|
||||||
|
|
||||||
VERSION = "0.0.3"
|
VERSION = "0.0.3"
|
||||||
|
|
||||||
@@ -175,47 +176,58 @@ class SQLQuery(object):
|
|||||||
self._extra = {}
|
self._extra = {}
|
||||||
self._limits = None
|
self._limits = None
|
||||||
|
|
||||||
|
def _clone(self,):
|
||||||
|
return copy.deepcopy(self)
|
||||||
|
|
||||||
def values(self, *args):
|
def values(self, *args):
|
||||||
self._values = args
|
clone = self._clone()
|
||||||
return self
|
clone._values = args
|
||||||
|
return clone
|
||||||
|
|
||||||
def filter(self, *args, **kwargs):
|
def filter(self, *args, **kwargs):
|
||||||
|
clone = self._clone()
|
||||||
for arg in args:
|
for arg in args:
|
||||||
if issubclass(arg.__class__, QMixin):
|
if issubclass(arg.__class__, QMixin):
|
||||||
self._filters &= arg
|
clone._filters &= arg
|
||||||
|
|
||||||
self._filters &= Q(**kwargs)
|
clone._filters &= Q(**kwargs)
|
||||||
return self
|
return clone
|
||||||
|
|
||||||
def exclude(self, *args, **kwargs):
|
def exclude(self, *args, **kwargs):
|
||||||
|
clone = self._clone()
|
||||||
for arg in args:
|
for arg in args:
|
||||||
if issubclass(arg.__class__, QMixin):
|
if issubclass(arg.__class__, QMixin):
|
||||||
self._excludes &= arg
|
clone._excludes &= arg
|
||||||
|
|
||||||
self._excludes &= Q(**kwargs)
|
clone._excludes &= Q(**kwargs)
|
||||||
return self
|
return clone
|
||||||
|
|
||||||
def order_by(self, *args):
|
def order_by(self, *args):
|
||||||
self._order_by = args
|
clone = self._clone()
|
||||||
return self
|
clone._order_by = args
|
||||||
|
return clone
|
||||||
|
|
||||||
def group_by(self, *args):
|
def group_by(clone, *args):
|
||||||
self._group_by = args
|
clone = self._clone()
|
||||||
return self
|
clone._group_by = args
|
||||||
|
return clone
|
||||||
|
|
||||||
def join(self, table, on="", how="inner join"):
|
def join(self, table, on="", how="inner join"):
|
||||||
|
clone = self._clone()
|
||||||
if on:
|
if on:
|
||||||
on = "ON " + on
|
on = "ON " + on
|
||||||
self._joins.append("{how} {table} {on}".format(how=how, table=table, on=on))
|
clone._joins.append("{how} {table} {on}".format(how=how, table=table, on=on))
|
||||||
return self
|
return clone
|
||||||
|
|
||||||
def extra(self, extra):
|
def extra(self, extra):
|
||||||
self._extra.update(extra)
|
clone = self._clone()
|
||||||
return self
|
clone._extra.update(extra)
|
||||||
|
return clone
|
||||||
|
|
||||||
def __getitem__(self, slice):
|
def __getitem__(self, slice):
|
||||||
self._limits = slice
|
clone = self._clone()
|
||||||
return self
|
clone._limits = slice
|
||||||
|
return clone
|
||||||
|
|
||||||
|
|
||||||
class SQLCompiler(object):
|
class SQLCompiler(object):
|
||||||
|
|||||||
@@ -43,6 +43,19 @@ class TestSqlBuilder(unittest.TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
str(qs), "SELECT * FROM users WHERE ((nombre='jose') AND (fecha<=now())) ORDER BY nombre, fecha DESC LIMIT 10")
|
str(qs), "SELECT * FROM users WHERE ((nombre='jose') AND (fecha<=now())) ORDER BY nombre, fecha DESC LIMIT 10")
|
||||||
|
|
||||||
|
def test_vars(self):
|
||||||
|
sql = Queryset("users")
|
||||||
|
sql = sql.filter(name="jhon")
|
||||||
|
sql = sql.exclude(date__year__lte=1977)
|
||||||
|
sql = sql.values("name", "date")
|
||||||
|
self.assertEqual(
|
||||||
|
str(sql), "SELECT name, date FROM users WHERE ((name='jhon') AND NOT (DATEPART('year', date)<=1977))")
|
||||||
|
|
||||||
|
sql = sql.values("name", "date", "tlf")
|
||||||
|
sql.filter(name="not")
|
||||||
|
sql.filter(name="not")
|
||||||
|
self.assertEqual(
|
||||||
|
str(sql), "SELECT name, date, tlf FROM users WHERE ((name='jhon') AND NOT (DATEPART('year', date)<=1977))")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user