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)
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))
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'))
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)
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
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
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!')
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}
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)
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