Skip to content

Commit 63f3030

Browse files
authored
Merge pull request #508 from xchem/m2ms-1270-map-files
Target loader handling map files (issue 1270)
2 parents a160b6b + f47e41c commit 63f3030

8 files changed

+247
-67
lines changed

viewer/download_structures.py

+20-9
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
'bound_file': ('aligned'),
3636
'cif_info': ('aligned'),
3737
'mtz_info': ('aligned'),
38-
# 'map_info': ('aligned'),
38+
'map_info': ('aligned'),
3939
'sigmaa_file': ('aligned'),
4040
'diff_file': ('aligned'),
4141
'event_file': ('aligned'),
@@ -56,8 +56,9 @@
5656
'bound_file': {}, # x
5757
'cif_info': {}, # from experiment
5858
'mtz_info': {}, # from experiment
59+
'map_info': {}, # from experiment
5960
'event_file': {}, # x
60-
'diff_file': {}, # renamed from diff_file and sigmaa_file
61+
'diff_file': {},
6162
'sigmaa_file': {},
6263
},
6364
'molecules': {
@@ -229,6 +230,7 @@ def _add_file_to_zip_aligned(ziparchive, code, filepath):
229230
filepath = str(Path(settings.MEDIA_ROOT).joinpath(filepath))
230231

231232
if Path(filepath).is_file():
233+
# strip off the leading parts of path
232234
archive_path = str(Path(*Path(filepath).parts[7:]))
233235
if _is_mol_or_sdf(filepath):
234236
# It's a MOL or SD file.
@@ -285,9 +287,13 @@ def _protein_files_zip(zip_contents, ziparchive, error_file):
285287
continue
286288

287289
for prot, prot_file in files.items():
288-
if not _add_file_to_zip_aligned(ziparchive, prot.split(":")[0], prot_file):
289-
error_file.write(f'{param},{prot},{prot_file}\n')
290-
prot_errors += 1
290+
# if it's a list of files (map_info) instead of single file
291+
if not isinstance(prot_file, list):
292+
prot_file = [prot_file]
293+
for f in prot_file:
294+
if not _add_file_to_zip_aligned(ziparchive, prot.split(":")[0], f):
295+
error_file.write(f'{param},{prot},{f}\n')
296+
prot_errors += 1
291297

292298
return prot_errors
293299

@@ -606,10 +612,14 @@ def _create_structures_dict(target, site_obvs, protein_params, other_params):
606612
# getting the param from experiment. more data are
607613
# coming from there, that's why this is in try
608614
# block
609-
# getattr retrieves FieldFile object, hance the .name
610-
zip_contents['proteins'][param][so.code] = getattr(
611-
so.experiment, param
612-
).name
615+
model_attr = getattr(so.experiment, param)
616+
# getattr retrieves FieldFile object, hence the .name
617+
if isinstance(model_attr, list):
618+
# except map_files, this returns a list of files
619+
zip_contents['proteins'][param][so.code] = model_attr
620+
else:
621+
zip_contents['proteins'][param][so.code] = model_attr.name
622+
613623
except AttributeError:
614624
# on the off chance that the data are in site_observation model
615625
zip_contents['proteins'][param][so.code] = getattr(so, param).name
@@ -686,6 +696,7 @@ def get_download_params(request):
686696
'bound_file',
687697
'cif_info',
688698
'mtz_info',
699+
'map_info',
689700
'event_file',
690701
'sigmaa_file',
691702
'diff_file',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 3.2.23 on 2024-01-26 11:16
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
('viewer', '0033_alter_siteobservation_cmpd'),
9+
]
10+
11+
operations = [
12+
migrations.AddField(
13+
model_name='experiment',
14+
name='map_info',
15+
field=models.FileField(
16+
max_length=255, null=True, upload_to='target_loader_data/'
17+
),
18+
),
19+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 3.2.23 on 2024-01-30 08:09
2+
3+
import django.contrib.postgres.fields
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
dependencies = [
9+
('viewer', '0034_experiment_map_info'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='experiment',
15+
name='event_map_info',
16+
field=django.contrib.postgres.fields.ArrayField(
17+
base_field=models.FileField(max_length=255, upload_to=''),
18+
null=True,
19+
size=None,
20+
),
21+
),
22+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Generated by Django 3.2.23 on 2024-01-30 08:12
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
('viewer', '0035_alter_experiment_event_map_info'),
9+
]
10+
11+
operations = [
12+
migrations.RemoveField(
13+
model_name='experiment',
14+
name='map_info',
15+
),
16+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 3.2.23 on 2024-01-30 08:12
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
('viewer', '0036_remove_experiment_map_info'),
9+
]
10+
11+
operations = [
12+
migrations.RenameField(
13+
model_name='experiment',
14+
old_name='event_map_info',
15+
new_name='map_info',
16+
),
17+
]

viewer/models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ class Experiment(models.Model):
193193
cif_info = models.FileField(
194194
upload_to="target_loader_data/", null=True, max_length=255
195195
)
196-
event_map_info = ArrayField(models.FileField(), null=True)
196+
map_info = ArrayField(models.FileField(max_length=255), null=True)
197197
type = models.PositiveSmallIntegerField(null=True)
198198
pdb_sha256 = models.TextField(null=True)
199199
compounds = models.ManyToManyField(

viewer/serializers.py

+1
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ class DownloadStructuresSerializer(serializers.Serializer):
832832
diff_file = serializers.BooleanField(default=False)
833833
event_file = serializers.BooleanField(default=False)
834834
sigmaa_file = serializers.BooleanField(default=False)
835+
map_info = serializers.BooleanField(default=False)
835836
sdf_info = serializers.BooleanField(default=False)
836837
single_sdf_file = serializers.BooleanField(default=False)
837838
metadata_info = serializers.BooleanField(default=False)

0 commit comments

Comments
 (0)