@@ -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