Ejemplo n.º 1
0
 def search(self,
            criteria: str = '',
            limit: int = 10,
            format: str = 'table'):
     total_in_db = self.session.query(BooksTable.uid).count()
     r = self.session.query(BooksTable.title, BooksTable.date_published, BooksTable.pages, BooksTable.url, BooksTable.isbn13)\
             .filter(BooksTable.title.like(criteria))\
             .order_by(desc(BooksTable.date_published))\
             .limit(limit)
     data = []
     # print(self.__default__orm)
     header = [
         colored('Date', "cyan", attrs=['bold']),
         colored('Pages', "cyan", attrs=['bold']),
         colored('ISBN13', "cyan", attrs=['bold']),
         colored('Title', "cyan", attrs=['bold']),
         colored('Url', "cyan", attrs=['bold'])
     ]
     for book in r:
         data.append([
             str(book.date_published), book.pages, book.isbn13,
             textwrap.fill(book.title, 90),
             textwrap.fill(book.url, 100)
         ])
     if format == 'table':
         if len(data) == 0:
             tt.print([[f"No results for: {criteria}"]],
                      style=tt.styles.ascii_thin)
         else:
             h = [header]
             h.extend(data)
             title = "---| " + colored("Results for:", "yellow") + colored(f" {criteria} ", "green") + \
                     ", Total DB: " + colored(number_format(total_in_db), "green") + \
                     ", ORM: " + \
                 colored(self.__default__orm, "green") + " |"
             t = AsciiTable(h, title=title)
             t.inner_row_border = True
             t.CHAR_OUTER_TOP_LEFT = "╭"
             t.CHAR_OUTER_BOTTOM_LEFT = "╰"
             t.CHAR_OUTER_BOTTOM_RIGHT = "╯"
             t.CHAR_OUTER_TOP_RIGHT = "╮"
             t.padding_left = 2
             t.justify_columns = {0: 'left', 1: 'left', 2: 'left'}
             print("\n")
             print(t.table)
             #tt.print(data, header=header, padding=(0, 1), style=tt.styles.ascii_thin, alignment='lll')
     elif format == 'json':
         print(json.dumps(data))
     return data