2013-10-24 63 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)