(feat_range=default_range, num_feat=0, num_saved=0)
| 618 | progress_interval = progress |
| 619 | |
| 620 | def _save(feat_range=default_range, num_feat=0, num_saved=0): |
| 621 | if feat_range: |
| 622 | layer_iter = self.layer[feat_range] |
| 623 | else: |
| 624 | layer_iter = self.layer |
| 625 | |
| 626 | for feat in layer_iter: |
| 627 | num_feat += 1 |
| 628 | # Getting the keyword arguments |
| 629 | try: |
| 630 | kwargs = self.feature_kwargs(feat) |
| 631 | except LayerMapError as msg: |
| 632 | # Something borked the validation |
| 633 | if strict: |
| 634 | raise |
| 635 | elif not silent: |
| 636 | stream.write( |
| 637 | "Ignoring Feature ID %s because: %s\n" % (feat.fid, msg) |
| 638 | ) |
| 639 | else: |
| 640 | # Constructing the model using the keyword args |
| 641 | is_update = False |
| 642 | if self.unique: |
| 643 | # If we want unique models on a particular field, |
| 644 | # handle the geometry appropriately. |
| 645 | try: |
| 646 | # Getting the keyword arguments and retrieving |
| 647 | # the unique model. |
| 648 | u_kwargs = self.unique_kwargs(kwargs) |
| 649 | m = self.model.objects.using(self.using).get(**u_kwargs) |
| 650 | is_update = True |
| 651 | |
| 652 | # Getting the geometry (in OGR form), creating |
| 653 | # one from the kwargs WKT, adding in additional |
| 654 | # geometries, and update the attribute with the |
| 655 | # just-updated geometry WKT. |
| 656 | geom_value = getattr(m, self.geom_field) |
| 657 | if geom_value is None: |
| 658 | geom = OGRGeometry(kwargs[self.geom_field]) |
| 659 | else: |
| 660 | geom = geom_value.ogr |
| 661 | new = OGRGeometry(kwargs[self.geom_field]) |
| 662 | for g in new: |
| 663 | geom.add(g) |
| 664 | setattr(m, self.geom_field, geom.wkt) |
| 665 | except ObjectDoesNotExist: |
| 666 | # No unique model exists yet, create. |
| 667 | m = self.model(**kwargs) |
| 668 | else: |
| 669 | m = self.model(**kwargs) |
| 670 | |
| 671 | try: |
| 672 | # Attempting to save. |
| 673 | m.save(using=self.using) |
| 674 | num_saved += 1 |
| 675 | if verbose: |
| 676 | stream.write( |
| 677 | "%s: %s\n" % ("Updated" if is_update else "Saved", m) |
no test coverage detected