def add_dependencies(user_id): start_time = time.time() #sys.stderr.write('add_dependencies: user_id is ' + str(user_id) + "\n") sys.stderr.write("add_dependencies: starting\n") from docassemble.base.config import hostname from docassemble.webapp.app_object import app from docassemble.webapp.db_object import db from docassemble.webapp.packages.models import Package, Install, PackageAuth packages_known = set() for package in Package.query.filter_by(active=True).all(): packages_known.add(package.name) installed_packages = get_installed_distributions() home_pages = None packages_to_add = list() for package in installed_packages: if package.key in packages_known: continue if package.key.startswith('mysqlclient') or package.key.startswith('mysql-connector') or package.key.startswith('MySQL-python'): continue Package.query.filter_by(name=package.key).delete() packages_to_add.append(package) if len(packages_to_add): db.session.commit() for package in packages_to_add: package_auth = PackageAuth(user_id=user_id) if package.key.startswith('docassemble.'): if home_pages is None: home_pages = get_home_page_dict() home_page = home_pages.get(package.key.lower(), None) if home_page is not None and re.search(r'/github.com/', home_page): package_entry = Package(name=package.key, package_auth=package_auth, type='git', giturl=home_page, packageversion=package.version, dependency=True) else: package_entry = Package(name=package.key, package_auth=package_auth, type='pip', packageversion=package.version, dependency=True) else: package_entry = Package(name=package.key, package_auth=package_auth, type='pip', packageversion=package.version, dependency=True) db.session.add(package_entry) db.session.commit() install = Install(hostname=hostname, packageversion=package_entry.packageversion, version=package_entry.version, package_id=package_entry.id) db.session.add(install) db.session.commit() sys.stderr.write("add_dependencies: ending after " + str(time.time() - start_time) + " seconds\n") return
def add_dependencies(user_id): logmessage('add_dependencies: ' + str(user_id)) from docassemble.webapp.config import hostname package_by_name = dict() for package in Package.query.filter_by(active=True).all(): package_by_name[package.name] = package installed_packages = get_installed_distributions() for package in installed_packages: if package.key in package_by_name: continue package_auth = PackageAuth(user_id=user_id) if package.key in ['docassemble', 'docassemble.base', 'docassemble.webapp', 'docassemble.demo']: package_entry = Package(name=package.key, package_auth=package_auth, giturl=docassemble_git_url, packageversion=package.version, gitsubdir=re.sub(r'\.', '-', package.key), type='git', core=True) else: package_entry = Package(name=package.key, package_auth=package_auth, type='pip', packageversion=package.version, dependency=True) db.session.add(package_auth) db.session.add(package_entry) db.session.commit() install = Install(hostname=hostname, packageversion=package_entry.packageversion, version=package_entry.version, package_id=package_entry.id) db.session.add(install) db.session.commit() return
def add_dependencies(user_id, start_time=None): if start_time is None: start_time = time.time() #logmessage('add_dependencies: user_id is ' + str(user_id)) logmessage("add_dependencies: starting after " + str(time.time() - start_time) + " seconds") from docassemble.base.config import hostname #from docassemble.webapp.app_object import app from docassemble.webapp.db_object import db from docassemble.webapp.packages.models import Package, Install, PackageAuth from sqlalchemy import select, delete packages_known = set() for package in db.session.execute( select(Package.name).filter_by(active=True)): packages_known.add(package.name) installed_packages = get_installed_distributions(start_time=start_time) home_pages = None packages_to_add = [] for package in installed_packages: if package.key in packages_known: continue if package.key.startswith('mysqlclient') or package.key.startswith( 'mysql-connector') or package.key.startswith('MySQL-python'): continue db.session.execute(delete(Package).filter_by(name=package.key)) packages_to_add.append(package) did_something = False if len(packages_to_add) > 0: did_something = True db.session.commit() for package in packages_to_add: if package.key.startswith('docassemble.'): if home_pages is None: home_pages = get_home_page_dict() home_page = home_pages.get(package.key.lower(), None) if home_page is not None and re.search(r'/github.com/', home_page): package_entry = Package( name=package.key, package_auth=PackageAuth(user_id=user_id), type='git', giturl=home_page, packageversion=package.version, dependency=True) else: package_entry = Package( name=package.key, package_auth=PackageAuth(user_id=user_id), type='pip', packageversion=package.version, dependency=True) else: package_entry = Package( name=package.key, package_auth=PackageAuth(user_id=user_id), type='pip', packageversion=package.version, dependency=True) db.session.add(package_entry) db.session.commit() install = Install(hostname=hostname, packageversion=package_entry.packageversion, version=package_entry.version, package_id=package_entry.id) db.session.add(install) db.session.commit() logmessage("add_dependencies: ending after " + str(time.time() - start_time) + " seconds") return did_something