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 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})
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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)
示例#10
0
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
示例#12
0
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()
示例#14
0
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'} )



示例#15
0
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)
示例#16
0
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'})
示例#17
0
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()
示例#18
0
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()
示例#19
0
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()
示例#20
0
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__()