Replace use of simplegeneric with singledispatch
This commit is contained in:
parent
300b72e42e
commit
76a6e99f8a
@ -1,19 +1,18 @@
|
||||
"""Defines aspects for Items.
|
||||
|
||||
Aspects form intermediate items between tools and items.
|
||||
|
||||
Note: This module uses Phillip J. Eby's simplegeneric module. This
|
||||
module transforms the generic class (used as fall-back) to a generic
|
||||
function. In order to inherit from this class you should inherit from
|
||||
Class.default. The simplegeneric module is dispatching only based on
|
||||
the first argument. For Gaphas that's enough.
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
import sys
|
||||
from builtins import object
|
||||
|
||||
if sys.version_info.major >= 3: # Modern Python
|
||||
from functools import singledispatch
|
||||
else:
|
||||
from singledispatch import singledispatch
|
||||
|
||||
from gi.repository import Gdk
|
||||
from simplegeneric import generic
|
||||
|
||||
from gaphas.item import Item, Element
|
||||
|
||||
@ -31,7 +30,7 @@ class ItemFinder(object):
|
||||
return item or self.view.get_item_at_point(pos)
|
||||
|
||||
|
||||
Finder = generic(ItemFinder)
|
||||
Finder = singledispatch(ItemFinder)
|
||||
|
||||
|
||||
class ItemSelection(object):
|
||||
@ -57,7 +56,7 @@ class ItemSelection(object):
|
||||
self.view.unselect_item(self.item)
|
||||
|
||||
|
||||
Selection = generic(ItemSelection)
|
||||
Selection = singledispatch(ItemSelection)
|
||||
|
||||
|
||||
class ItemInMotion(object):
|
||||
@ -95,7 +94,7 @@ class ItemInMotion(object):
|
||||
pass
|
||||
|
||||
|
||||
InMotion = generic(ItemInMotion)
|
||||
InMotion = singledispatch(ItemInMotion)
|
||||
|
||||
|
||||
class ItemHandleFinder(object):
|
||||
@ -111,7 +110,7 @@ class ItemHandleFinder(object):
|
||||
return self.view.get_handle_at_point(pos)
|
||||
|
||||
|
||||
HandleFinder = generic(ItemHandleFinder)
|
||||
HandleFinder = singledispatch(ItemHandleFinder)
|
||||
|
||||
|
||||
class ItemHandleSelection(object):
|
||||
@ -131,10 +130,10 @@ class ItemHandleSelection(object):
|
||||
pass
|
||||
|
||||
|
||||
HandleSelection = generic(ItemHandleSelection)
|
||||
HandleSelection = singledispatch(ItemHandleSelection)
|
||||
|
||||
|
||||
@HandleSelection.when_type(Element)
|
||||
@HandleSelection.register(Element)
|
||||
class ElementHandleSelection(ItemHandleSelection):
|
||||
CURSORS = ("nw-resize", "ne-resize", "se-resize", "sw-resize")
|
||||
|
||||
@ -228,7 +227,7 @@ class ItemHandleInMotion(object):
|
||||
return None
|
||||
|
||||
|
||||
HandleInMotion = generic(ItemHandleInMotion)
|
||||
HandleInMotion = singledispatch(ItemHandleInMotion)
|
||||
|
||||
|
||||
class ItemConnector(object):
|
||||
@ -306,7 +305,7 @@ class ItemConnector(object):
|
||||
self.item.canvas.disconnect_item(self.item, self.handle)
|
||||
|
||||
|
||||
Connector = generic(ItemConnector)
|
||||
Connector = singledispatch(ItemConnector)
|
||||
|
||||
|
||||
class ItemConnectionSink(object):
|
||||
@ -338,7 +337,7 @@ class ItemConnectionSink(object):
|
||||
return port
|
||||
|
||||
|
||||
ConnectionSink = generic(ItemConnectionSink)
|
||||
ConnectionSink = singledispatch(ItemConnectionSink)
|
||||
|
||||
|
||||
##
|
||||
@ -360,7 +359,7 @@ class ItemPaintFocused(object):
|
||||
pass
|
||||
|
||||
|
||||
PaintFocused = generic(ItemPaintFocused)
|
||||
PaintFocused = singledispatch(ItemPaintFocused)
|
||||
|
||||
|
||||
# vim:sw=4:et:ai
|
||||
|
@ -3,11 +3,15 @@ Module implements guides when moving items and handles around.
|
||||
"""
|
||||
from __future__ import division
|
||||
|
||||
import sys
|
||||
from builtins import map
|
||||
from builtins import object
|
||||
from functools import reduce
|
||||
|
||||
from simplegeneric import generic
|
||||
if sys.version_info.major >= 3: # Modern Python
|
||||
from functools import singledispatch
|
||||
else:
|
||||
from singledispatch import singledispatch
|
||||
|
||||
from gaphas.aspect import InMotion, HandleInMotion, PaintFocused
|
||||
from gaphas.aspect import ItemInMotion, ItemHandleInMotion, ItemPaintFocused
|
||||
@ -35,10 +39,10 @@ class ItemGuide(object):
|
||||
return ()
|
||||
|
||||
|
||||
Guide = generic(ItemGuide)
|
||||
Guide = singledispatch(ItemGuide)
|
||||
|
||||
|
||||
@Guide.when_type(Element)
|
||||
@Guide.register(Element)
|
||||
class ElementGuide(ItemGuide):
|
||||
"""Guide to align Element items.
|
||||
|
||||
@ -53,7 +57,7 @@ class ElementGuide(ItemGuide):
|
||||
return (0, x / 2, x)
|
||||
|
||||
|
||||
@Guide.when_type(Line)
|
||||
@Guide.register(Line)
|
||||
class LineGuide(ItemGuide):
|
||||
"""Guide for orthogonal lines.
|
||||
|
||||
@ -205,7 +209,7 @@ class GuideMixin(object):
|
||||
return 0, ()
|
||||
|
||||
|
||||
@InMotion.when_type(Item)
|
||||
@InMotion.register(Item)
|
||||
class GuidedItemInMotion(GuideMixin, ItemInMotion):
|
||||
"""
|
||||
Move the item, lock position on any element that's located at the
|
||||
@ -253,7 +257,7 @@ class GuidedItemInMotion(GuideMixin, ItemInMotion):
|
||||
pass
|
||||
|
||||
|
||||
@HandleInMotion.when_type(Item)
|
||||
@HandleInMotion.register(Item)
|
||||
class GuidedItemHandleInMotion(GuideMixin, ItemHandleInMotion):
|
||||
"""Move a handle and lock the position of other elements.
|
||||
|
||||
@ -304,7 +308,7 @@ class GuidedItemHandleInMotion(GuideMixin, ItemHandleInMotion):
|
||||
pass
|
||||
|
||||
|
||||
@PaintFocused.when_type(Item)
|
||||
@PaintFocused.register(Item)
|
||||
class GuidePainter(ItemPaintFocused):
|
||||
def paint(self, context):
|
||||
try:
|
||||
|
@ -3,11 +3,16 @@ Allow for easily adding segments to lines.
|
||||
"""
|
||||
from __future__ import division
|
||||
|
||||
import sys
|
||||
from builtins import object
|
||||
from builtins import zip
|
||||
|
||||
if sys.version_info.major >= 3: # Modern Python
|
||||
from functools import singledispatch
|
||||
else:
|
||||
from singledispatch import singledispatch
|
||||
|
||||
from cairo import Matrix, ANTIALIAS_NONE
|
||||
from simplegeneric import generic
|
||||
|
||||
from gaphas.aspect import ConnectionSink
|
||||
from gaphas.aspect import HandleFinder, HandleSelection, PaintFocused
|
||||
@ -16,13 +21,13 @@ from gaphas.geometry import distance_point_point_fast, distance_line_point
|
||||
from gaphas.item import Line
|
||||
|
||||
|
||||
@generic
|
||||
@singledispatch
|
||||
class Segment(object):
|
||||
def __init__(self, item, view):
|
||||
raise TypeError
|
||||
|
||||
|
||||
@Segment.when_type(Line)
|
||||
@Segment.register(Line)
|
||||
class LineSegment(object):
|
||||
def __init__(self, item, view):
|
||||
self.item = item
|
||||
@ -168,7 +173,7 @@ class LineSegment(object):
|
||||
canvas.reconnect_item(item, handle, constraint=constraint)
|
||||
|
||||
|
||||
@HandleFinder.when_type(Line)
|
||||
@HandleFinder.register(Line)
|
||||
class SegmentHandleFinder(ItemHandleFinder):
|
||||
"""Find a handle on a line.
|
||||
|
||||
@ -193,7 +198,7 @@ class SegmentHandleFinder(ItemHandleFinder):
|
||||
return item, handle
|
||||
|
||||
|
||||
@HandleSelection.when_type(Line)
|
||||
@HandleSelection.register(Line)
|
||||
class SegmentHandleSelection(ItemHandleSelection):
|
||||
"""
|
||||
In addition to the default behaviour, merge segments if the handle
|
||||
@ -229,7 +234,7 @@ class SegmentHandleSelection(ItemHandleSelection):
|
||||
item.request_update()
|
||||
|
||||
|
||||
@PaintFocused.when_type(Line)
|
||||
@PaintFocused.register(Line)
|
||||
class LineSegmentPainter(ItemPaintFocused):
|
||||
"""
|
||||
This painter draws pseudo-handles on gaphas.item.Line
|
||||
|
34
poetry.lock
generated
34
poetry.lock
generated
@ -104,14 +104,6 @@ optional = false
|
||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4"
|
||||
version = "4.5.3"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Better living through Python with decorators"
|
||||
name = "decorator"
|
||||
optional = false
|
||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*"
|
||||
version = "4.4.0"
|
||||
|
||||
[[package]]
|
||||
category = "dev"
|
||||
description = "A platform independent file lock."
|
||||
@ -327,15 +319,16 @@ description = "pytest: simple powerful testing with Python"
|
||||
name = "pytest"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "4.5.0"
|
||||
version = "4.6.2"
|
||||
|
||||
[package.dependencies]
|
||||
atomicwrites = ">=1.0"
|
||||
attrs = ">=17.4.0"
|
||||
colorama = "*"
|
||||
pluggy = ">=0.9,<0.10 || >0.10,<1.0"
|
||||
importlib-metadata = ">=0.12"
|
||||
packaging = "*"
|
||||
pluggy = ">=0.12,<1.0"
|
||||
py = ">=1.5.0"
|
||||
setuptools = "*"
|
||||
six = ">=1.10.0"
|
||||
wcwidth = "*"
|
||||
|
||||
@ -407,14 +400,18 @@ version = "1.10.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)"
|
||||
name = "simplegeneric"
|
||||
description = "This library brings functools.singledispatch from Python 3.4 to Python 2.6-3.3."
|
||||
marker = "python_version >= \"2.7\" and python_version < \"2.8\""
|
||||
name = "singledispatch"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.8.1"
|
||||
version = "3.4.0.3"
|
||||
|
||||
[package.dependencies]
|
||||
six = "*"
|
||||
|
||||
[[package]]
|
||||
category = "dev"
|
||||
category = "main"
|
||||
description = "Python 2 and 3 compatibility utilities"
|
||||
name = "six"
|
||||
optional = false
|
||||
@ -488,7 +485,7 @@ python-versions = ">=2.7"
|
||||
version = "0.5.1"
|
||||
|
||||
[metadata]
|
||||
content-hash = "b7ea07c07cc100bc42be00a37aea7ff7175b802ddd83c25f07efac34ddd5f18b"
|
||||
content-hash = "aa6639173e680a371c3926655f034b24e0f880e3cb7434b40239f390a0c93f35"
|
||||
python-versions = "~2.7 || ^3.5"
|
||||
|
||||
[metadata.hashes]
|
||||
@ -503,7 +500,6 @@ colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d",
|
||||
configparser = ["8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32", "da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75"]
|
||||
contextlib2 = ["509f9419ee91cdd00ba34443217d5ca51f5a364a404e1dce9e8979cea969ca48", "f5260a6e679d2ff42ec91ec5252f4eeffdcf21053db9113bd0a8e4d953769c00"]
|
||||
coverage = ["0c5fe441b9cfdab64719f24e9684502a59432df7570521563d7b1aff27ac755f", "2b412abc4c7d6e019ce7c27cbc229783035eef6d5401695dccba80f481be4eb3", "3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", "39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", "3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", "42692db854d13c6c5e9541b6ffe0fe921fe16c9c446358d642ccae1462582d3b", "465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", "48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", "4ec30ade438d1711562f3786bea33a9da6107414aed60a5daa974d50a8c2c351", "5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", "5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", "6899797ac384b239ce1926f3cb86ffc19996f6fa3a1efbb23cb49e0c12d8c18c", "68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", "6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", "7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", "7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", "839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", "8e679d1bde5e2de4a909efb071f14b472a678b788904440779d2c449c0355b27", "8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", "932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", "93f965415cc51604f571e491f280cff0f5be35895b4eb5e55b47ae90c02a497b", "988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", "998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", "9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", "9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", "a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", "a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", "a9abc8c480e103dc05d9b332c6cc9fb1586330356fc14f1aa9c0ca5745097d19", "aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", "bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", "bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", "c22ab9f96cbaff05c6a84e20ec856383d27eae09e511d3e6ac4479489195861d", "c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", "c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", "c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", "ca58eba39c68010d7e87a823f22a081b5290e3e3c64714aac3c91481d8b34d22", "df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", "f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", "f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", "f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", "fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a"]
|
||||
decorator = ["86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de", "f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"]
|
||||
filelock = ["18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", "929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"]
|
||||
funcsigs = ["330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca", "a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"]
|
||||
future = ["67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8"]
|
||||
@ -521,13 +517,13 @@ py = ["64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", "dc639
|
||||
pycairo = ["70172e58b6bad7572a3518c26729b074acdde15e6fee6cbab6d3528ad552b786"]
|
||||
pygobject = ["4165d9fb4157e69c76f29e52a6d73a39a804e18ad9ef0eede15efd9c57c52bf2"]
|
||||
pyparsing = ["1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", "9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03"]
|
||||
pytest = ["1a8aa4fa958f8f451ac5441f3ac130d9fc86ea38780dd2715e6d5c5882700b24", "b8bf138592384bd4e87338cb0f256bf5f615398a649d4bd83915f0e4047a5ca6"]
|
||||
pytest = ["6032845e68a17a96e8da3088037f899b56357769a724122056265ca2ea1890ee", "bea27a646a3d74cbbcf8d3d4a06b2dfc336baf3dc2cc85cf70ad0157e73e8322"]
|
||||
pytest-cov = ["2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", "e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a"]
|
||||
pytest-runner = ["175d3d9271332b54df0190bec59c3614676f6895ad1056aa391ed034e03f95f6", "d1cb3d654b120d6124914bc33dcd25679860464545e4509bb6bf96eed5a2f1ef"]
|
||||
pytest-sugar = ["26cf8289fe10880cbbc130bd77398c4e6a8b936d8393b116a5c16121d95ab283", "fcd87a74b2bce5386d244b49ad60549bfbc4602527797fac167da147983f58ab"]
|
||||
pyyaml = ["1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", "436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", "460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", "5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", "7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", "9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", "a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", "aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", "c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", "c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", "e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19"]
|
||||
scandir = ["2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e", "2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022", "2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f", "2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f", "4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae", "67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173", "7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4", "8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32", "92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188", "b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d", "cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"]
|
||||
simplegeneric = ["dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173"]
|
||||
singledispatch = ["5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c", "833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8"]
|
||||
six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"]
|
||||
termcolor = ["1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"]
|
||||
toml = ["229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", "235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e", "f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"]
|
||||
|
@ -28,10 +28,10 @@ classifiers = [
|
||||
# Requirements
|
||||
[tool.poetry.dependencies]
|
||||
python = "~2.7 || ^3.5"
|
||||
simplegeneric = "^0.8.1"
|
||||
PyGObject = "^3.20.0"
|
||||
pycairo = "^1.10.0"
|
||||
future = "^0.17.0"
|
||||
singledispatch = { version = "~3.4.0", python = "~2.7" }
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
pytest = "^4.0"
|
||||
|
2
setup.py
2
setup.py
@ -51,10 +51,10 @@ setup(
|
||||
packages=find_packages(),
|
||||
setup_requires=["setuptools-git >= 0.3.4"] + pytest_runner + pytest_cov,
|
||||
install_requires=[
|
||||
"simplegeneric >= 0.6",
|
||||
"PyGObject >= 3.20.0",
|
||||
"pycairo >= 1.10.0",
|
||||
"future >= 0.17.0",
|
||||
"singledispatch >= 3.4.0; python_version == '2.7'",
|
||||
],
|
||||
zip_safe=False,
|
||||
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
|
||||
|
Loading…
x
Reference in New Issue
Block a user