Jan-31-2020, 08:38 PM
Hi all,
I'm trying to connect to an existing sharepoint database (read only,) and
I'm getting the following error when I try to set up a many2many relationship between users and groups:
https://blog.miguelgrinberg.com/post/the...-structure
We plan on using this as a "glue" app between lots of different systems, so the idea is to have all seperate blueprints. I'm pretty sure I don't understand how to properly deal with imports. Please Help.
I have tried putting the following in both app/__init__.py and app/sharepoint/__init__.py
"from app.sharepoint import models"
I have also tried putting this in both __init__.p files
"from app.sharepoint.models import SPT_group_member, SPT_user, SPT_group"
Nothing seems to work.
My Structure:
my app/__init__.py
----
my app/sharepoint/__init__.py
my app/sharepoint/models.py
I'm trying to connect to an existing sharepoint database (read only,) and
I'm getting the following error when I try to set up a many2many relationship between users and groups:
sqlalchemy.exc.InvalidRequestError: When initializing mapper mapped class SPT_group->Groups, expression 'and_(SPT_group.site_id == SPT_group_member.c.SiteId, SPT_group.id == SPT_group_member.c.GroupId)' failed to locate a name ("name 'SPT_group_member' is not defined"). If this is a class name, consider adding this relationship() to the <class 'app.sharepoint.models.SPT_group'> class after both dependent classes have been defined.I'm trying to follow this basic structure, but I have my models seperated out in directories as Blueprints.
https://blog.miguelgrinberg.com/post/the...-structure
We plan on using this as a "glue" app between lots of different systems, so the idea is to have all seperate blueprints. I'm pretty sure I don't understand how to properly deal with imports. Please Help.
I have tried putting the following in both app/__init__.py and app/sharepoint/__init__.py
"from app.sharepoint import models"
I have also tried putting this in both __init__.p files
"from app.sharepoint.models import SPT_group_member, SPT_user, SPT_group"
Nothing seems to work.
My Structure:
MyApp |_app |___init__.py |_main |___init__.py |_routes.py |_sharepoint |___init__.py |_models.py |_routes.py |_forms.py |_security |___init__.py |_models.py |_routes.py |_forms.py ...----
my app/__init__.py
from flask import Flask, request, current_app from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() ... def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) db.init_app(app) ... from app.main import bp as main_bp app.register_blueprint(main_bp) from app.sharepoint import bp as sharepoint_bp app.register_blueprint(sharepoint_bp, url_prefix='/sharepoint') from app.security import bp as security_bp app.register_blueprint(security_bp, url_prefix='/security') return app
----
my app/sharepoint/__init__.py
from flask import Blueprint bp = Blueprint('sharepoint', __name__) from app.sharepoint import models, routes, forms----
my app/sharepoint/models.py
SPT_group_member = db.Table('GroupMembership', db.Model.metadata, db.Column('SiteId', db.String(128), db.ForeignKey('dbo.Groups.SiteId'), primary_key=True), db.Column('GroupId', db.Integer(), db.ForeignKey('dbo.Groups.ID'), primary_key=True), db.Column('MemberId', db.Integer(), db.ForeignKey('dbo.UserInfo.tp_ID'), primary_key=True), info={'bind_key': 'sharepoint', 'table_args': {'schema': 'dbo'}} ) class SPT_user(db.Model): #db.Model.metadata __tablename__ = 'UserInfo' __table_args__ = {'schema': 'dbo'} __bind_key__ = 'sharepoint' site_id = db.Column('tp_SiteID', db.String(128), primary_key=True) user_id = db.Column('tp_ID', db.Integer(), primary_key=True) tp_DomainGroup = db.Column(db.Boolean()) tp_Deleted = db.Column(db.Integer()) tp_SiteAdmin = db.Column(db.Boolean()) tp_IsActive = db.Column(db.Boolean()) tp_Login = db.Column(db.String(255)) tp_Title = db.Column(db.String(255)) tp_Email = db.Column(db.String(255)) tp_Notes = db.Column(db.String(1023)) tp_Locale = db.Column(db.Integer()) tp_CalendarType = db.Column(db.Integer()) tp_AdjustHijriDays = db.Column(db.Integer()) tp_TimeZone = db.Column(db.Integer()) tp_Time24 = db.Column(db.Boolean()) tp_AltCalendarType = db.Column(db.Integer()) tp_CalendarViewOptions = db.Column(db.Integer()) tp_WorkDays = db.Column(db.Integer()) tp_WorkDayStartHour = db.Column(db.Integer()) tp_WorkDayEndHour = db.Column(db.Integer()) tp_Mobile = db.Column(db.String(127)) tp_Flags = db.Column(db.Integer()) tp_ExternalTokenLastUpdated = db.Column(db.DateTime(timezone=True)) def __repr__(self): return "<SPT_user(site_id='%s', user_id='%s')>" % (self.site_id, self.user_id) class SPT_group(db.Model): __tablename__ = 'Groups' __table_args__ = {'schema': 'dbo'} __bind_key__ = 'sharepoint' site_id = db.Column('SiteId', db.String(128), primary_key=True) id = db.Column('ID', db.String(128), primary_key=True) members = db.relationship(SPT_user, secondary=SPT_group_member, primaryjoin="and_(SPT_group.site_id == SPT_group_member.c.SiteId, " "SPT_group.id == SPT_group_member.c.GroupId)", secondaryjoin="and_(SPT_group_member.c.SiteId == SPT_user.site_id," "SPT_group_member.c.MemberId == SPT_user.user_id)", backref=db.backref('groups', lazy='dynamic'), lazy='dynamic' ) title = db.Column(db.String(255)) description = db.Column(db.String(512)) owner = db.Column(db.Integer()) ownerIsUser = db.Column(db.Boolean()) dLAlias = db.Column(db.String(128)) dLErrorMessage = db.Column(db.String(512)) dLFlags = db.Column(db.Integer()) dLJobId = db.Column(db.Integer()) dLArchives = db.Column(db.VARCHAR) requestEmail = db.Column(db.String(255)) flags = db.Column(db.Integer()) def __repr__(self): return "<SPT_group(site_id='%s', id='%s')>" % (self.site_id, self.id)