Ignore:
Timestamp:
26/01/16 21:57:31 (5 years ago)
Author:
mjuckes
Message:

improved class structures

File:
1 edited

Legend:

Unmodified
Added
Removed
  • hdldemo/trunk/hdldemo.py

    r559 r562  
    66 -t: run a test; 
    77 -f <file name>: examine file, print path to replacement if this file is obsolete, print path to sibling files. 
     8 -id <tracking id>: examine handle record of tracking id. 
    89""" 
    910## see https://www.handle.net/proxy_servlet.html for info on restfull API 
     
    1112import string, collections, os 
    1213import ncq3 
     14import xml 
     15from xml.dom import minidom 
     16 
    1317try: 
    1418 import urllib 
     
    3135      raise 
    3236 
    33  
    3437class ghandle(object): 
    35   def __init__(self,url): 
     38  htmpl = 'http://hdl.handle.net/api/handles/%s' 
     39  dh = dummyHandles() 
     40  def __init__(self,hdl,url=None): 
     41 
     42     if hdl[:5] == 'xxxxx': 
     43       self.msg = self.dh.hh[hdl] 
     44     else: 
     45       if url == None: 
     46         thisid = string.replace(hdl,'hdl:999999', '10876.test' ) 
     47         url = self.htmpl % thisid 
     48       self.fetch(url) 
     49 
     50  def fetch(self,url): 
     51     print url 
     52 
    3653     try: 
    3754       fh = request.urlopen( url ) 
     
    4764     self.msg = msg 
    4865 
     66class GHandles(object): 
     67  def __init__(self): 
     68    self.hh = {} 
     69  def __call__(self,hdl): 
     70    if hdl not in self.hh: 
     71      self.hh[hdl] = ghandle(hdl) 
     72    return self.hh[hdl] 
     73 
     74ghandles = GHandles() 
     75 
     76class pyhandle(object): 
     77  def __init__(self,id): 
     78    self.REC_id = id 
     79    self.REC_got = False 
     80 
     81  def get(self): 
     82    if self.REC_got: 
     83      return 
     84 
     85    g = ghandles( self.REC_id ) 
     86    for r in g.msg['values']: 
     87        if str(r['type']) in ['replaces', 'replacedBy', 'isReplacedBy','parent']: 
     88          self.__dict__[r['type']] = pyhandle( r['data']['value'] ) 
     89 
     90        elif r['type']  == 'children': 
     91          cl = eval( r['data']['value'] ) 
     92          self.__dict__['children'] = [pyhandle(c) for c in cl] 
     93 
     94        else: 
     95          self.__dict__[r['type']] = r['data']['value'] 
     96 
     97  def getSiblings(self): 
     98     if self.aggregation_level != 'file': 
     99       print 'No known siblings .....' 
     100       return 
     101 
     102     if 'parent' not in self.__dict__: 
     103       print 'No parent' 
     104       return 
     105 
     106     self.parent.get() 
     107     self.siblings = [] 
     108     for c in self.parent.children: 
     109       if c.REC_id != self.REC_id: 
     110         self.siblings.append( c ) 
     111 
    49112class main(object): 
    50113  knownargs0 = ['-h','-v','-t'] 
    51   knownargs1 = ['-f'] 
     114  knownargs1 = ['-f','-id'] 
    52115  def __init__(self, args): 
    53116    self.htmpl = 'http://hdl.handle.net/api/handles/%s' 
     
    72135      self.dumpF(fn) 
    73136 
    74   def dumpF(self,fn): 
    75     assert os.path.isfile( fn ), 'File %s not found' % fn 
    76     f = ncHead( fn ) 
    77     thisid = string.replace(f.ga['tracking_id'], 'hdl:999999', '10876.test' ) 
     137    if '-id' in self.d: 
     138      id = self.d['-id'] 
     139      self.dumpF('',id=id) 
     140 
     141  def dumpF(self,fn, id=None): 
     142    if id == None: 
     143      assert os.path.isfile( fn ), 'File %s not found' % fn 
     144      f = ncHead( fn ) 
     145      thisid = string.replace(f.ga['tracking_id'], 'hdl:999999', '10876.test' ) 
     146    else: 
     147      thisid = string.replace(id,'hdl:999999', '10876.test' ) 
     148 
    78149    url = self.htmpl % thisid 
    79     g = ghandle( url ) 
     150    g = ghandle( thisid ) 
    80151    self.p = phandle(  g.msg ) 
    81     gp = ghandle( self.htmpl % self.p.d['parent']['value'] ) 
     152    gp = ghandle( self.p.d['parent']['value'] ) 
    82153    self.pp = phandle(  gp.msg ) 
    83     if 'replaced_by' in self.p.d: 
     154    isReplaced = 'replaced_by' in self.p.d 
     155    if isReplaced: 
    84156      print '******* OBSOLETE FILE ******' 
    85       pr = phandle(  ghandle( self.htmpl % self.p.d['replaced_by']['value'] ).msg ) 
    86       print 'REPLACED BY: ',pr.d['URL']['value'] 
     157      pr = self.p 
     158      while isReplaced: 
     159        pr = phandle(  ghandle( pr.d['replaced_by']['value'] ).msg ) 
     160        isReplaced = 'replaced_by' in pr.d 
     161        print 'REPLACED BY: ',pr.d['URL']['value'] 
    87162    else: 
    88163      print 'File is current' 
     
    95170        thisfound = True 
    96171      else: 
    97         gc = ghandle( self.htmpl % c ) 
     172        gc = ghandle( c ) 
    98173        pc = phandle( gc.msg ) 
    99         if 'replaced_by' in pc.d: 
    100           pcr = phandle(  ghandle( self.htmpl % pc.d['replaced_by']['value'] ).msg ) 
    101           print '>>>', pcr.d['URL']['value'] 
     174        isReplaced = 'replaced_by' in pc.d 
     175        rsq = [pc,] 
     176        if isReplaced: 
     177          while isReplaced: 
     178            pc = phandle(  ghandle( pc.d['replaced_by']['value'] ).msg ) 
     179            isReplaced = 'replaced_by' in pc.d 
     180            print '>>>', pc.d['URL']['value'] 
    102181        elif 'URL' in pc.d: 
    103182          print pc.d['URL']['value'] 
     
    108187    f = ncHead( fn1 ) 
    109188    url = self.htmpl % f.ga['tracking_id'] 
    110     url = string.replace( url, 'hdl:999999', '10876.test' ) 
    111     print url 
    112     g = ghandle( url ) 
     189    hdl = string.replace( f.ga['tracking_id'], 'hdl:999999', '10876.test' ) 
     190    g = ghandle( hdl ) 
    113191    self.p = phandle(  g.msg ) 
    114192    expected= ['creation_date', 'aggregation_level', 'HS_ADMIN', '10320/loc', 'checksum', 'URL', 'parent'] 
     
    122200    print ('PARSING PARENT ..... ' ) 
    123201    print ( self.htmpl % self.p.d['parent']['value'] ) 
    124     g = ghandle( self.htmpl % self.p.d['parent']['value'] ) 
     202    g = ghandle( self.p.d['parent']['value'] ) 
    125203    self.pp = phandle(  g.msg ) 
    126204    for k in self.pp.d.keys(): 
Note: See TracChangeset for help on using the changeset viewer.