From b6d4e3e558d84ee7b211ed9332fe9b7002cb8ec2 Mon Sep 17 00:00:00 2001 From: hut Date: Sat, 23 Jan 2010 00:43:43 +0100 Subject: added unique function, moved flatten to ext/iter_tools --- ranger/ext/flatten.py | 29 ---------------------------- ranger/ext/iter_tools.py | 43 ++++++++++++++++++++++++++++++++++++++++++ ranger/gui/curses_shortcuts.py | 2 +- 3 files changed, 44 insertions(+), 30 deletions(-) delete mode 100644 ranger/ext/flatten.py create mode 100644 ranger/ext/iter_tools.py diff --git a/ranger/ext/flatten.py b/ranger/ext/flatten.py deleted file mode 100644 index 55d3e82f..00000000 --- a/ranger/ext/flatten.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2009, 2010 hut -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from collections import deque - -def flatten(lst): - """ - Flatten an iterable. - - All contained tuples, lists, deques and sets are replaced by their - elements and flattened as well. - """ - for elem in lst: - if isinstance(elem, (tuple, list, set, deque)): - for subelem in flatten(elem): - yield subelem - else: - yield elem diff --git a/ranger/ext/iter_tools.py b/ranger/ext/iter_tools.py new file mode 100644 index 00000000..913b9c7d --- /dev/null +++ b/ranger/ext/iter_tools.py @@ -0,0 +1,43 @@ +# Copyright (c) 2009, 2010 hut +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +from collections import deque + +def flatten(lst): + """ + Flatten an iterable. + + All contained tuples, lists, deques and sets are replaced by their + elements and flattened as well. + """ + for elem in lst: + if isinstance(elem, (tuple, list, set, deque)): + for subelem in flatten(elem): + yield subelem + else: + yield elem + +def unique(iterable): + """ + Return an iterable of the same type which contains unique items. + + This function assumes that: + type(iterable)(list(iterable)) == iterable + which is true for tuples, lists and deques (but not for strings) + """ + already_seen = [] + for item in iterable: + if item not in already_seen: + already_seen.append(item) + return type(iterable)(already_seen) diff --git a/ranger/gui/curses_shortcuts.py b/ranger/gui/curses_shortcuts.py index 1ccaddc3..2bf70da9 100644 --- a/ranger/gui/curses_shortcuts.py +++ b/ranger/gui/curses_shortcuts.py @@ -14,7 +14,7 @@ import _curses -from ranger.ext.flatten import flatten +from ranger.ext.iter_tools import flatten from ranger.shared import SettingsAware class CursesShortcuts(SettingsAware): -- cgit 1.4.1-2-gfad0