From b5d3cafb691c1b189b2edb93d5b4f247fba0ea9d Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sun, 22 Nov 2020 10:32:57 +0100 Subject: [PATCH 1/2] enamlx: fix use of function that was removed upstream --- .../python-modules/enamlx/default.nix | 6 + .../enamlx/replace-unicode-with-str.patch | 274 ++++++++++++++++++ 2 files changed, 280 insertions(+) create mode 100644 pkgs/development/python-modules/enamlx/replace-unicode-with-str.patch diff --git a/pkgs/development/python-modules/enamlx/default.nix b/pkgs/development/python-modules/enamlx/default.nix index a9cfafa020e2..344000fa118e 100644 --- a/pkgs/development/python-modules/enamlx/default.nix +++ b/pkgs/development/python-modules/enamlx/default.nix @@ -17,6 +17,12 @@ buildPythonPackage rec { sha256 = "1rlrx3cw6h1zl9svnqbzwdfy8469qa1y7w6576lbhdwpfhpipscy"; }; + patches = [ + # Minimally modified version of https://github.com/frmdstryr/enamlx/commit/16df11227b8cee724624541d274e481802ea67e3 + # (without the change to setup.py), already on master and expected in the first post-0.4.3 release + ./replace-unicode-with-str.patch + ]; + propagatedBuildInputs = [ enaml # Until https://github.com/inkcut/inkcut/issues/105 perhaps diff --git a/pkgs/development/python-modules/enamlx/replace-unicode-with-str.patch b/pkgs/development/python-modules/enamlx/replace-unicode-with-str.patch new file mode 100644 index 000000000000..52df6e9a50e6 --- /dev/null +++ b/pkgs/development/python-modules/enamlx/replace-unicode-with-str.patch @@ -0,0 +1,274 @@ +From 16df11227b8cee724624541d274e481802ea67e3 Mon Sep 17 00:00:00 2001 +From: frmdstryr +Date: Tue, 3 Nov 2020 21:41:52 -0500 +Subject: [PATCH] Replace Unicode with Str + +--- + enamlx/widgets/abstract_item.py | 4 ++-- + enamlx/widgets/console.py | 4 ++-- + enamlx/widgets/graphics_view.py | 8 ++++---- + enamlx/widgets/plot_area.py | 14 +++++++------- + examples/occ_viewer/advanced.enaml | 12 ++++++------ + examples/occ_viewer/occ/part.py | 6 +++--- + examples/plot_area/plot_area.enaml | 2 +- + examples/table_view/table_view.enaml | 6 +++--- + examples/tree_view/tree_view.enaml | 6 +++--- + setup.py | 2 +- + 10 files changed, 32 insertions(+), 32 deletions(-) + +diff --git a/enamlx/widgets/abstract_item.py b/enamlx/widgets/abstract_item.py +index 29a3d87..67a5c6e 100644 +--- a/enamlx/widgets/abstract_item.py ++++ b/enamlx/widgets/abstract_item.py +@@ -6,7 +6,7 @@ + Created on Aug 24, 2015 + """ + from atom.api import ( +- Int, Enum, Bool, Unicode, Typed, ++ Int, Enum, Bool, Str, Typed, + Coerced, Event, Property, ForwardInstance, observe + ) + from enaml.icon import Icon +@@ -96,7 +96,7 @@ class AbstractWidgetItem(AbstractWidgetItemGroup): + column = d_(Int(), writable=False) + + #: Text to display within the cell +- text = d_(Unicode()) ++ text = d_(Str()) + + #: Text alignment within the cell + text_alignment = d_(Enum(*[(h, v) +diff --git a/enamlx/widgets/console.py b/enamlx/widgets/console.py +index bc61e90..2f1e981 100644 +--- a/enamlx/widgets/console.py ++++ b/enamlx/widgets/console.py +@@ -7,7 +7,7 @@ + """ + + from atom.api import ( +- Instance, Coerced, Int, Enum, Unicode, Dict, Bool, ++ Instance, Coerced, Int, Enum, Str, Dict, Bool, + Typed, ForwardTyped, observe + ) + from enaml.core.api import d_ +@@ -47,7 +47,7 @@ class Console(Container): + proxy = Typed(ProxyConsole) + + #: Font family, leave blank for default +- font_family = d_(Unicode()) ++ font_family = d_(Str()) + + #: Font size, leave 0 for default + font_size = d_(Int(0)) +diff --git a/enamlx/widgets/graphics_view.py b/enamlx/widgets/graphics_view.py +index f7e3e47..e672c63 100644 +--- a/enamlx/widgets/graphics_view.py ++++ b/enamlx/widgets/graphics_view.py +@@ -7,7 +7,7 @@ + import sys + from atom.api import ( + Atom, Float, Int, Typed, Bool, Coerced, ForwardTyped, Enum, List, IntEnum, +- Instance, Unicode, Value, Event, Property, observe, set_default ++ Instance, Str, Value, Event, Property, observe, set_default + ) + from enaml.colors import ColorMember + from enaml.core.declarative import d_, d_func +@@ -419,10 +419,10 @@ class GraphicsItem(ToolkitObject, ConstrainableMixin): + visible = d_(Bool(True)) + + #: Tool tip +- tool_tip = d_(Unicode()) ++ tool_tip = d_(Str()) + + #: Status tip +- status_tip = d_(Unicode()) ++ status_tip = d_(Str()) + + # -------------------------------------------------------------------------- + # Item interaction +@@ -919,7 +919,7 @@ class GraphicsTextItem(AbstractGraphicsShapeItem): + proxy = Typed(ProxyGraphicsTextItem) + + #: Text +- text = d_(Unicode()) ++ text = d_(Str()) + + #: Font + font = d_(FontMember()) +diff --git a/enamlx/widgets/plot_area.py b/enamlx/widgets/plot_area.py +index 5136693..383957b 100644 +--- a/enamlx/widgets/plot_area.py ++++ b/enamlx/widgets/plot_area.py +@@ -8,7 +8,7 @@ + import sys + from atom.atom import set_default + from atom.api import (Callable, Int, Tuple, Instance, Enum, Float, +- ContainerList, Bool, FloatRange, Unicode, Dict, Typed, ++ ContainerList, Bool, FloatRange, Str, Dict, Typed, + ForwardTyped, observe) + from enaml.core.declarative import d_ + from enaml.widgets.api import Container +@@ -41,10 +41,10 @@ class PlotArea(Container): + + class PlotItem(Control): + #: Title of data series +- title = d_(Unicode()) ++ title = d_(Str()) + + #: Name +- name = d_(Unicode()) ++ name = d_(Str()) + + #: Row in plot area + row = d_(Int(0)) +@@ -89,10 +89,10 @@ class PlotItem(Control): + #: Show legend + show_legend = d_(Bool(False)) + +- label_left = d_(Unicode()) +- label_right = d_(Unicode()) +- label_top = d_(Unicode()) +- label_bottom = d_(Unicode()) ++ label_left = d_(Str()) ++ label_right = d_(Str()) ++ label_top = d_(Str()) ++ label_bottom = d_(Str()) + + # H, V + grid = d_(Tuple(bool, default=(False, False))) +diff --git a/examples/occ_viewer/advanced.enaml b/examples/occ_viewer/advanced.enaml +index 872d44d..f1c48d5 100644 +--- a/examples/occ_viewer/advanced.enaml ++++ b/examples/occ_viewer/advanced.enaml +@@ -15,7 +15,7 @@ is then used to unroll a list of these controls into the body of a form. + + << autodoc-me >> + """ +-from atom.api import Atom, Bool, Enum, Event, Float, Int, Str, Unicode ++from atom.api import Atom, Bool, Enum, Event, Float, Int, Str, Str + + from enaml.core.api import DynamicTemplate + from enaml.stdlib.fields import FloatField +@@ -73,8 +73,8 @@ template FormControl(Attr, MemberType: Str): + text :: setattr(model, Attr, str(text)) + + +-template FormControl(Attr, MemberType: Unicode): +- """ A form control template specialization for Unicode members. ++template FormControl(Attr, MemberType: Str): ++ """ A form control template specialization for Str members. + + This control uses a Field to represent the value. + +@@ -174,7 +174,7 @@ def form_spec(obtype, model): + + typemap = {int:Int, + float:Float, +- unicode:Unicode, ++ unicode:Str, + str:Str} + for name, member in obtype.members().iteritems(): + if (not name.startswith('_') +@@ -263,14 +263,14 @@ class FooModel(Atom): + ham = Int(42) + first = Str('first') + last = Str('last') +- owner = Unicode('owner') ++ owner = Str('owner') + time = Float(42.56) + click = Bool() + clack = Bool() + + + class BarModel(Atom): +- name = Unicode('name') ++ name = Str('name') + trigger = Event() + choices = Enum('first', 'second', 'third') + def _observe_trigger(self, change): +diff --git a/examples/occ_viewer/occ/part.py b/examples/occ_viewer/occ/part.py +index 1fe2b85..144354f 100644 +--- a/examples/occ_viewer/occ/part.py ++++ b/examples/occ_viewer/occ/part.py +@@ -5,7 +5,7 @@ + ''' + + from atom.api import ( +- Typed, ForwardTyped, Unicode ++ Typed, ForwardTyped, Str + ) + from enaml.core.declarative import d_ + +@@ -26,10 +26,10 @@ class Part(ToolkitObject): + proxy = Typed(ProxyPart) + + #: Optional name of the part +- name = d_(Unicode()) ++ name = d_(Str()) + + #: Optional description of the part +- description = d_(Unicode()) ++ description = d_(Str()) + + @property + def shapes(self): +diff --git a/examples/plot_area/plot_area.enaml b/examples/plot_area/plot_area.enaml +index 2085c8f..b5cd3c4 100644 +--- a/examples/plot_area/plot_area.enaml ++++ b/examples/plot_area/plot_area.enaml +@@ -2,7 +2,7 @@ + Demonstrating the examples from pyqtgraph + """ + +-from atom.api import (Atom, Unicode, Range, List, Bool) ++from atom.api import (Atom, Str, Range, List, Bool) + + from enaml.widgets.api import ( + Window, Container, DockArea,DockItem,PushButton, CheckBox, RadioButton +diff --git a/examples/table_view/table_view.enaml b/examples/table_view/table_view.enaml +index 6d7a35e..6fef544 100644 +--- a/examples/table_view/table_view.enaml ++++ b/examples/table_view/table_view.enaml +@@ -2,7 +2,7 @@ import os + import time + import random + from threading import Thread +-from atom.api import (Atom, Unicode, Range, ContainerList, Bool) ++from atom.api import (Atom, Str, Range, ContainerList, Bool) + + from enamlx.widgets.table_view import ( + TableView, TableViewRow, TableViewItem +@@ -38,9 +38,9 @@ class Person(Atom): + """ A simple class representing a person object. + + """ +- last_name = Unicode() ++ last_name = Str() + +- first_name = Unicode() ++ first_name = Str() + + age = Range(low=0) + +diff --git a/examples/tree_view/tree_view.enaml b/examples/tree_view/tree_view.enaml +index 37f991f..e88e1fd 100644 +--- a/examples/tree_view/tree_view.enaml ++++ b/examples/tree_view/tree_view.enaml +@@ -1,5 +1,5 @@ + import os +-from atom.api import (Atom, Unicode, Range, List, Bool, ForwardInstance) ++from atom.api import (Atom, Str, Range, List, Bool, ForwardInstance) + + from enamlx.widgets.api import ( + TreeView, TreeViewItem, TreeViewColumn, +@@ -33,9 +33,9 @@ class Person(Atom): + """ A simple class representing a person object. + + """ +- last_name = Unicode() ++ last_name = Str() + +- first_name = Unicode() ++ first_name = Str() + + children = List(ForwardInstance(lambda:Person)) From 297d1d6b83c92c4f6942c6479f176d8004a819dd Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Mon, 14 Sep 2020 13:42:17 +0200 Subject: [PATCH 2/2] inkscape: add inkcut extension --- .../graphics/inkscape/extensions.nix | 6 ++ ...e-clash-between-inkcut-and-extension.patch | 85 +++++++++++++++++++ pkgs/applications/misc/inkcut/default.nix | 15 ++++ 3 files changed, 106 insertions(+) create mode 100644 pkgs/applications/misc/inkcut/avoid-name-clash-between-inkcut-and-extension.patch diff --git a/pkgs/applications/graphics/inkscape/extensions.nix b/pkgs/applications/graphics/inkscape/extensions.nix index 66a758f9fe51..013d3bec3527 100644 --- a/pkgs/applications/graphics/inkscape/extensions.nix +++ b/pkgs/applications/graphics/inkscape/extensions.nix @@ -1,5 +1,7 @@ { stdenv , fetchFromGitHub +, runCommand +, inkcut }: { @@ -34,4 +36,8 @@ platforms = platforms.all; }; }; + inkcut = (runCommand "inkcut-inkscape-plugin" {} '' + mkdir -p $out/share/inkscape/extensions + cp ${inkcut}/share/inkscape/extensions/* $out/share/inkscape/extensions + ''); } diff --git a/pkgs/applications/misc/inkcut/avoid-name-clash-between-inkcut-and-extension.patch b/pkgs/applications/misc/inkcut/avoid-name-clash-between-inkcut-and-extension.patch new file mode 100644 index 000000000000..34e4e6f0e7fb --- /dev/null +++ b/pkgs/applications/misc/inkcut/avoid-name-clash-between-inkcut-and-extension.patch @@ -0,0 +1,85 @@ +From ddc1f9e63e7a769c71131b56f6a2a011c649635c Mon Sep 17 00:00:00 2001 +From: Arnout Engelen +Date: Tue, 24 Nov 2020 15:34:40 +0100 +Subject: [PATCH] Avoid name clash between inkscape plugin and inkcut itself + +Ohterwise, with an unfortunate PYTONPATH, inkcut would no longer +start since it'd try to invoke the inkcut.py from the extension +instead of the main application +--- + plugins/inkscape/{inkcut.py => inkcut4inkscape.py} | 2 +- + plugins/inkscape/inkcut_cut.inx | 2 +- + plugins/inkscape/inkcut_cut.py | 2 +- + plugins/inkscape/inkcut_open.inx | 2 +- + plugins/inkscape/inkcut_open.py | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + rename plugins/inkscape/{inkcut.py => inkcut4inkscape.py} (98%) + +diff --git a/plugins/inkscape/inkcut.py b/plugins/inkscape/inkcut4inkscape.py +similarity index 98% +rename from plugins/inkscape/inkcut.py +rename to plugins/inkscape/inkcut4inkscape.py +index 5b90475..7dc8d86 100644 +--- a/plugins/inkscape/inkcut.py ++++ b/plugins/inkscape/inkcut4inkscape.py +@@ -2,7 +2,7 @@ + # -*- coding: utf-8 -*- + """ + Inkcut, Plot HPGL directly from Inkscape. +- inkcut.py ++ inkcut4inkscape.py + + Copyright 2018 The Inkcut Team + +diff --git a/plugins/inkscape/inkcut_cut.inx b/plugins/inkscape/inkcut_cut.inx +index 4b44ae5..3db8721 100644 +--- a/plugins/inkscape/inkcut_cut.inx ++++ b/plugins/inkscape/inkcut_cut.inx +@@ -2,7 +2,7 @@ + <_name>Cut selection... + org.ekips.filter.inkcut.cut + inkcut_cut.py +- inkcut.py ++ inkcut4inkscape.py + inkex.py + + all +diff --git a/plugins/inkscape/inkcut_cut.py b/plugins/inkscape/inkcut_cut.py +index acaf812..777629a 100644 +--- a/plugins/inkscape/inkcut_cut.py ++++ b/plugins/inkscape/inkcut_cut.py +@@ -37,7 +37,7 @@ + else: + inkex.localize() + import subprocess +-from inkcut import contains_text, convert_objects_to_paths ++from inkcut4inkscape import contains_text, convert_objects_to_paths + + + +diff --git a/plugins/inkscape/inkcut_open.inx b/plugins/inkscape/inkcut_open.inx +index 45ee585..2dcd38e 100644 +--- a/plugins/inkscape/inkcut_open.inx ++++ b/plugins/inkscape/inkcut_open.inx +@@ -2,7 +2,7 @@ + <_name>Open current document... + org.ekips.filter.inkcut.open + inkcut_open.py +- inkcut.py ++ inkcut4inkscape.py + inkex.py + + all +diff --git a/plugins/inkscape/inkcut_open.py b/plugins/inkscape/inkcut_open.py +index b4652eb..e4c2d62 100644 +--- a/plugins/inkscape/inkcut_open.py ++++ b/plugins/inkscape/inkcut_open.py +@@ -38,7 +38,7 @@ + inkex.localize() + import subprocess + +-from inkcut import convert_objects_to_paths ++from inkcut4inkscape import convert_objects_to_paths + + DEBUG = False + try: diff --git a/pkgs/applications/misc/inkcut/default.nix b/pkgs/applications/misc/inkcut/default.nix index cfb10cfbe2f0..481069feac07 100644 --- a/pkgs/applications/misc/inkcut/default.nix +++ b/pkgs/applications/misc/inkcut/default.nix @@ -17,6 +17,12 @@ buildPythonApplication rec { sha256 = "1zn5i69f3kimcwdd2qkqd3hd1hq76a6i5wxxfb91ih2hj04vdbmx"; }; + patches = [ + # https://github.com/inkcut/inkcut/pull/292 but downloaded + # because of https://github.com/NixOS/nixpkgs/issues/32084 + ./avoid-name-clash-between-inkcut-and-extension.patch + ]; + nativeBuildInputs = [ wrapQtAppsHook ]; propagatedBuildInputs = [ @@ -49,6 +55,15 @@ buildPythonApplication rec { dontWrapQtApps = true; makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ]; + postInstall = '' + mkdir -p $out/share/inkscape/extensions + + cp plugins/inkscape/* $out/share/inkscape/extensions + + sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_cut.py + sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_open.py + ''; + meta = with lib; { homepage = "https://www.codelv.com/projects/inkcut/"; description = "Control 2D plotters, cutters, engravers, and CNC machines";