|
| 1 | +import string |
| 2 | + |
1 | 3 | from flask import request |
2 | 4 | from marshmallow import EXCLUDE |
3 | 5 | from webargs.flaskparser import parser |
4 | 6 | from webargs import fields |
5 | 7 | import sqlalchemy.sql.expression as sae |
6 | 8 | from sqlalchemy.orm import joinedload |
| 9 | +from sqlalchemy.sql import func |
| 10 | + |
7 | 11 |
|
8 | 12 | from .utils import view_maker |
9 | 13 | from .base import BaseView, ObjectView, ListView |
@@ -216,7 +220,7 @@ def post(self): |
216 | 220 | filter_params = { |
217 | 221 | k: study_data.get(k) |
218 | 222 | for k in search_keys |
219 | | - if study_data.get(k) is not None |
| 223 | + if study_data.get(k) |
220 | 224 | } |
221 | 225 | if "name" in filter_params and (set(filter_params) - {"name"}) != set(): |
222 | 226 | del filter_params["name"] |
@@ -393,28 +397,34 @@ def pre_nested_record_update(record): |
393 | 397 | return record |
394 | 398 |
|
395 | 399 | query = BaseStudy.query |
396 | | - has_doi = has_pmid = False |
| 400 | + has_doi = has_pmid = has_name = False |
397 | 401 | base_study = None |
398 | 402 | if record.doi: |
399 | 403 | query = query.filter_by(doi=record.doi) |
400 | 404 | has_doi = True |
401 | 405 | if record.pmid: |
402 | 406 | query = query.filter_by(pmid=record.pmid) |
403 | 407 | has_pmid = True |
| 408 | + if record.name and not record.doi and not record.pmid: |
| 409 | + name_search = func.regexp_replace( |
| 410 | + record.name, r'[' + string.punctuation + ']', '', 'g' |
| 411 | + ) |
| 412 | + query = query.filter(BaseStudy.name.ilike(f"%{name_search}%")) |
| 413 | + has_name = True |
404 | 414 |
|
405 | | - if query.count() >= 1 and (has_doi or has_pmid): |
| 415 | + if query.count() >= 1 and (has_doi or has_pmid or has_name): |
406 | 416 | base_study = query.first() |
407 | 417 | elif has_doi or has_pmid: |
408 | 418 | base_study = BaseStudy( |
409 | 419 | name=record.name, |
410 | | - doi=record.doi, |
| 420 | + doi=record.doi if record.doi else None, |
411 | 421 | pmid=record.pmid, |
412 | 422 | description=record.description, |
413 | 423 | publication=record.publication, |
414 | 424 | year=record.year, |
415 | | - level=record.level, |
416 | 425 | authors=record.authors, |
417 | 426 | metadata_=record.metadata_, |
| 427 | + level=record.level if record.level else "group", |
418 | 428 | ) |
419 | 429 | else: |
420 | 430 | # there is no published study to associate |
|
0 commit comments