Files
galaxy/scripts/pages_identifier_conversion.py
T
2025-01-23 11:39:25 -05:00

69 lines
2.6 KiB
Python

import argparse
import difflib
import logging
import os
import sys
sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, "lib")))
import galaxy
import galaxy.app
import galaxy.config
from galaxy.managers.pages import (
PageContentProcessor,
placeholderRenderForSave,
)
from galaxy.model.mapping import init_models_from_config
from galaxy.objectstore import build_object_store_from_config
from galaxy.security.idencoding import IdEncodingHelper
from galaxy.util import unicodify
from galaxy.util.bunch import Bunch
from galaxy.util.script import (
app_properties_from_args,
populate_config_args,
)
def main(argv):
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-k", "--secret-key", help="Key to convert pages with", default="")
parser.add_argument("-d", "--dry-run", help="No changes, just test it.", action="store_true")
populate_config_args(parser)
args = parser.parse_args()
properties = app_properties_from_args(args)
config = galaxy.config.Configuration(**properties)
secret = args.secret_key or config.id_secret
security_helper = IdEncodingHelper(id_secret=secret)
object_store = build_object_store_from_config(config)
if not config.database_connection:
print(
"The database connection is empty. If you are using the default value, please uncomment that in your galaxy.yml"
)
model = init_models_from_config(config, object_store=object_store)
session = model.context.current()
pagerevs = session.query(model.PageRevision).all()
mock_trans = Bunch(app=Bunch(security=security_helper), model=model, user_is_admin=lambda: True, sa_session=session)
for p in pagerevs:
try:
processor = PageContentProcessor(mock_trans, placeholderRenderForSave)
processor.feed(p.content)
newcontent = unicodify(processor.output(), "utf-8")
if p.content != newcontent:
if not args.dry_run:
p.content = unicodify(processor.output(), "utf-8")
session.add(p)
session.commit()
else:
print(f"Modifying revision {p.id}.")
print(difflib.unified_diff(p.content, newcontent))
except Exception:
logging.exception(
"Error parsing page, rolling changes back and skipping revision %s. Please report this error.", p.id
)
session.rollback()
if __name__ == "__main__":
main(sys.argv)