Projet

Général

Profil

Development #60302 » wcs_showfilenames.py

Emmanuel Cazenave, 05 janvier 2022 16:36

 
1
import itertools
2
from wcs.formdef import FormDef
3
from quixote import get_publisher
4

    
5

    
6
publisher = get_publisher()
7

    
8

    
9
def is_upload(obj):
10
    # we can't use isinstance() because obj can be a
11
    # wcs.qommon.form.PicklableUpload or a qommon.form.PicklableUpload
12
    return obj.__class__.__name__ == 'PicklableUpload'
13

    
14

    
15
def is_attachment(obj):
16
    return obj.__class__.__name__ == 'AttachmentEvolutionPart'
17

    
18

    
19
def accumulate_filenames():
20
    from wcs.carddef import CardDef
21
    from wcs.wf.form import WorkflowFormEvolutionPart
22

    
23
    for formdef in FormDef.select(ignore_migration=True) + CardDef.select(ignore_migration=True):
24
        for option_data in (formdef.workflow_options or {}).values():
25
            if is_upload(option_data):
26
                yield 'option_data: %s' % option_data.get_fs_filename()
27
        for formdata in formdef.data_class().select_iterator(ignore_errors=True, itersize=200):
28
            for field_data in itertools.chain(
29
                (formdata.data or {}).values(), (formdata.workflow_data or {}).values()
30
            ):
31
                if is_upload(field_data):
32
                    yield 'formdata field_data: %s' % field_data.qfilename
33
                elif isinstance(field_data, dict) and isinstance(field_data.get('data'), list):
34
                    for subfield_rowdata in field_data.get('data'):
35
                        if isinstance(subfield_rowdata, dict):
36
                            for block_field_data in subfield_rowdata.values():
37
                                if is_upload(block_field_data):
38
                                    yield 'block_field_data: %s' % block_field_data.qfilename
39
            for part in formdata.iter_evolution_parts():
40
                if is_attachment(part):
41
                    # yield 'part.filename: %s' % part.filename
42
                    yield part.filename
43
                elif isinstance(part, WorkflowFormEvolutionPart):
44
                    for field_data in (part.data or {}).values():
45
                        if is_upload(field_data):
46
                            yield 'WorkflowFormEvolutionPart field_data: %s' % field_data.qfilename
47
    for user in publisher.user_class.select():
48
        for field_data in (user.form_data or {}).values():
49
            if is_upload(field_data):
50
                yield 'user.form_data field_data: %s' % field_data.qfilename
51

    
52

    
53
for filename in accumulate_filenames():
54
    print(filename)