Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
 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()
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
 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()
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
    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()
Exemplo n.º 12
0
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')