Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: upgrade (flask-)sqlalchemy #2162

Open
wants to merge 34 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
53be378
Upgrade (flask-)sqlalchemy
goerch Nov 16, 2023
ffd55ed
Fixing requirements
goerch Nov 16, 2023
f941f83
Fixing requirements
goerch Nov 16, 2023
bcee46d
Fix `test_get_item_not_found` again...
goerch Nov 16, 2023
af0c7fc
Skipping `test_import_roles`
goerch Nov 16, 2023
a2bc0b0
Delete temporary file
goerch Nov 16, 2023
d2e381d
Remove `ignore_cleanup_errors`
goerch Nov 16, 2023
4be878d
Fix some test cases
goerch Nov 16, 2023
af05713
Fix test case
goerch Nov 16, 2023
0acc71e
Fix another test case
goerch Nov 16, 2023
93e2f3d
Correcting imports
goerch Nov 16, 2023
3eeea16
Fix another test case.
goerch Nov 16, 2023
c352129
Cleaning up app contexts
goerch Nov 16, 2023
ddf22fa
Linting and disabling two CLI tests
goerch Nov 16, 2023
95223f8
Fixing more tests
goerch Nov 18, 2023
1740f65
Trying to fix `mssql`...
goerch Nov 18, 2023
5ac81b7
`test_register_user` is broken on `mssql`
goerch Nov 18, 2023
46eb669
Another test borked on mssql
goerch Nov 18, 2023
392e14e
Another broken mssql test
goerch Nov 18, 2023
c59e562
More mssql borken tests
goerch Nov 18, 2023
1050828
Fix imports
goerch Nov 18, 2023
5893dc2
Correcting dialect check for mssql
goerch Nov 18, 2023
475d162
Better dialect determination?
goerch Nov 18, 2023
68d0014
Exclude failing mssql tests
goerch Nov 18, 2023
d4c8ecd
Yet another failing mssql test
goerch Nov 18, 2023
ea4cf8d
Fixing some `mssql` tests by setting sequence's `minvalue`
goerch Nov 19, 2023
89cd5f3
Enabling some `mssql` tests
goerch Nov 19, 2023
0a15614
Fix import of roles
goerch Nov 19, 2023
071484b
Making tests repeatable on Windows and sqlite
goerch Nov 19, 2023
379db03
Fix `cli` tests
goerch Nov 19, 2023
8d7a7bd
Linting
goerch Nov 19, 2023
b5aca58
Fix `create_app` `cli`test
goerch Nov 19, 2023
7070a8f
Updating some of the examples
goerch Nov 26, 2023
67729a0
Merge branch 'master' into upgrade-sqlalchemy
goerch Nov 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions examples/base_api/app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@

app = Flask(__name__)
app.config.from_object("config")
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)
with app.app_context():
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)


from . import api # noqa
5 changes: 3 additions & 2 deletions examples/base_api/app/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from flask_appbuilder.api import BaseApi, expose, rison, safe
from flask_appbuilder.security.decorators import protect

from . import appbuilder
from . import app, appbuilder

greeting_schema = {"type": "object", "properties": {"name": {"type": "string"}}}

Expand Down Expand Up @@ -139,4 +139,5 @@ def error(self):
raise Exception


appbuilder.add_api(ExampleApi)
with app.app_context():
appbuilder.add_api(ExampleApi)
5 changes: 3 additions & 2 deletions examples/basefilter/app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

app = Flask(__name__)
app.config.from_object("config")
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)
with app.app_context():
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)

from . import models, views # noqa
3 changes: 3 additions & 0 deletions examples/basefilter/app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@


class ContactGroup(Model):
__tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)

Expand All @@ -17,6 +18,7 @@ def __repr__(self):


class Gender(Model):
__tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)

Expand All @@ -25,6 +27,7 @@ def __repr__(self):


class Contact(AuditMixin, Model):
__tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
Expand Down
27 changes: 14 additions & 13 deletions examples/basefilter/app/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.interface import SQLAInterface

from . import appbuilder, db
from . import app, appbuilder, db
from .models import Contact, ContactGroup


Expand Down Expand Up @@ -47,15 +47,16 @@ class GroupModelView(ModelView):
related_views = [ContactModelView]


db.create_all()
appbuilder.add_view(
GroupModelView,
"List Groups",
icon="fa-folder-open-o",
category="Contacts",
category_icon="fa-envelope",
)
appbuilder.add_separator("Contacts")
appbuilder.add_view(
ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
)
with app.app_context():
db.create_all()
appbuilder.add_view(
GroupModelView,
"List Groups",
icon="fa-folder-open-o",
category="Contacts",
category_icon="fa-envelope",
)
appbuilder.add_separator("Contacts")
appbuilder.add_view(
ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
)
136 changes: 70 additions & 66 deletions examples/basefilter/testdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging
import random

from app import appbuilder, db
from app import app, appbuilder, db
from app.models import Contact, ContactGroup, Gender

log = logging.getLogger(__name__)
Expand All @@ -16,74 +16,78 @@ def get_random_name(names_list, size=1):
return " ".join(name_lst)


role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
user1 = appbuilder.sm.add_user(
"user1", "user1", "test", "[email protected]", role_admin, "password"
)
user2 = appbuilder.sm.add_user(
"user2", "user2", "test", "[email protected]", role_admin, "password"
)
user3 = appbuilder.sm.add_user(
"user3", "user3", "test", "[email protected]", role_admin, "password"
)

try:
db.session.add(ContactGroup(name="Friends"))
db.session.add(ContactGroup(name="Family"))
db.session.add(ContactGroup(name="Work"))
db.session.commit()
except Exception as e:
log.error("Group creation error: %s", e)
db.session.rollback()
exit(1)

try:
db.session.add(Gender(name="Male"))
db.session.add(Gender(name="Female"))
db.session.commit()
except Exception as e:
log.error("Gender creation error: %s", e)
db.session.rollback()
exit(1)

f = open("NAMES.DIC", "rb")
names_list = [x.strip() for x in f.readlines()]

f.close()

j = 1
for i in range(1, 100):
c = Contact()
c.name = get_random_name(names_list, random.randrange(2, 6))
c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
"utf-8"
with app.app_context():
role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
user1 = appbuilder.sm.add_user(
"user1", "user1", "test", "[email protected]", role_admin, "password"
)
user2 = appbuilder.sm.add_user(
"user2", "user2", "test", "[email protected]", role_admin, "password"
)
c.personal_phone = random.randrange(1111111, 9999999)
c.personal_celphone = random.randrange(1111111, 9999999)
c.contact_group_id = random.randrange(1, 4)
c.gender_id = random.randrange(1, 3)
year = random.choice(range(1900, 2012))
month = random.choice(range(1, 12))
day = random.choice(range(1, 28))
c.birthday = datetime(year, month, day)
c.changed_on = datetime.now()
c.created_on = datetime.now()
if j == 1:
j += 1
_user = user1
elif j == 2:
j += 1
_user = user2
else:
j = 1
_user = user3
c.created_by = _user
c.changed_by = _user
user3 = appbuilder.sm.add_user(
"user3", "user3", "test", "[email protected]", role_admin, "password"
)

try:
db.session.add(ContactGroup(name="Friends"))
db.session.add(ContactGroup(name="Family"))
db.session.add(ContactGroup(name="Work"))
db.session.commit()
except Exception as e:
log.error("Group creation error: %s", e)
db.session.rollback()
exit(1)

db.session.add(c)
try:
db.session.add(Gender(name="Male"))
db.session.add(Gender(name="Female"))
db.session.commit()
print("inserted", c)
except Exception as e:
log.error("Contact creation error: %s", e)
log.error("Gender creation error: %s", e)
db.session.rollback()
exit(1)

f = open("NAMES.DIC", "rb")
names_list = [x.strip() for x in f.readlines()]

f.close()

j = 1
for i in range(1, 100):
c = Contact()
c.name = get_random_name(names_list, random.randrange(2, 6))
c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
"utf-8"
)
c.personal_phone = random.randrange(1111111, 9999999)
c.personal_celphone = random.randrange(1111111, 9999999)
c.contact_group_id = random.randrange(1, 4)
c.gender_id = random.randrange(1, 3)
year = random.choice(range(1900, 2012))
month = random.choice(range(1, 12))
day = random.choice(range(1, 28))
c.birthday = datetime(year, month, day)
c.changed_on = datetime.now()
c.created_on = datetime.now()
if j == 1:
j += 1
_user = db.session.merge(user1)
db.session.add(_user)
elif j == 2:
j += 1
_user = db.session.merge(user2)
db.session.add(_user)
else:
j = 1
_user = db.session.merge(user3)
db.session.add(_user)
c.created_by = _user
c.changed_by = _user

db.session.add(c)
try:
db.session.commit()
print("inserted", c)
except Exception as e:
log.error("Contact creation error: %s", e)
db.session.rollback()
5 changes: 3 additions & 2 deletions examples/composite_keys/app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

app = Flask(__name__)
app.config.from_object("config")
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)
with app.app_context():
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)

from . import models, views # noqa
4 changes: 4 additions & 0 deletions examples/composite_keys/app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@


class Item(Model):
__tablename__ = "item"
id = Column(Integer, primary_key=True)
serial_number = Column(String, unique=True)
model = Column(String(150), nullable=False)
Expand All @@ -17,6 +18,7 @@ def __repr__(self):


class Datacenter(Model):
__tablename__ = "datacenter"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
Expand All @@ -26,6 +28,7 @@ def __repr__(self):


class Rack(Model):
__tablename__ = "rack"
num = Column(Integer, primary_key=True)
datacenter_id = Column(
Integer, ForeignKey("datacenter.id"), primary_key=True, nullable=False
Expand All @@ -37,6 +40,7 @@ def __repr__(self):


class Inventory(Model):
__tablename__ = "inventory"
item_id = Column(Integer, ForeignKey("item.id"), primary_key=True, nullable=False)
item = relationship("Item")
rack_num = Column(Integer, ForeignKey("rack.num"), primary_key=True, nullable=False)
Expand Down
45 changes: 23 additions & 22 deletions examples/composite_keys/app/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from flask_appbuilder import ModelView
from flask_appbuilder.models.sqla.interface import SQLAInterface

from . import appbuilder, db
from . import app, appbuilder, db
from .models import Datacenter, Inventory, Item, Rack


Expand Down Expand Up @@ -40,24 +40,25 @@ class DatacenterModelView(ModelView):
edit_template = "appbuilder/general/model/edit_cascade.html"


db.create_all()
appbuilder.add_view(
DatacenterModelView,
"List Datacenters",
icon="fa-folder-open-o",
category="Datacenters",
category_icon="fa-envelope",
)
appbuilder.add_view(
RackModelView, "List Racks", icon="fa-envelope", category="Datacenters"
)
appbuilder.add_view(
ItemModelView,
"List Items",
icon="fa-folder-open-o",
category="Datacenters",
category_icon="fa-envelope",
)
appbuilder.add_view(
InventoryModelView, "List Inventory", icon="fa-envelope", category="Datacenters"
)
with app.app_context():
db.create_all()
appbuilder.add_view(
DatacenterModelView,
"List Datacenters",
icon="fa-folder-open-o",
category="Datacenters",
category_icon="fa-envelope",
)
appbuilder.add_view(
RackModelView, "List Racks", icon="fa-envelope", category="Datacenters"
)
appbuilder.add_view(
ItemModelView,
"List Items",
icon="fa-folder-open-o",
category="Datacenters",
category_icon="fa-envelope",
)
appbuilder.add_view(
InventoryModelView, "List Inventory", icon="fa-envelope", category="Datacenters"
)