From f029e8c1f71ed2f69bce408793aa8da6e321353b Mon Sep 17 00:00:00 2001 From: olpc user Date: Mon, 03 May 2010 03:02:15 +0000 Subject: Create repository and load --- diff --git a/activity.py b/activity.py deleted file mode 100644 index 066041e..0000000 --- a/activity.py +++ /dev/null @@ -1,501 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2010, Johannes Ponader -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -import logging -_logger = logging.getLogger('activity') -_logger.setLevel(logging.DEBUG) - -import pygtk -pygtk.require('2.0') -import gtk, sys, random, time - -# load activity source code from gtk_honeypot.py -from gtk_honeypot import gtk_honeypot - -from sugar.activity import activity - -class honeypot(activity.Activity): - def __init__(self, handle): - activity.Activity.__init__(self, handle) - self._name = handle - - self.set_title("Honeypot") - - # Show the toolbox elements - toolbox = activity.ActivityToolbox(self) - self.set_toolbox(toolbox) - toolbox.show() - - # create the main container - self._main_view = gtk.VBox() - - # import gtk_honeypot, where the main activity code lies - # load class, which creates gtk_honeypot.widget - self.gtk_honeypot = gtk_honeypot() - # remove the widget's parent - if self.gtk_honeypot.widget.parent: - _logger.debug('s.gtk-h.widget.parent: ' + str(self.gtk_honeypot.widget.parent)) - self.gtk_honeypot.widget.parent.remove(self.gtk_honeypot.widget) - _logger.debug('s.gtk-h.widget.parent: ' + str(self.gtk_honeypot.widget.parent)) - # and attach the widget to our window - self._main_view.pack_start(self.gtk_honeypot.widget) - - # display everything - self.gtk_honeypot.widget.show() - self._main_view.show() - self.set_canvas(self._main_view) - self.show_all() - -""" - # Register the event callbacks - # Exposure needs redraw - self.connect("expose_event", self.area_expose_cb) - # keyboard - self.connect("key_press_event", self.keypress_cb) - # mouse - self.connect("button_press_event", self.button_press_cb) - self.show - - - # Seed the random number generator - random.seed(time.time()) - - self.area = self.window - self.gc = slf.area.new_gc() - -""" - - -""" -import logging -_logger = logging.getLogger('implode-activity') - -from gettext import gettext as _ - -from sugar.activity.activity import Activity, get_bundle_path -from sugar.graphics import style -from sugar.graphics.icon import Icon -from sugar.graphics.radiotoolbutton import RadioToolButton -from sugar.graphics.toolbutton import ToolButton - -try: - # 0.86+ toolbar widgets - from sugar.activity.widgets import ActivityToolbarButton, StopButton - from sugar.graphics.toolbarbox import ToolbarBox, ToolbarButton - _USE_OLD_TOOLBARS = False -except ImportError: - # Pre-0.86 toolbar widgets - from sugar.activity.activity import ActivityToolbox - _USE_OLD_TOOLBARS = True - -from implodegame import ImplodeGame -from helpwidget import HelpWidget - -import os - -try: - import json - json.dumps -except (ImportError, AttributeError): - import simplejson as json -from StringIO import StringIO -import gtk -import gobject - -from keymap import KEY_MAP - -class ImplodeActivity(Activity): - def __init__(self, handle): - super(ImplodeActivity, self).__init__(handle) - - _logger.debug('Starting implode activity...') - - self._game = ImplodeGame() - - game_box = gtk.VBox() - game_box.pack_start(self._game) - self._stuck_strip = _StuckStrip() - - self._configure_toolbars() - - self.set_canvas(game_box) - - # Show everything except the stuck strip. - self.show_all() - game_box.pack_end(self._stuck_strip, expand=False) - - self._game.connect('show-stuck', self._show_stuck_cb) - self._stuck_strip.connect('undo-clicked', self._stuck_undo_cb) - game_box.connect('key-press-event', self._key_press_event_cb) - - self._game.grab_focus() - - last_game_path = self._get_last_game_path() - if os.path.exists(last_game_path): - self.read_file(last_game_path) - - def _get_last_game_path(self): - return os.path.join(self.get_activity_root(), 'data', 'last_game') - - def read_file(self, file_path): - # Loads the game state from a file. - f = file(file_path, 'rt') - content = f.read() - io = StringIO(content) - file_data = json.load(io) - f.close() - - print file_data - _logger.debug(file_data) - (file_type, version, game_data) = file_data - if file_type == 'Implode save game' and version <= [1, 0]: - self._game.set_game_state(game_data) - # Ensure that the visual display matches the game state. - self._levels_buttons[game_data['difficulty']].props.active = True - - def write_file(self, file_path): - # Writes the game state to a file. - game_data = self._game.get_game_state() - file_data = ['Implode save game', [1, 0], game_data] - last_game_path = self._get_last_game_path() - for path in (file_path, last_game_path): - f = file(path, 'wt') - io = StringIO() - json.dump(file_data,io) - content = io.getvalue() - f.write(content) - f.close() - - def _show_stuck_cb(self, state, data=None): - if data: - self._stuck_strip.show_all() - else: - if self._stuck_strip.focus_child: - self._game.grab_focus() - self._stuck_strip.hide() - - def _stuck_undo_cb(self, state, data=None): - self._game.undo_to_solvable_state() - - def _key_press_event_cb(self, source, event): - # Make the game navigable by keypad controls. - action = KEY_MAP.get(event.keyval, None) - if action is None: - return False - if not self._stuck_strip.flags() & gtk.VISIBLE: - return True - if self._game.focus_child: - if action == 'down': - self._stuck_strip.button.grab_focus() - return True - elif self._stuck_strip.focus_child: - if action == 'up': - self._game.grab_focus() - elif action == 'select': - self._stuck_strip.button.activate() - return True - return True - - def _configure_toolbars(self): - #Create, set, and show a toolbar box with an activity button, game - controls, difficulty selector, help button, and stop button. All - callbacks are locally defined. - - if _USE_OLD_TOOLBARS: - toolbox = ActivityToolbox(self) - toolbar = gtk.Toolbar() - else: - toolbar_box = ToolbarBox() - toolbar = toolbar_box.toolbar - - activity_button = ActivityToolbarButton(self) - toolbar_box.toolbar.insert(activity_button, 0) - activity_button.show() - - self._add_expander(toolbar_box.toolbar) - - toolbar.add(gtk.SeparatorToolItem()) - - def add_button(icon_name, tooltip, func): - def callback(source): - func() - button = ToolButton(icon_name) - toolbar.add(button) - button.connect('clicked', callback) - button.set_tooltip(tooltip) - - add_button('new-game' , _("New") , self._game.new_game) - add_button('replay-game', _("Replay"), self._game.replay_game) - add_button('edit-undo' , _("Undo") , self._game.undo) - add_button('edit-redo' , _("Redo") , self._game.redo) - - toolbar.add(gtk.SeparatorToolItem()) - - self._levels_buttons = [] - def add_level_button(icon_name, tooltip, numeric_level): - if self._levels_buttons: - button = RadioToolButton(named_icon=icon_name, - group=self._levels_buttons[0]) - else: - button = RadioToolButton(named_icon=icon_name) - self._levels_buttons.append(button) - toolbar.add(button) - - def callback(source): - if source.get_active(): - self._game.set_level(numeric_level) - - button.connect('clicked', callback) - button.set_tooltip(tooltip) - - add_level_button('easy-level' , _("Easy") , 0) - add_level_button('medium-level', _("Medium"), 1) - add_level_button('hard-level' , _("Hard") , 2) - - self._add_expander(toolbar) - - def _help_clicked_cb(): - help_window = _HelpWindow() - help_window.set_transient_for(self.get_toplevel()) - help_window.show_all() - - # NOTE: Naming the icon "help" instead of "help-icon" seems to use a - # GTK stock icon instead of our custom help; the stock icon may be more - # desireable in the future. It doesn't seem to be themed for Sugar - # right now, however. - add_button('help-icon', _("Help"), _help_clicked_cb) - - if _USE_OLD_TOOLBARS: - toolbox.add_toolbar(_("Game"), toolbar) - toolbox.set_current_toolbar(1) - - self.set_toolbox(toolbox) - toolbox.show() - else: - stop_button = StopButton(self) - stop_button.props.accelerator = 'Q' - toolbar_box.toolbar.insert(stop_button, -1) - stop_button.show() - - self.set_toolbar_box(toolbar_box) - toolbar_box.show() - - def _add_expander(self, toolbar): - #Insert a toolbar item which will expand to fill the available - space. - separator = gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_expand(True) - toolbar.insert(separator, -1) - separator.show() - - -class _DialogWindow(gtk.Window): - # A base class for a modal dialog window. - def __init__(self, icon_name, title): - super(_DialogWindow, self).__init__() - - self.set_border_width(style.LINE_WIDTH) - offset = style.GRID_CELL_SIZE - width = gtk.gdk.screen_width() / 2 - height = gtk.gdk.screen_height() / 2 - self.set_size_request(width, height) - self.set_position(gtk.WIN_POS_CENTER_ALWAYS) - self.set_decorated(False) - self.set_resizable(False) - self.set_modal(True) - - vbox = gtk.VBox() - self.add(vbox) - - toolbar = _DialogToolbar(icon_name, title) - toolbar.connect('stop-clicked', self._stop_clicked_cb) - vbox.pack_start(toolbar, False) - - self.content_vbox = gtk.VBox() - self.content_vbox.set_border_width(style.DEFAULT_SPACING) - vbox.add(self.content_vbox) - - self.connect('realize', self._realize_cb) - - def _stop_clicked_cb(self, source): - self.destroy() - - def _realize_cb(self, source): - self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) - self.window.set_accept_focus(True) - - -class _HelpWindow(_DialogWindow): - # A dialog window to display the game instructions. - def __init__(self): - super(_HelpWindow, self).__init__('help-icon', _("Help")) - - offset = style.GRID_CELL_SIZE - width = gtk.gdk.screen_width() - offset * 2 - height = gtk.gdk.screen_height() - offset * 2 - self.set_size_request(width, height) - - self._help_widget = HelpWidget(self._icon_file) - self.content_vbox.pack_start(self._help_widget) - - self._help_nav_bar = _HelpNavBar() - self.content_vbox.pack_end(self._help_nav_bar, - expand=False, - padding=style.DEFAULT_SPACING) - - for (signal_name, callback) in [ - ('forward-clicked', self._forward_clicked_cb), - ('reload-clicked', self._reload_clicked_cb), - ('back-clicked', self._back_clicked_cb)]: - self._help_nav_bar.connect(signal_name, callback) - - self._update_prev_next() - - def _forward_clicked_cb(self, source): - self._help_widget.next_stage() - self._update_prev_next() - - def _back_clicked_cb(self, source): - self._help_widget.prev_stage() - self._update_prev_next() - - def _reload_clicked_cb(self, source): - self._help_widget.replay_stage() - - def _icon_file(self, icon_name): - activity_path = get_bundle_path() - file_path = os.path.join(activity_path, 'icons', icon_name + '.svg') - return file_path - - def _update_prev_next(self): - hw = self._help_widget - self._help_nav_bar.set_can_prev_stage(hw.can_prev_stage()) - self._help_nav_bar.set_can_next_stage(hw.can_next_stage()) - - -class _DialogToolbar(gtk.Toolbar): - # Displays a dialog window's toolbar, with title, icon, and close box. - __gsignals__ = { - 'stop-clicked' : (gobject.SIGNAL_RUN_LAST, None, ()), - } - def __init__(self, icon_name, title): - super(_DialogToolbar, self).__init__() - - icon = Icon() - icon.set_from_icon_name(icon_name, gtk.ICON_SIZE_LARGE_TOOLBAR) - self._add_widget(icon) - - self._add_separator() - - label = gtk.Label(title) - self._add_widget(label) - - self._add_separator(expand=True) - - stop = ToolButton(icon_name='dialog-cancel') - stop.set_tooltip(_('Done')) - stop.connect('clicked', self._stop_clicked_cb) - self.add(stop) - - def _add_separator(self, expand=False): - separator = gtk.SeparatorToolItem() - separator.set_expand(expand) - separator.set_draw(False) - self.add(separator) - - def _add_widget(self, widget): - tool_item = gtk.ToolItem() - tool_item.add(widget) - self.add(tool_item) - - def _stop_clicked_cb(self, button): - self.emit('stop-clicked') - - -class _HelpNavBar(gtk.HButtonBox): - # A widget to display the navigation controls at the bottom of the help - # dialog. - __gsignals__ = { - 'forward-clicked' : (gobject.SIGNAL_RUN_LAST, None, ()), - 'back-clicked' : (gobject.SIGNAL_RUN_LAST, None, ()), - 'reload-clicked' : (gobject.SIGNAL_RUN_LAST, None, ()), - } - - def __init__(self): - super(_HelpNavBar, self).__init__() - - self.set_layout(gtk.BUTTONBOX_SPREAD) - - def add_button(icon_name, tooltip, signal_name): - icon = Icon() - icon.set_from_icon_name(icon_name, gtk.ICON_SIZE_LARGE_TOOLBAR) - button = gtk.Button() - button.set_image(icon) - button.set_tooltip_text(tooltip) - self.add(button) - - def callback(source): - self.emit(signal_name) - button.connect('clicked', callback) - - return button - - self._back_button = add_button('back', _("Previous"), 'back-clicked') - add_button('reload', _("Again"), 'reload-clicked') - self._forward_button = add_button('forward', _("Next"), 'forward-clicked') - - def set_can_prev_stage(self, can_prev_stage): - self._back_button.set_sensitive(can_prev_stage) - - def set_can_next_stage(self, can_next_stage): - self._forward_button.set_sensitive(can_next_stage) - - -class _StuckStrip(gtk.HBox): - __gsignals__ = { - 'undo-clicked' : (gobject.SIGNAL_RUN_LAST, None, ()), - } - def __init__(self, *args, **kwargs): - super(_StuckStrip, self).__init__(*args, **kwargs) - - spacer1 = gtk.Label('') - self.pack_start(spacer1, expand=True) - - spacer2 = gtk.Label('') - self.pack_end(spacer2, expand=True) - - self.set_spacing(10) - - self.set_border_width(10) - - label = gtk.Label(_("Stuck? You can still solve the puzzle.")) - self.pack_start(label, expand=False) - - icon = Icon() - icon.set_from_icon_name('edit-undo-many', gtk.ICON_SIZE_LARGE_TOOLBAR) - self.button = gtk.Button(stock=gtk.STOCK_UNDO) - self.button.set_image(icon) - self.button.set_label(_("Undo some moves")) - self.pack_end(self.button, expand=False) - - def callback(source): - self.emit('undo-clicked') - self.button.connect('clicked', callback) - -""" diff --git a/activity/.activity.info.swp b/activity/.activity.info.swp deleted file mode 100644 index 66f3df1..0000000 --- a/activity/.activity.info.swp +++ /dev/null Binary files differ diff --git a/activity/activity-implode (Kopie).svg b/activity/activity-implode (Kopie).svg deleted file mode 100644 index 39ef91c..0000000 --- a/activity/activity-implode (Kopie).svg +++ /dev/null @@ -1,41 +0,0 @@ - - - -]> - - - - - - - - - - - diff --git a/activity/activity.info b/activity/activity.info deleted file mode 100644 index 116dc5e..0000000 --- a/activity/activity.info +++ /dev/null @@ -1,8 +0,0 @@ -[Activity] -name = Honeypot -activity_version = 1 -service_name = org.laptop.honeypot -icon = honeypot -class = activity.honeypot -license = GPLv2+ -show_launcher = yes diff --git a/activity/activity.info~ b/activity/activity.info~ deleted file mode 100644 index a4cfe1a..0000000 --- a/activity/activity.info~ +++ /dev/null @@ -1,8 +0,0 @@ -[Activity] -name = Honeypot -activity_version = 1 -service_name = org.laptop.honeypot -icon = honeypot.svg -class = activity.activity -license = GPLv2+ -show_launcher = yes diff --git a/activity/honeypot.svg b/activity/honeypot.svg deleted file mode 100644 index fa46eaf..0000000 --- a/activity/honeypot.svg +++ /dev/null @@ -1,17 +0,0 @@ - - -]> - - - - - - - - - - - diff --git a/buzhug_setup.py b/buzhug_setup.py deleted file mode 100644 index ee4cb92..0000000 --- a/buzhug_setup.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python - -from distutils.core import setup - -setup(name='buzhug', - version='1.6', - description='Buzhug, a pure-Python database', - author='Pierre Quentel', - author_email='pierre.quentel@gmail.com', - url='http://buzhug.sourceforge.net/', - packages = ['buzhug'] - ) - diff --git a/gtk_honeypot.glade b/gtk_honeypot.glade deleted file mode 100644 index c6d8d6b..0000000 --- a/gtk_honeypot.glade +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - True - vertical - True - - - True - Click here for a new question. - True - True - - - 0 - - - - - True - vertical - - - True - True - - - - 0 - - - - - True - - - - - - True - vertical - - - - - - This button has no special function so far... - True - True - True - - - 1 - - - - - - - - 1 - - - - - - - - False - 1 - - - - - 1 - - - - - - diff --git a/gtk_honeypot.py b/gtk_honeypot.py deleted file mode 100755 index 645f5c2..0000000 --- a/gtk_honeypot.py +++ /dev/null @@ -1,280 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2010, Johannes Ponader -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -from mathparse_honeypot import mathparse_honeypot -from xml_honeypot import xml_honeypot - -import gtk -import gtk.glade -import sys -import random -import time -import logging -import pango -import pygtk - -''' -try: - # should we use the treadsafe database module TS_Base?. - # although it is very unlikelike that a user runs two instances on his account, - # what would be the effect? - from buzhug import Base - -# as long as buzhug is a subdirectory of Honeypot.activity, import should be trivial -# do we want to install it anyway? would that be better for performance? -except ImportError: - - from distutils.core import setup - - # this command, esp. sys_args = 'install', is not tested yet - # perhaps run_setup('buzhug_setup', 'install') would be more clearly - - # btw, if we don't have the permission to install it into the standard location - # ('/usr/', i guess), we have to sudo the install or have to use the home dir instead? - # see http://docs.python.org/install/ - # what about win users using the script as standalone? - - setup(name='buzhug', - version='1.6', - description='Buzhug, a pure-Python database', - author='Pierre Quentel', - author_email='pierre.quentel@gmail.com', - url='http://buzhug.sourceforge.net/', - packages = ['buzhug'], - script_args = 'install') - - from buzhug import Base - -# if we don't have the permission to install it into the standard location -# ('/usr/', i guess), we have to sudo the install or have to use the home dir instead? -# see http://docs.python.org/install/ -# what about win users using the script as standalone? -''' - - -_logger = logging.getLogger('gtk_honeypot') - -# for logging outside sugar -if __name__ == '__main__': - LOG_FILENAME = 'logger.logfile' - logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG) - -_logger.setLevel(logging.DEBUG) - -# Pango is a library for rendering internationalized texts - -pygtk.require('2.0') - -# load xml parser from xml_honeypot.py - - -# load mathparse parser from mathparse_honeypot.py - -# class guessfield(gtk_textfield): - -class gtk_honeypot: - - def __init__(self, runaslib=True): - - # Create DB, certainly, this goes into Journal afterwards, if it's not standalone - # not yet implemented - # path = '/home/olpc/Development/buzhug/' - # db = Base(path) - - - # Load glade xml - self.xml = gtk.glade.XML("gtk_honeypot.glade") - - # get window - self.window = self.xml.get_widget('window1') - self.window.connect("delete_event", gtk.main_quit) - - # get window child - self.window_child = self.window.get_child() - _logger.debug("self.window_child: " + str(self.window_child)) - - # get the label_button - self.label_question = self.xml.get_widget('label_question') - self.label_question.connect('clicked', self.on_label_question) - - # with self.textfield_answer as tf: - # funktioniert das? oder hat das seltame Nebeneffekte? - # am ende von with wid das objekt schliesslich aufgeraeumt... - - # get the textfield - self.textfield_answer = self.xml.get_widget('textfield_answer') - # self.textfield_answer.connect('clicked', self.on_guessed) - self.textfield_answer.connect('activate', self.on_textfield_answer_activate) - # self.textfield_answer.connect('move-cursor', self.on_textfield_answer_move_cursor) - - self.textfield_answer.handler_id = [] - # self.textfield.handler_id.append(self.textfield_answer.connect('insert-at-cursor', self.on_textfield_answer_insert_at_cursor)) - self.textfield_answer.handler_id.append(self.textfield_answer.connect('move-cursor', self.kill_event, 'move-cursor')) - self.textfield_answer.handler_id.append(self.textfield_answer.connect('delete-text', self.kill_event, 'delete-text')) - self.textfield_answer.handler_id.append(self.textfield_answer.connect('insert-text', self.on_textfield_answer_insert_text)) - # we need a get-focus or so event-handler, which sets the cursor right again in state STATE_WRONG - - self.textfield_answer.move_cursor_id = self.textfield_answer.handler_id[0] - # block these handlers for now - for i in range(0, len(self.textfield_answer.handler_id)): - self.textfield_answer.handler_block(self.textfield_answer.handler_id[i]) - - - - # self.textfield_answer.connect('event', self.on_textfield_answer_event) - # backspace, copy-clipboard, cut-clipboard, deleste-from-cursor, insert-at-cursor, move-cursor, paste-clipboard, - # changed, delete-text, insert-text - # gobject.stop_emission() - # key-press-event - # selection-clear-event, (selection-get-event), - # drag-. - - - # this is a dirty way to define the color, i suppose - # we should use the current stylemap - self.cursor_color_train = gtk.Entry().get_colormap().alloc_color("red") - self.cursor_color_answer = gtk.Entry().get_colormap().alloc_color("black") - - self.textfield_answer.modify_cursor(self.cursor_color_answer, self.cursor_color_answer) - - # get the button - self.button_guess = self.xml.get_widget('button_guess') - self.button_guess.connect('clicked', self.on_button_guess) - # self.button_guess.connect('activate', self.on_button_guess) - - # self.widget will be attached to the Activity - # this can be any gtk widget except a window - self.widget = self.window_child - - # Seed the random number generator - random.seed(time.time()) - - # load one or more collections of questions and answers - self.honeypot = xml_honeypot() - self.honeypot.load_drops() - - # load the mathpars parser - # note: there must be a parser regitration lateron, so that the script - # can determine which parsers are successfully loaded - self.mathparse = mathparse_honeypot() - - # we define four states: - # 'fresh', 'open', 'wrong', 'right' - self.STATE_FRESH = 0 - self.STATE_OPEN = 1 - self.STATE_WRONG = 2 - - # and safe the actual state in self.state - self.state = self.STATE_FRESH - - if not runaslib: - self.window.show_all() - gtk.main() - - - def on_textfield_answer_activate(self, *args): - - if self.state == self.STATE_FRESH: - self.open_new_question() - - elif self.state == self.STATE_OPEN: - self.check_answer() - - # we need no else, because we want to ignore RETURN in the state 'wrong' - - - - def on_textfield_answer_insert_text(self, *args): - - # insert-text(editable, new_text, text_length, position, data) - - if args[1] == self.drop[1][self.rewrite_position]: - self.rewrite_position += 1 - self.textfield_answer.handler_block(self.textfield_answer.move_cursor_id) - self.textfield_answer.set_position(self.rewrite_position) - self.textfield_answer.handler_unblock(self.textfield_answer.move_cursor_id) - - # we check if the user typed in the whole answer - # kann ich die endposition eleganter auslesen? - if self.textfield_answer.get_position() == len(self.drop[1]): - self.label_question.set_label(self.drop[0] + "\nThat's it.\nClick here or hit RETURN for another question.") - - for i in range(0, len(self.textfield_answer.handler_id)): - self.textfield_answer.handler_block(self.textfield_answer.handler_id[i]) - - self.state = self.STATE_FRESH - - self.textfield_answer.stop_emission('insert-text') - - - def kill_event(self, *args): - self.textfield_answer.stop_emission(args[len(args)-1]) - - def on_textfield_answer_event(self, *args): - if args[1].type not in (3, 10, 11, 2): - # GDK_MOTION_NOTIFY, GDK_ENTER_NOTIFY, GDK_LEAVE_NOTIFY, GDK_EXPOSE): - print(args[1].type) - - def on_button_guess(self, *args): - # self.textfield_answer.add_events() - # self.textfield_answer.set_editable(False) - - # self.textfield_answer.select_region(0,1) - pass - - - def on_label_question(self, *args): - self.open_new_question() - - def open_new_question(self): - self.drop = random.choice(self.honeypot.content_handler.drops) - _logger.debug('random choice: ' + str(self.drop)) - # we now take always the mathparse parser - - # choose the parser dynamically from xml-atribute lateron - # self.label_question.set_label("I'll ask some other question, dude: " + self.drop[0]) - self.drop = self.mathparse.parse(self.drop) - self.label_question.set_label("Question:\n" + self.drop[0]) - - self.textfield_answer.grab_focus() - self.textfield_answer.set_text('') - self.state = self.STATE_OPEN - - def check_answer(self): - if self.textfield_answer.get_text() == self.drop[1]: - # correct answer - self.label_question.set_label("Correct!\nClick here or hit RETURN for another question.") - self.state = self.STATE_FRESH - else: - # wrong answer - self.label_question.set_label(self.drop[0] + "\nYour answer:\n" + self.textfield_answer.get_text() + - "\nThis answer is wrong :-(\nRetype the correct answer\nand hit RETURN for the next question.") - - # write correct answer - self.textfield_answer.set_text(self.drop[1]) - self.rewrite_position = 0 - - # activate special handlers - for i in range(0, len(self.textfield_answer.handler_id)): - self.textfield_answer.handler_unblock(self.textfield_answer.handler_id[i]) - # self.textfield_answer.handler_unblock_by_func(self.on_textfield_answer_insert_text) - self.textfield_answer.modify_cursor(self.cursor_color_train, self.cursor_color_train) - self.state = self.STATE_WRONG - - -if __name__ == '__main__': - gtk_honeypot(False) diff --git a/gtk_honeypot2.glade b/gtk_honeypot2.glade deleted file mode 100644 index 535ea27..0000000 --- a/gtk_honeypot2.glade +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - True - vertical - - - Click here for a new question. - True - True - True - - - 20 - 0 - - - - - True - - - True - True - - - - 20 - 0 - - - - - Click here to see the answer... - True - True - True - False - - - 20 - 1 - - - - - 1 - - - - - - diff --git a/mathparse_honeypot.py b/mathparse_honeypot.py deleted file mode 100644 index f8d5f2c..0000000 --- a/mathparse_honeypot.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2010, Johannes Ponader -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -import logging -_logger = logging.getLogger('mathparse') -_logger.setLevel(logging.DEBUG) - -import sys, random, time, re, ast, parser - - -class mathparse_honeypot: - - def __init__(self, runaslib=True): - - # Seed the random number generator - random.seed(time.time()) - - def parse(self, drop): - question = drop[0] - answer = drop[1] - - # look for "[1-10]" etc. - regexp = r"\[(\d+)-(\d+)]" - _logger.debug('begin parse: ' + str(question)) - question = re.split(regexp, question) - _logger.debug('split q1: ' + str(question)) - # "\1" stands for random_value[0] - random_values = [] - for i in range(1, len(question), 3): - _logger.debug(len(question)) - rand_val = str(random.randint(int(question[i]), int(question[i+1])+1)) - random_values.append(rand_val) - question[i] = rand_val - question[i+1] = "" - _logger.debug('q1[' + str(i) + ']: ' + str(question)) - # make it one string again - question = u"".join(question) - _logger.debug('join q1: ' + str(question)) - - # look for markers like "\1" - regexp = r"\\(\d+)" - question = re.split(regexp, question) - _logger.debug('split q2: ' + str(question)) - for i in range(1, len(question), 2): - #no error/range checking so far - question[i] = random_values[int(question[i])-1] - _logger.debug('q2[' + str(i) + ']: ' + str(question)) - question = u"".join(question) - _logger.debug('join q2: ' + str(question)) - - # look for expressions to evaluate: "{...}" - regexp = r"\{(.*)}" - question = re.split(regexp, question) - _logger.debug('split q3: ' + str(question)) - for i in range(1, len(question), 2): - # Sicherheitsluecke! - # vgl. http://effbot.org/zone/librarybook-core-eval.htm - question[i] = str(eval(question[i])) - _logger.debug('q3[' + str(i) + ']: ' + str(question)) - question = u"".join(question) - _logger.debug('join q3: ' + str(question)) - - regexp = r"\\(\d+)" - answer = re.split(regexp, answer) - _logger.debug('split a1: ' + str(question)) - for i in range(1, len(answer), 2): - answer[i] = random_values[int(answer[i])-1] - _logger.debug('a1[' + str(i) + ']: ' + str(question)) - answer = u"".join(answer) - _logger.debug('join a1: ' + str(question)) - - regexp = r"\{(.*)}" - answer = re.split(regexp, answer) - _logger.debug('split a2: ' + str(question)) - for i in range(1, len(answer), 2): - answer[i] = str(eval(answer[i])) - # answer[i] = str(ast.literal_eval(ast.parse(answer[i]))) - _logger.debug('a2[' + str(i) + ']: ' + str(question)) - answer = u"".join(answer) - _logger.debug('join a2: ' + str(question)) - - return [question,answer] - - -if __name__ == '__main__': - mathparse_honeypot(False) - - \ No newline at end of file diff --git a/my_first_questions.honeypot b/my_first_questions.honeypot deleted file mode 100644 index 729e919..0000000 --- a/my_first_questions.honeypot +++ /dev/null @@ -1,77 +0,0 @@ - - - - - 1 × 1 - 1 - - - [1-10] × [1-10] - {\1 * \2} - - - - - [1-10] + [1-10] * [1-20] - \1 + {\2 * \3} - {\1 + \2 * \3} - - - ([1-10] + [1-10]) * ({\4 + [1-10]} - [1-10]) - - {\1 + \2} * ({\4 + \3} - \4) - - - (\1 + \2) * \3 - - {(\1 + \2) * \3} - - - - - - [1-20] + x = {\1 + [1-20]} - \2 - - - x + [1-20] = {[1-40] + \1} - \2 - - - x - [1-20] = [1-20] - {\1 + \2} - - - [1-10] * x = {\1 * [1-10]} - \2 - - - x * [1-10] = {\1 * [1-10]} - \2 - - - x : [1-10] = [1-10] - {\1 * \2} - - - ([11-20] * x) - [1-10] = {\1 * [1-20] - \2} - ([11-20] * x) = {\1 * [1-20]} - [11-20] * x = {\1 * [1-20]} - \3 - - - - - an apple - ein Apfel - - - a pea - eine Birne - - - a pineapple - eine Ananas - - - diff --git a/setup.py b/setup.py deleted file mode 100755 index 8679a7c..0000000 --- a/setup.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python -try: - from sugar.activity import bundlebuilder - if __name__ == "__main__": - bundlebuilder.start() -except ImportError: - import os - os.system("find ./ | sed 's,^./,honeypot.activity/,g' > MANIFEST") - os.system('rm honeypot.xo') - os.chdir('..') - os.system('zip -r honeypot.xo honeypot.activity') - os.system('mv honeypot.xo ./honeypot.activity') - os.chdir('honeypot.activity') diff --git a/setup_.py b/setup_.py deleted file mode 100644 index 9aa6a00..0000000 --- a/setup_.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python -if True: - import os - os.system("find ./ | sed 's,^./,honeypot.activity/,g' > MANIFEST") - os.system('rm honeypot.xo') - os.chdir('..') - os.system('zip -r honeypot.xo honeypot.activity') - os.system('mv honeypot.xo ./honeypot.activity') - os.chdir('honeypot.activity') diff --git a/xml_honeypot.py b/xml_honeypot.py deleted file mode 100644 index 4c2647a..0000000 --- a/xml_honeypot.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2010, Johannes Ponader -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -import logging -_logger = logging.getLogger('xml_honeypot') -_logger.setLevel(logging.DEBUG) - -# we need to parse some xml files -from xml.sax import saxutils, handler -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -class content_handler(handler.ContentHandler): - def __init__(self): - _logger.debug("content_handler init") - - def startDocument(self): - self.drops = [] - - def endDocument(self): - _logger.debug('end of xml document') - - def startElement(self, name, attrs): - # we don't check for errors at the moment, and ignore many features - if name == 'question' or name == 'answer': - self.wait_for_characters = name - else: - self.wait_for_characters = False - _logger.debug("element: " + name + ", attributes: " + str(attrs)) - - def characters(self, content): - # it's a hack for now, i just take the first chunk of content, this might produce errors - if self.wait_for_characters == 'question': - self.question = content - self.wait_for_characters = '' - if self.wait_for_characters == 'answer': - self.answer = content - self.wait_for_characters = '' - self.drops.append([self.question, self.answer]) - _logger.debug('q/a: ' + self.question + '/' + self.answer) - - _logger.debug('content: ' + content) - - - -class DTD_handler(handler.DTDHandler): - def __init__(self): - _logger.debug("DTD_handler init") - -class error_handler(handler.ErrorHandler): - def __init__(self): - _logger.debug("error_handler init") - - def warning(self, exception): - _logger.debug(exception) - - def error(self, exception): - _logger.debug(exception) - - def fatalError(self, exception): - _logger.debug(exception) - - - -class xml_honeypot: - - def __init__(self, runaslib=True): - - # see http://pyxml.sourceforge.net/topics/howto/node12.html - - # Create a parser - self.parser = make_parser() - - # Tell the parser we are not interested in XML namespaces - self.parser.setFeature(feature_namespaces, 0) - - # Create the handler - self.content_handler = content_handler() - self.DTD_handler = DTD_handler() - self.error_handler = error_handler() - - # Tell the parser to use our handler - self.parser.setContentHandler(self.content_handler) - self.parser.setDTDHandler(self.DTD_handler) - self.parser.setErrorHandler(self.error_handler) - - def load_drops(self): - - # Parse the input - self.xml_filename = 'my_first_questions.honeypot' - # xml_file = open(self.xml_filename, 'r') - self.parser.parse(self.xml_filename) - -if __name__ == '__main__': - xml_honeypot(False) - -- cgit v0.9.1