コード例 #1
0
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     my.server = TacticServerStub.get()
     my.sk = ''
     my.login = '' 
     my.order_code = ''
コード例 #2
0
    def init(my):
        from client.tactic_client_lib import TacticServerStub

        my.server = TacticServerStub.get()
        my.login = Environment.get_login()
        my.user = my.login.get_login()
        my.work_order_code = ""
コード例 #3
0
ファイル: uploader.py プロジェクト: 2gDigitalPost/custom
 def get_display(my):
     import re
     from client.tactic_client_lib import TacticServerStub
     from tactic.ui.panel import FastTableLayoutWdg
     server = TacticServerStub.get()
     sk = str(my.kwargs.get('sk'))
     splits = sk.split('code=')
     search_type = splits[0].split('?')[0];
     code = splits[1];
     search_id = re.findall(r'\d+', code)
     search_id = int(search_id[0])
     widget = DivWdg()
     table = Table()
     table.add_attr('class','snapshot_viewer_wdg')
     table.add_attr('sk',sk)
     #ftl = FastTableLayoutWdg(search_type='sthpw/snapshot', view='table', element_names='preview,process,description,web_path,timestamp,login', show_row_select=True, search_key=sk, show_gear=False, show_shelf=False, show_select=True, width='100%s' % '%', show_column_manager=False, expression="@UNION(@SOBJECT(sthpw/snapshot),@SOBJECT(sthpw/note.sthpw/snapshot))", temp=True)
     if search_type == 'sthpw/note':
         expression = "@SOBJECT(sthpw/snapshot)"
     else:
         expression="@UNION(@SOBJECT(sthpw/snapshot),@SOBJECT(sthpw/note.sthpw/snapshot))"
     ftl = FastTableLayoutWdg(search_type='sthpw/snapshot', view='snapshot_by_process', show_row_select=True, search_key=sk, show_gear=False, show_shelf=False, show_select=True, height='300px', width='100%s' % '%', show_column_manager=False, expression=expression, temp=True)
     table.add_row()
     table.add_cell(ftl) 
     widget.add(table)
     return widget
コード例 #4
0
ファイル: preferences.py プロジェクト: 2gDigitalPost/custom
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     my.login_obj = Environment.get_login()
     my.login = my.login_obj.get_login()
     my.server = TacticServerStub.get()
     my.login_obj = my.server.eval("@SOBJECT(sthpw/login['login','%s'])" % my.login)[0]
     my.key_dict = {'highlight_notes': 'Highlight Notes - Record What I Have Seen (Slower)]:', 'show_note_counts': 'Show Top Section of Notes, Showing Count Breakdown:'}
コード例 #5
0
ファイル: proj_row.py プロジェクト: 2gDigitalPost/custom
 def init(my):
     my.server = TacticServerStub.get()
     my.title = "Project"
     my.sk = ''
     my.code = ''
     my.search_id = ''
     my.parent_sk = ''
     my.parent_sid = ''
     my.order_sk = ''
     my.x_butt = "<img src='/context/icons/common/BtnKill.gif' title='Delete' name='Delete'/>"
     my.scratch_pipe = "<table border=0 cellspacing=0 cellpadding=2 style='font-size: 60%s; border-color: #FFFFFF; border-style: solid; border-width: 1px; cursor: pointer;'><tr><td align='center'><font color='#FFFFFF'>Pipeline</font></td></tr></table>" % '%'
     my.width = '1000px'
     my.height = '300px'
     my.small = False
     my.disp_mode = 'Small'
     my.groups_str = ''
     my.user = ''
     my.is_master = False
     my.is_master_str = 'false'
     my.on_color = '#ff0000'
     my.off_color = '#d9ed8b'
     my.stat_colors = {
         'Assignment': '#fcaf88',
         'Pending': '#d7d7d7',
         'In Progress': '#f5f3a4',
         'In_Progress': '#f5f3a4',
         'In Production': '#f5f3a4',
         'In_Production': '#f5f3a4',
         'In production': '#f5f3a4',
         'In_production': '#f5f3a4',
         'Waiting': '#ffd97f',
         'Need Assistance': '#fc88fb',
         'Need_Assistance': '#fc88fb',
         'Review': '#888bfc',
         'Approved': '#d4b5e7',
         'On Hold': '#e8b2b8',
         'On_Hold': '#e8b2b8',
         'Client Response': '#ddd5b8',
         'Completed': '#b7e0a5',
         'Ready': '#b2cee8',
         'Internal Rejection': '#ff0000',
         'External Rejection': '#ff0000',
         'Rejected': '#ff0000',
         'Failed QC': '#ff0000',
         'Fix Needed': '#c466a1',
         'Need Buddy Check': '#e3701a',
         'DR In_Progress': '#d6e0a4',
         'DR In Progress': '#d6e0a4',
         'Amberfin01_In_Progress':'#D8F1A8',
         'Amberfin01 In Progress':'#D8F1A8',
         'Amberfin02_In_Progress':'#F3D291',
         'Amberfin02 In Progress':'#F3D291',
         'BATON In_Progress': '#c6e0a4',
         'BATON In Progress': '#c6e0a4',
         'Export In_Progress': '#796999',
         'Export In Progress': '#796999',
         'Buddy Check In_Progress': '#1aade3',
         'Buddy Check In Progress': '#1aade3'
     }
コード例 #6
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     super(ClipboardMovementMakerCmd, my).__init__(**kwargs)
     my.login = Environment.get_login()
     my.user_name = my.login.get_login() 
     my.server = TacticServerStub.get()
     my.movement_code = str(kwargs.get('movement_code'))
コード例 #7
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     super(ClipboardEmptySearchTypeCmd, my).__init__(**kwargs)
     my.login = Environment.get_login()
     my.user_name = my.login.get_login() 
     my.server = TacticServerStub.get()
     my.search_type = str(kwargs.get('search_type'))
コード例 #8
0
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     my.server = TacticServerStub.get()
     my.login = Environment.get_login()
     my.user = my.login.get_login()
     my.task_code = ''
     my.task_codes = ''
     my.code = ''
コード例 #9
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     super(ClipboardAddCmd, my).__init__(**kwargs)
     my.code = str(kwargs.get('code'))
     my.st = str(kwargs.get('st')).split('?')[0]
     my.login = Environment.get_login()
     my.user_name = my.login.get_login() 
     my.server = TacticServerStub.get()
コード例 #10
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     super(CreateTitlesCmd, my).__init__(**kwargs)
     my.login = Environment.get_login()
     my.user_name = my.login.get_login() 
     my.server = TacticServerStub.get()
     my.data = kwargs.get('data')
     # There has to be at least one episode for some reason, even if it's empty
     my.episodes = kwargs.get('episodes', [''])
コード例 #11
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     super(NormalPipeToHackPipeCmd, my).__init__(**kwargs)
     my.login = Environment.get_login()
     my.user_name = my.login.get_login() 
     my.server = TacticServerStub.get()
     my.sob_sk = kwargs.get('sob_sk')
     my.new_pipe = kwargs.get('new_pipe')
     my.sob_code = my.sob_sk.split('code=')[1]
コード例 #12
0
ファイル: inbox_wdg.py プロジェクト: 2gDigitalPost/custom
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     my.server = TacticServerStub.get()
     my.number = 0
     my.code = ''
     my.login = Environment.get_login()
     my.user = my.login.get_login()
     my.width = '1000px'
     my.height = '300px'
コード例 #13
0
 def init(my):
     my.server = TacticServerStub.get()
     my.sk = ''
     my.search_id = ''
     my.code = ''
     my.user = ''
     my.groups_str = ''
     my.parent_sk = ''
     my.parent_sid = ''
     my.order_sk = ''
     my.disp_mode = 'Small'
     my.small = False
     my.is_master = False
     my.is_master_str = 'false'
     my.on_color = '#ff0000'
     my.off_color = '#c6eda0'
     my.stat_colors = {
         'Assignment': '#fcaf88',
         'Pending': '#d7d7d7',
         'In Progress': '#f5f3a4',
         'In_Progress': '#f5f3a4',
         'In Production': '#f5f3a4',
         'In_Production': '#f5f3a4',
         'In production': '#f5f3a4',
         'In_production': '#f5f3a4',
         'Waiting': '#ffd97f',
         'Need Assistance': '#fc88fb',
         'Need_Assistance': '#fc88fb',
         'Review': '#888bfc',
         'Approved': '#d4b5e7',
         'On Hold': '#e8b2b8',
         'On_Hold': '#e8b2b8',
         'Client Response': '#ddd5b8',
         'Completed': '#b7e0a5',
         'Ready': '#b2cee8',
         'Internal Rejection': '#ff0000',
         'External Rejection': '#ff0000',
         'Rejected': '#ff0000',
         'Failed QC': '#ff0000',
         'Fix Needed': '#c466a1',
         'Need Buddy Check': '#e3701a',
         'DR In_Progress': '#d6e0a4',
         'DR In Progress': '#d6e0a4',
         'Amberfin01_In_Progress':'#D8F1A8',
         'Amberfin01 In Progress':'#D8F1A8',
         'Amberfin02_In_Progress':'#F3D291',
         'Amberfin02 In Progress':'#F3D291',
         'BATON In_Progress': '#c6e0a4',
         'BATON In Progress': '#c6e0a4',
         'Export In_Progress': '#796999',
         'Export In Progress': '#796999',
         'Buddy Check In_Progress': '#1aade3',
         'Buddy Check In Progress': '#1aade3'
     }
コード例 #14
0
 def init(my):
     my.group_list = Environment.get_group_names()
     login = Environment.get_login()
     my.user = login.get_login()
     my.server = TacticServerStub.get()
     my.sk = ''
     my.code = ''
     my.st = ''
     my.is_scheduler = False
     for gname in my.group_list:
         if 'scheduling' in gname:
             my.is_scheduler = True
     if my.user == 'admin':
         my.is_scheduler = True
コード例 #15
0
ファイル: commander.py プロジェクト: 2gDigitalPost/custom
 def __init__(my, **kwargs):
     from client.tactic_client_lib import TacticServerStub
     super(TitleClonerCmd, my).__init__(**kwargs)
     my.titles_str = str(kwargs.get('titles'))
     my.order_codes = str(kwargs.get('order_code')).split(',')
     
     my.user_name = str(kwargs.get('user_name'))
     my.redo = str(kwargs.get('redo'))
     my.no_charge = str(kwargs.get('no_charge'))
     my.copy_attributes_str = str(kwargs.get('copy_attributes'))
     my.copy_attributes = False
     if my.copy_attributes_str == 'true':
         my.copy_attributes = True
     my.server = TacticServerStub.get()
コード例 #16
0
ファイル: error_viewer.py プロジェクト: Smurgledwerf/custom
 def get_display(my):
     import time, datetime
     from tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     code = ''
     fault_files = None
     rowct = 1
     server = TacticServerStub.get()
     if 'external_rejection_code' in my.kwargs.keys():
         code = my.kwargs.get('external_rejection_code')
         fault_files = server.eval("@SOBJECT(twog/external_rej_at_fault_files['external_rejection_code','%s'])" % code) 
     if 'rowct' in my.kwargs.keys():
         rowct = int(my.kwargs.get('rowct'))
     adding = False
     if 'adding' in my.kwargs.keys():
         if my.kwargs.get('adding') == 'true':
             adding = True
     table = Table()
     table.add_attr('class','fftable')
     table.add_attr('border','1')
     if rowct == 1 and not adding:
         table.add_row()
         table.add_cell("<b>List of At-Fault Files:</b>")
     if code not in [None,''] and not adding:
         for ff in fault_files:
             brow = table.add_row()
             brow.add_attr('line',rowct)
             brow.add_attr('code',ff.get('code'))
             brow.add_attr('prev',ff.get('file_path'))
             brow.add_attr('sk',ff.get('__search_key__'))
             brow.add_attr('class','fault_files')
             table.add_cell(my.txtbox('file_path-%s' % rowct, ff.get('file_path'),width='700px'))
             killer = table.add_cell('<b>X</b>')#This must delete the entry
             killer.add_style('cursor: pointer;')
             killer.add_behavior(my.get_kill_bvr(rowct, code, ff.get('code')))
             rowct = rowct + 1
     erow = table.add_row()
     erow.add_attr('line',rowct)
     erow.add_attr('code','')
     erow.add_attr('prev','')
     erow.add_attr('sk','')
     erow.add_attr('class','fault_files')
     table.add_cell(my.txtbox('file_path-%s' % rowct, '',width='700px'))
     addnew = table.add_cell('<b>+</b>')#This must add new entry
     addnew.add_style('cursor: pointer;')
     addnew.add_behavior(my.get_add_line(rowct, code, ''))
     erow2 = table.add_row()
     erow2.add_attr('class','new_ff_line')
     return table
コード例 #17
0
ファイル: error_viewer.py プロジェクト: Smurgledwerf/custom
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     from pyasm.common import Environment
     my.server = TacticServerStub.get()
     my.sk = ''
     my.code = ''
     my.video_reasons = {'Cropping': 'video_cropping_reason','Digital Hits / Macroblocking': 'video_digihits_reason', 'Dropped Frames': 'video_dropped_frames_reason', 'Dropout': 'video_dropout_reason', 'Duplicate Frames': 'video_duplicate_frames_reason', 'Interlacing on a progressive file': 'video_interlacing_progressive_reason', 'Motion/Image Lag': 'video_motion_lag_reason', 'Missing elements': 'video_missing_elements_reason', 'Corrupt file': 'video_corrupt_file_reason', 'Incorrect aspect ratio': 'video_bad_aspect_ratio_reason', 'Incorrect resolution': 'video_bad_resolution_reason', 'Incorrect pixel aspect ratio': 'video_bad_pixel_aspect_ratio_reason', 'Incorrect specifications': 'video_bad_specifications_reason', ' Incorrect head/tail format': 'video_bad_head_tail_reason', 'Other issue': 'video_other_reason'}
     my.video_reasons_arr = ['Cropping','Digital Hits / Macroblocking', 'Dropped Frames', 'Dropout', 'Duplicate Frames', 'Interlacing on a progressive file', 'Motion/Image Lag', 'Missing elements', 'Corrupt file', 'Incorrect aspect ratio', 'Incorrect resolution', 'Incorrect pixel aspect ratio', 'Incorrect specifications', ' Incorrect head/tail format', 'Other issue']
     my.audio_reasons = {'Incorrect Audio Mapping': 'audio_bad_mapping_reason', 'Missing Audio Channel': 'audio_missing_audio_channel_reason', 'Crackle/Hiss/Pop/Static/Ticks': 'audio_crackle_reason', 'Distortion': 'audio_distortion_reason', 'Dropouts': 'audio_dropouts_reason', 'Sync issue': 'audio_sync_reason', 'Missing elements': 'audio_missing_elements_reason', 'Corrupt file / missing file': 'audio_corrupt_missing_file_reason', 'Incorrect specifications': 'audio_bad_specifications_reason', 'Other Issue': 'audio_other_reason'}
     my.audio_reasons_arr = ['Incorrect Audio Mapping', 'Missing Audio Channel', 'Crackle/Hiss/Pop/Static/Ticks', 'Distortion', 'Dropouts', 'Sync issue', 'Missing elements', 'Corrupt file / missing file', 'Incorrect specifications', 'Other Issue']
     my.metadata_reasons = {'Missing information': 'metadata_missing_info_reason', 'Incorrect information': 'metadata_bad_info_reason', 'Incorrect formatting': 'metadata_bad_formatting_reason', 'Other Issue': 'metadata_other_reason'}
     my.metadata_reasons_arr = ['Missing information', 'Incorrect information', 'Incorrect formatting', 'Other Issue']
     my.subtitle_reasons = {'Interlacing on subtitles': 'subtitle_interlacing_reason', 'Incorrect subtitles': 'subtitle_bad_subtitles_reason', 'Sync issue': 'subtitle_sync_issue_reason', 'Overlapping other text': 'subtitle_overlapping_reason', 'Other issue': 'subtitle_other_reason'}
     my.subtitle_reasons_arr = ['Interlacing on subtitles', 'Incorrect subtitles', 'Sync issue', 'Overlapping other text', 'Other issue']
     my.cc_reasons = {'Sync issue': 'cc_sync_issue_reason','Incorrect CC': 'cc_bad_cc_reason', 'Overlapping other text': 'cc_overlapping_reason','Other issue': 'cc_other_reason'}
     my.cc_reasons_arr = ['Sync issue','Incorrect CC', 'Overlapping other text','Other issue']
     my.rejection_causes = ['Client Error','Machine Error','Manager Error','Operator Error','Process Error','Scheduler Error']
     my.root_cause_types = ['Machine Error','Operator Error','Incorrect Instructions','Source Issue','No Issue Found']
     my.statuses = ['Open','Investigating','Waiting for Source','Needs Corrective Action','Closed']
コード例 #18
0
    def checkin(my, tactic_node, search_key, context):
        '''Standard checkin mechanism.  This is a sample checkin mechanism
        that is full featured enough to handle many situations.

        @params:
          tactic_node: the tactic node to be checkedin
          search_key: the search key to check into
          context: the context to check into

        @return
          snapshot: a dictionary representing the final snapshot
          
        
        '''
        server = TacticServerStub.get()

        # verify that this is not a reference!!!

        # create a snapshot
        snapshot = server.create_snapshot(search_key, context)

        # find all of the dependencies
        dependent_nodes = my.get_dependent_nodes(tactic_node)
        for node in dependent_nodes:
            # find out if there is a node there is a file associated with
            # this tactic node
            files = my.get_dependent_references(node)
            print files

        # update the tactic node with the latest snapshot data.  Also, update
        # the tactic node name as it likely has changed
        node_data = my.set_introspect_data(tactic_node, snapshot)
        tactic_node = node_data.get_app_node_name()

        # add the files to the snapshot
        handler = BaseFileExtractionHandler(tactic_node)
        paths = handler.execute()
        #paths = my.extract_to_files(top_node)
        for path in paths:
            print "path: ", path
            server.add_file(snapshot.get("code"), path, mode='upload')

        return snapshot
コード例 #19
0
    def load(my,
             search_key,
             context,
             version=-1,
             file_type='main',
             mode='reference',
             namespace=''):
        '''Generic loading function used by TACTIC interface by default

        @params:
        search_key: the search key of the sobject to be loaded
        context: the context of the snapshot to be loaded
        version: the version of the snapshot to be loaded
        file_type: the specific file in the snapshot to be loaded

        mode: reference|import|open: the mode in which to bring the file in
        
        
        '''
        server = TacticServerStub.get()

        # FIXME: do we really need to make 2 calls?
        snapshot = server.get_snapshot(search_key,
                                       context=context,
                                       version=version)
        if not snapshot:
            raise CGAppException("No snapshot found for [%s]" % search_key)

        paths = server.get_paths(search_key, context, version, file_type)
        web_paths = paths.get("web_paths")

        for path in web_paths:
            to_path = my.download(path)
            my.load_file(to_path, namespace=namespace, mode=mode)

        # FIXME: if the instance already exists, it will be auto renmaed by
        # the application ... this gets tricky to discover
        snapshot_code = snapshot.get('code')
        if namespace:
            tactic_node = "%s:tactic_%s" % (namespace, snapshot_code)
        else:
            tactic_node = "tactic_%s" % snapshot_code
        return tactic_node
コード例 #20
0
    def get_display(my):
        name = ''
        if 'code' in my.kwargs.keys():
            code = str(my.kwargs.get('code'))
            if 'name' in my.kwargs.keys():
                name = str(my.kwargs.get('name'))
        else:
            sobject = my.get_current_sobject()
            code = sobject.get_code()
            if 'WORK_ORDER' in code or 'PROJ' in code:
                name = sobject.get_value('process')
            elif 'TITLE' in code:
                name = sobject.get_value('title')
                if sobject.get_value('episode') not in [None,'']:
                    name = '%s: %s' % (name, sobject.get_value('episode'))
            elif 'ORDER' in code:
                name = sobject.get_value('name')
            if sobject.has_value('lookup_code'):
                if 'STATUS_LOG' in code:
                    my.server = TacticServerStub.get()
                    name = my.server.eval("@GET(sthpw/task['lookup_code','%s'].process)" % sobject.get_value('lookup_code')) 
                    if name:
                        name = name[0]
                    else:
                        name = 'Deleted Work Order'
                else:
                    name = sobject.get_value('process')
                code = sobject.get_value('lookup_code')

        widget = DivWdg()
        table = Table()

        table.add_row()
        cell1 = table.add_cell('<img border="0" style="vertical-align: middle" title="Inspect" name="Inspect" src="/context/icons/silk/information.png">')
        cell1.add_attr('code', code)
        cell1.add_attr('name',name)
        launch_behavior = my.get_launch_behavior()
        cell1.add_style('cursor: pointer;')
        cell1.add_behavior(launch_behavior)
        widget.add(table)

        return widget
コード例 #21
0
ファイル: uploader.py プロジェクト: 2gDigitalPost/custom
 def get_display(my):
     from client.tactic_client_lib import TacticServerStub
     from tactic.ui.input import UploadButtonWdg
     server = TacticServerStub.get()
     ticket = server.generate_ticket()
     sk = str(my.kwargs.get('sk'))
     processes = str(my.kwargs.get('processes'))
     code = sk.split('code=')[1];
     #sobject = server.get_by_search_key(sk)
     widget = DivWdg()
     table = Table()
     table.add_attr('class','html5_uploader_wdg')
     table.add_attr('sk',sk)
     table.add_attr('processes',processes)
     table.add_attr('ticket',ticket)
     table.add_row()
     snaps = SnapshotViewerWdg(sk=sk)
     longcell1 = table.add_cell(snaps)
     longcell1.add_attr('colspan','2')
     table.add_row()
     context = 'PO'
     upload_button = UploadButtonWdg(context=context, ticket=ticket, on_complete=my.on_complete_js, search_key=sk, title="Select a File for %s" % code, stupid_button=True) 
     table.add_cell(upload_button)
     files_tbl = Table()
     files_tbl.add_attr('id','html5_files_tbl')
     table.add_row()
     files = table.add_cell(files_tbl)
     files.add_attr('colspan','2')
     table.add_row()
     uno = table.add_cell(' ')
     uno.add_attr('width','100%s' % '%')
     butt = table.add_cell('<input type="button" value="Assign Context & Finish"/>') 
     butt.add_behavior(my.get_finish())
     tres = table.add_cell(' ')
     tres.add_attr('width','100%s' % '%')
    
     #table.add_cell(sk)
     widget.add(table)
     return widget
コード例 #22
0
ファイル: label_maker.py プロジェクト: 2gDigitalPost/custom
    def init(my):
        my.server = TacticServerStub.get()
        my.types = ['HDCAM_Old', 'HDCAM_TV_FOX_Old', 'HDCAM_FILM_FOX_Old', 'HDCAM DIGIBETA_Old', 'DVD_Old', 'D5_Old']

        current_directory = os.path.dirname(__file__)
        my.template_files = {
            'HDCAM_Old': os.path.join(current_directory, 'templates/HDCAM_label_old.html'),
            'HDCAM_FILM_FOX_Old': os.path.join(current_directory, 'templates/HDCAM_FILM_FOX_label_old.html'),
            'HDCAM_TV_FOX_Old': os.path.join(current_directory, 'templates/HDCAM_TV_FOX_label_old.html'),
            'HDCAM DIGIBETA_Old': os.path.join(current_directory, 'templates/HDCAM_Digibeta_label_old.html'),
            'DVD_Old': os.path.join(current_directory, 'templates/DVD_Label_old.html'),
            'D5_Old': os.path.join(current_directory, 'templates/D5_label_old.html'),
            'HDCAM': os.path.join(current_directory, 'templates/HDCAM_label.html'),
            'HDCAM_FILM_FOX': os.path.join(current_directory, 'templates/HDCAM_FILM_FOX_label.html'),
            'HDCAM_TV_FOX': os.path.join(current_directory, 'templates/HDCAM_TV_FOX_label.html'),
            'HDCAM DIGIBETA': os.path.join(current_directory, 'templates/HDCAM_Digibeta_label.html'),
            'DVD': os.path.join(current_directory, 'templates/DVD_Label.html'),
            'D5': os.path.join(current_directory, 'templates/D5_label.html'),
            'LTO': os.path.join(current_directory, 'templates/LTO_label.html')
        }

        # This is needed to present the keys in template_files in order
        # Since the platform is using Python 2.6, Ordered dictionaries are not available by default
        my.template_file_types = ('HDCAM', 'HDCAM_FILM_FOX', 'HDCAM_TV_FOX', 'HDCAM DIGIBETA', 'DVD', 'D5', 'LTO')
コード例 #23
0
ファイル: sources_row.py プロジェクト: 2gDigitalPost/custom
    def get_display(my):
        my.title_code = str(my.kwargs.get('title_code'))
        my.title_sk = str(my.kwargs.get('title_sk'))
        my.order_sk = str(my.kwargs.get('order_sk'))

        origin_search = Search("twog/title_origin")
        origin_search.add_filter('title_code',my.title_code)
        origins = origin_search.get_sobjects()

        groups_str = ''
        user_group_names = Environment.get_group_names()
        for mg in user_group_names:
            if groups_str == '':
                groups_str = mg
            else:
                groups_str = '%s,%s' % (groups_str, mg)
        user_is_scheduler = False
        if 'scheduling' in groups_str:
            user_is_scheduler = True

        table = Table()
        table.add_attr('width','100%s' % '%')
        table.add_attr('bgcolor','#cbe49e')
        table.add_style('border-bottom-right-radius', '10px')
        table.add_style('border-bottom-left-radius', '10px')
        table.add_style('border-top-right-radius', '10px')
        table.add_style('border-top-left-radius', '10px')
        table.add_row()
        source_limit = 7
        count = 0
        if len(origins) > 0:
            table.add_row()
            mr_title = table.add_cell('<b><u><i>Sources</i></u></b>')
            mr_title.add_style('font-size: 90%s;' % '%')
        seen = []
        for origin in origins:
            source_code = origin.get_value('source_code')
            if source_code not in seen:
                seen.append(source_code)
                source_search = Search("twog/source")
                source_search.add_filter('code',source_code)
                source = source_search.get_sobject()
                if count % source_limit == 0:
                    table.add_row()
                celly = None
                if not source.get_value('high_security'):
                    celly = table.add_cell('<font color="#3e3e3e"><b><u>(%s): %s</u></b></font>' % (source.get_value('barcode'),source.get_value('title')))
                else:
                    celly = table.add_cell('<font color="#ff0000"><b><u>!!!(%s): %s!!!</u></b></font>' % (source.get_value('barcode'),source.get_value('title')))
                celly.add_attr('nowrap','nowrap')
                celly.add_style('cursor: pointer;')
                celly.add_style('font-size: 80%s;' % '%')
                celly.add_behavior(get_launch_source_behavior(my.title_code, my.title_sk, source.get_value('code'), source.get_search_key(), my.order_sk))

                table.add_cell(' &nbsp;&nbsp; ')
                count += 1
            else:

                my.server = TacticServerStub.get()
                my.server.retire_sobject(origin.get_search_key())
        table2 = Table()
        if user_is_scheduler:
            table2.add_row()
            barcode_text_wdg = TextWdg('barcode_insert')
            barcode_text_wdg.add_behavior(my.get_barcode_insert_behavior(my.title_code, my.title_sk, my.order_sk))
            bct = table2.add_cell(barcode_text_wdg)
            bct.add_attr('align','right')
            bct.add_attr('width','100%s' % '%')
        two_gether = Table()
        two_gether.add_row()
        srcs = two_gether.add_cell(table)
        srcs.add_attr('width','100%s' % '%')
        srcs.add_attr('valign','top')
        if user_is_scheduler:
            bcentry = two_gether.add_cell(table2)
            bcentry.add_attr('valign','top')

        return two_gether
コード例 #24
0
 def init(my):
     my.server = TacticServerStub.get()
コード例 #25
0
ファイル: watch_drop_folder.py プロジェクト: 0-T-0/TACTIC
    def execute(my):

        file_path = my.kwargs.get("path")
        project_code = my.kwargs.get("project_code")
        base_dir = my.kwargs.get("base_dir")
        search_type = my.kwargs.get("search_type")
        process = my.kwargs.get("process")
        watch_script_path =  my.kwargs.get("script_path")
        if not process:
            process = "publish"

        basename = os.path.basename(file_path)

        context = my.kwargs.get("context")
        if not context:
            context = '%s/%s'  % (process, basename)


        # find the relative_dir and relative_path
        relative_path = file_path.replace("%s/" % base_dir, "")
        relative_dir = os.path.dirname(relative_path)

        file_name = os.path.basename(file_path)
        log_path = '%s/TACTIC_log.txt' %(base_dir)
        my.create_checkin_log()

        # Define asset type of the file
        asset_type = my.get_asset_type(file_path)
        description = "drop folder check-in of %s" %file_name

        from client.tactic_client_lib import TacticServerStub
        server = TacticServerStub.get(protocol='local')
        server.set_project(project_code)

        transaction = Transaction.get(create=True)
        server.start(title='Check-in of media', description='Check-in of media')

        server_return_value = {}

        try:
            filters = [
                    [ 'name', '=', file_name ],
                    #[ 'relative_dir', '=', relative_dir ]
                ]
            sobj = server.query(search_type, filters=filters, single=True)

            if not sobj:
                # create sobject if it does not yet exist
                sobj = SearchType.create(search_type)
                if SearchType.column_exists(search_type, "name"):
                    sobj.set_value("name", basename)
                if SearchType.column_exists(search_type, "media_type"):
                    sobj.set_value("media_type", asset_type)


                if SearchType.column_exists(search_type, "relative_dir"):
                    sobj.set_value("relative_dir", relative_dir)

                if SearchType.column_exists(search_type, "keywords"):
                    relative_path = relative_path
                    keywords = Common.get_keywords_from_path(relative_path)
                    keywords = " ".join( keywords )
                    sobj.set_value("keywords", keywords)

                sobj.commit()
                search_key = sobj.get_search_key()
            else:
                search_key = sobj.get("__search_key__")


            #task = server.create_task(sobj.get('__search_key__'),process='publish')
            #server.update(task, {'status': 'New'})


            server_return_value = server.simple_checkin(search_key,  context, file_path, description=description, mode='move')

            if watch_script_path:
                cmd = PythonCmd(script_path=watch_script_path,search_type=search_type,drop_path=file_path,search_key=search_key)
                cmd.execute()




            
        except Exception, e:
            print "Error occurred", e
            error_message=str(e)

            import traceback
            tb = sys.exc_info()[2]
            stacktrace = traceback.format_tb(tb)
            stacktrace_str = "".join(stacktrace)
            print "-"*50
            print stacktrace_str


            version_num='Error:'
            system_time=strftime("%Y/%m/%d %H:%M", gmtime())
            pre_log=file_name+(50-len(file_name))*' '+system_time+(33-len(system_time))*' '+version_num+(15-len(version_num))*' ' +error_message+'\n'\
                    + stacktrace_str + '\n' + watch_script_path
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            #server.abort()
            transaction.rollback()
            raise
コード例 #26
0
ファイル: naming_test.py プロジェクト: rajubuddha/TACTIC
    def _test_file_naming(my):
        process = 'model'
        type = 'main'
        context = 'modeling'
        version = 10
        file_name = 'testing_image.jpg'
        code = name = 'vehicle001'
        asset_library = 'vehicle'

        asset = SearchType.create( Asset.SEARCH_TYPE )
        asset.set_value("code",code)
        asset.set_value("name",name)
        asset.set_value("asset_library",asset_library)
        asset.set_value("asset_type","asset")

        virtual_snapshot = Snapshot.create_new()
        virtual_snapshot_xml = '<snapshot process=\'%s\'><file type=\'%s\'/></snapshot>' % (process, type)
        virtual_snapshot.set_value("snapshot", virtual_snapshot_xml)
        virtual_snapshot.set_value("context", context)
        virtual_snapshot.set_value("version", version)

        virtual_snapshot.set_sobject(asset)


        file_obj = File(File.SEARCH_TYPE)
        file_obj.set_value("file_name", file_name)
        

        file_naming = Project.get_file_naming()

        file_naming.set_sobject(asset)
        file_naming.set_snapshot(virtual_snapshot)
        file_naming.set_file_object(file_obj)

        expected_file_name = 'vehicle001_%s_v%0.3d.jpg' %(context,version)
        file_name = file_naming.get_file_name()
        my.assertEquals(expected_file_name, file_name)


        # try a default directory name

        file_obj.set_value("file_name", "test_dir")
        file_obj.set_value("base_type", "directory")
        file_naming.set_file_object(file_obj)
        
        # this should adopt the original dir name in the prefix
        expected_file_name = 'test_dir_%s_v%0.3d' %(context,version)
        file_name = file_naming.get_default()
        my.assertEquals(expected_file_name, file_name)

        #2 try a different search_type unittest/person
        version = 9
        
        
        file_obj.set_value("base_type", "file")
        # change a different input file name
        file_obj.set_value('file_name','some_maya_model.ma') 
        
        # use a real snapshot
        virtual_snapshot.set_sobject(my.person)
        virtual_snapshot.set_value("version", version)
        
        # change to the test file naming class
        my.sobj.set_value('file_naming_cls', 'pyasm.biz.naming_test.TestFileNaming')
        my.sobj.commit()
        Project.set_project('unittest')
        file_naming = Project.get_file_naming()
        file_naming.set_sobject(my.person)
        file_naming.set_snapshot(virtual_snapshot)
        file_naming.set_file_object(file_obj)
        file_name = file_naming.get_file_name()

        expected_file_name = 'phil_main_v009.ma'
        my.assertEquals(expected_file_name, file_name)

        # get_preallocated_path
        type = 'ma'
        #file_obj.set_value('type', type)
        #file_naming.set_file_object(file_obj)

        preallocated = my.snapshot.get_preallocated_path(file_type='maya', file_name='what.ma',ext='ma')
        preallocated_file_name = os.path.basename(preallocated)
        my.assertEquals("phil_main_v001.ma", preallocated_file_name)

        preallocated = my.snapshot.get_preallocated_path(file_type='houdini', file_name='what.otl',ext='otl')
        preallocated_file_name = os.path.basename(preallocated)
        my.assertEquals("phil_main_v001.otl", preallocated_file_name)

        preallocated = my.snapshot.get_preallocated_path(file_type='houdini', file_name='what_is.otl', ext='hipnc')
        preallocated_file_name = os.path.basename(preallocated)
        my.assertEquals("phil_main_v001.hipnc", preallocated_file_name)


        # try an empty file naming
        # change to the test file naming class
        my.sobj.set_value('file_naming_cls', 'pyasm.biz.naming_test.TestFileNaming2')
        my.sobj.commit()

        Project.set_project('unittest')
        file_naming = Project.get_file_naming()
        file_naming.set_sobject(my.person)
        file_naming.set_snapshot(virtual_snapshot)
        file_naming.set_file_object(file_obj)
        file_name = file_naming.get_file_name()
       
        preallocated = my.snapshot.get_preallocated_path(file_type='houdini', file_name='what_is.otl', ext='hipnc')

        if not os.path.exists(preallocated):
            os.makedirs(preallocated)
         
        from client.tactic_client_lib import TacticServerStub
        client = TacticServerStub.get()
        
        if os.path.isdir(preallocated):
            rtn = client.add_directory(my.snapshot.get_code(), preallocated, 'houdini', mode='preallocate')
        else:
            rtn = client.add_file(my.snapshot.get_code(), preallocated, 'houdini', mode='preallocate')
        rtn = client.get_snapshot(SearchKey.get_by_sobject(my.snapshot.get_parent()), context = 'naming_test', version = 1, include_files=True)
        files =  rtn.get('__files__')
        
        # assuming the file is ordered by code
        # the 1st file obj is a file and 2nd file obj is a directory
        for idx, file in enumerate(files):
            if idx ==0:
                my.assertEquals(file.get('type'), 'main')
                my.assertEquals(file.get('base_type'), 'file')
                my.assertEquals(file.get('file_name'), 'naming_test_naming_test_v001.txt')
                
            elif idx ==1:
                my.assertEquals(file.get('type'), 'houdini')
                my.assertEquals(file.get('base_type'), 'directory')
                my.assertEquals(file.get('md5'), '')
                my.assertEquals(file.get('file_name'), '')
コード例 #27
0
    def execute(my):

        file_path = my.kwargs.get("path")
        project_code = my.kwargs.get("project_code")
        base_dir = my.kwargs.get("base_dir")
        search_type = my.kwargs.get("search_type")
        process = my.kwargs.get("process")
        watch_script_path = my.kwargs.get("script_path")
        if not process:
            process = "publish"

        basename = os.path.basename(file_path)

        context = my.kwargs.get("context")
        if not context:
            context = '%s/%s' % (process, basename)

        # find the relative_dir and relative_path
        relative_path = file_path.replace("%s/" % base_dir, "")
        relative_dir = os.path.dirname(relative_path)

        file_name = os.path.basename(file_path)
        log_path = '%s/TACTIC_log.txt' % (base_dir)
        my.create_checkin_log()

        # Define asset type of the file
        asset_type = my.get_asset_type(file_path)
        description = "drop folder check-in of %s" % file_name

        from client.tactic_client_lib import TacticServerStub
        server = TacticServerStub.get(protocol='local')
        server.set_project(project_code)

        transaction = Transaction.get(create=True)
        server.start(title='Check-in of media',
                     description='Check-in of media')

        server_return_value = {}

        try:
            filters = [
                ['name', '=', file_name],
                #[ 'relative_dir', '=', relative_dir ]
            ]
            sobj = server.query(search_type, filters=filters, single=True)

            if not sobj:
                # create sobject if it does not yet exist
                sobj = SearchType.create(search_type)
                if SearchType.column_exists(search_type, "name"):
                    sobj.set_value("name", basename)
                if SearchType.column_exists(search_type, "media_type"):
                    sobj.set_value("media_type", asset_type)

                if SearchType.column_exists(search_type, "relative_dir"):
                    sobj.set_value("relative_dir", relative_dir)

                if SearchType.column_exists(search_type, "keywords"):
                    relative_path = relative_path
                    keywords = Common.get_keywords_from_path(relative_path)
                    keywords = " ".join(keywords)
                    sobj.set_value("keywords", keywords)

                sobj.commit()
                search_key = sobj.get_search_key()
            else:
                search_key = sobj.get("__search_key__")

            #task = server.create_task(sobj.get('__search_key__'),process='publish')
            #server.update(task, {'status': 'New'})

            server_return_value = server.simple_checkin(
                search_key,
                context,
                file_path,
                description=description,
                mode='move')

            if watch_script_path:
                cmd = PythonCmd(script_path=watch_script_path,
                                search_type=search_type,
                                drop_path=file_path,
                                search_key=search_key)
                cmd.execute()

        except Exception, e:
            print "Error occurred", e
            error_message = str(e)

            import traceback
            tb = sys.exc_info()[2]
            stacktrace = traceback.format_tb(tb)
            stacktrace_str = "".join(stacktrace)
            print "-" * 50
            print stacktrace_str

            version_num = 'Error:'
            system_time = strftime("%Y/%m/%d %H:%M", gmtime())
            pre_log=file_name+(50-len(file_name))*' '+system_time+(33-len(system_time))*' '+version_num+(15-len(version_num))*' ' +error_message+'\n'\
                    + stacktrace_str + '\n' + watch_script_path
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            #server.abort()
            transaction.rollback()
            raise
コード例 #28
0
import tacticenv, time
from client.tactic_client_lib import TacticServerStub
doing = open('what_have_i_done', 'w')
server = TacticServerStub.get(protocol="xmlrpc")
#server.start('CALCULATING COSTS')
orders = server.eval("@SOBJECT(twog/order['@ORDER_BY','code desc']['id','<','%s'])" % 12044)
#print "orders = %s" % orders
for order in orders:
    id = int(order.get('code').split('ORDER')[1].lstrip('0'))
    sk = ''
    order_code = order.get('code')
    #print "ORDER CODE = %s" % order_code
    doing.write('\t\t\t\t\tORDER CODE: %s\n' % order_code)
    order = server.eval("@SOBJECT(twog/order['code','%s'])" % order_code)[0]
    order_dict = {'actual_cost': 0, 'expected_cost': 0, 'titles':{}}
    #time.sleep(1)
    titles = server.eval("@SOBJECT(twog/title['order_code','%s'])" % order_code)
    for title in titles:
	title_code = title.get('code')
	order_dict['titles'][title_code] = {'actual_cost': 0, 'expected_cost': 0, 'projs': {}}
        #time.sleep(1)
	projs = server.eval("@SOBJECT(twog/proj['title_code','%s'])" % title_code)
	for proj in projs:
	    proj_code = proj.get('code')
	    order_dict['titles'][title_code]['projs'][proj_code] = {'actual_cost': 0, 'expected_cost': 0, 'wos': {}}
            #time.sleep(1)
	    wos = server.eval("@SOBJECT(twog/work_order['proj_code','%s'])" % proj_code)
	    for wo in wos:
		wo_code = wo.get('code')
		estimated_work_hours = wo.get('estimated_work_hours')
		work_group = wo.get('work_group')
コード例 #29
0
ファイル: create_template.py プロジェクト: PaulDoessel/tactic
    if len(args) == 0:
        print "Must supply a project code. Usually it's the name of the file before the version number."
        print "python create_template.py -m create -t template <project_code>"
        print "python create_template.py -m install -f /tmp/some_template-1.0.0.zip <project_code>"
        print "python create_template.py -m install -t <template_project_code> <project_code>"
        sys.exit(0)


    project_code = args[0]


    try:
        if options.mode == 'create':
            create(project_code)
        elif options.mode == 'install':
            path = options.file_path
            if path:
                server = TacticServerStub.get()
                server.upload_file(path)
            template_code = options.template
            install(project_code, path=path, template_code=template_code)
        else :
            print "Mode [%s] not support.  Must be either create or install" % options.get("mode")
            sys.exit(0)
    except TacticException, e:
        print
        print e.__str__()
        sys.exit(2)


コード例 #30
0
 def init(my):
     from client.tactic_client_lib import TacticServerStub
     my.order_code = None
     my.order_name = None
     my.server = TacticServerStub.get()
コード例 #31
0
 def __init__(self, **kwargs):
     super(IMDBImageAssociatorCmd, self).__init__(**kwargs)
     self.orders = str(kwargs.get('orders_to_associate')).split(',')
     self.server = TacticServerStub.get()
コード例 #32
0
 def init(my):
     my.server = TacticServerStub.get()
     my.sob_code = ''
     my.st = ''
     my.open_type = ''
     my.name = ''
コード例 #33
0
ファイル: watch_drop_folder.py プロジェクト: mincau/TACTIC
    def execute(self):

        file_path = self.kwargs.get("path")
        site = self.kwargs.get("site")
        project_code = self.kwargs.get("project_code")
        base_dir = self.kwargs.get("base_dir")
        search_type = self.kwargs.get("search_type")
        process = self.kwargs.get("process")
        watch_script_path = self.kwargs.get("script_path")
        if not process:
            process = "publish"

        basename = os.path.basename(file_path)

        context = self.kwargs.get("context")
        if not context:
            context = '%s/%s'  % (process, basename)


        # find the relative_dir and relative_path
        relative_path = file_path.replace("%s/" % base_dir, "")
        relative_dir = os.path.dirname(relative_path)

        file_name = os.path.basename(file_path)
        log_path = '%s/TACTIC_log.txt' %(base_dir)
        self.create_checkin_log()

        # Define asset type of the file
        asset_type = self.get_asset_type(file_path)
        description = "drop folder check-in of %s" %file_name

        from client.tactic_client_lib import TacticServerStub
        server = TacticServerStub.get(protocol='local')
        server.set_project(project_code)

        transaction = Transaction.get(create=True)
        server.start(title='Check-in of media', description='Check-in of media')

        server_return_value = {}

        try:
            filters = [
                    [ 'name', '=', file_name ],
                    #[ 'relative_dir', '=', relative_dir ]
                ]
            sobj = server.query(search_type, filters=filters, single=True)

            if not sobj:
                # create sobject if it does not yet exist
                sobj = SearchType.create(search_type)
                if SearchType.column_exists(search_type, "name"):
                    sobj.set_value("name", basename)
                if SearchType.column_exists(search_type, "media_type"):
                    sobj.set_value("media_type", asset_type)


                if SearchType.column_exists(search_type, "relative_dir"):
                    sobj.set_value("relative_dir", relative_dir)

                if SearchType.column_exists(search_type, "keywords"):
                    relative_path = relative_path
                    keywords = Common.extract_keywords_from_path(relative_path)
                    keywords = " ".join( keywords )
                    sobj.set_value("keywords", keywords)

                sobj.commit()
                search_key = sobj.get_search_key()
            else:
                search_key = sobj.get("__search_key__")


            #task = server.create_task(sobj.get('__search_key__'),process='publish')
            #server.update(task, {'status': 'New'})
            
            """
            #TEST: simulate different check-in duration
            from random import randint
            sec = randint(1, 5)
            print "checking in for ", sec, "sec"
            server.eval("@SOBJECT(sthpw/login)")
            import shutil
            dir_name,base_name = os.path.split(file_path)
            dest_dir = 'C:/ProgramData/Southpaw/watch_temp'
            if not os.path.exists(dest_dir):
                os.makedirs(dest_dir)
            shutil.move(file_path, '%s/%s'%(dest_dir, base_name))
            time.sleep(sec)
            # move back the file in a few seconds 
            shutil.move('%s/%s'%(dest_dir, base_name), file_path)
            """
            server_return_value = server.simple_checkin(search_key,  context, file_path, description=description, mode='move')

            if watch_script_path:
                cmd = PythonCmd(script_path=watch_script_path,search_type=search_type,drop_path=file_path,search_key=search_key)
                cmd.execute()



            
        except Exception as e:
            print "Error occurred", e
            error_message=str(e)

            import traceback
            tb = sys.exc_info()[2]
            stacktrace = traceback.format_tb(tb)
            stacktrace_str = "".join(stacktrace)
            print "-"*50
            print stacktrace_str


            version_num='Error:'
            system_time=strftime("%Y/%m/%d %H:%M", gmtime())
            pre_log=file_name+(50-len(file_name))*' '+system_time+(33-len(system_time))*' '+version_num+(15-len(version_num))*' ' +error_message+'\n'\
                    + stacktrace_str + '\n' + watch_script_path
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            #server.abort()
            transaction.rollback()
            raise
        
        else:
            transaction.commit()
        
        #server.finish()

        if server_return_value:
            # Create the TACTIC_log file to record every check-in. 
            # Search for all required data
            checkin_time=server_return_value.get('timestamp')
            version_nu=server_return_value.get('version')
            version_num=str(version_nu)
            try:
                value = parser.parse(checkin_time)
                value = value.strftime("%Y/%m/%d %H:%M")
            except:
                value = checkin_time

            pre_log=file_name+(50-len(file_name))*' '+value+(33-len(value))*' '+version_num+(15-len(version_num))*' ' +'ok\n'      
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            # Invoke Trigger:called_triggers
            from pyasm.command import Trigger
            Trigger.call_all_triggers()

            # Delete the source file after check-in step.
            print "File handled."
            if os.path.exists(file_path):
                if os.path.isdir(file_path):
                    os.rmdirs(file_path)
                else:
                    os.unlink(file_path)
                print "Source file [%s] deleted: " %file_name
コード例 #34
0
    def execute(self):

        file_path = self.kwargs.get("path")
        site = self.kwargs.get("site")
        project_code = self.kwargs.get("project_code")
        base_dir = self.kwargs.get("base_dir")
        search_type = self.kwargs.get("search_type")
        process = self.kwargs.get("process")
        watch_script_path = self.kwargs.get("script_path")
        if not process:
            process = "publish"

        basename = os.path.basename(file_path)

        context = self.kwargs.get("context")
        if not context:
            context = '%s/%s' % (process, basename)

        # find the relative_dir and relative_path
        relative_path = file_path.replace("%s/" % base_dir, "")
        relative_dir = os.path.dirname(relative_path)

        file_name = os.path.basename(file_path)
        log_path = '%s/TACTIC_log.txt' % (base_dir)
        self.create_checkin_log()

        # Define asset type of the file
        asset_type = self.get_asset_type(file_path)
        description = "drop folder check-in of %s" % file_name

        from client.tactic_client_lib import TacticServerStub
        server = TacticServerStub.get(protocol='local')
        server.set_project(project_code)

        transaction = Transaction.get(create=True)
        server.start(title='Check-in of media',
                     description='Check-in of media')

        server_return_value = {}

        try:
            filters = [
                ['name', '=', file_name],
                #[ 'relative_dir', '=', relative_dir ]
            ]
            sobj = server.query(search_type, filters=filters, single=True)

            if not sobj:
                # create sobject if it does not yet exist
                sobj = SearchType.create(search_type)
                if SearchType.column_exists(search_type, "name"):
                    sobj.set_value("name", basename)
                if SearchType.column_exists(search_type, "media_type"):
                    sobj.set_value("media_type", asset_type)

                if SearchType.column_exists(search_type, "relative_dir"):
                    sobj.set_value("relative_dir", relative_dir)

                if SearchType.column_exists(search_type, "keywords"):
                    relative_path = relative_path
                    keywords = Common.extract_keywords_from_path(relative_path)
                    keywords = " ".join(keywords)
                    sobj.set_value("keywords", keywords)

                sobj.commit()
                search_key = sobj.get_search_key()
            else:
                search_key = sobj.get("__search_key__")

            #task = server.create_task(sobj.get('__search_key__'),process='publish')
            #server.update(task, {'status': 'New'})
            """
            #TEST: simulate different check-in duration
            from random import randint
            sec = randint(1, 5)
            print "checking in for ", sec, "sec"
            server.eval("@SOBJECT(sthpw/login)")
            import shutil
            dir_name,base_name = os.path.split(file_path)
            dest_dir = 'C:/ProgramData/Southpaw/watch_temp'
            if not os.path.exists(dest_dir):
                os.makedirs(dest_dir)
            shutil.move(file_path, '%s/%s'%(dest_dir, base_name))
            time.sleep(sec)
            # move back the file in a few seconds 
            shutil.move('%s/%s'%(dest_dir, base_name), file_path)
            """
            server_return_value = server.simple_checkin(
                search_key,
                context,
                file_path,
                description=description,
                mode='move')

            if watch_script_path:
                cmd = PythonCmd(script_path=watch_script_path,
                                search_type=search_type,
                                drop_path=file_path,
                                search_key=search_key)
                cmd.execute()

        except Exception as e:
            print "Error occurred", e
            error_message = str(e)

            import traceback
            tb = sys.exc_info()[2]
            stacktrace = traceback.format_tb(tb)
            stacktrace_str = "".join(stacktrace)
            print "-" * 50
            print stacktrace_str

            version_num = 'Error:'
            system_time = strftime("%Y/%m/%d %H:%M", gmtime())
            pre_log=file_name+(50-len(file_name))*' '+system_time+(33-len(system_time))*' '+version_num+(15-len(version_num))*' ' +error_message+'\n'\
                    + stacktrace_str + '\n' + watch_script_path
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            #server.abort()
            transaction.rollback()
            raise

        else:
            transaction.commit()

        #server.finish()

        if server_return_value:
            # Create the TACTIC_log file to record every check-in.
            # Search for all required data
            checkin_time = server_return_value.get('timestamp')
            version_nu = server_return_value.get('version')
            version_num = str(version_nu)
            try:
                value = parser.parse(checkin_time)
                value = value.strftime("%Y/%m/%d %H:%M")
            except:
                value = checkin_time

            pre_log = file_name + (50 - len(file_name)) * ' ' + value + (
                33 - len(value)) * ' ' + version_num + (
                    15 - len(version_num)) * ' ' + 'ok\n'
            # Write data into TACTIC_log file under /tmp/drop
            f = open(log_path, 'a')
            f.write(pre_log)
            f.close()

            # Invoke Trigger:called_triggers
            from pyasm.command import Trigger
            Trigger.call_all_triggers()

            # Delete the source file after check-in step.
            print "File handled."
            if os.path.exists(file_path):
                if os.path.isdir(file_path):
                    os.rmdirs(file_path)
                else:
                    os.unlink(file_path)
                print "Source file [%s] deleted: " % file_name
コード例 #35
0
 def init(my):
     my.server = TacticServerStub.get()
     my.sk = ''
     my.code = ''
     my.name = ''