dcicutils 8.13.3.1b7__py3-none-any.whl → 8.13.3.1b8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dcicutils/scripts/update_portal_object.py +38 -13
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b8.dist-info}/METADATA +1 -1
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b8.dist-info}/RECORD +6 -6
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b8.dist-info}/LICENSE.txt +0 -0
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b8.dist-info}/WHEEL +0 -0
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b8.dist-info}/entry_points.txt +0 -0
| @@ -13,6 +13,7 @@ import glob | |
| 13 13 | 
             
            import io
         | 
| 14 14 | 
             
            import json
         | 
| 15 15 | 
             
            import os
         | 
| 16 | 
            +
            import re
         | 
| 16 17 | 
             
            import sys
         | 
| 17 18 | 
             
            from typing import Callable, List, Optional, Tuple, Union
         | 
| 18 19 | 
             
            from dcicutils.command_utils import yes_or_no
         | 
| @@ -162,6 +163,7 @@ def main(): | |
| 162 163 | 
             
                                             explicit_schema_name=explicit_schema_name,
         | 
| 163 164 | 
             
                                             update_function=patch_data,
         | 
| 164 165 | 
             
                                             update_action_name="PATCH",
         | 
| 166 | 
            +
                                             patch_delete_fields=args.delete,
         | 
| 165 167 | 
             
                                             confirm=args.confirm, verbose=args.verbose, quiet=args.quiet, debug=args.debug)
         | 
| 166 168 | 
             
                if args.upsert:
         | 
| 167 169 | 
             
                    _post_or_patch_or_upsert(portal=portal,
         | 
| @@ -169,6 +171,7 @@ def main(): | |
| 169 171 | 
             
                                             explicit_schema_name=explicit_schema_name,
         | 
| 170 172 | 
             
                                             update_function=upsert_data,
         | 
| 171 173 | 
             
                                             update_action_name="UPSERT",
         | 
| 174 | 
            +
                                             patch_delete_fields=args.delete,
         | 
| 172 175 | 
             
                                             confirm=args.confirm, verbose=args.verbose, quiet=args.quiet, debug=args.debug)
         | 
| 173 176 |  | 
| 174 177 | 
             
                if args.delete:
         | 
| @@ -202,6 +205,7 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str, | |
| 202 205 | 
             
                    return False
         | 
| 203 206 |  | 
| 204 207 | 
             
                def post_or_patch_or_upsert(portal: Portal, file: str, schema_name: Optional[str],
         | 
| 208 | 
            +
                                            patch_delete_fields: Optional[str] = None,
         | 
| 205 209 | 
             
                                            confirm: bool = False, verbose: bool = False,
         | 
| 206 210 | 
             
                                            quiet: bool = False, debug: bool = False) -> None:
         | 
| 207 211 |  | 
| @@ -213,8 +217,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str, | |
| 213 217 | 
             
                            if isinstance(schema_name, str) and schema_name:
         | 
| 214 218 | 
             
                                if debug:
         | 
| 215 219 | 
             
                                    _print(f"DEBUG: File ({file}) contains an object of type: {schema_name}")
         | 
| 216 | 
            -
                                update_function(portal, data, schema_name,  | 
| 217 | 
            -
                                                 | 
| 220 | 
            +
                                update_function(portal, data, schema_name, file=file,
         | 
| 221 | 
            +
                                                patch_delete_fields=patch_delete_fields,
         | 
| 222 | 
            +
                                                confirm=confirm, verbose=verbose, debug=debug)
         | 
| 218 223 | 
             
                            elif is_schema_name_list(portal, list(data.keys())):
         | 
| 219 224 | 
             
                                if debug:
         | 
| 220 225 | 
             
                                    _print(f"DEBUG: File ({file}) contains a dictionary of schema names.")
         | 
| @@ -223,8 +228,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str, | |
| 223 228 | 
             
                                        if debug:
         | 
| 224 229 | 
             
                                            _print(f"DEBUG: Processing {update_action_name}s for type: {schema_name}")
         | 
| 225 230 | 
             
                                        for index, item in enumerate(schema_data):
         | 
| 226 | 
            -
                                            update_function(portal, item, schema_name,  | 
| 227 | 
            -
                                                             | 
| 231 | 
            +
                                            update_function(portal, item, schema_name, file=file, index=index,
         | 
| 232 | 
            +
                                                            patch_delete_fields=patch_delete_fields,
         | 
| 233 | 
            +
                                                            confirm=confirm, verbose=verbose, debug=debug)
         | 
| 228 234 | 
             
                                    else:
         | 
| 229 235 | 
             
                                        _print(f"WARNING: File ({file}) contains schema item which is not a list: {schema_name}")
         | 
| 230 236 | 
             
                            else:
         | 
| @@ -233,8 +239,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str, | |
| 233 239 | 
             
                            if debug:
         | 
| 234 240 | 
             
                                _print(f"DEBUG: File ({file}) contains a list of objects of type: {schema_name}")
         | 
| 235 241 | 
             
                            for index, item in enumerate(data):
         | 
| 236 | 
            -
                                update_function(portal, item, schema_name,  | 
| 237 | 
            -
                                                 | 
| 242 | 
            +
                                update_function(portal, item, schema_name, file=file, index=index,
         | 
| 243 | 
            +
                                                patch_delete_fields=patch_delete_fields,
         | 
| 244 | 
            +
                                                confirm=confirm, verbose=verbose, debug=debug)
         | 
| 238 245 | 
             
                        if debug:
         | 
| 239 246 | 
             
                            _print(f"DEBUG: Processing {update_action_name} file done: {file}")
         | 
| 240 247 |  | 
| @@ -263,9 +270,10 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str, | |
| 263 270 | 
             
                    _print(f"ERROR: Cannot find file or directory: {file_or_directory}")
         | 
| 264 271 |  | 
| 265 272 |  | 
| 266 | 
            -
            def post_data(portal: Portal, data: dict, schema_name: str, | 
| 273 | 
            +
            def post_data(portal: Portal, data: dict, schema_name: str,
         | 
| 267 274 | 
             
                          file: Optional[str] = None, index: int = 0,
         | 
| 268 | 
            -
                           | 
| 275 | 
            +
                          patch_delete_fields: Optional[str] = None,  # unused here
         | 
| 276 | 
            +
                          confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
         | 
| 269 277 | 
             
                if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
         | 
| 270 278 | 
             
                    if isinstance(file, str) and isinstance(index, int):
         | 
| 271 279 | 
             
                        _print(f"ERROR: Item for POST has no identifying property: {file} (#{index + 1})")
         | 
| @@ -289,9 +297,10 @@ def post_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fals | |
| 289 297 | 
             
                    return
         | 
| 290 298 |  | 
| 291 299 |  | 
| 292 | 
            -
            def patch_data(portal: Portal, data: dict, schema_name: str, | 
| 300 | 
            +
            def patch_data(portal: Portal, data: dict, schema_name: str,
         | 
| 293 301 | 
             
                           file: Optional[str] = None, index: int = 0,
         | 
| 294 | 
            -
                            | 
| 302 | 
            +
                           patch_delete_fields: Optional[str] = None,
         | 
| 303 | 
            +
                           confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
         | 
| 295 304 | 
             
                if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
         | 
| 296 305 | 
             
                    if isinstance(file, str) and isinstance(index, int):
         | 
| 297 306 | 
             
                        _print(f"ERROR: Item for PATCH has no identifying property: {file} (#{index + 1})")
         | 
| @@ -306,6 +315,8 @@ def patch_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fal | |
| 306 315 | 
             
                if verbose:
         | 
| 307 316 | 
             
                    _print(f"PATCH {schema_name} item: {identifying_path}")
         | 
| 308 317 | 
             
                try:
         | 
| 318 | 
            +
                    if delete_fields := _parse_delete_fields(patch_delete_fields):
         | 
| 319 | 
            +
                        identifying_path += f"?delete_fields={delete_fields}"
         | 
| 309 320 | 
             
                    portal.patch_metadata(identifying_path, data)
         | 
| 310 321 | 
             
                    if debug:
         | 
| 311 322 | 
             
                        _print(f"DEBUG: PATCH {schema_name} item OK: {identifying_path}")
         | 
| @@ -315,9 +326,10 @@ def patch_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fal | |
| 315 326 | 
             
                    return
         | 
| 316 327 |  | 
| 317 328 |  | 
| 318 | 
            -
            def upsert_data(portal: Portal, data: dict, schema_name: str, | 
| 329 | 
            +
            def upsert_data(portal: Portal, data: dict, schema_name: str,
         | 
| 319 330 | 
             
                            file: Optional[str] = None, index: int = 0,
         | 
| 320 | 
            -
                             | 
| 331 | 
            +
                            patch_delete_fields: Optional[str] = None,
         | 
| 332 | 
            +
                            confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
         | 
| 321 333 | 
             
                if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
         | 
| 322 334 | 
             
                    if isinstance(file, str) and isinstance(index, int):
         | 
| 323 335 | 
             
                        _print(f"ERROR: Item for UPSERT has no identifying property: {file} (#{index + 1})")
         | 
| @@ -330,7 +342,12 @@ def upsert_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fa | |
| 330 342 | 
             
                if verbose:
         | 
| 331 343 | 
             
                    _print(f"{'PATCH' if exists else 'POST'} {schema_name} item: {identifying_path}")
         | 
| 332 344 | 
             
                try:
         | 
| 333 | 
            -
                     | 
| 345 | 
            +
                    if not exists:
         | 
| 346 | 
            +
                        portal.post_metadata(schema_name, data)
         | 
| 347 | 
            +
                    else:
         | 
| 348 | 
            +
                        if delete_fields := _parse_delete_fields(patch_delete_fields):
         | 
| 349 | 
            +
                            identifying_path += f"?delete_fields={delete_fields}"
         | 
| 350 | 
            +
                        portal.patch_metadata(identifying_path, data)
         | 
| 334 351 | 
             
                    if debug:
         | 
| 335 352 | 
             
                        _print(f"DEBUG: UPSERT {schema_name} item OK: {identifying_path}")
         | 
| 336 353 | 
             
                except Exception as e:
         | 
| @@ -396,6 +413,14 @@ def _file_names_to_ordered_file_and_schema_names(portal: Portal, | |
| 396 413 | 
             
                return ordered_results
         | 
| 397 414 |  | 
| 398 415 |  | 
| 416 | 
            +
            def _parse_delete_fields(value: str) -> str:
         | 
| 417 | 
            +
                if not isinstance(value, str):
         | 
| 418 | 
            +
                    value = []
         | 
| 419 | 
            +
                else:
         | 
| 420 | 
            +
                    value = list(set([part.strip() for part in re.split(r'[,;|\s]+', value) if part.strip()]))
         | 
| 421 | 
            +
                return ",".join(value)
         | 
| 422 | 
            +
             | 
| 423 | 
            +
             | 
| 399 424 | 
             
            def _get_schema_name_from_schema_named_json_file_name(portal: Portal, value: str) -> Optional[str]:
         | 
| 400 425 | 
             
                try:
         | 
| 401 426 | 
             
                    if not value.endswith(".json"):
         | 
| @@ -60,7 +60,7 @@ dcicutils/s3_utils.py,sha256=h2B9ftOo-kxqfiKth5ZDC_cAUFy1Pbu7BrVanFnE5Iw,28839 | |
| 60 60 | 
             
            dcicutils/schema_utils.py,sha256=GmRm-XqZKJ6qine16SQF1txcby9WougDav_sYmKNs9E,12400
         | 
| 61 61 | 
             
            dcicutils/scripts/publish_to_pypi.py,sha256=sMd4WASQGlxlh7uLrt2eGkFRXYgONVmvIg8mClMS5RQ,13903
         | 
| 62 62 | 
             
            dcicutils/scripts/run_license_checker.py,sha256=z2keYnRDZsHQbTeo1XORAXSXNJK5axVzL5LjiNqZ7jE,4184
         | 
| 63 | 
            -
            dcicutils/scripts/update_portal_object.py,sha256= | 
| 63 | 
            +
            dcicutils/scripts/update_portal_object.py,sha256=mNNcSx3qjdMdunKXnpNBZGAHrPvn4ya8-3mqfF-5fdA,20012
         | 
| 64 64 | 
             
            dcicutils/scripts/view_portal_object.py,sha256=h8COy0lcLNWF9b5spjrlQ28wfqyTTMqAeC_xpFXutus,32262
         | 
| 65 65 | 
             
            dcicutils/secrets_utils.py,sha256=8dppXAsiHhJzI6NmOcvJV5ldvKkQZzh3Fl-cb8Wm7MI,19745
         | 
| 66 66 | 
             
            dcicutils/sheet_utils.py,sha256=VlmzteONW5VF_Q4vo0yA5vesz1ViUah1MZ_yA1rwZ0M,33629
         | 
| @@ -75,8 +75,8 @@ dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769 | |
| 75 75 | 
             
            dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
         | 
| 76 76 | 
             
            dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
         | 
| 77 77 | 
             
            dcicutils/zip_utils.py,sha256=_Y9EmL3D2dUZhxucxHvrtmmlbZmK4FpSsHEb7rGSJLU,3265
         | 
| 78 | 
            -
            dcicutils-8.13.3. | 
| 79 | 
            -
            dcicutils-8.13.3. | 
| 80 | 
            -
            dcicutils-8.13.3. | 
| 81 | 
            -
            dcicutils-8.13.3. | 
| 82 | 
            -
            dcicutils-8.13.3. | 
| 78 | 
            +
            dcicutils-8.13.3.1b8.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
         | 
| 79 | 
            +
            dcicutils-8.13.3.1b8.dist-info/METADATA,sha256=YjubFoW96OmvbkZR7E5ZzC1EoBwIGE1Hh_MpQ0yJbVw,3439
         | 
| 80 | 
            +
            dcicutils-8.13.3.1b8.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
         | 
| 81 | 
            +
            dcicutils-8.13.3.1b8.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
         | 
| 82 | 
            +
            dcicutils-8.13.3.1b8.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |