From eb02e9dcd239b44eaede0c3ebcd9102c1a26484a Mon Sep 17 00:00:00 2001 From: "Kharude, Sachin" Date: Sun, 28 Feb 2021 12:38:11 +0530 Subject: [PATCH] add/remove layers/controls/objects over map using += and -= operators Signed-off-by: Kharude, Sachin --- Makefile | 8 ++++---- here_map_widget/map.py | 40 ++++++++++++++++++++++++++++++++++++++++ setup.py | 22 +++++++++++----------- 3 files changed, 55 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 58a8394..eca0373 100644 --- a/Makefile +++ b/Makefile @@ -28,11 +28,11 @@ clean-test: ## remove test and coverage artifacts find . -name '.ipynb_checkpoints' -exec rm -fr {} + black: - black -l 99 here_map_widget/*.py - isort --atomic here_map_widget/*.py + black -l 99 *.py + isort --atomic *.py lint: - isort --check --diff here_map_widget/*.py - black -l 99 --diff --check here_map_widget/*.py + isort --check --diff *.py + black -l 99 --diff --check *.py diff --git a/here_map_widget/map.py b/here_map_widget/map.py index 7263b0e..0047fe4 100644 --- a/here_map_widget/map.py +++ b/here_map_widget/map.py @@ -1836,11 +1836,13 @@ def _validate_layers(self, proposal): return proposal.value def add_layer(self, layer): + """Add layer from map.""" if layer.model_id in self._layer_ids: raise Exception("layer already on map: %r" % layer) self.layers = tuple([l for l in self.layers] + [layer]) def remove_layer(self, layer): + """Remove layer from map.""" if layer.model_id not in self._layer_ids: raise Exception("layer not on map: %r" % layer) self.layers = tuple([l for l in self.layers if l.model_id != layer.model_id]) @@ -1860,11 +1862,13 @@ def _validate_objects(self, proposal): return proposal.value def add_object(self, object): + """Add object to map.""" if object.model_id in self._object_ids: raise Exception("object already on map: %r" % object) self.objects = tuple([o for o in self.objects] + [object]) def add_objects(self, objects: list): + """Add objects to map.""" cur_objs = list(self.objects) for object in objects: if object.model_id in self._object_ids: @@ -1873,6 +1877,7 @@ def add_objects(self, objects: list): self.objects = tuple(cur_objs) def remove_object(self, object): + """Remove object from map.""" if object.model_id not in self._object_ids: raise Exception("object not on map: %r" % object) self.objects = tuple([o for o in self.objects if o.model_id != object.model_id]) @@ -1892,11 +1897,13 @@ def _validate_controls(self, proposal): return proposal.value def add_control(self, control): + """Add control to map.""" if control.model_id in self._control_ids: raise Exception("control already on map: %r" % control) self.controls = tuple([o for o in self.controls] + [control]) def remove_control(self, control): + """Remove control from map.""" if control.model_id not in self._control_ids: raise Exception("control not on map: %r" % control) self.controls = tuple([o for o in self.controls if o.model_id != control.model_id]) @@ -1930,3 +1937,36 @@ def remove_bubble(self, bubble): if bubble.model_id not in self._bubble_ids: raise Exception("control not on map: %r" % bubble) self.bubbles = tuple([b for b in self.bubbles if b.model_id != bubble.model_id]) + + def __iadd__(self, item): + if isinstance(item, Layer): + self.add_layer(item) + elif isinstance(item, Control): + self.add_control(item) + elif isinstance(item, Object): + self.add_object(item) + elif isinstance(item, InfoBubble): + self.add_bubble(item) + return self + + def __isub__(self, item): + if isinstance(item, Layer): + self.remove_layer(item) + elif isinstance(item, Control): + self.remove_control(item) + elif isinstance(item, Object): + self.remove_object(item) + elif isinstance(item, InfoBubble): + self.remove_bubble(item) + return self + + def __add__(self, item): + if isinstance(item, Layer): + self.add_layer(item) + elif isinstance(item, Control): + self.add_control(item) + elif isinstance(item, Object): + self.add_object(item) + elif isinstance(item, InfoBubble): + self.add_bubble(item) + return self diff --git a/setup.py b/setup.py index 9e53cdf..eec4f52 100644 --- a/setup.py +++ b/setup.py @@ -3,19 +3,19 @@ """Project setup file.""" -import os import json +import os from distutils import log -from setuptools import setup, find_packages from jupyter_packaging import ( + combine_commands, create_cmdclass, - install_npm, ensure_targets, - combine_commands, get_version, - skip_if_exists + install_npm, + skip_if_exists, ) +from setuptools import find_packages, setup here = os.path.dirname(os.path.abspath(__file__)) @@ -33,8 +33,8 @@ # Representative files that should exist after a successful build jstargets = [ - os.path.join('here_map_widget/nbextension', 'index.js'), - os.path.join('here_map_widget/labextension', 'package.json'), + os.path.join("here_map_widget/nbextension", "index.js"), + os.path.join("here_map_widget/labextension", "package.json"), ] data_files_spec = [ @@ -49,14 +49,14 @@ cmdclass = create_cmdclass("jsdeps", data_files_spec=data_files_spec) js_command = combine_commands( - install_npm(js_dir, npm=["yarn"], build_cmd='build:extensions'), ensure_targets(jstargets), + install_npm(js_dir, npm=["yarn"], build_cmd="build:extensions"), ensure_targets(jstargets), ) -is_repo = os.path.exists(os.path.join(here, '.git')) +is_repo = os.path.exists(os.path.join(here, ".git")) if is_repo: - cmdclass['jsdeps'] = js_command + cmdclass["jsdeps"] = js_command else: - cmdclass['jsdeps'] = skip_if_exists(jstargets, js_command) + cmdclass["jsdeps"] = skip_if_exists(jstargets, js_command) # Get the core dependencies and installs with open(os.path.join(here, "requirements.txt"), encoding="utf-8") as f: