1 from straw
.model
import Category
, Feed
2 import SQLiteStorage
as Storage
5 def __init__(self
, storage
):
8 def _get_indexed(self
, entities
, index_field
):
9 return dict([(getattr(entity
, index_field
), entity
) for entity
in entities
])
11 def _get_grouped(self
, entities
, field
):
15 for entity
in entities
:
16 current
= getattr(entity
, field
)
18 if previous
!= current
:
19 # we have new group, let's make a dict entry for it
24 groups
[current
].append(entity
)
28 def _is_inherited(self
, clazz
):
29 return len(clazz
.__bases
__) == 1 and hasattr(clazz
, "inheritance") and clazz
.inheritance
31 def _get_persistent_fields(self
, clazz
):
32 fields
= list(clazz
.persistent_properties
)
34 if self
._is
_inherited
(clazz
):
35 fields
.extend(clazz
.__bases
__[0].persistent_properties
)
40 self
.storage
._tx
_begin
()
43 self
.storage
._tx
_commit
()
46 return self
.storage
.query(sql
)
48 def save(self
, entity
):
49 do_insert
= entity
.id == None
51 if self
._is
_inherited
(entity
.__class
__):
52 base_class
= entity
.__class
__.__bases
__[0]
53 base_data
= dict([(property, getattr(entity
, property)) for property in base_class
.persistent_properties
if property != base_class
.primary_key
])
56 id = self
.storage
.insert(base_class
.persistent_table
, base_data
)
59 self
.storage
.update(base_class
.persistent_table
, entity
.id, base_data
)
61 data
= dict([(property, getattr(entity
, property)) for property in entity
.__class
__.persistent_properties
if property != entity
.__class
__.primary_key
])
64 id = self
.storage
.insert(entity
.__class
__.persistent_table
, data
)
69 self
.storage
.update(entity
.__class
__.persistent_table
, entity
.id, data
)
71 #print "save = %s" % str(time.time() - s)
74 def get_one(self
, clazz
, id):
75 #result = self.storage.query("SELECT * FROM %s WHERE id = ?" % clazz.persistent_table, params = (id,))
76 result
= self
.get(clazz
, " WHERE id = %s" % id)
79 def get(self
, clazz
, sql
= "", query
= None, params
= []):
83 result
= self
.storage
.query("SELECT * FROM %s%s" % (clazz
.persistent_table
, sql
), params
)
85 result
= self
.storage
.query(query
, params
)
91 [setattr(entity
, field
, row
[field
]) for field
in clazz
.persistent_properties
]
92 entities
.append(entity
)
98 def get_with_params(self
, clazz
, params
):
99 #self.storage.query(query, params = None)
101 for key
in params
.keys():
103 self
.storage
.query("SELECT * FROM %s WHERE %s" % (clazz
.persistent_table
, where_clause
))
105 def get_indexed(self
, clazz
, index_field
, sql
= ""):
106 result
= self
.storage
.query("SELECT * FROM %s%s" % (clazz
.persistent_table
, sql
))
113 for field
in clazz
.persistent_properties
:
114 setattr(entity
, field
, row
[i
])
117 entities
[getattr(entity
, index_field
)] = entity
121 def get_nodes(self
, sql
= ""):
122 #result = self.storage.query("SELECT f.*, feed_id, unread_count FROM feeds f LEFT JOIN (SELECT COUNT(*) AS unread_count, feed_id FROM items i WHERE i.is_read = 0 GROUP BY i.feed_id) ON feed_id = f.id ORDER BY category_id")
123 result
= self
.storage
.query("SELECT *, unread_count FROM nodes n LEFT JOIN feeds f ON (f.id = n.id) LEFT JOIN categories c ON (c.id = n.id) LEFT JOIN (SELECT COUNT(*) AS unread_count, feed_id FROM items i WHERE i.is_read = 0 GROUP BY i.feed_id) ON feed_id = f.id ORDER BY n.parent_id, n.norder")
127 if row
["type"] == "C":
129 elif row
["type"] == "F":
132 fields
= self
._get
_persistent
_fields
(clazz
)
134 entity
.unread_count
= 0
138 #if row[field] == None:
141 setattr(entity
, field
, value
)
143 if row
["unread_count"] != None:
144 setattr(entity
, "unread_count", row
["unread_count"])
146 entities
.append(entity
)
148 return self
._get
_indexed
(entities
, "id")
150 def delete_category(self
, id):
151 self
.storage
.query("DELETE FROM categories WHERE id = ?", (id,))
152 self
.storage
.query("DELETE FROM nodes WHERE id = ?", (id,))
154 def delete_feed(self
, id):
155 self
.storage
.query("DELETE FROM items WHERE feed_id = ?", (id,))
156 self
.storage
.query("DELETE FROM feeds WHERE id = ?", (id,))
157 self
.storage
.query("DELETE FROM nodes WHERE id = ?", (id,))