code: def get_primary_at(source_code, offset, retry=True):
      
      obj = ''
      left = re.split(r"[^0-9a-zA-Z_.]", source_code[:offset])
      if left and left[-1]:
          obj = left[-1]
      right = re.split(r"\W", source_code[offset:])
      if right and right[0]:
          obj += right[0]
      if obj and obj[0].isdigit():
          obj = ''
      # account for opening chars with no text to the right
      if not obj and retry and offset and source_code[offset - 1] in '([.':
          return get_primary_at(source_code, offset - 1, retry=False)
      return obj
docs: Return Python object in *source_code* at *offset*
      Periods to the left of the cursor are carried forward 
        e.g. 'functools.par^tial' would yield 'functools.partial'
      Retry prevents infinite recursion: retry only once