lfc_python man page

lfc_python(3)                  Python Reference                  lfc_python(3)

[1mNAME[0m
      lfc - Python interface to the LFC
      lfcthr - Thread enabled version of Python interface to the LFC

[1mSYNOPSIS[0m
      [1mimport lfc[0m

      [1mimport lfcthr[0m
      [1mlfcthr.init()[0m

[1mDESCRIPTION[0m
      The  lfc  module  permits  you  to access the LFC client interface from
      python programs. The lfc module is a swig wrapping of  the  standard  C
      interface.  For detailed descriptions of each function see the individ-
      ual man page of each function.

      The lfcthr module is a version of  the  lfc  module  supporting  multi-
      threaded  Python  clients. Its usage is similar to the usage of the lfc
      module except the obligatory initialisation call lfcthr.init()  in  the
      main program before threads are started.

      There follows a series of examples of how to use selected functions and
      how to retrieve the information returned by them: Examples are  finding
      the GUID of an existing entry, listing the replicas of a given GUID and
      setting and retrieving the comment associated with an entry.

[1mEXAMPLE[0m
      #!/usr/bin/python

      import sys
      import lfc

      """
      # stat an existing entry in the LFC and print the GUID
      """

      name = "/grid/dteam/my.test"

      stat = lfc.lfc_filestatg()
      res = lfc.lfc_statg(name,"",stat)

      if res == 0:
         guid = stat.guid
         print "The GUID for " + name + " is " + guid
      else:
         err_num = lfc.cvar.serrno
         err_string = lfc.sstrerror(err_num)
         print "There was an error while looking for " + name + ": Error " + str(err_num)                  + " (" + err_string + ")"
         sys.exit(1)

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # list the replicas of a given entry, starting from the GUID
      """

      guid = "6a3164e0-a4d7-4abe-9f76-e3b8882735d1"

      listp = lfc.lfc_list()
      flag = lfc.CNS_LIST_BEGIN

      print "Listing replicas for GUID " + guid

      num_replicas=0

      while(1):
         res = lfc.lfc_listreplica("",guid,flag,listp)
         flag = lfc.CNS_LIST_CONTINUE

         if res == None:
            break
         else:
            rep_name = res.sfn
            print "Replica: " + rep_name
            num_replicas = num_replicas + 1

      lfc.lfc_listreplica("",guid,lfc.CNS_LIST_END,listp)
      print "Found " + str(num_replicas) + " replica(s)"

[1mEXAMPLE[0m
      #!/usr/bin/python

      import sys
      import lfc
      import re

      """
      # setting and retrieving a comment on a file
      """

      file = "/grid/dteam/my.test"

      comment = "MyComment"
      res = lfc.lfc_setcomment(file,comment)

      if res != 0:
         err_num = lfc.cvar.serrno
         err_string = lfc.sstrerror(err_num)
         print "Problem while setting comment for " + file + ": Error " + str(err_num)                  + " (" + err_string + ")"
         sys.exit(1)

      buffer=""
      for i in range(0,lfc.CA_MAXCOMMENTLEN+1):
        buffer=buffer + " "

      res = lfc.lfc_getcomment(file,buffer)

      if res != 0:
         err_num = lfc.cvar.serrno
         err_string = lfc.sstrerror(err_num)
         print "Problem while reading the comment for " + file + ": Error " + str(err_num)                  + " (" + err_string + ")"
         sys.exit(1)

      r = re.compile("(.*?) ", re.DOTALL)
      comment = r.findall(buffer)[0]

      print "Read back comment " + comment

[1mEXAMPLE[0m
      #!/usr/bin/python

      """
      # Using the lfc_readdirxr method
      """

      import sys
      import lfc

      name = "/grid/dteam/my.test"

      dir = lfc.lfc_opendirg(name,"")
      if (dir == None) or (dir == 0):
              err_num = lfc.cvar.serrno
              err_string = lfc.sstrerror(err_num)
              print "Error while looking for " + name + ": Error " + str(err_num)                       + " (" + err_string + ")"
              sys.exit(1)

      while 1:
              read_pt = lfc.lfc_readdirxr(dir,"")
              if (read_pt == None) or (read_pt == 0):
                      break
              entry, list = read_pt
              print entry.d_name
              try:
                      for i in range(len(list)):
                              print " ==> %s" % list[i].sfn
              except TypeError, x:
                      print " ==> None"

      lfc.lfc_closedir(dir)

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getlinks method
      """

      result, list = lfc.lfc_getlinks("/grid/dteam/antotests/extratests/dir2/f105", "")
      print result
      print len(list)
      if (result == 0):
           for i in list:
                print i.path

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getreplica method
      """

      result, list = lfc.lfc_getreplica("/grid/dteam/antotests/extratests/dir2/f105", "", "")
      print result
      print len(list)
      if (result == 0):
           for i in list:
                print i.host
                print i.sfn

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getacl and lfc_setacl methods to add a user ACL
      """

      nentries, acls_list = lfc.lfc_getacl("/grid/dteam/tests_sophie3", lfc.CA_MAXACLENTRIES)

      print nentries
      print len(acls_list)

      for i in acls_list:
              print i.a_type
              print i.a_id
              print i.a_perm

      # When adding a first ACL for a given user, you also need to add the mask
      # When adding the second user ACL, it is not necessary anymore

      acl_user = lfc.lfc_acl()
      acl_mask = lfc.lfc_acl()

      acl_user.a_type=2        # 2 corresponds to CNS_ACL_USER
      acl_user.a_id=18701      # user id
      acl_user.a_perm=5

      acl_mask.a_type=5        # 5 corresponds to CNS_ACL_MASK
      acl_mask.a_id=0               # no user id specified
      acl_mask.a_perm=5

      acls_list.append(acl_user)
      acls_list.append(acl_mask)

      res = lfc.lfc_setacl("/grid/dteam/tests_sophie3", acls_list)

      if res == 0:
              print "OK"
      else:
              err_num = lfc.cvar.serrno
              err_string = lfc.sstrerror(err_num)
              print "There was an error : Error " + str(err_num) + " (" + err_string + ")"
              sys.exit(1)

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getacl and lfc_setacl methods to remove a user ACL
      """

      nentries, acls_list = lfc.lfc_getacl("/grid/dteam/tests_sophie3", lfc.CA_MAXACLENTRIES)

      # Note : you cannot remove the owner ACL (i.e. for CNS_ACL_USER_OBJ type) if ACLs
      # ====== for other users exist. Ff all the other user ACLs are deleted, the owner
      # ====== ACL is automatically removed.

      for i in acls_list:
              print i.a_type
              print i.a_id
              print i.a_perm

      del acls_list[1]    # delete a given user ACL from the list of ACLs

      res = lfc.lfc_setacl("/grid/dteam/tests_sophie3", acls_list)

      if res == 0:
              print "OK"
      else:
              err_num = lfc.cvar.serrno
              err_string = lfc.sstrerror(err_num)
              print "There was an error : Error " + str(err_num) + " (" + err_string + ")"
              sys.exit(1)

[1mEXAMPLE[0m
      #!/usr/bin/env python
      import lfcthr
      import os
      from threading import Thread

      class slave(Thread):

         def __init__ (self):
            Thread.__init__(self)

         def run(self):
              ....
              result = lfcthr.lfc_getreplica("", guid, "")
              ....
              return

      if __name__ == '__main__':

          os.environ['LFC_HOST'] = 'my_lfc.cern.ch'

          #     Threaded library initialisation
          lfcthr.init()

          ....
          #     Start up of threads
          for i in xrange(totalNumberOfSlaves):
              slv = slave(i)
              slv.start()

          ....

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getusrmap method
      """

      result, list = lfc.lfc_getusrmap()
      print result
      print len(list)
      if (result == 0):
           for i in list:
                print i.userid + " " + i.username

[1mEXAMPLE[0m
      #!/usr/bin/python

      import lfc

      """
      # Using the lfc_getgrpmap method
      """

      result, list = lfc.lfc_getgrpmap()
      print result
      print len(list)
      if (result == 0):
           for i in list:
                print i.gid + " " + i.groupname

[1mKNOWN BUGS[0m
      The  current  interface  to   the   [1mlfc_getcomment(3)[22m,   [1mlfc_getcwd(3)[22m,
      [1mlfc_readlink(3)[22m,  [1mlfc_seterrbuf(3)  [22mrequires  the passing of str object
      which is modified to contain the result (in a  similar  way  to  the  C
      functions,  which accept a buffer).  However this breaks the immutabil-
      ity of python str. This will be changed in the future.

[1mSEE ALSO[0m
      [1mLFC C interface man pages[0m

LFC          $Date: 2010-02-04 13:08:39 +0100 (Thu, 04 Feb 2010) $lfc_python(3)