mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	Compatibility for sqlalchemy 2.0
This commit is contained in:
		| @@ -23,7 +23,11 @@ import sys | |||||||
|  |  | ||||||
| from sqlalchemy import exc, Column, String, Integer, SmallInteger, Boolean, BLOB, JSON | from sqlalchemy import exc, Column, String, Integer, SmallInteger, Boolean, BLOB, JSON | ||||||
| from sqlalchemy.exc import OperationalError | from sqlalchemy.exc import OperationalError | ||||||
| from sqlalchemy.ext.declarative import declarative_base | try: | ||||||
|  |     # Compability with sqlalchemy 2.0 | ||||||
|  |     from sqlalchemy.orm import declarative_base | ||||||
|  | except ImportError: | ||||||
|  |     from sqlalchemy.ext.declarative import declarative_base | ||||||
|  |  | ||||||
| from . import constants, cli, logger, ub | from . import constants, cli, logger, ub | ||||||
|  |  | ||||||
| @@ -66,7 +70,7 @@ class _Settings(_Base): | |||||||
|     config_random_books = Column(Integer, default=4) |     config_random_books = Column(Integer, default=4) | ||||||
|     config_authors_max = Column(Integer, default=0) |     config_authors_max = Column(Integer, default=0) | ||||||
|     config_read_column = Column(Integer, default=0) |     config_read_column = Column(Integer, default=0) | ||||||
|     config_title_regex = Column(String, default=u'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') |     config_title_regex = Column(String, default=r'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') | ||||||
|     config_mature_content_tags = Column(String, default='') |     config_mature_content_tags = Column(String, default='') | ||||||
|     config_theme = Column(Integer, default=0) |     config_theme = Column(Integer, default=0) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								cps/db.py
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								cps/db.py
									
									
									
									
									
								
							| @@ -30,7 +30,12 @@ from sqlalchemy import Table, Column, ForeignKey, CheckConstraint | |||||||
| from sqlalchemy import String, Integer, Boolean, TIMESTAMP, Float | from sqlalchemy import String, Integer, Boolean, TIMESTAMP, Float | ||||||
| from sqlalchemy.orm import relationship, sessionmaker, scoped_session | from sqlalchemy.orm import relationship, sessionmaker, scoped_session | ||||||
| from sqlalchemy.orm.collections import InstrumentedList | from sqlalchemy.orm.collections import InstrumentedList | ||||||
| from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta | from sqlalchemy.ext.declarative import DeclarativeMeta | ||||||
|  | try: | ||||||
|  |     # Compability with sqlalchemy 2.0 | ||||||
|  |     from sqlalchemy.orm import declarative_base | ||||||
|  | except ImportError: | ||||||
|  |     from sqlalchemy.ext.declarative import declarative_base | ||||||
| from sqlalchemy.pool import StaticPool | from sqlalchemy.pool import StaticPool | ||||||
| from sqlalchemy.sql.expression import and_, true, false, text, func, or_ | from sqlalchemy.sql.expression import and_, true, false, text, func, or_ | ||||||
| from sqlalchemy.ext.associationproxy import association_proxy | from sqlalchemy.ext.associationproxy import association_proxy | ||||||
| @@ -465,8 +470,9 @@ class CalibreDB(): | |||||||
|                                        isolation_level="SERIALIZABLE", |                                        isolation_level="SERIALIZABLE", | ||||||
|                                        connect_args={'check_same_thread': False}, |                                        connect_args={'check_same_thread': False}, | ||||||
|                                        poolclass=StaticPool) |                                        poolclass=StaticPool) | ||||||
|             cls.engine.execute("attach database '{}' as calibre;".format(dbpath)) |             with cls.engine.begin() as connection: | ||||||
|             cls.engine.execute("attach database '{}' as app_settings;".format(app_db_path)) |                 connection.execute(text("attach database '{}' as calibre;".format(dbpath))) | ||||||
|  |                 connection.execute(text("attach database '{}' as app_settings;".format(app_db_path))) | ||||||
|  |  | ||||||
|             conn = cls.engine.connect() |             conn = cls.engine.connect() | ||||||
|             # conn.text_factory = lambda b: b.decode(errors = 'ignore') possible fix for #1302 |             # conn.text_factory = lambda b: b.decode(errors = 'ignore') possible fix for #1302 | ||||||
| @@ -477,7 +483,7 @@ class CalibreDB(): | |||||||
|         config.db_configured = True |         config.db_configured = True | ||||||
|  |  | ||||||
|         if not cc_classes: |         if not cc_classes: | ||||||
|             cc = conn.execute("SELECT id, datatype FROM custom_columns") |             cc = conn.execute(text("SELECT id, datatype FROM custom_columns")) | ||||||
|  |  | ||||||
|             cc_ids = [] |             cc_ids = [] | ||||||
|             books_custom_column_links = {} |             books_custom_column_links = {} | ||||||
|   | |||||||
| @@ -28,7 +28,11 @@ from sqlalchemy import create_engine | |||||||
| from sqlalchemy import Column, UniqueConstraint | from sqlalchemy import Column, UniqueConstraint | ||||||
| from sqlalchemy import String, Integer | from sqlalchemy import String, Integer | ||||||
| from sqlalchemy.orm import sessionmaker, scoped_session | from sqlalchemy.orm import sessionmaker, scoped_session | ||||||
| from sqlalchemy.ext.declarative import declarative_base | try: | ||||||
|  |     # Compability with sqlalchemy 2.0 | ||||||
|  |     from sqlalchemy.orm import declarative_base | ||||||
|  | except ImportError: | ||||||
|  |     from sqlalchemy.ext.declarative import declarative_base | ||||||
| from sqlalchemy.exc import OperationalError, InvalidRequestError | from sqlalchemy.exc import OperationalError, InvalidRequestError | ||||||
|  |  | ||||||
| try: | try: | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								cps/ub.py
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								cps/ub.py
									
									
									
									
									
								
							| @@ -38,12 +38,16 @@ except ImportError: | |||||||
|         oauth_support = True |         oauth_support = True | ||||||
|     except ImportError: |     except ImportError: | ||||||
|         oauth_support = False |         oauth_support = False | ||||||
| from sqlalchemy import create_engine, exc, exists, event | from sqlalchemy import create_engine, exc, exists, event, text | ||||||
| from sqlalchemy import Column, ForeignKey | from sqlalchemy import Column, ForeignKey | ||||||
| from sqlalchemy import String, Integer, SmallInteger, Boolean, DateTime, Float, JSON | from sqlalchemy import String, Integer, SmallInteger, Boolean, DateTime, Float, JSON | ||||||
| from sqlalchemy.ext.declarative import declarative_base |  | ||||||
| from sqlalchemy.orm.attributes import flag_modified | from sqlalchemy.orm.attributes import flag_modified | ||||||
| from sqlalchemy.sql.expression import func | from sqlalchemy.sql.expression import func | ||||||
|  | try: | ||||||
|  |     # Compability with sqlalchemy 2.0 | ||||||
|  |     from sqlalchemy.orm import declarative_base | ||||||
|  | except ImportError: | ||||||
|  |     from sqlalchemy.ext.declarative import declarative_base | ||||||
| from sqlalchemy.orm import backref, relationship, sessionmaker, Session, scoped_session | from sqlalchemy.orm import backref, relationship, sessionmaker, Session, scoped_session | ||||||
| from werkzeug.security import generate_password_hash | from werkzeug.security import generate_password_hash | ||||||
|  |  | ||||||
| @@ -484,7 +488,7 @@ def migrate_registration_table(engine, session): | |||||||
| def migrate_guest_password(engine, session): | def migrate_guest_password(engine, session): | ||||||
|     try: |     try: | ||||||
|         with engine.connect() as conn: |         with engine.connect() as conn: | ||||||
|             conn.execute("UPDATE user SET password='' where nickname = 'Guest' and password !=''") |             conn.execute(text("UPDATE user SET password='' where nickname = 'Guest' and password !=''")) | ||||||
|         session.commit() |         session.commit() | ||||||
|     except exc.OperationalError: |     except exc.OperationalError: | ||||||
|         print('Settings database is not writeable. Exiting...') |         print('Settings database is not writeable. Exiting...') | ||||||
| @@ -597,11 +601,11 @@ def migrate_Database(session): | |||||||
|     try: |     try: | ||||||
|         # check if one table with autoincrement is existing (should be user table) |         # check if one table with autoincrement is existing (should be user table) | ||||||
|         with engine.connect() as conn: |         with engine.connect() as conn: | ||||||
|             conn.execute("SELECT COUNT(*) FROM sqlite_sequence WHERE name='user'") |             conn.execute(text("SELECT COUNT(*) FROM sqlite_sequence WHERE name='user'")) | ||||||
|     except exc.OperationalError: |     except exc.OperationalError: | ||||||
|         # Create new table user_id and copy contents of table user into it |         # Create new table user_id and copy contents of table user into it | ||||||
|         with engine.connect() as conn: |         with engine.connect() as conn: | ||||||
|             conn.execute("CREATE TABLE user_id (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," |             conn.execute(text("CREATE TABLE user_id (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," | ||||||
|                      "nickname VARCHAR(64)," |                      "nickname VARCHAR(64)," | ||||||
|                      "email VARCHAR(120)," |                      "email VARCHAR(120)," | ||||||
|                      "role SMALLINT," |                      "role SMALLINT," | ||||||
| @@ -612,14 +616,14 @@ def migrate_Database(session): | |||||||
|                      "default_language VARCHAR(3)," |                      "default_language VARCHAR(3)," | ||||||
|                      "view_settings VARCHAR," |                      "view_settings VARCHAR," | ||||||
|                      "UNIQUE (nickname)," |                      "UNIQUE (nickname)," | ||||||
|                      "UNIQUE (email))") |                      "UNIQUE (email))")) | ||||||
|             conn.execute("INSERT INTO user_id(id, nickname, email, role, password, kindle_mail,locale," |             conn.execute(text("INSERT INTO user_id(id, nickname, email, role, password, kindle_mail,locale," | ||||||
|                      "sidebar_view, default_language, view_settings) " |                      "sidebar_view, default_language, view_settings) " | ||||||
|                      "SELECT id, nickname, email, role, password, kindle_mail, locale," |                      "SELECT id, nickname, email, role, password, kindle_mail, locale," | ||||||
|                      "sidebar_view, default_language FROM user") |                      "sidebar_view, default_language FROM user")) | ||||||
|             # delete old user table and rename new user_id table to user: |             # delete old user table and rename new user_id table to user: | ||||||
|             conn.execute("DROP TABLE user") |             conn.execute(text("DROP TABLE user")) | ||||||
|             conn.execute("ALTER TABLE user_id RENAME TO user") |             conn.execute(text("ALTER TABLE user_id RENAME TO user")) | ||||||
|         session.commit() |         session.commit() | ||||||
|     migrate_guest_password(engine, session) |     migrate_guest_password(engine, session) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzie Isaacs
					Ozzie Isaacs