Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	Add error handling to picture XML changes
Browse files- helpers/pptx_helper.py +45 -15
    	
        helpers/pptx_helper.py
    CHANGED
    
    | @@ -469,7 +469,6 @@ def _handle_display_image__in_background( | |
| 469 | 
             
                    body_shape = slide.shapes.placeholders[placeholders[0][0]]
         | 
| 470 |  | 
| 471 | 
             
                title_shape.text = remove_slide_number_from_heading(slide_json['heading'])
         | 
| 472 | 
            -
             | 
| 473 | 
             
                flat_items_list = get_flat_list_of_contents(slide_json['bullet_points'], level=0)
         | 
| 474 | 
             
                add_bulleted_items(body_shape.text_frame, flat_items_list)
         | 
| 475 |  | 
| @@ -490,16 +489,38 @@ def _handle_display_image__in_background( | |
| 490 | 
             
                            width=pptx.util.Inches(slide_width_inch),
         | 
| 491 | 
             
                        )
         | 
| 492 |  | 
| 493 | 
            -
                         | 
| 494 | 
            -
             | 
| 495 | 
            -
             | 
| 496 | 
            -
             | 
| 497 | 
            -
             | 
| 498 | 
            -
             | 
| 499 | 
            -
             | 
| 500 | 
            -
             | 
| 501 | 
            -
             | 
| 502 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 503 |  | 
| 504 | 
             
                        _add_text_at_bottom(
         | 
| 505 | 
             
                            slide=slide,
         | 
| @@ -510,14 +531,23 @@ def _handle_display_image__in_background( | |
| 510 | 
             
                        )
         | 
| 511 |  | 
| 512 | 
             
                        # Move picture to background
         | 
| 513 | 
            -
                         | 
| 514 | 
            -
             | 
| 515 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 516 | 
             
                except Exception as ex:
         | 
| 517 | 
             
                    logger.error(
         | 
| 518 | 
            -
                        '*** Error occurred while  | 
| 519 | 
             
                        str(ex)
         | 
| 520 | 
             
                    )
         | 
|  | |
| 521 |  | 
| 522 | 
             
                return True
         | 
| 523 |  | 
|  | |
| 469 | 
             
                    body_shape = slide.shapes.placeholders[placeholders[0][0]]
         | 
| 470 |  | 
| 471 | 
             
                title_shape.text = remove_slide_number_from_heading(slide_json['heading'])
         | 
|  | |
| 472 | 
             
                flat_items_list = get_flat_list_of_contents(slide_json['bullet_points'], level=0)
         | 
| 473 | 
             
                add_bulleted_items(body_shape.text_frame, flat_items_list)
         | 
| 474 |  | 
|  | |
| 489 | 
             
                            width=pptx.util.Inches(slide_width_inch),
         | 
| 490 | 
             
                        )
         | 
| 491 |  | 
| 492 | 
            +
                        try:
         | 
| 493 | 
            +
                            # Find all blip elements to handle potential multiple instances
         | 
| 494 | 
            +
                            blip_elements = picture._element.xpath('.//a:blip')
         | 
| 495 | 
            +
                            if not blip_elements:
         | 
| 496 | 
            +
                                logger.warning(
         | 
| 497 | 
            +
                                    'No blip element found in the picture. Transparency cannot be applied.'
         | 
| 498 | 
            +
                                )
         | 
| 499 | 
            +
                                return True
         | 
| 500 | 
            +
             | 
| 501 | 
            +
                            for blip in blip_elements:
         | 
| 502 | 
            +
                                # Add transparency to the image through the blip properties
         | 
| 503 | 
            +
                                alpha_mod = blip.makeelement(
         | 
| 504 | 
            +
                                    '{http://schemas.openxmlformats.org/drawingml/2006/main}alphaModFix'
         | 
| 505 | 
            +
                                )
         | 
| 506 | 
            +
                                # Opacity value between 0-100000
         | 
| 507 | 
            +
                                alpha_mod.set('amt', '50000')  # 50% opacity
         | 
| 508 | 
            +
             | 
| 509 | 
            +
                                # Check if alphaModFix already exists to avoid duplicates
         | 
| 510 | 
            +
                                existing_alpha_mod = blip.find(
         | 
| 511 | 
            +
                                    '{http://schemas.openxmlformats.org/drawingml/2006/main}alphaModFix'
         | 
| 512 | 
            +
                                )
         | 
| 513 | 
            +
                                if existing_alpha_mod is not None:
         | 
| 514 | 
            +
                                    blip.remove(existing_alpha_mod)
         | 
| 515 | 
            +
             | 
| 516 | 
            +
                                blip.append(alpha_mod)
         | 
| 517 | 
            +
                                logger.debug('Added transparency to blip element: %s', blip.xml)
         | 
| 518 | 
            +
             | 
| 519 | 
            +
                        except Exception as ex:
         | 
| 520 | 
            +
                            logger.error(
         | 
| 521 | 
            +
                                'Failed to apply transparency to the image: %s. Continuing without it.',
         | 
| 522 | 
            +
                                str(ex)
         | 
| 523 | 
            +
                            )
         | 
| 524 |  | 
| 525 | 
             
                        _add_text_at_bottom(
         | 
| 526 | 
             
                            slide=slide,
         | 
|  | |
| 531 | 
             
                        )
         | 
| 532 |  | 
| 533 | 
             
                        # Move picture to background
         | 
| 534 | 
            +
                        try:
         | 
| 535 | 
            +
                            slide.shapes._spTree.remove(picture._element)
         | 
| 536 | 
            +
                            slide.shapes._spTree.insert(2, picture._element)
         | 
| 537 | 
            +
                        except Exception as ex:
         | 
| 538 | 
            +
                            logger.error(
         | 
| 539 | 
            +
                                'Failed to move image to background: %s. Image will remain in foreground.',
         | 
| 540 | 
            +
                                str(ex)
         | 
| 541 | 
            +
                            )
         | 
| 542 | 
            +
             | 
| 543 | 
            +
                        return True
         | 
| 544 | 
            +
             | 
| 545 | 
             
                except Exception as ex:
         | 
| 546 | 
             
                    logger.error(
         | 
| 547 | 
            +
                        '*** Error occurred while adding image to the slide background: %s',
         | 
| 548 | 
             
                        str(ex)
         | 
| 549 | 
             
                    )
         | 
| 550 | 
            +
                    return True
         | 
| 551 |  | 
| 552 | 
             
                return True
         | 
| 553 |  |