Summary: | GalleryItem ( XGalleryItem ) wipes some of its properties as soon as it is returned from a function. | ||
---|---|---|---|
Product: | LibreOffice | Reporter: | vibrationoflife |
Component: | LibreOffice | Assignee: | Not Assigned <libreoffice-bugs> |
Status: | UNCONFIRMED --- | ||
Severity: | normal | CC: | ilmari.lauhakangas |
Priority: | medium | ||
Version: | 7.3.6.2 release | ||
Hardware: | All | ||
OS: | All | ||
Whiteboard: | |||
Crash report or crash signature: | Regression By: |
Description
vibrationoflife
2022-11-06 13:29:19 UTC
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 |