code: def parse_cid(i):
      
  
      r={'return':0}
      c=i['cid'].strip()
  
      ie=i.get('ignore_error','')
  
      cc=i.get('cur_cid', {})
  
      a0=cc.get('repo_uoa','')
      m0=cc.get('module_uoa','')
      d0=cc.get('data_uoa','')
  
      if c.startswith(cfg['detect_cur_cid']) or c.startswith(cfg['detect_cur_cid1']):
         c=c[1:]
  
      x=c.split(':')
      if len(x)<2 and m0=='':
         if ie!='yes': 
            return {'return':1, 'error':'unknown CID format'}
         else: 
            return r
  
      if c=='':
         r['repo_uoa']=a0
         r['module_uoa']=m0
         r['data_uoa']=d0
      elif len(x)==1:
         if a0!='': r['repo_uoa']=a0
         r['module_uoa']=m0
         r['data_uoa']=x[0]
      elif len(x)==2:
         if a0!='': r['repo_uoa']=a0
         r['module_uoa']=x[0]
         r['data_uoa']=x[1]
      elif len(x)==3:
         r['repo_uoa']=x[0]
         r['module_uoa']=x[1]
         r['data_uoa']=x[2]
      else:
         if ie!='yes': 
            return {'return':1, 'error':'unknown CID format'}
  
      return r
docs: Input:  {
                cid            - in format (REPO_UOA:)MODULE_UOA:DATA_UOA 
                (cur_cid)      - output of function 'detect_cid_in_current_path'
                (ignore_error) - if 'yes', ignore wrong format
              }
  
      Output: {
                return       - return code =  0, if successful
                                           >  0, if error
                (error)      - error text if return > 0
  
                data_uoa     - data UOA
                module_uoa   - module UOA
                (repo_uoa)   - repo UOA
              }