Example Scenario:
On export of a new asset to the P4 tree, I wanted to add the new file to the P4 Depot. If a user already logged into P4, then a ticket exists ( lasts for 12 hours by default in P4 ). If a user has not logged into Perforce, then prompt the user for the info and create a ticket using the perforce python api run_login() call.
Now the important piece of info that documentation was not clear about: you can call "add" or "edit" calls from P4Python as long as a ticket exists and hasn't expired on the matching user/port/client info. The documentation seems to infer you can pass an argument into run_login() of the ticket hash id, but according to perforce support it is worded incorrectly. So we set out to check if the user had an existing non-expired ticket by using this call..
from P4 import P4 as p4api mP4 = p4api() mP4.port = sP4Server mP4.user = sP4User mP4.client = sP4Workspace mP4.host = os.environ["COMPUTERNAME"].upper() bConnection = mP4.connect() try: mP4.fetch_change() mP4.disconnect() except: # prompt user for password, because fetch change failed
The try/except, using fetch_change() gave me a quick way to check if the current info for the user was correct for an active and existing ticket without actually doing any work in p4 ( such as edit/add ). If the fetch_change() failed, I proceeded with some user prompting to supply correct information.
If it was successful, I later would just call the edit or in this case the "add" perforce python api call..
mP4.run( "add", sPathToFile )
These are just a few snippets of the fix we had to implement to make sure we are correctly adding to changelists and interacting with P4. Maybe not knowing you can just call edit/add if you have a ticket isn't an issue for other TAs but it was one of those things that really bothered me when I got into it and it felt the need to post about it.
No comments:
Post a Comment