def fetchall(self, keynum, keypack=None, stop=None, limit=None): if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_GET shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) self._status = None f.usekey(keynum) f.rewind() if keypack: try: f.find(keypack) except _rms.error as e: if self._auto: f.close() if e.errno == vms.rmsdef.RMS__RNF: return [] else: raise res = [] n = 0 for r in f: rec = self._item_class.unpack(r, self._item_class) if stop and stop(rec): break res.append(rec) n += 1 if limit is not None and n >= limit: break if self._auto: f.close() return res
def open(self, acc=vms.fabdef.FAB_M_PUT + vms.fabdef.FAB_M_GET + vms.fabdef.FAB_M_DEL + vms.fabdef.FAB_M_UPD, shr=vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD, fop=0): self._auto = False self._status = None self._file = _rms.file(self.filename, fac=acc, shr=shr, fop=fop)
def reset(self): if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_PUT + vms.fabdef.FAB_M_GET + vms.fabdef.FAB_M_DEL + vms.fabdef.FAB_M_UPD shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) self._status = None f.rewind() s = f.find() while (s != vms.rmsdef.RMS__EOF): f.delete() s = f.find() if self._auto: f.close()
def find(self, keynum, keypack): if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_GET shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) if keynum is not None: f.usekey(keynum) try: f.find(keypack) except _rms.error as e: if self._auto: f.close() if e.errno == vms.rmsdef.RMS__RNF: return False else: raise return True
def delete(self, keynum, keyval): if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_GET + vms.fabdef.FAB_M_DEL shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) self._status = None f.usekey(keynum) key = self._item_class.pack_key(keynum, keyval) try: self._status = f.find(key) self._status = f.delete() except _rms.error: if self._auto: f.close() raise else: if self._auto: f.close()
def put(self, rec): if not self._auto: f = self._file else: # add record to the file acc = vms.fabdef.FAB_M_PUT + vms.fabdef.FAB_M_GET + vms.fabdef.FAB_M_DEL + vms.fabdef.FAB_M_UPD shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD fop = 0 f = _rms.file(self.filename, fac=acc, shr=shr, fop=fop) self._status = None rec = rec.pack() try: self._status = f.put(rec) except _rms.error: if self._auto: f.close() raise else: if self._auto: f.close()
def test_demo_3(self): acc = FABDEF.FAB_M_GET shr = FABDEF.FAB_M_SHRPUT + FABDEF.FAB_M_SHRGET + FABDEF.FAB_M_SHRDEL + FABDEF.FAB_M_SHRUPD try: f = RMS.file('sysuaf',fac=acc, shr=shr) except: raise unittest.SkipTest('High privileges required') # Alphabetic order for i in range(10): s,r = f.fetch() lst = struct.unpack("=i32shhiQ32s32p", r[:116]) self.assertIsNotNone(lst) # print('%s [%o,%o]' % (lst[1], lst[3], lst[2])) # UIC order f.usekey(1) f.rewind() i = 0 for r in f: i += 1 if (i > 10): break lst = struct.unpack("=i32shhiQ32s32p", r[:116]) self.assertIsNotNone(lst) # print('%s [%o,%o]' % (lst[1], lst[3], lst[2])) # Alphabetic order f.usekey(0) f.rewind() for r in f: lst = struct.unpack("=i32shhiQ32s32p", r[:116]) self.assertIsNotNone(lst) # print('%s [%o,%o]' % (lst[1], lst[3], lst[2])) f.close()
def update(self, rec): if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_GET + vms.fabdef.FAB_M_UPD shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) self._status = None f.usekey(self.primary_keynum()) key = self._item_class.pack_key(self.primary_keynum(), rec.keyval(self.primary_keynum())) try: self._status, r = f.fetch(key) rec = rec.pack() self._status = f.update(rec) except _rms.error: if self._auto: f.close() raise else: if self._auto: f.close()
def fetch(self, keynum, keyval, item_class=None): if item_class is None: item_class = self._item_class if not self._auto: f = self._file else: acc = vms.fabdef.FAB_M_GET shr = vms.fabdef.FAB_M_SHRPUT + vms.fabdef.FAB_M_SHRGET + vms.fabdef.FAB_M_SHRDEL + vms.fabdef.FAB_M_SHRUPD f = _rms.file(self.filename, fac=acc, shr=shr) f.usekey(keynum) self._status = None key = self._item_class.pack_key(keynum, keyval) try: self._status, r = f.fetch(key) except _rms.error: if self._auto: f.close() raise else: if self._auto: f.close() if self._status == vms.rmsdef.RMS__RNF: return None return item_class.unpack(r, item_class)
import struct import _rms from vms.fabdef import * import vms.sys acc = FAB_M_GET shr = FAB_M_SHRPUT + FAB_M_SHRGET + FAB_M_SHRDEL + FAB_M_SHRUPD f = _rms.file('sysuaf',fac=acc, shr=shr) print(f.longname) print('Number of keys:', f.nok) print print('Alphabetic order') print('%-32s %-20s %s' %('Username', 'UIC', 'Last Interactive Login')) print('-'*78) for i in range(4): s,r = f.fetch() lst = struct.unpack("=i32sHHIQ32s32p32p64p64p32p32pQQHHBBBBQQQQQQQQ", r[:428]) uic = '[%o,%o]' % (lst[3], lst[2]) sts, dt = vms.sys.asctim(lst[25], 0) print('%s %-16s %28s' % (lst[1], uic, dt)) print print('UIC order') print('%-32s %-20s %s' %('Username', 'UIC', 'Last Interactive Login')) print('-'*78) f.usekey(1)
def test_demo_1(self): acc = FABDEF.FAB_M_PUT + FABDEF.FAB_M_GET + FABDEF.FAB_M_DEL + FABDEF.FAB_M_UPD shr = FABDEF.FAB_M_SHRPUT + FABDEF.FAB_M_SHRGET + FABDEF.FAB_M_SHRDEL + FABDEF.FAB_M_SHRUPD f = RMS.file('test.dat', fac=acc, shr=shr) # empty file f.rewind() s = f.find() while(s != RMSDEF.RMS__EOF): f.delete() s = f.find() # Insert a few records for rec_ in self.records: rec = struct.pack(b"=5si11s", rec_[0], rec_[1], rec_[2]) f.put(rec) # Initial records f.rewind() for rec_ in self.records: r_expected = struct.pack(b"=5si11s", rec_[0], rec_[1], rec_[2]) s, r_from_file = f.fetch() self.assertEqual(s, RMSDEF.RMS__NORMAL) self.assertEqual(r_from_file, r_expected) # Update all records f.rewind() for rec_ in self.records: s, r = f.fetch() self.assertEqual(s, RMSDEF.RMS__NORMAL) self.assertNotEqual(r, None) k, n, v = struct.unpack("=5si11s", r) rec = struct.pack(b"=5si11s", k, n + 10, b'X' + v[1:]) s = f.update(rec) self.assertIn(s, (RMSDEF.RMS__NORMAL, RMSDEF.RMS__OK_DUP)) # use secondary key and an iterator s = f.usekey(1) s = f.rewind() pos = 0 for r in f: self.assertEqual(s, RMSDEF.RMS__NORMAL) rec_ = self.records_expected_key1_modified[pos] pos = pos + 1 r_expected = struct.pack(b"=5si11s", rec_[0], rec_[1], rec_[2]) self.assertEqual(r, r_expected) # build a list of all records f.usekey(0) f.rewind() all_recs = [struct.unpack("=5si11s", r) for r in f] self.assertEqual(all_recs, self.records_expected_key0_modified) f.usekey(1) f.rewind() all_recs = [struct.unpack("=5si11s", r) for r in f] self.assertEqual(all_recs, self.records_expected_key1_modified) # delete a record using delete(14) f.usekey(1) key = struct.pack("=i", 14) s = f.delete(key) self.assertEqual(s, RMSDEF.RMS__NORMAL) # delete all record key 12 using find(12) + delete() key = struct.pack("=i", 12) s = f.find(key) self.assertEqual(s, RMSDEF.RMS__NORMAL) while (1): s, r = f.fetch() if r: k, n, v = struct.unpack("=5si11s", r) if n == 12: s = f.delete() else: break else: break # build a list of all records after delete f.rewind() all_recs = [struct.unpack("=5si11s", r) for r in f] self.assertEqual(all_recs, self.records_expected_key1_after_del_14_12) # Close the file f.close()
import pprint import struct import _rms from vms.fabdef import * import vms.rmsdef acc = FAB_M_PUT + FAB_M_GET + FAB_M_DEL + FAB_M_UPD shr = FAB_M_SHRPUT + FAB_M_SHRGET + FAB_M_SHRDEL + FAB_M_SHRUPD f = _rms.file('test.dat', fac=acc, shr=shr) print print('Empty file') f.rewind() s = f.find() while (s != vms.rmsdef.RMS__EOF): f.delete() s = f.find() print print('Insert a few records') rec = struct.pack(b"=5si11s", b'AA5AA', 5, b'1234567890A') f.put(rec) rec = struct.pack(b"=5si11s", b'BB2BB', 2, b'1234567890B') f.put(rec) rec = struct.pack(b"=5si11s", b'CC4CC', 4, b'1234567890C') f.put(rec) rec = struct.pack(b"=5si11s", b'DD1DD', 1, b'1234567890D') f.put(rec) rec = struct.pack(b"=5si11s", b'EE1EE', 2, b'1234567890E') f.put(rec) rec = struct.pack(b"=5si11s", b'FF3FF', 3, b'1234567890F')