Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add/remove layers/controls/objects over map using += and -= operators #5

Merged
merged 1 commit into from
Feb 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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


40 changes: 40 additions & 0 deletions here_map_widget/map.py
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand All @@ -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:
Expand All @@ -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])
Expand All @@ -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])
Expand Down Expand Up @@ -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
22 changes: 11 additions & 11 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__))

Expand All @@ -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 = [
Expand All @@ -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:
Expand Down