GalleryItem ( XGalleryItem ) wipes some of its properties as soon as it is returned from a funciton. This bug is found in Python When a GalleryItem is passed from a function it looses Drawing, Graphic, etc, properties. Pseudo code for illustration > import sys > > def find_gallery_item(gallery_name: str, name: str) -> XGalleryItem: > gallery = get_gallery(gallery_name) # XGalleryTheme > num_pics = gallery.getCount() > > result = None > for i in range(num_pics): > item = gallery.getByIndex(i) > # run code to find item. > result = item > break > > # sys.getrefcount() adds a refcount so sys.getrefcount() - 1 > # Reference count for result.Drawing is 0 > print("result.Drawing ref count:", sys.getrefcount(result.Drawing) - 1) > # this means as soon as result is return from this function then > #python garbage collector deletes result.Drawing > > # this next line report as expected. result.Drawing is XDrawing instance > report_gallery_item(result) > return result > > def report_gallery_item(item: XGalleryItem) -> None: > if item is None: > print("Gallery item is null") > return > > print("Gallery item information:") > url = str(mProps.Props.get(item, "URL")) > path = mFileIo.FileIO.uri_to_path(uri_fnm=url, ensure_absolute=False) > print(f' URL: "{url}"') > print(f' Fnm: "{Path(Gallery.gallery_dir, mFileIo.FileIO.get_fnm(path))}"') > print(f" Path: {path}") > > print(f' Title: "{mProps.Props.get(item, "Title")}"') > item_int_type = int(mProps.Props.get(item, "GalleryItemType")) > print(f" Type: {cls.get_item_type_str(GalleryItemTypeEnum(item_int_type))}") > > item = find_gallery_item(gallery_name="Shapes", name="Sun") > > report_gallery_item(item) # at this point item.Drawing is None I have documented this in some detail on Ask. https://ask.libreoffice.org/t/libreoffice-wiping-object-properties-issue-with-gallerythemeprovider/83182
I was converting Java to Python when I came accross this bug. Clearly the Java code does not expect this bug. See: https://flywire.github.io/lo-p/14-Animation.html#3-another-way-to-access-the-gallery
Pseudo code Indentation correction. > import sys > > def find_gallery_item(gallery_name: str, name: str) -> XGalleryItem: > gallery = get_gallery(gallery_name) # XGalleryTheme > num_pics = gallery.getCount() > > result = None > for i in range(num_pics): > item = gallery.getByIndex(i) > # run code to find item. > result = item > break > > # sys.getrefcount() adds a refcount so sys.getrefcount() - 1 > # Reference count for result.Drawing is 0 > print("result.Drawing ref count:", sys.getrefcount(result.Drawing) - 1) > # this means as soon as result is return from this function then > #python garbage collector deletes result.Drawing > > # this next line report as expected. result.Drawing is XDrawing instance > report_gallery_item(result) > return result > > def report_gallery_item(item: XGalleryItem) -> None: > if item is None: > print("Gallery item is null") > return > > url = str(mProps.Props.get(item, "URL")) > print("Gallery item information:") > path = mFileIo.FileIO.uri_to_path(uri_fnm=url, ensure_absolute=False) > print(f' URL: "{url}"') > print(f' Fnm: "{Path(Gallery.gallery_dir, mFileIo.FileIO.get_fnm(path))}"') > print(f" Path: {path}") > > print(f' Title: "{mProps.Props.get(item, "Title")}"') > item_int_type = int(mProps.Props.get(item, "GalleryItemType")) > print(f" Type: {cls.get_item_type_str(GalleryItemTypeEnum(item_int_type))}") > > item = find_gallery_item(gallery_name="Shapes", name="Sun") > > report_gallery_item(item) # at this point item.Drawing is None
Do you mean this pseudo code will not run? If not, then how can QA quickly test this?
I created a code sample to run and show the issue in the OooDev project. https://github.com/Amourspirit/python_ooo_dev_tools/tree/main/tests/samples/gallery_issue For install instructons of OooDev project set the Dev Docs. https://python-ooo-dev-tools.readthedocs.io/en/develop/dev_docs/dev_notes.html