Skip to content

Commit 1d98f93

Browse files
authored
Merge pull request #239 from gitnnolabs/master
Adiciona o param ``ensure_unique_name`` em def new_asset_version e de f new_version com valor padrão ``False`` para garantir não seja avaliado a unicidade dos nomes dos ativos tanto do XML quanto dos ativos(JPG, PNG e etc).
2 parents 3b0c0b7 + fac5d16 commit 1d98f93

1 file changed

Lines changed: 63 additions & 36 deletions

File tree

documentstore/domain.py

Lines changed: 63 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ def get_static_assets(xml_et):
167167
]
168168

169169
iterators = [
170-
xml_et.iterfind(path, namespaces={"xlink": "http://www.w3.org/1999/xlink"})
170+
xml_et.iterfind(path, namespaces={
171+
"xlink": "http://www.w3.org/1999/xlink"})
171172
for path in paths
172173
]
173174

@@ -281,7 +282,8 @@ def display_format(
281282
xpaths = [
282283
("article_title", ".", ".//article-meta//article-title"),
283284
("article_title", ".//article-meta//trans-title-group", ".//trans-title"),
284-
("article_title", ".//sub-article[@article-type='translation']", ".//front-stub//article-title"),
285+
("article_title",
286+
".//sub-article[@article-type='translation']", ".//front-stub//article-title"),
285287
]
286288

287289
for label, lang_xpath, content_xpath in xpaths:
@@ -348,7 +350,7 @@ def id(self):
348350
return self.manifest.get("id", "")
349351

350352
def new_version(
351-
self, data_url, assets_getter=assets_from_remote_xml, timeout=2
353+
self, data_url, assets_getter=assets_from_remote_xml, timeout=2, ensure_unique_name=False
352354
) -> None:
353355
"""Adiciona `data_url` como uma nova versão do documento.
354356
@@ -362,16 +364,18 @@ def new_version(
362364
``NonRetryableError`` para representar problemas no acesso aos dados
363365
do XML.
364366
"""
365-
latest_version = self._latest_or_default()
366-
if latest_version.get("data") == data_url:
367-
raise exceptions.VersionAlreadySet(
368-
"could not add version: the version is equal to the latest one"
369-
)
367+
if ensure_unique_name:
368+
latest_version = self._latest_or_default()
369+
if latest_version.get("data") == data_url:
370+
raise exceptions.VersionAlreadySet(
371+
"could not add version: the version is equal to the latest one"
372+
)
370373

371374
_, data_assets = assets_getter(data_url, timeout=timeout)
372375
data_assets_keys = [asset_key for asset_key, _ in data_assets]
373376
assets = self._link_assets(data_assets_keys)
374-
self.manifest = DocumentManifest.add_version(self._manifest, data_url, assets)
377+
self.manifest = DocumentManifest.add_version(
378+
self._manifest, data_url, assets)
375379

376380
def _link_assets(self, tolink: list) -> dict:
377381
"""Retorna um mapa entre as chaves dos ativos em `tolink` e as
@@ -446,15 +450,17 @@ def version_at(self, timestamp: str) -> dict:
446450
key=lambda version: version.get("timestamp", ""),
447451
)
448452
except ValueError:
449-
raise ValueError("missing version for timestamp: %s" % timestamp) from None
453+
raise ValueError("missing version for timestamp: %s" %
454+
timestamp) from None
450455

451456
if target_version.get("deleted"):
452457
return target_version
453458

454459
def _at_time(uris):
455460
try:
456461
target = max(
457-
itertools.takewhile(lambda asset: asset[0] <= timestamp, uris),
462+
itertools.takewhile(
463+
lambda asset: asset[0] <= timestamp, uris),
458464
key=lambda asset: asset[0],
459465
)
460466
except ValueError:
@@ -480,7 +486,8 @@ def _rendition_at_time(r):
480486
}
481487
return rendition
482488

483-
target_assets = {a: _at_time(u) for a, u in target_version["assets"].items()}
489+
target_assets = {a: _at_time(u)
490+
for a, u in target_version["assets"].items()}
484491
target_version["assets"] = target_assets
485492
target_renditions = [
486493
_rendition_at_time(r) for r in target_version["renditions"]
@@ -511,11 +518,13 @@ def data(
511518
no nível dos ativos digitais do documento.
512519
"""
513520
version = (
514-
self.version_at(version_at) if version_at else self.version(version_index)
521+
self.version_at(version_at) if version_at else self.version(
522+
version_index)
515523
)
516524

517525
if version.get("deleted"):
518-
raise exceptions.DeletedVersion("cannot get data: the document was deleted")
526+
raise exceptions.DeletedVersion(
527+
"cannot get data: the document was deleted")
519528

520529
xml_tree, data_assets = assets_getter(version["data"], timeout=timeout)
521530

@@ -542,19 +551,21 @@ def _latest_if_not_deleted(self, exception):
542551
else:
543552
return latest_version
544553

545-
def new_asset_version(self, asset_id, data_url) -> None:
554+
def new_asset_version(self, asset_id, data_url, ensure_unique_name=False) -> None:
546555
"""Adiciona `data_url` como uma nova versão do ativo `asset_id` vinculado
547556
a versão mais recente do documento. É importante notar que nenhuma validação
548557
será executada em `data_url`.
549558
"""
550559
latest_version = self._latest_if_not_deleted(
551-
exceptions.DeletedVersion("cannot add version: the document is deleted")
560+
exceptions.DeletedVersion(
561+
"cannot add version: the document is deleted")
552562
)
553563

554-
if latest_version.get("assets", {}).get(asset_id) == data_url:
555-
raise exceptions.VersionAlreadySet(
556-
"could not add version: the version is equal to the latest one"
557-
)
564+
if ensure_unique_name:
565+
if latest_version.get("assets", {}).get(asset_id) == data_url:
566+
raise exceptions.VersionAlreadySet(
567+
"could not add version: the version is equal to the latest one"
568+
)
558569

559570
try:
560571
self.manifest = DocumentManifest.add_asset_version(
@@ -574,7 +585,8 @@ def new_rendition_version(
574585
`data_url`, `mimetype` ou `size_bytes`.
575586
"""
576587
latest_version = self._latest_if_not_deleted(
577-
exceptions.DeletedVersion("cannot add version: the document is deleted")
588+
exceptions.DeletedVersion(
589+
"cannot add version: the document is deleted")
578590
)
579591

580592
selected_rendition = [
@@ -819,7 +831,8 @@ def volume(self):
819831
@volume.setter
820832
def volume(self, value: Union[str, int]):
821833
_value = str(value)
822-
self.manifest = BundleManifest.set_metadata(self._manifest, "volume", _value)
834+
self.manifest = BundleManifest.set_metadata(
835+
self._manifest, "volume", _value)
823836

824837
@property
825838
def pid(self):
@@ -828,7 +841,8 @@ def pid(self):
828841
@pid.setter
829842
def pid(self, value: str):
830843
_value = str(value)
831-
self.manifest = BundleManifest.set_metadata(self._manifest, "pid", _value)
844+
self.manifest = BundleManifest.set_metadata(
845+
self._manifest, "pid", _value)
832846

833847
@property
834848
def number(self):
@@ -837,7 +851,8 @@ def number(self):
837851
@number.setter
838852
def number(self, value: Union[str, int]):
839853
_value = str(value)
840-
self.manifest = BundleManifest.set_metadata(self._manifest, "number", _value)
854+
self.manifest = BundleManifest.set_metadata(
855+
self._manifest, "number", _value)
841856

842857
@property
843858
def supplement(self):
@@ -863,13 +878,15 @@ def titles(self, value: dict):
863878
"cannot set titles with value "
864879
'"%s": value must be list of dict' % value
865880
) from None
866-
self.manifest = BundleManifest.set_metadata(self._manifest, "titles", _value)
881+
self.manifest = BundleManifest.set_metadata(
882+
self._manifest, "titles", _value)
867883

868884
def add_document(self, document: str):
869885
self.manifest = BundleManifest.add_item(self._manifest, document)
870886

871887
def insert_document(self, index: int, document: str):
872-
self.manifest = BundleManifest.insert_item(self._manifest, index, document)
888+
self.manifest = BundleManifest.insert_item(
889+
self._manifest, index, document)
873890

874891
def remove_document(self, document: str):
875892
self.manifest = BundleManifest.remove_item(self._manifest, document)
@@ -930,7 +947,8 @@ def mission(self, value: List[dict]):
930947
"cannot set mission with value "
931948
'"%s": value must be list of dict' % value
932949
) from None
933-
self.manifest = BundleManifest.set_metadata(self._manifest, "mission", value)
950+
self.manifest = BundleManifest.set_metadata(
951+
self._manifest, "mission", value)
934952

935953
@property
936954
def title(self):
@@ -939,7 +957,8 @@ def title(self):
939957
@title.setter
940958
def title(self, value: str):
941959
_value = str(value)
942-
self.manifest = BundleManifest.set_metadata(self._manifest, "title", _value)
960+
self.manifest = BundleManifest.set_metadata(
961+
self._manifest, "title", _value)
943962

944963
@property
945964
def title_iso(self):
@@ -948,7 +967,8 @@ def title_iso(self):
948967
@title_iso.setter
949968
def title_iso(self, value: str):
950969
_value = str(value)
951-
self.manifest = BundleManifest.set_metadata(self._manifest, "title_iso", _value)
970+
self.manifest = BundleManifest.set_metadata(
971+
self._manifest, "title_iso", _value)
952972

953973
@property
954974
def short_title(self):
@@ -968,7 +988,8 @@ def acronym(self):
968988
@acronym.setter
969989
def acronym(self, value: str):
970990
_value = str(value)
971-
self.manifest = BundleManifest.set_metadata(self._manifest, "acronym", _value)
991+
self.manifest = BundleManifest.set_metadata(
992+
self._manifest, "acronym", _value)
972993

973994
@property
974995
def scielo_issn(self):
@@ -1052,9 +1073,11 @@ def sponsors(self, value: Tuple[dict]) -> None:
10521073
try:
10531074
value = tuple([dict(sponsor) for sponsor in value])
10541075
except TypeError:
1055-
raise TypeError("cannot set sponsors this type %s" % repr(value)) from None
1076+
raise TypeError("cannot set sponsors this type %s" %
1077+
repr(value)) from None
10561078

1057-
self.manifest = BundleManifest.set_metadata(self._manifest, "sponsors", value)
1079+
self.manifest = BundleManifest.set_metadata(
1080+
self._manifest, "sponsors", value)
10581081

10591082
@property
10601083
def metrics(self):
@@ -1068,7 +1091,8 @@ def metrics(self, value: dict):
10681091
raise TypeError(
10691092
"cannot set metrics with value " '"%s": value must be dict' % value
10701093
) from None
1071-
self.manifest = BundleManifest.set_metadata(self._manifest, "metrics", value)
1094+
self.manifest = BundleManifest.set_metadata(
1095+
self._manifest, "metrics", value)
10721096

10731097
@property
10741098
def subject_categories(self):
@@ -1168,13 +1192,15 @@ def contact(self, value: dict) -> None:
11681192
": value must be dict" % repr(value)
11691193
) from None
11701194

1171-
self.manifest = BundleManifest.set_metadata(self._manifest, "contact", value)
1195+
self.manifest = BundleManifest.set_metadata(
1196+
self._manifest, "contact", value)
11721197

11731198
def add_issue(self, issue: str) -> None:
11741199
self.manifest = BundleManifest.add_item(self._manifest, issue)
11751200

11761201
def insert_issue(self, index: int, issue: str) -> None:
1177-
self.manifest = BundleManifest.insert_item(self._manifest, index, issue)
1202+
self.manifest = BundleManifest.insert_item(
1203+
self._manifest, index, issue)
11781204

11791205
def remove_issue(self, issue: str) -> None:
11801206
self.manifest = BundleManifest.remove_item(self._manifest, issue)
@@ -1199,7 +1225,8 @@ def ahead_of_print_bundle(self) -> str:
11991225

12001226
@ahead_of_print_bundle.setter
12011227
def ahead_of_print_bundle(self, value: str) -> None:
1202-
self.manifest = BundleManifest.set_component(self._manifest, "aop", str(value))
1228+
self.manifest = BundleManifest.set_component(
1229+
self._manifest, "aop", str(value))
12031230

12041231
def remove_ahead_of_print_bundle(self) -> None:
12051232
self.manifest = BundleManifest.remove_component(self._manifest, "aop")

0 commit comments

Comments
 (0)