2013-10-24 103 views
-1

這可能是也可能不是一個簡單的一個人在那裏......構建列表網站

我試圖建立一個文件恢復服務。我有一本像這樣的字典。

{'full_path': '/home/michael/Data', 
'items': {'UpgradeToCentOS5': {'full_path': '/home/michael/Data/UpgradeToCentOS5', 
           'type': 'f', 
           'versions': ['current', '09/10/12']}, 
      'basic_debian': {'full_path': '/home/michael/Data/basic_debian', 
          'type': 'f', 
          'versions': ['current']}, 
      'deploy.tgz': {'full_path': '/home/michael/Data/deploy.tgz', 
          'type': 'f', 
          'versions': ['current']}, 
      'firewall': {'full_path': '/home/michael/Data/firewall', 
         'type': 'f', 
         'versions': ['current']}, 
      'legalholder.sh': {'full_path': '/home/michael/Data/legalholder.sh', 
           'type': 'f', 
           'versions': ['current']}, 
      'lists': {'full_path': '/home/michael/Data/lists', 
        'items': {'boothosts': {'full_path': '/home/michael/Data/lists/boothosts', 
              'type': 'f', 
              'versions': ['current']}, 
           'checklist': {'full_path': '/home/michael/Data/lists/checklist', 
              'type': 'f', 
              'versions': ['current']}, 
           'ns_ip': {'full_path': '/home/michael/Data/lists/ns_ip', 
             'type': 'f', 
             'versions': ['current']}, 
           'server_info': {'full_path': '/home/michael/Data/lists/server_info', 
               'type': 'f', 
               'versions': ['current']}, 
           'temp': {'full_path': '/home/michael/Data/lists/temp', 
             'type': 'f', 
             'versions': ['current']}, 
           'tsm_clients': {'full_path': '/home/michael/Data/lists/tsm_clients', 
               'type': 'f', 
               'versions': ['current']}}, 
        'type': 'd', 
        'versions': ['current']}, 
      'salt': {'full_path': '/home/michael/Data/salt', 
        'type': 'f', 
        'versions': ['current']}, 
      'std-srv': {'full_path': '/home/michael/Data/std-srv', 
         'type': 'f', 
         'versions': ['current']}, 
      'upgrade_debian_6': {'full_path': '/home/michael/Data/upgrade_debian_6', 
           'type': 'f', 
           'versions': ['current']}, 
      'using-imaps': {'full_path': '/home/michael/Data/using-imaps', 
          'type': 'f', 
          'versions': ['current']}, 
      'xiv_online_resize': {'full_path': '/home/michael/Data/xiv_online_resize', 
           'type': 'f', 
           'versions': ['current']}}, 
'type': 'd', 
'versions': ['current']} 

基本上...這是一個數據字典,我發現可以恢復。所有文件(不知道目錄)將有'版本',這是該文件存在的版本列表。

我想弄清楚我將如何將其轉換爲HTML數據,用戶可以使用它來選擇他們想要恢復的文件的版本。 (上限爲每個文件一個版本恢復。

我從來沒有建立這樣的事,我不會在搜索拉什麼。

什麼我缺少在我的個人信息?

我/想/我正在尋找的是這樣的事情...

- home 
-- /michael 
--- /Data 
---- UpgradeToCentOS5 
     □ Version: current 
     □ Version: 09/10/12 
---- basic_debian 
     □ Version: current 
---- deploy.tgz 
     □ Version: current 
---- firewall 
     □ Version: current 
---- legalholder.sh 
     □ Version: current 
---- lists 
----- boothosts 
     □ Version: current 
[...] 

回答

1

我用它來生成類似的例子。

recovery = {'full_path': '/home/michael/Data', 
'items': {'UpgradeToCentOS5': {'full_path': '/home/michael/Data/UpgradeToCentOS5', 
           'type': 'f', 
           'versions': ['current', '09/10/12']}, 
      'basic_debian': {'full_path': '/home/michael/Data/basic_debian', 
          'type': 'f', 
          'versions': ['current']}, 
      'deploy.tgz': {'full_path': '/home/michael/Data/deploy.tgz', 
          'type': 'f', 
          'versions': ['current']}, 
      'firewall': {'full_path': '/home/michael/Data/firewall', 
         'type': 'f', 
         'versions': ['current']}, 
      'legalholder.sh': {'full_path': '/home/michael/Data/legalholder.sh', 
           'type': 'f', 
           'versions': ['current']}, 
      'lists': {'full_path': '/home/michael/Data/lists', 
        'items': {'boothosts': {'full_path': '/home/michael/Data/lists/boothosts', 
              'type': 'f', 
              'versions': ['current']}, 
           'checklist': {'full_path': '/home/michael/Data/lists/checklist', 
              'type': 'f', 
              'versions': ['current']}, 
           'ns_ip': {'full_path': '/home/michael/Data/lists/ns_ip', 
             'type': 'f', 
             'versions': ['current']}, 
           'server_info': {'full_path': '/home/michael/Data/lists/server_info', 
               'type': 'f', 
               'versions': ['current']}, 
           'temp': {'full_path': '/home/michael/Data/lists/temp', 
             'type': 'f', 
             'versions': ['current']}, 
           'tsm_clients': {'full_path': '/home/michael/Data/lists/tsm_clients', 
               'type': 'f', 
               'versions': ['current']}}, 
        'type': 'd', 
        'versions': ['current']}, 
      'salt': {'full_path': '/home/michael/Data/salt', 
        'type': 'f', 
        'versions': ['current']}, 
      'std-srv': {'full_path': '/home/michael/Data/std-srv', 
         'type': 'f', 
         'versions': ['current']}, 
      'upgrade_debian_6': {'full_path': '/home/michael/Data/upgrade_debian_6', 
           'type': 'f', 
           'versions': ['current']}, 
      'using-imaps': {'full_path': '/home/michael/Data/using-imaps', 
          'type': 'f', 
          'versions': ['current']}, 
      'xiv_online_resize': {'full_path': '/home/michael/Data/xiv_online_resize', 
           'type': 'f', 
           'versions': ['current']}}, 
'type': 'd', 
'versions': ['current']} 

import os 

def get_parent_dirs(path): 
    parents = [] 
    x = path.split('/')[1:-1] 
    for i in range(len(x)): 
     parents.append('/'.join(x[0:i+1])) 
    return parents 

# Get a list of files and versions from the dictionary 
items = [] 
pending = [recovery] 
while pending: 
    x = pending.pop(0) 
    for item in x['items']: 
     item = x['items'][item] 
     if item.has_key('items'): # a directory 
      pending.append(item) 
     else: # a file 
      items.append((item['full_path'], item['versions'])) 
items.sort() 

parent_dirs = [] 
for path, versions in items: 

    # Print parent directories if necessary 
    for directory in get_parent_dirs(path): 
     if not directory in parent_dirs: 
      parent_dirs.append(directory) 
      print '%s /%s' % (len(directory.split('/'))*'-', os.path.split(directory)[1]) 

    # Print file versions 
    directory, filename = os.path.split(path) 
    padding = len(path.split('/'))-1 
    print '%s %s' % (padding*'-', filename) 
    for version in versions: 
     print '%s [] Version: %s' % (' '*padding, version)