def main(testing_flag): config = ConfigParser.ConfigParser() config.read('config.ini') # Get credentials from config file user = config.get('credentials', 'user') password = config.get('credentials', 'password') project = config.get('credentials', 'project') # If the testing flag is passed, use the test server, otherwise use the live server if testing_flag: url = config.get('server', 'test') else: url = config.get('server', 'live') # Get a server object to perform queries server = TacticServerStub(server=url, project=project, user=user, password=password) territories_str = 'Afghanistan|Aland Islands|Albania|Algeria|American Samoa|Andorra|Angola|Anguilla|Antigua and Barbuda|Argentina|Armenia|Aruba|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bonaire|Bosnia and Herzegovina|Botswana|Bouvet Island|Brazil|Brunei Darussalam|Bulgaria|Burkina Faso|Burundi|Cambodia|Cameroon|Canada|Cantonese|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Cocos Islands|Colombia|Comoros|Congo|Dem. Rep. of Congo|Cook Islands|Costa Rica|Croatia|Cuba|Curacao|Cyprus|Czech|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|English|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Falkland Islands|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|Gabon|Gambia|Georgia|Germany|Ghana|Gibraltar|Greece|Greek|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Honduras|Hong Kong|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Isle of Man|Israel|Italy|Ivory Coast|Jamaica|Japan|Jersey|Jordan|Kazakhstan|Kenya|Kiribati|Kuwait|Kyrgyztan|Laos|Latin America|Latin Spanish|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luzembourg|Macao|Macedonia|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia|Moldova|Monaco|Mongolia|Montenegro|Montserrat|Morocco|Mozambique|Multi-language|Myanmar|Namibia|Nauru|Nepal|Netherlands|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|North Korea|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Palestine|Panama|Papua New Guinea|Pan-Asia|Paraguay|Peru|Philippines|Pitcairn|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romania|Russia|Russian|Rwanda|St Barthelemy|St Helena|St Kitts and Nevis|St Lucia|St Martin|St Pierre and Miquelo|St Vincent and Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Senegal|Serbia|Seychelles|Sierra Leone|Signapore|Sint Maarten|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and Swch Islands|South Korea|South Sudan|Spain|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thai|Thailand|Timor-Leste|Togo|Tokelau|Tonga|Trinidad and Tobago|Tunisia|Turkey|Turkmenistan|Turks and Caicos Islands|Tuvalu|Uganda|Ukraine|UAE|United Kingdom|United States|Uruguay|Uzbekistan|Vanuatu|Various|Vatican|Venezuela|Vietnam|Virgin Islands|Wallis and Futuna|West Indies|Western Sahara|Yemen|Zambia|Zimbabwe' territories = territories_str.split('|') for territory in territories: territory_search = server.eval("@SOBJECT(twog/territory['name', '{0}'])".format(territory)) if not territory_search: # Territory does not exist yet, insert it server.insert('twog/territory', {'name': territory})
def main(testing_flag): config = ConfigParser.ConfigParser() config.read("config.ini") # Get credentials from config file user = config.get("credentials", "user") password = config.get("credentials", "password") project = config.get("credentials", "project") # If the testing flag is passed, use the test server, otherwise use the live server if testing_flag: url = config.get("server", "test") else: url = config.get("server", "live") # Get a server object to perform queries server = TacticServerStub(server=url, project=project, user=user, password=password) # Get titles marked as 'hot' items hot_titles = server.eval("@SOBJECT(twog/title['bigboard', 'True']['status', '!=', 'Completed'])") # Iterate through the titles, getting the client code and platform for each one for title in hot_titles: client_code = title.get("client_code") platform_name = title.get("platform") # Unfortunately, Titles hold the platform name, not the code, so a query has to be done to get that platform_code_search = server.eval("@SOBJECT(twog/platform['name', '{0}'])".format(platform_name)) # This search returns a list (since multiple matches by 'name' is possible). Since this is just a quick, dirty # script to insert some example connections, we will take only the first result and ignore the rest. if platform_code_search: platform_code = platform_code_search[0].get("code") else: continue existing_connection_search = server.eval( "@SOBJECT(twog/client_platform['client_code', '{0}']['platform_code', '{1}'])".format( client_code, platform_code ) ) if not existing_connection_search: client_name_search = server.eval("@SOBJECT(twog/client['code', '{0}'])".format(client_code)) if client_name_search: client_name = client_name_search[0].get("name") # Finally, insert the entry into the twog/client_platform table. server.insert( "twog/client_platform", { "client_code": client_code, "platform_code": platform_code, "name": "{0} to {1}".format(client_name, platform_name), "connection_status": "disconnected", }, )
def post(self): json_data = request.get_json() ticket = json_data.get('token') element_evaluation_data = json_data.get('element_evaluation') server = TacticServerStub(server=url, project=project, ticket=ticket) server.insert('twog/element_evaluation', element_evaluation_data) return jsonify({'status': 200})
def _test_insert_trigger(self): # create a db trigger sobject = Search.eval( "@SOBJECT(sthpw/trigger['event','insert|unittest/person'])", single=True) if sobject: raise Exception( 'Please delete the insert|unittest/person trigger in sthpw first' ) trigger_sobj = SearchType.create("sthpw/trigger") trigger_sobj.set_value("event", "insert|unittest/person") trigger_sobj.set_value("class_name", "pyasm.command.command_test.TestInsertHandler") trigger_sobj.set_value("description", "Unittest Test Api Handler") trigger_sobj.commit() search = Search("sthpw/trigger") count = search.get_count() # use the client api to insert that trigger server = TacticServerStub(protocol='xmlrpc') server.start("insert trigger test") try: # create a new person search_type = "unittest/person" code = "fred" search_key = server.build_search_key(search_type, code) Container.put("TestApiHandler/search_key", search_key) # insert data = {'code': code} # insert test: if the trigger fails then an exception should be # raised ...? server.insert(search_type, data) finally: server.abort() trigger_sobj.delete() search = Search('sthpw/trigger') search.add_filter('event', 'insert|unittest/person') trig = search.get_sobject() self.assertEquals(trig, None)
def _test_insert_trigger(self): # create a db trigger sobject = Search.eval("@SOBJECT(sthpw/trigger['event','insert|unittest/person'])", single=True) if sobject: raise Exception('Please delete the insert|unittest/person trigger in sthpw first') trigger_sobj = SearchType.create("sthpw/trigger") trigger_sobj.set_value("event", "insert|unittest/person") trigger_sobj.set_value("class_name", "pyasm.command.command_test.TestInsertHandler") trigger_sobj.set_value("description", "Unittest Test Api Handler") trigger_sobj.commit() search = Search("sthpw/trigger") count = search.get_count() # use the client api to insert that trigger server = TacticServerStub(protocol='xmlrpc') server.start("insert trigger test") try: # create a new person search_type = "unittest/person" code = "fred" search_key = server.build_search_key(search_type, code) Container.put("TestApiHandler/search_key", search_key) # insert data = { 'code': code } # insert test: if the trigger fails then an exception should be # raised ...? server.insert(search_type, data) finally: server.abort() trigger_sobj.delete() search = Search('sthpw/trigger') search.add_filter('event', 'insert|unittest/person') trig = search.get_sobject() self.assertEquals(trig, None)
def _test_create_submission(self): server = TacticServerStub() server.set_project("sample3d") # choose some arbitrary bin bin_id = 4 filters = [] # asset parent_type = "prod/asset" parent_code = "chr001" parent_key = server.build_search_key(parent_type, parent_code) parent = server.get_by_search_key(parent_key) parent_id = parent.get('id') # create a submission data = { 'description': 'A test submission', 'artist': 'joe', 'context': 'model' } submission = server.insert("prod/submission", data, parent_key=parent_key) submission_key = submission.get('__search_key__') submission_id = submission.get('id') file_path = './miso_ramen.jpg' context = "publish" snapshot = server.simple_checkin(submission_key, context, file_path, mode="upload") # no connect to the bin with a connector data = {"bin_id": bin_id, 'submission_id': submission_id} server.insert("prod/submission_in_bin", data)
def _test_create_submission(self): server = TacticServerStub() server.set_project("sample3d") # choose some arbitrary bin bin_id = 4 filters = [] # asset parent_type = "prod/asset" parent_code = "chr001" parent_key = server.build_search_key(parent_type, parent_code) parent = server.get_by_search_key(parent_key) parent_id = parent.get('id') # create a submission data = { 'description': 'A test submission', 'artist': 'joe', 'context': 'model' } submission = server.insert("prod/submission", data, parent_key=parent_key) submission_key = submission.get('__search_key__') submission_id = submission.get('id') file_path = './miso_ramen.jpg' context = "publish" snapshot = server.simple_checkin(submission_key, context, file_path, mode="upload") # no connect to the bin with a connector data = { "bin_id": bin_id, 'submission_id': submission_id } server.insert("prod/submission_in_bin", data)
pipeline_code = task.get("pipeline_code") context = task.get("context") status = task.get("status") bsd = task.get("bid_start_date") bed = task.get("bid_end_date") assigned = task.get("assigned") data = { 'search_code': search_code, 'process': process, 'status': status, 'assigned': assigned, 'bid_start_date': bsd, 'bid_end_date': bed, 'search_type': search_type, 'pipeline_code': pipeline_code, 'context': context } new_task = server.insert("sthpw/task", data) new_task_code = new_task.get("code") expr = "@SOBJECT(sthpw/snapshot['search_code','" + code + "'])" snapshots = server.eval(expr) for snapshot in snapshots: print snapshot.get("context") snapshot_sk = snapshot.get("__search_key__") snapshot_data = {'search_code': new_task_code} server.update(snapshot_sk, snapshot_data)
class ExpressionApiTest(unittest.TestCase): def setUp(self): pass def test_all(self): self.server = TacticServerStub() project_code = "unittest" self.server.set_project(project_code) self.server.start("Expression Test") try: self._setup() self._test_expression() except: self.server.abort() raise else: self.server.abort() def _setup(self): city_data = { 'code': 'los_angeles' } search_type = "unittest/person" self.persons = [] for i in range(0,4): data = { 'name_first': 'person%s' % i, 'name_last': 'Test', 'city_code': 'los_angeles', 'age': '25' } person = self.server.insert(search_type, data) self.persons.append( person ) def _test_expression(self): # get the people sobjects expr = "@SOBJECT(unittest/person)" result = self.server.eval(expr) self.assertEquals(4, len(result)) self.assertEquals("los_angeles", result[0].get("city_code") ) # get a single person expr = "@SOBJECT(unittest/person)" result = self.server.eval(expr, single=True) self.assertEquals("los_angeles", result.get('city_code')) # get the first_name expr = "@GET(unittest/person.name_first)" names = self.server.eval(expr) self.assertEquals(len(names), 4) #self.assertEquals("person0", names[0]) #self.assertEquals("person1", names[1]) # count the number of people expr = "@COUNT(unittest/person)" count = self.server.eval(expr) self.assertEquals(4, count) # get the age of a person expr = "@GET(unittest/person.age)" age = self.server.eval(expr, self.persons[0], single=True) self.assertEquals(25, age) return
if game_type[0] == "casino" or game_type[0] == "video_conf": #if game_name == "cf_king_of_hidden_weapons": for casino_process in casino_processes: expr = "@MIN(simpleslot/game['name','" + game_name + "'].simpleslot/3d.sthpw/task['process','" + casino_process + "'].bid_start_date)" temp_min = server.eval(expr) expr = "@MAX(simpleslot/game['name','" + game_name + "'].simpleslot/3d.sthpw/task['process','" + casino_process + "'].bid_end_date)" temp_max = server.eval(expr) if temp_min != None or temp_max != None: data["threed_" + casino_process + "_min"] = temp_min data["threed_" + casino_process + "_max"] = temp_max insert = 1 for game_in_combine in task_combine: #match combine list names to master list, if match, only update. code = game_in_combine.get("game_code") sk = game_in_combine.get("__search_key__") if code == game_code: inlist.append(data) server.update(sk, data) insert = 0 break if insert == 1: #if game not in combine list, insert server.insert(task_combine_sk, data) inlist.append(data) #return inlist
class ExpressionApiTest(unittest.TestCase): def setUp(self): pass def test_all(self): self.server = TacticServerStub() project_code = "unittest" self.server.set_project(project_code) self.server.start("Expression Test") try: self._setup() self._test_expression() except: self.server.abort() raise else: self.server.abort() def _setup(self): city_data = {'code': 'los_angeles'} search_type = "unittest/person" self.persons = [] for i in range(0, 4): data = { 'name_first': 'person%s' % i, 'name_last': 'Test', 'city_code': 'los_angeles', 'age': '25' } person = self.server.insert(search_type, data) self.persons.append(person) def _test_expression(self): # get the people sobjects expr = "@SOBJECT(unittest/person)" result = self.server.eval(expr) self.assertEquals(4, len(result)) self.assertEquals("los_angeles", result[0].get("city_code")) # get a single person expr = "@SOBJECT(unittest/person)" result = self.server.eval(expr, single=True) self.assertEquals("los_angeles", result.get('city_code')) # get the first_name expr = "@GET(unittest/person.name_first)" names = self.server.eval(expr) self.assertEquals(len(names), 4) #self.assertEquals("person0", names[0]) #self.assertEquals("person1", names[1]) # count the number of people expr = "@COUNT(unittest/person)" count = self.server.eval(expr) self.assertEquals(4, count) # get the age of a person expr = "@GET(unittest/person.age)" age = self.server.eval(expr, self.persons[0], single=True) self.assertEquals(25, age) return
def main(args, login=None): # USAGE: checkin_render_layer.py shot_code = args[0] layer_name = args[1] version = args[2] context = args[3] file_range = args[4] pattern = args[5] server = TacticServerStub(login) # do the actual work server.start("Checked in file group [%s] to shot [%s] layer [%s]" % (pattern, shot_code, layer_name)) try: # move the file dir = server.get_handoff_dir() paths = expand_paths(pattern, file_range) move_file(paths, dir) file_name = os.path.basename(pattern) new_pattern = '%s/%s' % (dir, file_name) print "Files moved to handoff dir.\n" # checkin the moved files filters = [] filters.append(('shot_code', shot_code)) filters.append(('name', layer_name)) results = server.query('prod/layer', filters) # take the first one if results: id = results[0].get('id') search_type = server.build_search_type('prod/layer') # find the layer snapshot filters = [] filters.append(('version', version)) filters.append(('search_type', search_type)) filters.append(('search_id', id)) #TODO : may need a context to search for the proper layer results = server.query('sthpw/snapshot', filters) snap_code = '' if results: snap_code = results[0].get('code') # find the render render = None filters = [] filters.append(('search_type', search_type)) filters.append(('search_id', id)) filters.append(('snapshot_code', snap_code)) results = server.query(SEARCH_TYPE, filters) if results: render = results[0] if not render: render_data = { 'search_type': search_type, 'search_id': id, 'snapshot_code': snap_code } render = server.insert("prod/render", render_data) ''' results = server.query(SEARCH_TYPE, filters) render_id = 0 if results: render_id = results[0].get('id') # find the render id search_key = server.build_search_key(SEARCH_TYPE, render_id, column='id') ''' file_type = 'main' # run group checkin server.group_checkin(render.get("__search_key__"), context=context, file_path=new_pattern, file_type=file_type, file_range=file_range) except: server.abort() raise else: server.finish()
import tacticenv from tactic_client_lib import TacticServerStub server = TacticServerStub(protocol="xmlrpc") #server.set_project("sample3d") server.set_ticket("60128265ebea63620de1f5b0ffc502eb") search_type = "prod/shot" server.start(title='cow') sobject = server.insert(search_type, { 'description': 'wow'} ) server.update(search_key, { 'description': 'another update'} ) server.finish() sobject = server.insert(search_type, { 'description': 'wow2'} ) sobject = server.insert(search_type, { 'description': 'wow3'} )
expr = "@SOBJECT(sthpw/login)" logins = server.eval(expr) #logins = ['fish_hung', 'alpha'] #6965 = shot #6270 = asset #6264 = casino widget_template_id = 6264 expr = "@SOBJECT(sthpw/wdg_settings['id','" + str(widget_template_id) + "'])" widget_template = server.eval(expr)[0] wkey = widget_template.get("key") wlogin = widget_template.get("login") wdata = widget_template.get("data") wproject_code = widget_template.get("project_code") expr = "@GET(sthpw/wdg_settings['key','" + wkey + "'].login)" existing_login = server.eval(expr) for login in logins: name = login.get("login") if name not in existing_login: data = { 'key': wkey, 'login': name, 'data': wdata, 'project_code': wproject_code } server.insert("sthpw/wdg_settings", data)
import tacticenv from tactic_client_lib import TacticServerStub server = TacticServerStub(protocol="xmlrpc") #server.set_project("sample3d") server.set_ticket("60128265ebea63620de1f5b0ffc502eb") search_type = "prod/shot" server.start(title='cow') sobject = server.insert(search_type, {'description': 'wow'}) server.update(search_key, {'description': 'another update'}) server.finish() sobject = server.insert(search_type, {'description': 'wow2'}) sobject = server.insert(search_type, {'description': 'wow3'})
def main(args, login=None): # USAGE: checkin_render_layer.py shot_code = args[0] layer_name = args[1] version = args[2] context = args[3] file_range = args[4] pattern = args[5] server = TacticServerStub(login) # do the actual work server.start("Checked in file group [%s] to shot [%s] layer [%s]" % (pattern, shot_code, layer_name)) try: # move the file dir = server.get_handoff_dir() paths = expand_paths(pattern, file_range) move_file(paths, dir) file_name = os.path.basename(pattern) new_pattern = "%s/%s" % (dir, file_name) print "Files moved to handoff dir.\n" # checkin the moved files filters = [] filters.append(("shot_code", shot_code)) filters.append(("name", layer_name)) results = server.query("prod/layer", filters) # take the first one if results: id = results[0].get("id") search_type = server.build_search_type("prod/layer") # find the layer snapshot filters = [] filters.append(("version", version)) filters.append(("search_type", search_type)) filters.append(("search_id", id)) # TODO : may need a context to search for the proper layer results = server.query("sthpw/snapshot", filters) snap_code = "" if results: snap_code = results[0].get("code") # find the render render = None filters = [] filters.append(("search_type", search_type)) filters.append(("search_id", id)) filters.append(("snapshot_code", snap_code)) results = server.query(SEARCH_TYPE, filters) if results: render = results[0] if not render: render_data = {"search_type": search_type, "search_id": id, "snapshot_code": snap_code} render = server.insert("prod/render", render_data) """ results = server.query(SEARCH_TYPE, filters) render_id = 0 if results: render_id = results[0].get('id') # find the render id search_key = server.build_search_key(SEARCH_TYPE, render_id, column='id') """ file_type = "main" # run group checkin server.group_checkin( render.get("__search_key__"), context=context, file_path=new_pattern, file_type=file_type, file_range=file_range, ) except: server.abort() raise else: server.finish()
def main(args, login=None): # USAGE: checkin_render.py type = args[0] if type == "shot": parent_search_type = "prod/shot" elif type == "asset": parent_search_type = "prod/asset" else: parent_search_type = type code = args[1] file_range = args[2] pattern = args[3] layer_name = '' context = 'publish' if type == "layer": parent_search_type = "prod/layer" code, layer_name = args[1].split('|') server = TacticServerStub(login) # do the actual work server.start("Checked in file group [%s] to %s [%s]" % (pattern, type, code)) try: # checkin the uploaded file filters = [] if type == 'layer': filters.append(('shot_code', code)) filters.append(('name', layer_name)) else: filters.append(('code', code)) results = server.query(parent_search_type, filters) # take the first one if results: id = results[0].get('id') else: if type == 'layer': print "%s Code [%s] name [%s] not found. Please insert an entry in TACTIC first." % ( type, code, layer_name) else: print "%s Code [%s] not found. Please insert an entry in TACTIC first." % ( type, code) search_type = server.build_search_type(parent_search_type) file_type = 'main' render_type = '' # not used yet # move the file dir = server.get_handoff_dir() paths = expand_paths(pattern, file_range) copy_file(paths, dir) file_name = os.path.basename(pattern) new_pattern = '%s/%s' % (dir, file_name) print "Copied files to handoff dir\n" render = find_render(server, search_type, id, login, render_type) if not render: render_data = { 'search_type': search_type, 'search_id': id, 'login': login #'type': render_type } render = server.insert("prod/render", render_data) # run group checkin server.group_checkin(render.get("__search_key__"), context=context, file_path=new_pattern, file_type=file_type, file_range=file_range) except: server.abort() raise else: server.finish()
def main(args, login=None): # USAGE: checkin_render.py type = args[0] if type == "shot": parent_search_type = "prod/shot" elif type == "asset": parent_search_type = "prod/asset" else: parent_search_type = type code = args[1] file_range = args[2] pattern = args[3] layer_name = '' context = 'publish' if type == "layer": parent_search_type = "prod/layer" code, layer_name = args[1].split('|') server = TacticServerStub(login) # do the actual work server.start("Checked in file group [%s] to %s [%s]" % (pattern,type,code)) try: # checkin the uploaded file filters = [] if type=='layer': filters.append(('shot_code', code)) filters.append(('name', layer_name)) else: filters.append(('code', code)) results = server.query(parent_search_type, filters) # take the first one if results: id = results[0].get('id') else: if type =='layer': print "%s Code [%s] name [%s] not found. Please insert an entry in TACTIC first." %(type, code, layer_name) else: print "%s Code [%s] not found. Please insert an entry in TACTIC first." %(type, code) search_type = server.build_search_type(parent_search_type) file_type = 'main' render_type = '' # not used yet # move the file dir = server.get_handoff_dir() paths = expand_paths(pattern, file_range) copy_file(paths, dir) file_name = os.path.basename(pattern) new_pattern = '%s/%s' %(dir, file_name) print "Copied files to handoff dir\n" render = find_render(server, search_type, id, login, render_type) if not render: render_data = { 'search_type': search_type, 'search_id': id, 'login': login #'type': render_type } render = server.insert("prod/render", render_data) # run group checkin server.group_checkin(render.get("__search_key__"), context=context, file_path=new_pattern, file_type=file_type, file_range=file_range) except: server.abort() raise else: server.finish()
def main(args, src_snapshot_code=None, src_search_type=None, src_search_code=None, src_context=None, src_version=None,\ tgt_context=None, tgt_version=None, file_path=None): if len(args) == 3: # assume code and file path are equivalent search_type = args[0] code = args[1] bin_info = args[2] elif len(args) == 4: search_type = args[0] code = args[1] bin_info = args[2] file_path = args[3] server = TacticServerStub() if file_path: description = "Dailies Submission [%s] to [%s] - [%s]" % (file_path, search_type, code) elif src_snapshot_code: description = "Dailies Submission internal reference [%s] to [%s] - [%s]" \ % (src_snapshot_code, search_type, code) else: description = "Dailies Submission internal reference [%s|%s] to [%s] - [%s]" \ % (src_search_type, src_search_code, search_type, code) server.start(title='Dailies Submission', description=description ) try: parts = bin_info.split('|') if len(parts) == 3: bin_code, type, label = parts[0], parts[1], parts[2] bins = server.query('prod/bin', [('code', bin_code), ('label', label), ('type', type)]) elif len(parts) == 2: bin_code, type = parts[0], parts[1] bins = server.query('prod/bin', [('code', bin_code), ('type', type)]) if not bins: raise TacticApiException("Bin code [%s], type [%s], label [%s] not found in system " % (bin_code, type, label)) search_key = server.build_search_key(search_type, code) sobject = server.query(search_type, [("code", code)]) if not sobject: raise TacticApiException("SObject [%s] with code [%s] not found" %(search_type, code)) sobject_id = sobject[0].get('id') # add a new submission full_search_type = server.build_search_type(search_type) submit_data = {'search_type': full_search_type,\ 'search_id': sobject_id,\ 'description': "Client Api Submission: [%s]" %code\ } if tgt_context and tgt_version != None: submit_data['context'] = tgt_context if tgt_version in ['0', 0 ,'-1', -1]: tgt_snapshot = server.get_snapshot(search_key, tgt_context, version=tgt_version) if not tgt_snapshot: print "tgt_context [%s] and tgt_version [%s] for this sobject cannot be found" %(tgt_context, tgt_version) else: tgt_version = tgt_snapshot.get('version') submit_data['version'] = tgt_version src_snapshot = None if src_snapshot_code: src_snapshot = server.query('sthpw/snapshot',filters=[('code', src_snapshot_code)], single=True) submit_data['context'] = src_snapshot.get('context') submit_data['version'] = src_snapshot.get('version') submission = server.insert('prod/submission', submit_data) # add to bin submit_in_bin_data = { 'bin_id': bins[0].get('id'), \ 'submission_id': submission.get('id')\ } server.insert('prod/submission_in_bin', submit_in_bin_data) print "New submission [%s] created for [%s].\n" %(submission.get('__search_key__'), full_search_type) if file_path: #NOTE: use the upload method instead of copy or move server.simple_checkin(submission.get('__search_key__'), 'publish', file_path, \ snapshot_type='submission', description='Client API dailies submission', mode='upload') else: if src_snapshot: pass elif src_search_type: src_search_key = server.build_search_key(src_search_type, src_search_code) else: src_search_key = search_key if not src_snapshot: src_snapshot = server.get_snapshot(src_search_key, context=src_context, version=src_version) if src_snapshot: snapshot_code = src_snapshot.get('code') # build a new snapshot submit_snapshot = server.create_snapshot(submission.get('__search_key__'), \ "publish", description='Client API dailies submission', \ snapshot_type='submission') # add dependency server.add_dependency_by_code(submit_snapshot.get('code'), snapshot_code) else: raise TacticApiException("No snapshot found for [%s] with context [%s] and version [%s]."\ %(src_search_key, src_context, src_version)) return except Exception, e: server.abort() print "ERROR: ", e.__str__()