-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 データに変換する方法を理解しようとしています。(制限は、ファイルごとに 1 つのバージョンの復元です。

私はこのようなものを構築したことがなく、検索で何も引っ張っていません。

私の詳細に欠けているものはありますか?

私が探しているのは、このようなものだと/思う/...

- 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
[...]
4

1 に答える 1

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)
于 2013-10-24T06:51:53.073 に答える