def _init_fields(self): """ Return information about the dd fields """ if self._fields is None: M.mset('U', "^") # DBS Calls Require this f = self._fields = {} attrs = self.fieldnames = {} fieldid = "0" while 1: # Subscript 0 is field description, .1 is the title, 3 is help fieldid, info, title, fieldhelp = M.ddwalk( self._fileid, fieldid) #fieldid, info, title, fieldhelp = M.mexec( # """set s0=$order(^DD(s2,s0)) Q:s0'=+s0 s s1=$G(^DD(s2,s0,0)),s3=$G(^DD(s2,s0,.1)),s4=$G(^DD(s2,s0,3))""", # M.INOUT(str(fieldid)), M.INOUT(""), str(self._fileid), M.INOUT(""), M.INOUT("")) if fieldid == "" or fieldid[0] not in "0123456789.": break info = info.split("^", 4) label = self._clean_label(info[0]) try: ftype = info[1] except: ftype = None if ftype: finst = None for klass in FIELD_TYPES: if klass.isa(ftype): finst = f[fieldid] = klass(fieldid, label, info) finst.fileid = self.fileid finst.ownerdd = self attrs[label] = fieldid break if finst is None: print finst, "FIELD [%s], spec [%s] was not identified" % ( label, ftype) continue finst.title = title finst.fieldhelp = fieldhelp else: assert finst, "FIELD [%s] %s has no fieldspec" % (label, info) return self._fields
def _init_fields(self): """ Return information about the dd fields """ if self._fields is None: M.mset("U", "^") # DBS Calls Require this f = self._fields = {} attrs = self.fieldnames = {} fieldid = "0" while 1: # Subscript 0 is field description, .1 is the title, 3 is help fieldid, info, title, fieldhelp = M.ddwalk(self._fileid, fieldid) # fieldid, info, title, fieldhelp = M.mexec( # """set s0=$order(^DD(s2,s0)) Q:s0'=+s0 s s1=$G(^DD(s2,s0,0)),s3=$G(^DD(s2,s0,.1)),s4=$G(^DD(s2,s0,3))""", # M.INOUT(str(fieldid)), M.INOUT(""), str(self._fileid), M.INOUT(""), M.INOUT("")) if fieldid == "" or fieldid[0] not in "0123456789.": break info = info.split("^", 4) label = self._clean_label(info[0]) try: ftype = info[1] except: ftype = None if ftype: finst = None for klass in FIELD_TYPES: if klass.isa(ftype): finst = f[fieldid] = klass(fieldid, label, info) finst.fileid = self.fileid finst.ownerdd = self attrs[label] = fieldid break if finst is None: print finst, "FIELD [%s], spec [%s] was not identified" % (label, ftype) continue finst.title = title finst.fieldhelp = fieldhelp else: assert finst, "FIELD [%s] %s has no fieldspec" % (label, info) return self._fields
def list_files(self): """ Oddly, I cannot see how to list the files using the DBS API. This is required for debugging etc. """ if self.remote: return self.remote.list_files() M.mset('DUZ',self.DUZ) M.mset('U', "^") if self.isProgrammer: M.mset('DUZ(0)', "@") rv = [] s0 = "0" while s0 != "": s0, name = M.mexec( '''set s0=$order(^DIC(s0)) Q:s0'=+s0 I $D(^DIC(s0,0))&$D(^DIC(s0,0,"GL"))&$$VFILE^DILFD(s0) S s1=$P(^DIC(s0,0),U,1)''', M.INOUT(s0), M.INOUT("")) if name: rv.append((name, s0)) return rv