diff --git a/cps/db.py b/cps/db.py index bfceabe9ed2552b625fd22719607c9f593e9ffd0..52c350da50f49a0a147173ba3e2e8629541d862b 100755 --- a/cps/db.py +++ b/cps/db.py @@ -49,17 +49,24 @@ books_languages_link = Table('books_languages_link', Base.metadata, Column('lang_code', Integer, ForeignKey('languages.id'), primary_key=True) ) -#cc = conn.execute("SELECT id FROM custom_columns") -#cc_ids = [] -#books_custom_column_links = {} -#for row in cc: -# cc_link=Table('books_custom_column_' + str(row.id) + '_link', Base.metadata, -# Column('book', Integer, ForeignKey('books.id'), primary_key=True), -# Column('custom_column', Integer, ForeignKey('custom_column_' + str(row.id) + '.id'), primary_key=True) -# ) -# books_custom_column_links[row.id] = cc_link -# cc_ids.append(row.id) - +cc = conn.execute("SELECT id FROM custom_columns") +cc_ids = [] + +books_custom_column_links = {} +for row in cc: + books_custom_column_links[row.id] = Table('books_custom_column_' + str(row.id) + '_link', Base.metadata, + Column('book', Integer, ForeignKey('books.id'), primary_key=True), + Column('value', Integer, ForeignKey('custom_column_' + str(row.id) + '.id'), primary_key=True) + ) + #books_custom_column_links[row.id]= + cc_ids.append(row.id) + +cc_classes = {} +for id in cc_ids: + ccdict={'__tablename__':'custom_column_' + str(id), + 'id':Column(Integer, primary_key=True), + 'value':Column(String)} + cc_classes[id] = type('Custom_Column_' + str(id), (Base,), ccdict) class Comments(Base): __tablename__ = 'comments' @@ -163,7 +170,7 @@ class Data(Base): class Books(Base): __tablename__ = 'books' - id = Column(Integer,primary_key=True) + id = Column(Integer, primary_key=True) title = Column(String) sort = Column(String) author_sort = Column(String) @@ -181,17 +188,7 @@ class Books(Base): series = relationship('Series', secondary=books_series_link, backref='books') ratings = relationship('Ratings', secondary=books_ratings_link, backref='books') languages = relationship('Languages', secondary=books_languages_link, backref='books') - #custom_columns = {} - #for id in cc_ids: - # print id - # custom_columns[id] = relationship(cc_classes[id], secondary=books_custom_column_links[id], backref='books') - #custom_columns[1] = relationship(cc_classes[1], secondary=books_custom_column_links[1], backref='books') - #custom_columns[2] = relationship(cc_classes[2], secondary=books_custom_column_links[2], backref='books') - #custom_columns[3] = relationship(cc_classes[3], secondary=books_custom_column_links[3], backref='books') - - - def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, authors, tags): self.title = title self.sort = sort @@ -205,7 +202,9 @@ class Books(Base): def __repr__(self): return u"<Books('{0},{1}{2}{3}{4}{5}{6}{7}{8}')>".format(self.title, self.sort, self.author_sort, self.timestamp, self.pubdate, self.series_index, self.last_modified ,self.path, self.has_cover) - +for id in cc_ids: + setattr(Books, 'custom_column_' + str(id), relationship(cc_classes[id], secondary=books_custom_column_links[id], backref='books')) + class Custom_Columns(Base): __tablename__ = 'custom_columns' @@ -217,30 +216,9 @@ class Custom_Columns(Base): editable = Column(Boolean) display = Column(String) is_multiple = Column(Boolean) - normalized = Column(Boolean) - -#class Custom_Column(object): -# def __init__(self, value): -# self.value = value - -#def get_cc_table(id): -# custom_column = Custom_Column -# table_name = 'custom_column_' + str(id) -# table_object = Table(table_name, Base.metadata, -# Column('id', Integer, primary_key=True, autoincrement=True), -# Column('value', String) -# ) -# clear_mappers() -# mapper(custom_column, table_object, properties={'books' + str(id): relationship(Books, secondary=books_custom_column_links[id] , backref='custom_column_' + str(id))}) -# return custom_column - -#cc_classes={} -#for id in cc_ids: -# cc_classes[id] = get_cc_table(id) -#print cc_classes - + normalized = Column(Boolean) -Base.metadata.create_all(engine) +#Base.metadata.create_all(engine) Session = sessionmaker() Session.configure(bind=engine) session = Session() diff --git a/cps/helper.py b/cps/helper.py index 629c8109ee83cbb1e7fe680e341fd9cc2ac54a16..4bd9d952c7960040a62bb9cb4ead62ec64b25080 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -200,8 +200,8 @@ def update_dir_stucture(book_id): book.path = new_authordir + "/" + book.path.split("/")[1] db.session.commit() -def get_custom_columns(id): - cc = db.session.query(db.Custom_Columns).all() - for c in cc: - print c.name +#def get_custom_columns(id): +# cc = db.session.query(db.Custom_Columns).all() +# for c in cc: +# print c.name diff --git a/cps/templates/detail.html b/cps/templates/detail.html index bcaad48aa4ba2ae98a6a03da908025174632910b..5cf9d5e24120e230c29b30d38df659af280fd555 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -58,6 +58,23 @@ </div> </p> {% endif %} + + {% if cc|length > 0 %} + <p> + <div class="custom_columns"> + {% for c in cc %} + {% if entry['custom_column_' ~ c.id]|length > 0 %} + {{ c.name }}: + {% for column in entry['custom_column_' ~ c.id] %} + {{ column.value }} + {% endfor %} + <br /> + {% endif %} + {% endfor %} + </div> + </p> + {% endif %} + {% if entry.comments|length > 0 %} <h3>Description:</h3> diff --git a/cps/templates/edit_book.html b/cps/templates/edit_book.html index b4ec366123028dc43f52fd91abf981a2cb145f5f..a3746e4e93619ba696a692a17fc95f5c6f3a7dbc 100644 --- a/cps/templates/edit_book.html +++ b/cps/templates/edit_book.html @@ -43,6 +43,25 @@ <label for="cover_url">Cover URL (jpg)</label> <input type="text" class="form-control" name="cover_url" id="cover_url" value=""> </div> + {% if cc|length > 0 %} + {% for c in cc %} + <div class="form-group"> + <label for="{{ 'custom_column_' ~ c.id }}">{{ c.name }}</label> + <input type="text" class="form-control" name="{{ 'custom_column_' ~ c.id}} " id="{{ 'custom_column_' ~ c.id }}" + {% if book['custom_column_' ~ c.id]|length > 0 %} + {% for column in book['custom_column_' ~ c.id] %} + value="{{ column.value }} {% if not loop.last %}, {% endif %} + {% endfor %} + " + {% endif %} + > + <br /> + {% endfor %} + </div> + </p> + {% endif %} + + <div class="checkbox"> <label> <input name="detail_view" type="checkbox" checked> view book after edit diff --git a/cps/web.py b/cps/web.py index 978b7f537bb31e6d8024737824f45b16a60db6aa..08c4636f0258772a86d8fcf9bccd38057c6ba850 100755 --- a/cps/web.py +++ b/cps/web.py @@ -316,12 +316,14 @@ def discover(page): @app.route("/book/<int:id>") def show_book(id): entries = db.session.query(db.Books).filter(db.Books.id == id).first() - helper.get_custom_columns(entries.id) + cc = db.session.query(db.Custom_Columns).all() + #print entries.custom_column_1 + #helper.get_custom_columns(entries.id) book_in_shelfs = [] shelfs = ub.session.query(ub.BookShelf).filter(ub.BookShelf.book_id == id).all() for entry in shelfs: book_in_shelfs.append(entry.shelf) - return render_template('detail.html', entry=entries, title=entries.title, books_shelfs=book_in_shelfs) + return render_template('detail.html', entry=entries, cc=cc, title=entries.title, books_shelfs=book_in_shelfs) @app.route("/category") def category_list(): @@ -695,6 +697,7 @@ def edit_user(user_id): def edit_book(book_id): ## create the function for sorting... db.session.connection().connection.connection.create_function("title_sort",1,db.title_sort) + cc = db.session.query(db.Custom_Columns).all() book = db.session.query(db.Books).filter(db.Books.id == book_id).first() author_names = [] for author in book.authors: @@ -832,9 +835,9 @@ def edit_book(book_id): if "detail_view" in to_save: return redirect(url_for('show_book', id=book.id)) else: - return render_template('edit_book.html', book=book, authors=author_names) + return render_template('edit_book.html', book=book, authors=author_names, cc=cc) else: - return render_template('edit_book.html', book=book, authors=author_names) + return render_template('edit_book.html', book=book, authors=author_names, cc=cc) @app.route("/upload", methods = ["GET", "POST"]) @login_required @@ -877,7 +880,6 @@ def upload(): if fileextension.upper() == ".PDF": if use_generic_pdf_cover: basedir = os.path.dirname(__file__) - print basedir copyfile(os.path.join(basedir, "static/generic_cover.jpg"), os.path.join(filepath, "cover.jpg")) else: with Image(filename=saved_filename + "[0]", resolution=150) as img: @@ -885,12 +887,15 @@ def upload(): img.save(filename=os.path.join(filepath, "cover.jpg")) has_cover = 1 is_author = db.session.query(db.Authors).filter(db.Authors.name == author).first() + print is_author if is_author: + print 'Unknown is known Author' db_author = is_author else: db_author = db.Authors(author, "", "") db.session.add(db_author) - db_book = db.Books(title, "", "", datetime.datetime.now(), datetime.datetime(101, 01,01), 1, datetime.datetime.now(), author_dir + "/" + title_dir, has_cover, db_author, []) + path = os.path.join(author_dir, title_dir) + db_book = db.Books(title, "", "", datetime.datetime.now(), datetime.datetime(101, 01,01), 1, datetime.datetime.now(), path, has_cover, db_author, []) db_book.authors.append(db_author) db_data = db.Data(db_book, fileextension.upper()[1:], file_size, data_name) db_book.data.append(db_data)