| 21 | 21 | 
                      image: str
                  
                 | 
              
| 22 | 22 | 
                  
                  
                 | 
              
| 23 | 23 | 
                      def thumb(self):
                  
                 | 
              
 | 24 | 
                
                          print(self.image)
                  
                 | 
              
| 24 | 25 | 
                          return self.image[:-4] + '_thumb' + self.image[-4:]
                  
                 | 
              
| 25 | 26 | 
                  
                  
                 | 
              
| 26 | 27 | 
                  
                  
                 | 
              
            
              
                 | 
              
            
          | 37 | 38 | 
                          else:
                  
                 | 
              
| 38 | 39 | 
                              return self.source[:256] + '...'
                  
                 | 
              
| 39 | 40 | 
                  
                  
                 | 
              
 | 41 | 
                
                  class PageRef(typing.NamedTuple):
                  
                 | 
              
 | 42 | 
                
                      page: int
                  
                 | 
              
 | 43 | 
                
                  
                  
                 | 
              
 | 44 | 
                
                  class Rendered(typing.NamedTuple):
                  
                 | 
              
 | 45 | 
                
                      rendered: str
                  
                 | 
              
| 40 | 46 | 
                  
                  
                 | 
              
| 41 | 47 | 
                  class Design(typing.NamedTuple):
                  
                 | 
              
| 42 | 48 | 
                      title: str
                  
                 | 
              
            
              
                 | 
              
            
          | 55 | 61 | 
                          if self.images:
                  
                 | 
              
| 56 | 62 | 
                              return self.images[0].thumb()
                  
                 | 
              
| 57 | 63 | 
                  
                  
                 | 
              
 | 64 | 
                
                  class Paginated(typing.NamedTuple):
                  
                 | 
              
 | 65 | 
                
                      next_page: typing.Optional[PageRef]
                  
                 | 
              
 | 66 | 
                
                      prev_page: typing.Optional[PageRef]
                  
                 | 
              
 | 67 | 
                
                      last_page: int
                  
                 | 
              
 | 68 | 
                
                      contents: typing.List[Design]
                  
                 | 
              
 | 69 | 
                
                  
                  
                 | 
              
| 58 | 70 | 
                  class Tag(typing.NamedTuple):
                  
                 | 
              
| 59 | 71 | 
                      tag: str
                  
                 | 
              
| 60 | 72 | 
                      count: int
                  
                 | 
              
            
              
                 | 
              
            
          | 68 | 80 | 
                  class DB:
                  
                 | 
              
| 69 | 81 | 
                  
                  
                 | 
              
| 70 | 82 | 
                      def __init__(self, per_page=16):
                  
                 | 
              
| 71 |  | 
                          self._db = web.database(dbn='sqlite',
                  
                 | 
              
| 72 |  | 
                                                  db='frony.db')
                  
                 | 
              
 | 83 | 
                
                          self._db = web.database(dbn='sqlite', db='frony.db')
                  
                 | 
              
| 73 | 84 | 
                          self.per_page = per_page
                  
                 | 
              
| 74 | 85 | 
                          self.categories = {}
                  
                 | 
              
| 75 | 86 | 
                          self.photo_num = self.get_max_photo_num() + 1
                  
                 | 
              
            
              
                 | 
              
            
          | 189 | 200 | 
                                   d.id) for d in ds)
                  
                 | 
              
| 190 | 201 | 
                  
                  
                 | 
              
| 191 | 202 | 
                      def get_designs_by_category_and_tag(self, cat, tag, offset=0):
                  
                 | 
              
| 192 |  | 
                          cid = self.get_category_id(cat)
                  
                 | 
              
| 193 | 203 | 
                          ds = self._db.query(
                  
                 | 
              
| 194 |  | 
                              '''select * from designs, tags
                  
                 | 
              
| 195 |  | 
                                 where tags.tag_name = $tag
                  
                 | 
              
| 196 |  | 
                                 and category=$cat
                  
                 | 
              
| 197 |  | 
                                 and designs.id = tags.design_id
                  
                 | 
              
| 198 |  | 
                                 order by designs.id desc
                  
                 | 
              
 | 204 | 
                
                              '''select d.title, d.description, d.id, c.name as cat_name,
                  
                 | 
              
 | 205 | 
                
                                   (select filename from photos where photos.design_id = d.id limit 1) as image
                  
                 | 
              
 | 206 | 
                
                                 from designs d, tags t, categories c
                  
                 | 
              
 | 207 | 
                
                                 where t.tag_name = $tag
                  
                 | 
              
 | 208 | 
                
                                 and d.category=c.id
                  
                 | 
              
 | 209 | 
                
                                 and c.name = $cat
                  
                 | 
              
 | 210 | 
                
                                 and d.id = t.design_id
                  
                 | 
              
 | 211 | 
                
                                 order by d.id desc
                  
                 | 
              
| 199 | 212 | 
                                 limit $per_page offset $offset''',
                  
                 | 
              
| 200 | 213 | 
                              vars=dict(tag=tag,
                  
                 | 
              
| 201 |  | 
                                        cat=cid,
                  
                 | 
              
 | 214 | 
                
                                        cat=cat,
                  
                 | 
              
| 202 | 215 | 
                                        offset=offset * self.per_page,
                  
                 | 
              
| 203 | 216 | 
                                        per_page=self.per_page))
                  
                 | 
              
| 204 | 217 | 
                  
                  
                 | 
              
| 205 |  | 
                          return ((d.title,
                  
                 | 
              
| 206 |  | 
                                   self.get_picture(d.design_id),
                  
                 | 
              
| 207 |  | 
                                   d.description,
                  
                 | 
              
| 208 |  | 
                                   cat,
                  
                 | 
              
| 209 |  | 
                                   d.design_id) for d in ds)
                  
                 | 
              
 | 218 | 
                
                          last_page=0
                  
                 | 
              
 | 219 | 
                
                          return Paginated(
                  
                 | 
              
 | 220 | 
                
                              next_page=None,
                  
                 | 
              
 | 221 | 
                
                              prev_page=None,
                  
                 | 
              
 | 222 | 
                
                              last_page=last_page,
                  
                 | 
              
 | 223 | 
                
                              contents=[
                  
                 | 
              
 | 224 | 
                
                                  Design(
                  
                 | 
              
 | 225 | 
                
                                      title=d.title,
                  
                 | 
              
 | 226 | 
                
                                      images=[Image(d.image)],
                  
                 | 
              
 | 227 | 
                
                                      description=d.description,
                  
                 | 
              
 | 228 | 
                
                                      category=d.cat_name,
                  
                 | 
              
 | 229 | 
                
                                      id=d.id)
                  
                 | 
              
 | 230 | 
                
                                  for d in ds],
                  
                 | 
              
 | 231 | 
                
                          )
                  
                 | 
              
| 210 | 232 | 
                  
                  
                 | 
              
| 211 | 233 | 
                      def new_design(self):
                  
                 | 
              
| 212 | 234 | 
                          new_id = self._db.query(
                  
                 |