Advanced Release (Python)

Advanced Release (Python)
  1# Advanced Release example
  2# to run this script you will need a customer with code "(DEFAULT)"
  3# and a project folder called "COMTests"
  4# and you need not to already have a project called "COM Update Test"
  5
  6db = impact.active_database
  7
  8def DescribeAction(action):
  9    if action == ipReleaseAction.raUpdate:
 10        impact.gui.output_toolbox.add("Action: Updating")
 11    elif action == ipReleaseAction.raDiscard:
 12        impact.gui.output_toolbox.add("Action: Discarding")
 13    elif action == ipReleaseAction.raRelease:
 14        impact.gui.output_toolbox.add("Action: Releasing")
 15    elif action == ipReleaseAction.raKeepOut:
 16        impact.gui.output_toolbox.add("Action: Keeping Out")
 17
 18def DescribeReleaseAction(ra):
 19    DescribeAction(ra.action)
 20    impact.gui.output_toolbox.add("Comment: " + ra.comment)
 21
 22    impact.gui.output_toolbox.add("Keep Working: " + str(ra.keep_working))
 23    impact.gui.output_toolbox.add("Lock: " + str(ra.lock))
 24    impact.gui.output_toolbox.add("Create Revision: " + str(ra.create_revision))
 25
 26    if not ra.reassign_to.isNone():
 27        impact.gui.output_toolbox.add("Reassign To: " + ra.reassign_to.login_id)
 28        impact.gui.output_toolbox.add("Reassign without update: " + str(ra.reassign_without_update))
 29
 30    impact.gui.output_toolbox.add("customer Changed: " + str(ra.customer_changed))
 31    impact.gui.output_toolbox.add("Project Info Changed: " + str(ra.project_info_changed))
 32
 33    impact.gui.output_toolbox.add("Release Layer Count: " + str(ra.layers.count))
 34
 35    for layer in ra.layers:
 36        impact.gui.output_toolbox.add("Layer Key: " + str(layer.key))
 37        impact.gui.output_toolbox.add("Layer Name: " + layer.name)
 38        impact.gui.output_toolbox.add("Type: " + layer.type)
 39        impact.gui.output_toolbox.add("Type Key: " + str(layer.type_key))
 40        impact.gui.output_toolbox.add("Modified: " + str(layer.modified))
 41        DescribeAction(layer.action)
 42        impact.gui.output_toolbox.add("Added: " + str(layer.added))
 43        impact.gui.output_toolbox.add("Deleted: " + str(layer.deleted))
 44
 45impact.gui.output_toolbox.clear()
 46drawing = db.create_item(ipDrawingType.dtProject, "")
 47if not drawing.isNone():
 48
 49    impact.gui.output_toolbox.add("Created new project")
 50    cus = db.customers.find_by_code("(DEFAULT)")
 51    if not cus.isNone():
 52
 53        drawing.customer = cus
 54
 55        # Create three layers A, B and C
 56        drawing.active_layer.full_name = "A"
 57        drawing.layers.add("B", "ONE_UP", drawing.active_layer)
 58        drawing.layers.add("C", "ONE_UP", drawing.active_layer)
 59
 60        impact.gui.output_toolbox.add("Finding folder r'\\COMTests'")
 61        folder = None
 62        try:
 63            folder = db.projects.find("COMTests")
 64        except Exception as exc:
 65            pass
 66        impact.gui.output_toolbox.add(f"Failed to create object via db.projects.find(): {exc}")
 67
 68        if not folder.isNone():
 69
 70            if drawing.save_as("", "COM Update Test", "", folder, True):
 71
 72                impact.gui.output_toolbox.add("Successfully saved project")
 73                dbItem = drawing.database_item
 74
 75                # Modify two of the layers in the drawing and save
 76                drawing.active_layer = drawing.layers.item("A")
 77                drawing.active_layer.active_block.move_ad(0, 0)
 78                drawing.active_layer.active_block.line_ad(100, 100)
 79
 80                drawing.active_layer = drawing.layers.item("C")
 81                drawing.active_layer.active_block.move_ad(0, 0)
 82                drawing.active_layer.active_block.line_ad(100, -100)
 83
 84                if drawing.save():
 85                    ra = dbItem.release_action
 86
 87                    ra.action = ipReleaseAction.raUpdate
 88                    ra.comment = "Updated from COM"
 89                    ra.create_revision = True
 90                    ra.keep_working = False
 91
 92                    DescribeReleaseAction(ra)
 93
 94                    if dbItem.close_and_release():
 95                        impact.gui.output_toolbox.add("Successfully closed and released the project")
 96                    else:
 97                        impact.gui.output_toolbox.add("Error: Unable to release the project")
 98                else:
 99                    impact.gui.output_toolbox.add("Error: Unable to save the modified project")
100            else:
101                impact.gui.output_toolbox.add("Error: Unable to save the new project")
102        else:
103            impact.gui.output_toolbox.add("Error: Unable to find project folder")
104    else:
105        impact.gui.output_toolbox.add("Error: Unable to find customer")
106else:
107    impact.gui.output_toolbox.add("Error: Unable to create new project")