Beispiel #1
0
    def dialog_out(self):
        self.sign = signature(self.classt.__init__).parameters

        if not issubclass(self.classt, Master):
            raise TrpgError('{0} は {1} のサブクラスではありません'.format(self.classt.__name__, Master.__name__))

        print('{0} のセッティング'.format(self.classt.__name__))

        self.argdic_candi = dict()

        for i in list(self.sign)[1:]:

            s = self.sign[i]
            s_name = s.name
            anno = s.annotation
            dvalue = s.default
            dclass = type(s.default)

            if dclass is type:
                print('[parameter]{0} (Necessary)'.format(s_name))
            else:
                print('[parameter]{0} : [default]{1} ({2})'.format(s_name, dvalue, dclass.__name__))
            
            annos = anno.split(',')
            tmpl = annos[0]
            if len(annos) > 1:
                desc = annos[1].replace(';', ',')

                self.argdic_candi[s_name] = self.check_out(s_name, tmpl, desc)
            else:
                raise TrpgError('アノテーションがありません')
        
        return (self.argdic_candi, 'クラスを作成してください', False)
Beispiel #2
0
    def master(cls, elemname, objname=None):
        import trpgmods

        if elemname not in ('Param', 'Thing', 'Process', 'Event', 'Route',
                            'Role'):
            raise TrpgError('{0} クラスはありません'.format(elemname))

        if objname is None:
            return getattr(trpgmods, elemname).master
        elif objname in getattr(trpgmods, elemname).master.keys():
            return getattr(trpgmods, elemname).master[objname]
        else:
            raise TrpgError('{0} -{1}- はありません'.format(elemname, objname))
Beispiel #3
0
    def buildvalid(self):
        # インポート部分
        from basemods import Holder
        from iotemp import Template

        # Process.name のテンプレート処理 - scala編
        if self.procs not in Holder.master('Process').keys():
            try:
                self.procs = Template.holder[self.group][Holder.classt(
                    'Process')][self.procs]
            except Exception:
                print('TEMPLATEERROR: Event.procs')

        lis_role = list(self.role)
        for v in lis_role:
            # Role.name のテンプレート処理 - tuple編
            if v not in Holder.master('Role').keys():
                idx = lis_role.index(v)
                del lis_role[idx]
                try:
                    tname1 = Template.holder[self.group][Holder.classt(
                        'Role')][v]
                except Exception:
                    tname1 = ''
                    print('TEMPLATEERROR: Event.role -{0}- v={1}, idx={2}'.
                          format(self.name, v, idx))
                lis_role.insert(idx, tname1)
        self.role = tuple(lis_role)

        lis_thing = list(self.thing)
        for v in lis_thing:
            # Thing.name のテンプレート処理 - tuple編
            if v not in Holder.master('Thing').keys():
                idx = lis_thing.index(v)
                del lis_thing[idx]
                try:
                    tname2 = Template.holder[self.group][Holder.classt(
                        'Thing')][v]
                except Exception:
                    tname2 = ''
                    print('TEMPLATEERROR: Event.thing -{0}- v={1}, idx={2}'.
                          format(self.name, v, idx))
                lis_thing.insert(idx, tname2)
        self.thing = tuple(lis_thing)

        if len(self.role) != 2:
            raise TrpgError('引数 -{0}- のリストサイズが2ではありません'.format('role'))
        if len(self.thing) != 2:
            raise TrpgError('引数 -{0}- のリストサイズが2ではありません'.format('thing'))
Beispiel #4
0
    def classt(cls, elemname):
        import trpgmods

        if elemname not in ('Param', 'Thing', 'Process', 'Event', 'Route',
                            'Role'):
            raise TrpgError('{0} クラスはありません'.format(elemname))

        return getattr(trpgmods, elemname)
Beispiel #5
0
    def __init__(self, name, *args):
        self.name = name
        self.cls = self.__class__

        if self.cls.pid == 0:
            self.cls.pid += 1
            self.cls('', *args)
        else:
            self.pid = self.cls.pid
            self.cls.pid += 1

        if self.name in self.cls.master.keys():
            raise TrpgError('すでに名前 -{0}- の {1} オブジェクトは存在します'.format(
                self.name, self.cls.__name__))

        self.cls.master[self.name] = self
Beispiel #6
0
    def input_out(cls, lis, name, desc):
        if len(lis) == 0:
            raise TrpgError('選択肢はありません')

        lis_disp = list()
        for i in lis:
            if hasattr(i, 'name'):
                lis_name = i.name
            elif hasattr(i, '__name__'):
                lis_name = i.__name__
            else:
                lis_name = repr(i)
            lis_disp.append(lis_name)
        candi = dict(list(zip(list(range(len(lis))), lis_disp)))

        return candi
Beispiel #7
0
    def operation_in(cls, opted):
        if opted == '0':
            # 0: 'クラス作成' を選択 
            Scenario.template = Template(Scenario.classt, Scenario.group)
        
            return {'curr_func': Scenario.template.dialog_out, 'arg': (), 'next_func': Scenario.template.dialog_in}
            
        elif opted == '1':
            # 1: 'テンプレートマッピング' を選択
            return {'curr_func': Scenario.template_out, 'arg': (), 'next_func': Scenario.template_in}
            
        elif opted == '2':
            # 2: 'クラスインスタンス一覧' を選択
            for v in Scenario.classt.master.values():
                Template.attrdump(v)
            return {'curr_func': Scenario.operation_out, 'arg': (), 'next_func': Scenario.operation_in}

        else:
            raise TrpgError('OK Fully Complete!')
Beispiel #8
0
    def dialog_in(self, opted):
        # インポート部分
        from iotemp import Scenario

        self.jsonload(opted)

        for i in list(self.sign)[1:]:

            s = self.sign[i]
            s_name = s.name
            anno = s.annotation

            annos = anno.split(',')
            tmpl = annos[0]
            if len(annos) > 1:
                desc = annos[1].replace(';', ',')

                try:
                    self.check_in(s_name, tmpl, desc, opted)
                except TrpgError as e:
                    print('MESSAGE: ', e.value)
                    if self.existclss is not None:
                        # デフォルト
                        opted[s_name] = getattr(self.existclss, s_name)
                    else:
                        opted[s_name] = ''
            else:
                raise TrpgError('アノテーションがありません')

            if self.existclss is not None:
                print('アップデート完了: {0}'.format(self.existclss.name))
                Template.attrdump(self.existclss)
            else:
                self.makeobj()

            return {'curr_func': Scenario.operation_out, 'arg': (), 'next_func': Scenario.operation_in}
Beispiel #9
0
    def check_in(self, s_name, tmpl, desc, opted):
        # インポート部分
        from basemods import Holder
        
        tmpls = tmpl.split('-')

        typet = tmpls[0]
        numbt = None 
        if len(tmpls) > 1:
            numbt = int(tmpls[1]) # tuple 定数a, list 無制限=0, dict 無制限=0の場合
            if numbt < 1 or 100 < numbt:
                numbt = 100

        if typet == 'str':
            if s_name == 'name':
                if self.name != '':
                    rtn = self.name
                else:
                    rtn = opted
                
                # 更新の場合
                if rtn in list(self.classt.master.keys()):
                    self.existclss = self.classt.master[rtn]
            else:
                rtn = opted
        elif typet == 'int':
            try:
                rtn = int(opted)
            except ValueError as e:
                if Dice.checkdice(rtn) > 0:
                    print('MESSAGE: ダイス形式で設定')
                    rtn = opted
                else:
                    print('Exception: {0}'.format(e))
                    rtn = 0
        elif typet == 'bool':
            rtn = bool(opted)
        elif typet == 'tuple':
            self.tlis = list(opted)
            rtn = tuple(self.tlis)
        elif typet == 'list':
            self.tlis = list(opted)
            rtn = self.tlis
        elif typet == 'dict':
            keyt = opted
            valt = opted
                
            self.tlis.append((keyt, valt))
            rtn = dict(self.tlis)
        else:
            rtn = opted
            tt = typet.split('.')
            classtnames = ('Param', 'Thing', 'Process', 'Event', 'Route', 'Role')
            if tt[0] in classtnames:
                s_classt = Holder.classt(tt[0])
                if tt[1] == 'name':
                    s_candi = list(s_classt.master.keys())
                elif tt[1] == 'deed':
                    gg = getmembers(s_classt, isfunction)
                    s_candi = [g[0] for g in gg]

                if tt[1] == 'name' and rtn not in s_candi:
                    t = Template(s_classt, self.group, rtn)
                    print('グループ -{0}- > クラス -{1}- > テンプレート -{2}- を作成しました'.format(self.group, s_classt.__name__, rtn))
                    t.holdermap(self.group, s_classt, rtn)
        
        if self.existclss is not None:
            if rtn == '':
                default = getattr(self.existclss, s_name)
                if type(default) in (int, str, bool):
                    rtn = default
                else:
                    raise TrpgError('デフォルトを設定します')

            setattr(self.existclss, s_name, rtn)
Beispiel #10
0
        start = input('> ')

        #        try:
        if start == '0':
            s_argdic = Scenario.argdic_first()
            while True:
                wiz_out = Holder.progr_out(s_argdic)

                if wiz_out[2] is None:
                    break

                try:
                    if not wiz_out[2]:
                        # 自由に入力
                        if wiz_out[0] is None:
                            raise TrpgError('選択肢しませんでした')
                        print('UPDATE IN {0}'.format(wiz_out[0]))
                        wiz_in = input('{0} > '.format(wiz_out[1]))
                    else:
                        # リストからの選択
                        s_candi = Arbit.input_out(wiz_out[0], 'Scenario',
                                                  'make')
                        print('SELECT IN {0}'.format(s_candi))
                        nam = input('{0} > '.format(wiz_out[1]))
                        wiz_in = Arbit.input_in(wiz_out[0], s_candi, nam)
                except TrpgError as e:
                    # print('MESSAGE: {0}'.format(e.value))
                    pass
                except Exception as e:
                    print('ERROR: {0}'.format(e))
                    pass