Beispiel #1
0
    def _process_task(my, task, mode):
        project = Project.get_project_code()
        if not task.kwargs.get("user"):
            user = Environment.get_user_name()
        if not task.kwargs.get("project"):
            project_code = Project.get_project_code()
            task.kwargs['project'] = project_code

        task.kwargs['mode'] = mode
Beispiel #2
0
    def _process_task(my, task, mode):
        project = Project.get_project_code()
        if not task.kwargs.get("user"):
            user = Environment.get_user_name()
        if not task.kwargs.get("project"):
            project_code = Project.get_project_code()
            task.kwargs['project'] = project_code

        task.kwargs['mode'] = mode
Beispiel #3
0
    def copy_sobject(my, sobject, dst_search_type, context=None, checkin_mode='inplace'):

        new_sobject = SearchType.create(dst_search_type)
        search_type = SearchType.get(dst_search_type)
        columns = SearchType.get_columns(dst_search_type)

        data = sobject.get_data()
        for name, value in data.items():
            if name in ['id','pipeline_code']:
                continue

            if name not in columns:
                continue

            if not value:
                continue

            if name == "code":
                value = Common.get_next_sobject_code(sobject, 'code')
                if not value:
                    continue
            new_sobject.set_value(name, value)
        if SearchType.column_exists(dst_search_type, "project_code"):
            project_code = Project.get_project_code()
            new_sobject.set_value("project_code", project_code)
        new_sobject.commit()



        # get all of the current snapshots and file paths associated
        if not context:
            snapshots = Snapshot.get_all_current_by_sobject(sobject)
        else:
            snapshots = [Snapshot.get_current_by_sobject(sobject, context)]

        if not snapshots:
            return

        msgs = []
        for snapshot in snapshots:
            #file_paths = snapshot.get_all_lib_paths()
            file_paths_dict = snapshot.get_all_paths_dict()
            file_types = file_paths_dict.keys()
            if not file_types:
                continue

            # make sure the paths match the file_types
            file_paths = [file_paths_dict.get(x)[0] for x in file_types]

            mode = checkin_mode

            # checkin the files (inplace)
            try:
                context = snapshot.get_value('context')
                checkin = FileCheckin(new_sobject, context=context, file_paths=file_paths, file_types=file_types, mode=mode)
                checkin.execute()

                #print "done: ", context, new_sobject.get_related_sobjects("sthpw/snapshot")
            except CheckinException, e:
                msgs.append('Post-process Check-in Error for %s: %s ' %(context, e.__str__()))
Beispiel #4
0
    def execute(self):

        self.base_dir = self.kwargs.get("base_dir")
        if not self.base_dir:
            self.base_dir = Environment.get_template_dir()


        self.project_code = self.kwargs.get("project_code")
        if not self.project_code:
            self.project_code = Project.get_project_code()

        assert self.project_code

        # project code can be called anything, and we want to have a _template suffix for the template code
        #self.plugin_code = "%s_template" % self.project_code

        #self.template_project_code = re.sub( '_template$', '', self.plugin_code)
        self.template_project_code = self.project_code
        self.project = Project.get_by_code(self.project_code)
        if not self.project:
            raise TacticException('This project [%s] does not exist'%self.project_code)

        self.project_type = self.project.get_value("type")
        if not self.project_type:
            self.project_type = self.project_code
        Project.set_project(self.project_code)

        self.export_template()
Beispiel #5
0
    def get_display(self):

        web = WebContainer.get_web()
        user = WebContainer.get_user_name()
        local_dir = web.get_local_dir()
        context_url = web.get_site_context_url().to_string()
        server = web.get_base_url().to_string()
        upload_url = web.get_upload_url()

        html = Html()
        html.writeln('<script language="JavaScript" src="resource:///res/RunHCommand.js"></script>')

        html.writeln('''\n<script>try{ app = new PyHoudini(); }
                                catch(e){
                                    app = null;}
        if (app) {
            app.user = '******';
            app.local_dir = '%(local_dir)s';
            app.context_url = '%(context_url)s';
            app.base_url = '%(server)s';
            app.upload_url = '%(upload_url)s';
            app.project_code = '%(project_code)s';} </script>'''%{'user': user,
                                           'local_dir': local_dir,
                                           'context_url' : context_url,
                                           'server': server,
                                           'upload_url':  upload_url,
                                           'project_code':  Project.get_project_code()})
        return html
Beispiel #6
0
    def copy_sobject(self, sobject, dst_search_type, context=None, checkin_mode='inplace'):

        new_sobject = SearchType.create(dst_search_type)
        search_type = SearchType.get(dst_search_type)
        columns = SearchType.get_columns(dst_search_type)

        data = sobject.get_data()
        for name, value in data.items():
            if name in ['id','pipeline_code']:
                continue

            if name not in columns:
                continue

            if not value:
                continue

            if name == "code":
                value = Common.get_next_sobject_code(sobject, 'code')
                if not value:
                    continue
            new_sobject.set_value(name, value)
        if SearchType.column_exists(dst_search_type, "project_code"):
            project_code = Project.get_project_code()
            new_sobject.set_value("project_code", project_code)
        new_sobject.commit()



        # get all of the current snapshots and file paths associated
        if not context:
            snapshots = Snapshot.get_all_current_by_sobject(sobject)
        else:
            snapshots = [Snapshot.get_current_by_sobject(sobject, context)]

        if not snapshots:
            return

        msgs = []
        for snapshot in snapshots:
            #file_paths = snapshot.get_all_lib_paths()
            file_paths_dict = snapshot.get_all_paths_dict()
            file_types = file_paths_dict.keys()
            if not file_types:
                continue

            # make sure the paths match the file_types
            file_paths = [file_paths_dict.get(x)[0] for x in file_types]

            mode = checkin_mode

            # checkin the files (inplace)
            try:
                context = snapshot.get_value('context')
                checkin = FileCheckin(new_sobject, context=context, file_paths=file_paths, file_types=file_types, mode=mode)
                checkin.execute()

                #print "done: ", context, new_sobject.get_related_sobjects("sthpw/snapshot")
            except CheckinException, e:
                msgs.append('Post-process Check-in Error for %s: %s ' %(context, e.__str__()))
Beispiel #7
0
    def get_display(my):
        widget = DivWdg()

        my.set_as_panel(widget, class_name='spt_view_panel spt_panel')
 
        # create a table widget and set the sobjects to it
        table_id = "main_body_table" 
        filter = my.kwargs.get('filter')
        table = TableLayoutWdg(table_id=table_id, search_type="sthpw/timecard", \
                view="table", inline_search=True, filter=filter, search_view='search' ) 

       
        search_type = "sthpw/timecard"
        from tactic.ui.app import SearchWdg
        
        search_wdg = SearchWdg(search_type=search_type, view='search', filter=filter)
        
        widget.add(search_wdg)
        search = search_wdg.get_search()

        # FIX to current project timecard for now
        search.add_filter('project_code', Project.get_project_code())
        #search.add_project_filter()

        table.alter_search(search)
        print "SEA ", search.get_statement()
        sobjects = search.get_sobjects()
        print "SOB ", sobjects
        table.set_sobjects(sobjects, search)
        widget.add(table)
        #widget.add(SpecialDayWdg())
        return widget
Beispiel #8
0
    def clear_db_cache(cls):
        Container.put(cls.KEY, None)

        from pyasm.biz import Project
        project_code = Project.get_project_code()
        key = "%s:%s" % (cls.KEY, project_code)
        Container.put(key, None)
Beispiel #9
0
    def execute(my):

        my.base_dir = my.kwargs.get("base_dir")
        if not my.base_dir:
            my.base_dir = Environment.get_template_dir()

        my.project_code = my.kwargs.get("project_code")
        if not my.project_code:
            my.project_code = Project.get_project_code()

        assert my.project_code

        # project code can be called anything, and we want to have a _template suffix for the template code
        #my.plugin_code = "%s_template" % my.project_code

        #my.template_project_code = re.sub( '_template$', '', my.plugin_code)
        my.template_project_code = my.project_code
        my.project = Project.get_by_code(my.project_code)
        if not my.project:
            raise TacticException('This project [%s] does not exist' %
                                  my.project_code)

        my.project_type = my.project.get_value("type")
        if not my.project_type:
            my.project_type = my.project_code
        Project.set_project(my.project_code)

        my.export_template()
Beispiel #10
0
    def get(cls, texture_code, parent_code, project_code=None, is_multi=False):
        if not project_code:
            project_code = Project.get_project_code()
        search = Search(cls.SEARCH_TYPE, project_code)

        #search.set_show_retired(True)

        if texture_code:
            search.add_filter('code', texture_code)

        # backward compatible with using shot code
        if isinstance(parent_code, basestring):
            from pyasm.prod.biz import Shot
            parent = Shot.get_by_code(parent_code)
        else:
            parent = parent_code
        if not parent:
            if is_multi:
                return []
            else:
                return None

        search.add_filter('search_type', parent.get_search_type())
        search.add_filter('search_id', parent.get_id())
        parent_key = SearchKey.get_by_sobject(parent)

        search_type = search.get_search_type()
        key = "%s|%s|%s" % (search_type, texture_code, parent_key)
        sobj = cls.get_by_search(search, key, is_multi=is_multi)

        return sobj
Beispiel #11
0
    def get_defaults(self):
        '''specifies the defaults for this sobject'''
        project_code = Project.get_project_code()
        me = Environment.get_user_name()
        defaults = {"project_code": project_code, "login": me}

        return defaults
Beispiel #12
0
    def get_to(my):
        recipients = super(GeneralPublishEmailHandler, my).get_to()
        sobj = my.sobject

        search = Search(Task)

        search_type = sobj.get_search_type()

        search_id = sobj.get_id()

        search.add_filter('search_type', search_type)
        search.add_filter('search_id', search_id)
        # it will get the context if process not found
        #search.add_filter('process', note.get_process())
        from pyasm.biz import Project
        search.add_filter('project_code', Project.get_project_code())
        tasks = search.get_sobjects()
        for task in tasks:
            assigned = my._get_login(task.get_assigned())
            if assigned:
                recipients.add(assigned)
            supe = my._get_login(task.get_supervisor())
            if supe:
                recipients.add(supe)
        return recipients
Beispiel #13
0
    def get_display(self):

        web = WebContainer.get_web()
        user = WebContainer.get_user_name()
        local_dir = web.get_local_dir()
        context_url = web.get_site_context_url().to_string()
        server = web.get_base_url().to_string()
        upload_url = web.get_upload_url()

        html = Html()
        html.writeln(
            '<script language="JavaScript" src="resource:///res/RunHCommand.js"></script>'
        )

        html.writeln(
            '''\n<script>try{ app = new PyHoudini(); }
                                catch(e){
                                    app = null;}
        if (app) {
            app.user = '******';
            app.local_dir = '%(local_dir)s';
            app.context_url = '%(context_url)s';
            app.base_url = '%(server)s';
            app.upload_url = '%(upload_url)s';
            app.project_code = '%(project_code)s';} </script>''' % {
                'user': user,
                'local_dir': local_dir,
                'context_url': context_url,
                'server': server,
                'upload_url': upload_url,
                'project_code': Project.get_project_code()
            })
        return html
Beispiel #14
0
    def execute(self):

        # save prefix
        local_prefix = self.get_value("local_prefix")
        self.server_prefix = Config.get_value("install", "server")

        if not local_prefix and not self.server_prefix:
            raise TacticException("Cannot have empty local server prefix")

        if local_prefix and local_prefix != self.server_prefix:
            Config.set_value("install", "server", local_prefix)

            Config.save_config()

        self.project_code = self.get_value("project")
        if not self.project_code:
            self.project_code = Project.get_project_code()


        # create a share
        share = SearchType.create("sthpw/sync_server")
        self.handle_info(share)
        self.handle_sync_mode(share)

        share.commit()
Beispiel #15
0
    def get_to(my):
        recipients = super(GeneralPublishEmailHandler, my).get_to()
        sobj = my.sobject

        search = Search(Task)
        
        search_type = sobj.get_search_type()
        
        search_id = sobj.get_id()
       
        search.add_filter('search_type', search_type)
        search.add_filter('search_id', search_id )
        # it will get the context if process not found
        #search.add_filter('process', note.get_process())
        from pyasm.biz import Project
        search.add_filter('project_code', Project.get_project_code())
        tasks = search.get_sobjects()
        for task in tasks:
            assigned = my._get_login(task.get_assigned())
            if assigned:
                recipients.add(assigned)
            supe = my._get_login(task.get_supervisor())
            if supe:
                recipients.add(supe)
        return recipients
Beispiel #16
0
    def postprocess(self):
        web = WebContainer.get_web()
        values = web.get_form_values("select_key")
        if not values or values == ['']:
            return

        dst_sobject = self.sobject

        project_code = Project.get_project_code()

        for value in values:
            src_sobject = Search.get_by_search_key(value)
            if not src_sobject:
                continue
            connection = SearchType.create("sthpw/connection")
            connection.set_value("src_search_type",
                                 src_sobject.get_search_type())
            connection.set_value("dst_search_type",
                                 dst_sobject.get_search_type())
            connection.set_value("src_search_id", src_sobject.get_id())
            connection.set_value("dst_search_id", dst_sobject.get_id())
            connection.set_value("context", "reference")
            connection.set_value("project_code", project_code)

            connection.commit()
Beispiel #17
0
    def execute(self):

        self.base_dir = self.kwargs.get("base_dir")
        if not self.base_dir:
            self.base_dir = Environment.get_template_dir()

        self.project_code = self.kwargs.get("project_code")
        if not self.project_code:
            self.project_code = Project.get_project_code()

        assert self.project_code

        # project code can be called anything, and we want to have a _template suffix for the template code
        #self.plugin_code = "%s_template" % self.project_code

        #self.template_project_code = re.sub( '_template$', '', self.plugin_code)
        self.template_project_code = self.project_code
        self.project = Project.get_by_code(self.project_code)
        if not self.project:
            raise TacticException('This project [%s] does not exist' %
                                  self.project_code)

        self.project_type = self.project.get_value("type")
        if not self.project_type:
            self.project_type = self.project_code
        Project.set_project(self.project_code)

        self.export_template()
Beispiel #18
0
    def clear_db_cache(cls):
        Container.put(cls.KEY, None)

        from pyasm.biz import Project
        project_code = Project.get_project_code()
        key = "%s:%s" % (cls.KEY, project_code)
        Container.put(key, None)
Beispiel #19
0
    def _get_result(my, sobject):

        # get the parent or relation
        column = my.get_column()
        parent_id = sobject.get_value(column)
        parent = my.parents_dict.get(parent_id)
        if not parent:
            return super(ForeignKeyElementWdg,my).get_display()


        template = my.get_option('template')
        # if not set, then look at the schema
        if not template:
            schema = Schema.get_by_project_code( Project.get_project_code() )
            search_type = parent.get_base_search_type()
            template = schema.get_attr_by_search_type(search_type,'display_template')

        if template:
            value = NamingUtil.eval_template(template, sobject, parent=parent)
        else:
            # NOTE: put something ... anything as a default
            columns = parent.get_search_type_obj().get_columns()
            if not len(columns):
                value = parent.get_value(columns[0])
            else:
                value = parent.get_value(columns[1])

        return value
Beispiel #20
0
    def get_db_triggers(cls):

        site_triggers = Container.get(cls.KEY)
        if site_triggers == None:
            # find all of the triggers
            search = Search("sthpw/trigger")
            search.add_project_filter()
            site_triggers = search.get_sobjects()
            Container.put(cls.KEY, site_triggers)

        # find all of the project triggers
        from pyasm.biz import Project
        project_code = Project.get_project_code()
        key = "%s:%s" % (cls.KEY, project_code)
        project_triggers = Container.get(key)
        if project_triggers == None:
            if project_code not in ['admin', 'sthpw']:
                try:
                    search = Search("config/trigger")
                    project_triggers = search.get_sobjects()
                except SearchException, e:
                    print "WARNING: ", e
                    project_triggers = []
            else:
                project_triggers = []
            Container.put(key, project_triggers)
Beispiel #21
0
    def get_security_wdg(my):

        div = DivWdg()
        div.add_class("spt_security")

        div.add(
            "A server can sync either be scoped for a single project or all projects.  Transactions that occur in the admin project never get synced."
        )

        div.add("<br/>" * 2)

        div.add("Project: ")

        search = Search("sthpw/project")
        search.add_filters("code", ['admin', 'unittest'], op='not in')
        search.add_order_by("title")
        projects = search.get_sobjects()

        select = SelectWdg("projects")
        div.add(select)
        labels = [x.get_value("title") for x in projects]
        values = [x.get_value("code") for x in projects]

        project_code = Project.get_project_code()
        if project_code != 'admin':
            select.set_value(project_code)
        select.set_option("labels", labels)
        select.set_option("values", values)
        select.add_empty_option("-- All --")

        div.add("<br/>" * 2)

        return div
Beispiel #22
0
    def get_security_wdg(self):

        div = DivWdg()
        div.add_class("spt_security")

        div.add("A server can sync either be scoped for a single project or all projects.  Transactions that occur in the admin project never get synced.")

        div.add("<br/>"*2)

        div.add("Project: ")

        search = Search("sthpw/project")
        search.add_filters("code", ['admin','unittest'], op='not in')
        search.add_order_by("title")
        projects = search.get_sobjects()

        select = SelectWdg("projects")
        div.add(select)
        labels = [x.get_value("title") for x in projects]
        values = [x.get_value("code") for x in projects]

        project_code = Project.get_project_code()
        if project_code != 'admin':
            select.set_value(project_code)
        select.set_option("labels", labels)
        select.set_option("values", values)
        select.add_empty_option("-- All --")


        div.add("<br/>"*2)

        return div
Beispiel #23
0
    def get_db_triggers(cls):

        site_triggers = Container.get(cls.KEY)
        if site_triggers == None:
            # find all of the triggers
            search = Search("sthpw/trigger")
            search.add_project_filter()
            site_triggers = search.get_sobjects()
            Container.put(cls.KEY, site_triggers)

        # find all of the project triggers
        from pyasm.biz import Project
        project_code = Project.get_project_code()
        key = "%s:%s" % (cls.KEY, project_code)
        project_triggers = Container.get(key)
        if project_triggers == None:
            if project_code not in ['admin','sthpw']:
                try:
                    search = Search("config/trigger")
                    project_triggers = search.get_sobjects()
                except SearchException, e:
                    print "WARNING: ", e
                    project_triggers = []
            else:
                project_triggers = []
            Container.put(key, project_triggers)
Beispiel #24
0
    def get_display(my):

        web = WebContainer.get_web()
        user = WebContainer.get_user_name()
        local_dir = web.get_local_dir()
        context_url = web.get_site_context_url().to_string()
        server = web.get_base_url().to_string()
        upload_url = web.get_upload_url()

        html = Html()

        html.writeln('''\n<script>try{ app = new PyXSI(); }
                                catch(e){
                                    app = null;}
        if (app) {
            app.user = '******';
            app.local_dir = '%(local_dir)s';
            app.context_url = '%(context_url)s';
            app.base_url = '%(server)s';
            app.upload_url = '%(upload_url)s';
            app.project_code = '%(project_code)s';} </script>'''%{'user': user,
                                           'local_dir': local_dir,
                                           'context_url' : context_url,
                                           'server': server,
                                           'upload_url':  upload_url,
                                           'project_code':  Project.get_project_code()})
                            


        return html
Beispiel #25
0
    def add(command, kwargs, queue_type, priority, description, message_code=None):

        queue = SearchType.create("sthpw/queue")
        queue.set_value("project_code", Project.get_project_code())
        #queue.set_sobject_value(sobject)

        if not queue_type:
            queue_type = "default"
        queue.set_value("queue", queue_type)

        queue.set_value("state", "pending")

        queue.set_value("login", Environment.get_user_name())

        queue.set_value("command", command)
        data = jsondumps(kwargs)
        queue.set_value("data", data)

        if message_code:
            queue.set_value("message_code", message_code)


        if not priority:
            priority = 9999
        queue.set_value("priority", priority)

        if description:
            queue.set_value("description", description)

        queue.set_user()
        queue.commit()

        return queue
Beispiel #26
0
    def execute(my):

        my.base_dir = my.kwargs.get("base_dir")
        if not my.base_dir:
            my.base_dir = Environment.get_template_dir()


        my.project_code = my.kwargs.get("project_code")
        if not my.project_code:
            my.project_code = Project.get_project_code()

        assert my.project_code

        # project code can be called anything, and we want to have a _template suffix for the template code
        #my.plugin_code = "%s_template" % my.project_code

        #my.template_project_code = re.sub( '_template$', '', my.plugin_code)
        my.template_project_code = my.project_code
        my.project = Project.get_by_code(my.project_code)
        if not my.project:
            raise TacticException('This project [%s] does not exist'%my.project_code)

        my.project_type = my.project.get_value("type")
        if not my.project_type:
            my.project_type = my.project_code
        Project.set_project(my.project_code)

        my.export_template()
Beispiel #27
0
    def get_notification_wdg(my):

        widget = Widget()

        nav = DivWdg(css="filter_box")
        widget.add(nav)

        search_filter = SearchFilterWdg(columns=['subject', 'message'])
        nav.add(search_filter)

        project_code = Project.get_project_code()
        user_name = Environment.get_user_name()

        # get all the notifications that were sent to you
        search = Search("sthpw/notification_login")
        search.add_filter("login", user_name)
        search.add_filter("project_code", project_code)
        #search.add_filter("type", "to")
        notification_logins = search.get_sobjects()

        notification_ids = [x.get_value("notification_log_id") for x in notification_logins]


        table = TableWdg("sthpw/notification_log")
        search = Search("sthpw/notification_log")

        search.add_filter("project_code", project_code)
        search.add_filters("id", notification_ids)

        search_filter.alter_search(search)

        table.set_search(search)
        widget.add(table)

        return widget
Beispiel #28
0
    def get_by_key(key, auto_create=True):
        login = WebContainer.get_user_name()
        dict_key = '%s:%s' % (WidgetSettings.SEARCH_TYPE, login)
        settings_dict = Container.get(dict_key)
        setting = None
        if not settings_dict:

            settings_dict = {}
            Container.put(dict_key, settings_dict)

            search = Search(WidgetSettings.SEARCH_TYPE)
            search.add_filter("project_code", Project.get_project_code())
            search.add_filter("login", login)
            settings = search.get_sobjects()
            for setting in settings:
                settings_dict[setting.get_value('key')] = setting

        setting = settings_dict.get(key)

        # autocreate if it does not exist
        if auto_create and setting == None:
            setting = WidgetSettings.create(key)

            settings_dict[setting.get_value('key')] = setting

        return setting
    def _get_result(self, sobject):

        # get the parent or relation
        column = self.get_column()
        parent_id = sobject.get_value(column)
        parent = self.parents_dict.get(parent_id)
        if not parent:
            return super(ForeignKeyElementWdg,self).get_display()


        template = self.get_option('template')
        # if not set, then look at the schema
        if not template:
            schema = Schema.get_by_project_code( Project.get_project_code() )
            search_type = parent.get_base_search_type()
            template = schema.get_attr_by_search_type(search_type,'display_template')

        if template:
            value = NamingUtil.eval_template(template, sobject, parent=parent)
        else:
            # NOTE: put something ... anything as a default
            columns = parent.get_search_type_obj().get_columns()
            if not len(columns):
                value = parent.get_value(columns[0])
            else:
                value = parent.get_value(columns[1])

        return value
Beispiel #30
0
    def add(command,
            kwargs,
            queue_type,
            priority,
            description,
            message_code=None):

        queue = SearchType.create("sthpw/queue")
        queue.set_value("project_code", Project.get_project_code())
        #queue.set_sobject_value(sobject)
        queue.set_value("queue", queue_type)
        queue.set_value("state", "pending")

        queue.set_value("login", Environment.get_user_name())

        queue.set_value("command", command)
        data = jsondumps(kwargs)
        queue.set_value("data", data)

        if message_code:
            queue.set_value("message_code", message_code)

        queue.set_value("priority", priority)
        queue.set_value("description", description)

        queue.set_user()
        queue.commit()

        return queue
Beispiel #31
0
    def get_by_key(key, auto_create=True):
        login = WebContainer.get_user_name()
        dict_key = '%s:%s' %(WidgetSettings.SEARCH_TYPE, login) 
        settings_dict = Container.get(dict_key)
        setting = None
        if not settings_dict:
            
            settings_dict = {}
            Container.put(dict_key, settings_dict)
                   
            search = Search(WidgetSettings.SEARCH_TYPE)
            search.add_filter("project_code", Project.get_project_code())
            search.add_filter("login", login)
            settings = search.get_sobjects()
            for setting in settings:
                settings_dict[setting.get_value('key')] = setting
                
        setting = settings_dict.get(key)
            
        # autocreate if it does not exist
        if auto_create and setting == None:
            setting = WidgetSettings.create(key)
            
            settings_dict[setting.get_value('key')] = setting

        return setting
Beispiel #32
0
    def get(cls, texture_code, parent_code, project_code=None, is_multi=False):
        if not project_code:
            project_code = Project.get_project_code()
        search = Search( cls.SEARCH_TYPE, project_code )
        
        #search.set_show_retired(True)
        
        if texture_code:
            search.add_filter('code', texture_code)
        
        # backward compatible with using shot code
        if isinstance(parent_code, basestring):
            from pyasm.prod.biz import Shot
            parent = Shot.get_by_code(parent_code)
        else:
            parent = parent_code
        if not parent:
            if is_multi:
                return []
            else:
                return None

        search.add_filter('search_type',  parent.get_search_type())
        search.add_filter('search_id',  parent.get_id())
        parent_key = SearchKey.get_by_sobject(parent)
        
        search_type = search.get_search_type()
        key = "%s|%s|%s" % (search_type, texture_code, parent_key)
        sobj = cls.get_by_search(search, key, is_multi=is_multi)
       
        return sobj
Beispiel #33
0
 def get_project_url(self):
     base_url = self.get_base_url()
     site_url = self.get_site_url().to_string()
     base_url.append_to_base(site_url)
     project_code = Project.get_project_code()
     base_url.append_to_base( project_code )
     return base_url
Beispiel #34
0
 def get_project_url(self):
     base_url = self.get_base_url()
     site_url = self.get_site_url().to_string()
     base_url.append_to_base(site_url)
     project_code = Project.get_project_code()
     base_url.append_to_base(project_code)
     return base_url
Beispiel #35
0
 def is_admin_page(my):
     project_code = Project.get_project_code()
     request_url = my.get_request_url()
     request_str = request_url.to_string()
     if request_str.endswith("/%s/admin" % project_code) or request_str.endswith("/admin/Index"):
         return True
     else:
         return False
Beispiel #36
0
    def get_context_data(self, search_type=None):
        '''get the list of contexts that can be checked in with this widget'''
        # usually there is no pipeline for prod/shot_instance
        #search_type = self.search_type
        labels, values = Pipeline.get_process_select_data(search_type, \
            project_code=Project.get_project_code())

        return labels, values
Beispiel #37
0
    def execute(my):
        my.search_type = my.kwargs.get("search_type")
        my.element_name = my.kwargs.get("element_name")
        assert my.search_type
        assert my.element_name

        interval = my.kwargs.get('interval')
        if not interval:
            interval = 120

        data_type = my.kwargs.get('data_type')
        if not data_type:
            data_type = 'float'

        class_name = 'tactic.ui.app.aggregate_wdg.AggregateCmd'
        priority = None

        user = Environment.get_user_name()

        # these interval jobs need to have a specific code
        code = "aggregate|%s|%s" % (my.search_type, my.element_name)

        # check to see if the job exists
        job = Search.get_by_code("sthpw/queue", code)
        if not job:
            job = SearchType.create("sthpw/queue")
            job.set_value("code", code)

            job.set_value("project_code", Project.get_project_code() )
            job.set_value("class_name", class_name)
            job.set_value("command", class_name)
            job.set_value("login", user) 
            job.set_value("queue", 'interval')

            # this is meaningless
            job.set_value("priority", 9999)

            # not sure what to do here if it already exists
            job.set_value("state", 'pending')



            # add a column to the table
            from pyasm.command import ColumnAddCmd
            from pyasm.search import AlterTable
            column_name = my.element_name
            cmd = ColumnAddCmd(my.search_type, column_name, data_type)
            cmd.execute()

            # modify the table
            #alter = AlterTable(my.search_type)
            #alter.modify(my.search_type, data_type)
            #print alter.get_statements()


        job.set_value("serialized", str(my.kwargs) )
        job.set_value("interval", interval)
        job.commit()
Beispiel #38
0
 def is_admin_page(self):
     project_code = Project.get_project_code()
     request_url = self.get_request_url()
     request_str = request_url.to_string()
     if request_str.endswith("/%s/admin" % project_code) or \
             request_str.endswith("/admin/Index"):
         return True
     else:
         return False
    def get_edit_menu(my):
        opt_spec_list = []

        security = Environment.get_security()
        project_code = Project.get_project_code()

        access_keys = my._get_access_keys("retire_delete", project_code)
        if security.check_access("builtin", access_keys, "allow"):
            if not my.layout or my.layout.can_select():
                opt_spec_list.extend(
                    [
                        {
                            "type": "action",
                            "label": "Retire Selected Items",
                            "bvr_cb": {"cbjs_action": "spt.dg_table.gear_smenu_retire_selected_cbk(evt,bvr);"},
                        },
                        {
                            "type": "action",
                            "label": "Delete Selected Items",
                            "bvr_cb": {
                                "cbjs_action": """
                    spt.dg_table.gear_smenu_delete_selected_cbk(evt,bvr);
                    """
                            },
                        },
                        {"type": "separator"},
                    ]
                )

        opt_spec_list.extend(
            [
                {
                    "type": "action",
                    "label": "Show Server Transaction Log",
                    "bvr_cb": {
                        "cbjs_action": "spt.popup.get_widget(evt, bvr)",
                        "options": {
                            "class_name": "tactic.ui.popups.TransactionPopupWdg",
                            "title": "Transaction Log",
                            "popup_id": "TransactionLog_popup",
                        },
                    },
                }
            ]
        )  # MTM TURNED OFF TO PREVENT AUTO-UNDOING
        #
        # { "type": "separator" },
        #
        # { "type": "action", "label": "Undo Last Server Transaction",
        #    "bvr_cb": {'cbjs_action': "spt.undo_cbk(evt, bvr);"}
        # },
        #
        # { "type": "action", "label": "Redo Last Server Transaction",
        #    "bvr_cb": {'cbjs_action': "spt.redo_cbk(evt, bvr);"}
        # },

        return {"menu_tag_suffix": "EDIT", "width": 200, "opt_spec_list": opt_spec_list}
Beispiel #40
0
    def get_context_data(my, search_type=None):
        '''get the list of contexts that can be checked in with this widget'''
        # usually there is no pipeline for prod/shot_instance
        #search_type = my.search_type
        labels, values = Pipeline.get_process_select_data(search_type, \
            project_code=Project.get_project_code())
        

        return labels, values
Beispiel #41
0
    def get_display(my):
        web = WebContainer.get_web()
        if not my.view:
            view = web.get_form_value("filter|view")

        # create popup
        create_popup = PopupWdg("create_action")
        create_popup.set_auto_hide(False)
        create_popup.add("Enter name of view: ")
        create_popup.add(TextWdg("create_view_name"))
        # create_popup.add( HtmlElement.br(2) )
        # create_popup.add( "Copy from template: " )
        # template_select = SelectWdg("copy_from_template")
        # template_select.add_empty_option("-- None --")
        # template_select.set_option("values", "list|summary|task")
        # create_popup.add( template_select )

        create_popup.add(HtmlElement.br(2, clear="all"))

        from pyasm.prod.web import ProdIconButtonWdg, ProdIconSubmitWdg

        create_icon = ProdIconButtonWdg("Create")

        ajax = AjaxCmd()
        ajax.register_cmd("pyasm.widget.CustomCreateViewCbk")
        ajax.add_element_name("create_view_name")
        ajax.add_element_name("auto_create_edit")
        ajax.set_option("search_type", my.search_type)
        ajax.set_option("project", Project.get_project_code())
        if my.view:
            ajax.set_option("template_view", my.view)
        create_icon.add_event(
            "onclick",
            "%s;%s"
            % (ajax.get_on_script(), "toggle_display('create_action');setTimeout('document.form.submit()',1000)"),
        )

        cancel_icon = ProdIconButtonWdg("Cancel")
        cancel_icon.add_event("onclick", "toggle_display('create_action')")

        span = SpanWdg()
        span.add(create_icon)
        span.add(cancel_icon)
        create_popup.add(span)
        create_popup.add(HtmlElement.br())

        # add the create button
        create = IconButtonWdg("Create View", IconWdg.SAVE, True)
        create.add_event("onclick", "%s" % create_popup.get_on_script())

        # lay it all out
        widget = Widget()
        widget.add(create_popup)
        # Browser does not have create
        # widget.add(create)
        return widget
Beispiel #42
0
    def get_defaults(self):
        '''specifies the defaults for this sobject'''
        project_code = Project.get_project_code()
        me = Environment.get_user_name()
        defaults = {
            "project_code": project_code,
            "login": me
        }

        return defaults
Beispiel #43
0
    def get_widget_url(self):

        url = self.get_site_url()
        url.append_to_base( "default" )
        
        project_code = Project.get_project_code()
        url.set_option("project", project_code)

        url.append_to_base("WidgetServer/")
        return url
Beispiel #44
0
    def get_widget_url(self):

        url = self.get_site_url()
        url.append_to_base("default")

        project_code = Project.get_project_code()
        url.set_option("project", project_code)

        url.append_to_base("WidgetServer/")
        return url
Beispiel #45
0
    def execute(self):
        self.search_type = self.kwargs.get("search_type")
        self.element_name = self.kwargs.get("element_name")
        assert self.search_type
        assert self.element_name

        interval = self.kwargs.get('interval')
        if not interval:
            interval = 120

        data_type = self.kwargs.get('data_type')
        if not data_type:
            data_type = 'float'

        class_name = 'tactic.ui.app.aggregate_wdg.AggregateCmd'
        priority = None

        user = Environment.get_user_name()

        # these interval jobs need to have a specific code
        code = "aggregate|%s|%s" % (self.search_type, self.element_name)

        # check to see if the job exists
        job = Search.get_by_code("sthpw/queue", code)
        if not job:
            job = SearchType.create("sthpw/queue")
            job.set_value("code", code)

            job.set_value("project_code", Project.get_project_code())
            job.set_value("class_name", class_name)
            job.set_value("command", class_name)
            job.set_value("login", user)
            job.set_value("queue", 'interval')

            # this is meaningless
            job.set_value("priority", 9999)

            # not sure what to do here if it already exists
            job.set_value("state", 'pending')

            # add a column to the table
            from pyasm.command import ColumnAddCmd
            from pyasm.search import AlterTable
            column_name = self.element_name
            cmd = ColumnAddCmd(self.search_type, column_name, data_type)
            cmd.execute()

            # modify the table
            #alter = AlterTable(self.search_type)
            #alter.modify(self.search_type, data_type)
            #print alter.get_statements()

        job.set_value("serialized", str(self.kwargs))
        job.set_value("interval", interval)
        job.commit()
    def get_display(my):
        web = WebContainer.get_web()
        if not my.view:
            view = web.get_form_value("filter|view")

        # create popup
        create_popup = PopupWdg("create_action")
        create_popup.set_auto_hide(False)
        create_popup.add("Enter name of view: ")
        create_popup.add(TextWdg("create_view_name"))
        #create_popup.add( HtmlElement.br(2) )
        #create_popup.add( "Copy from template: " )
        #template_select = SelectWdg("copy_from_template")
        #template_select.add_empty_option("-- None --")
        #template_select.set_option("values", "list|summary|task")
        #create_popup.add( template_select )

        create_popup.add(HtmlElement.br(2, clear="all"))

        from pyasm.prod.web import ProdIconButtonWdg, ProdIconSubmitWdg
        create_icon = ProdIconButtonWdg('Create')

        ajax = AjaxCmd()
        ajax.register_cmd("pyasm.widget.CustomCreateViewCbk")
        ajax.add_element_name("create_view_name")
        ajax.add_element_name("auto_create_edit")
        ajax.set_option("search_type", my.search_type)
        ajax.set_option("project", Project.get_project_code())
        if my.view:
            ajax.set_option("template_view", my.view)
        create_icon.add_event(
            "onclick", "%s;%s" %
            (ajax.get_on_script(),
             "toggle_display('create_action');setTimeout('document.form.submit()',1000)"
             ))

        cancel_icon = ProdIconButtonWdg('Cancel')
        cancel_icon.add_event("onclick", "toggle_display('create_action')")

        span = SpanWdg()
        span.add(create_icon)
        span.add(cancel_icon)
        create_popup.add(span)
        create_popup.add(HtmlElement.br())

        # add the create button
        create = IconButtonWdg("Create View", IconWdg.SAVE, True)
        create.add_event("onclick", "%s" % create_popup.get_on_script())

        # lay it all out
        widget = Widget()
        widget.add(create_popup)
        # Browser does not have create
        #widget.add(create)
        return widget
Beispiel #47
0
    def create(key):
        login = WebContainer.get_login().get_login() 

        settings = SObjectFactory.create(WidgetSettings.SEARCH_TYPE)
        settings.set_value("key",key)
        settings.set_value("login",login)
        settings.set_value("data","")
        settings.set_value("project_code", Project.get_project_code())
        settings.commit(triggers=False) 

        return settings
Beispiel #48
0
    def create(key):
        login = WebContainer.get_login().get_login()

        settings = SObjectFactory.create(WidgetSettings.SEARCH_TYPE)
        settings.set_value("key", key)
        settings.set_value("login", login)
        settings.set_value("data", "")
        settings.set_value("project_code", Project.get_project_code())
        settings.commit(triggers=False)

        return settings
Beispiel #49
0
    def check(self):
        self.search_type = self.kwargs.get("search_type")
        self.values = self.kwargs.get("values")

        self.db_resource = SearchType.get_db_resource_by_search_type(self.search_type)
        self.database = self.db_resource.get_database()
        self.search_type_obj = SearchType.get(self.search_type)
        if self.database != Project.get_project_code() and self.database !='sthpw':
            raise TacticException('You are not allowed to delete the sType [%s] from another project [%s].' %(self.search_type, self.database))
            return False
        
        return True
Beispiel #50
0
    def check(my):
        my.search_type = my.kwargs.get("search_type")
        my.values = my.kwargs.get("values")

        my.db_resource = SearchType.get_db_resource_by_search_type(my.search_type)
        my.database = my.db_resource.get_database()
        my.search_type_obj = SearchType.get(my.search_type)
        if my.database != Project.get_project_code() and my.database !='sthpw':
            raise TacticException('You are not allowed to delete the sType [%s] from another project [%s].' %(my.search_type, my.database))
            return False
        
        return True
    def get_edit_menu(my):
        opt_spec_list = []


        security = Environment.get_security()
        project_code = Project.get_project_code()

        access_keys = my._get_access_keys("retire_delete",  project_code)
        if security.check_access("builtin", access_keys, "allow"):
            if not my.layout or my.layout.can_select():
                opt_spec_list.extend([
            
                    { "type": "action", "label": "Retire Selected Items",
                        "bvr_cb": {'cbjs_action': "spt.dg_table.gear_smenu_retire_selected_cbk(evt,bvr);"}
                    },

                    { "type": "action", "label": "Delete Selected Items",
                            "bvr_cb": {'cbjs_action': '''
                    spt.dg_table.gear_smenu_delete_selected_cbk(evt,bvr);
                    '''}
                    },

                    {"type": "separator"}

                ])



        opt_spec_list.extend([

            { "type": "action", "label": "Show Server Transaction Log",
                "bvr_cb": {
                    'cbjs_action': "spt.popup.get_widget(evt, bvr)",
                    'options': {
                        'class_name': 'tactic.ui.popups.TransactionPopupWdg',
                        'title': 'Transaction Log',
                        'popup_id': 'TransactionLog_popup'
                    }
                }
            },

            { "type": "separator" },

            { "type": "action", "label": "Undo Last Server Transaction",
                "bvr_cb": {'cbjs_action': "spt.undo_cbk(evt, bvr);"}
            },

            { "type": "action", "label": "Redo Last Server Transaction",
                "bvr_cb": {'cbjs_action': "spt.redo_cbk(evt, bvr);"}
            },

        ])
        return { 'menu_tag_suffix': 'EDIT', 'width': 200, 'opt_spec_list': opt_spec_list}
Beispiel #52
0
    def check(my):
        my.search_type = my.kwargs.get("search_type")
        my.values = my.kwargs.get("values")

        my.db_resource = SearchType.get_db_resource_by_search_type(my.search_type)
        my.database = my.db_resource.get_database()
        my.search_type_obj = SearchType.get(my.search_type)
        if my.database != Project.get_project_code() and my.database !='sthpw':
            raise TacticException('You are not allowed to delete the sType [%s] from another project [%s].' %(my.search_type, my.database))
            return False
        
        return True
    def get_create_view_wdg(my, search_type):

        # create popup
        create_popup = PopupWdg("create_action")
        create_popup.set_auto_hide(False)
        create_popup.add("Enter name of view: ")
        create_popup.add(TextWdg("create_view_name"))
        #create_popup.add( HtmlElement.br(2) )
        #create_popup.add( "Copy from template: " )
        #template_select = SelectWdg("copy_from_template")
        #template_select.add_empty_option("-- None --")
        #template_select.set_option("values", "list|summary|task")
        #create_popup.add( template_select )
        create_popup.add(HtmlElement.br(2))
        create_popup.add(
            CheckboxWdg('auto_create_edit', label='Auto Create Edit View'))
        create_popup.add(HtmlElement.br(2, clear="all"))

        from pyasm.prod.web import ProdIconButtonWdg, ProdIconSubmitWdg
        create_icon = ProdIconButtonWdg('Create')

        ajax = AjaxCmd()
        ajax.register_cmd("pyasm.widget.CustomCreateViewCbk")
        ajax.add_element_name("create_view_name")
        ajax.add_element_name("auto_create_edit")
        ajax.set_option("search_type", search_type)
        ajax.set_option("project", Project.get_project_code())
        div = ajax.generate_div()
        div.set_post_ajax_script('document.form.submit()')
        create_icon.add_event(
            "onclick", "%s;%s" %
            (ajax.get_on_script(), "toggle_display('create_action')"))

        cancel_icon = ProdIconButtonWdg('Cancel')
        cancel_icon.add_event("onclick", "toggle_display('create_action')")

        span = SpanWdg()
        span.add(create_icon)
        span.add(cancel_icon)
        create_popup.add(span)
        create_popup.add(HtmlElement.br())

        # add the create button
        create = IconButtonWdg("Create View", IconWdg.SAVE, True)
        create.add_event("onclick", "%s" % create_popup.get_on_script())

        # lay it all out
        widget = Widget()
        widget.add(create_popup)
        widget.add(create)
        widget.add(div)
        return widget
    def get_next_redo():
        from pyasm.biz import Project
        namespace = Project.get_project_code()

        user_name = Environment.get_user_name()
        search = Search("sthpw/transaction_log")
        search.add_filter("login", user_name)
        search.add_filter("namespace", namespace)
        
        search.add_filter("type", "redo")
        search.add_order_by("timestamp")
        sobject = search.get_sobject()
        return sobject
Beispiel #55
0
    def get_next_redo():
        from pyasm.biz import Project
        namespace = Project.get_project_code()

        user_name = Environment.get_user_name()
        search = Search("sthpw/transaction_log")
        search.add_filter("login", user_name)
        search.add_filter("namespace", namespace)

        search.add_filter("type", "redo")
        search.add_order_by("timestamp")
        sobject = search.get_sobject()
        return sobject
Beispiel #56
0
    def get(cls, texture_code, parent_code, project_code=None, is_multi=False):
        '''TODO: use search_type, id for the parent search'''
        if not project_code:
            project_code = Project.get_project_code()
        search = Search(cls.SEARCH_TYPE, project_code)
        #search.set_show_retired(True)
        if texture_code:

            search.add_filter('code', texture_code)
        search.add_filter('asset_code', parent_code)
        search_type = search.get_search_type()
        key = "%s|%s|%s" % (search_type, texture_code, parent_code)
        sobj = cls.get_by_search(search, key, is_multi=is_multi)
        return sobj
Beispiel #57
0
    def get_last(type=None):
        #namespace = SearchType.get_project()
        from pyasm.biz import Project
        namespace = Project.get_project_code()

        user_name = Environment.get_user_name()
        search = Search("sthpw/transaction_log")
        search.add_filter("login", user_name)
        search.add_filter("namespace", namespace)
        if type:
            search.add_filter("type", type)
        search.add_order_by("timestamp desc")
        sobject = search.get_sobject()
        return sobject