web_path = '/guiltcards'
decks_dir = 'decks/'
-def get_card_data(deck_id, card_id):
+def get_card_data(deck_id, card_id, card_type_hint):
cards_dir = decks_dir + deck_id
if not os.path.exists(cards_dir):
os.makedirs(cards_dir)
with open(path_card, 'r') as f:
data = json.loads(f.read())
else:
- data = {'title': '?',
- 'prompt':'?',
- 'answers': ['?', '?']}
+ data = {'type': card_type_hint,
+ 'title': 'title',
+ 'paragraphs': ['first paragraph', 'second paragraph'],
+ 'answers': ['first option', 'second option']}
return data
@get(web_path + '/')
os.makedirs(decks_dir)
deck_ids = os.listdir(decks_dir)
decks = {}
- print('DEBUG', deck_ids)
for deck_id in deck_ids:
decks[deck_id] = base64.b64decode(deck_id).decode()
return dict(web_path=web_path, decks=decks)
deck_name=deck_name,
cards=cards)
+@get(web_path + '/decks/<deck_id>/printable')
+@view('cards_print')
+def print_view(deck_id):
+ cards_dir = decks_dir + deck_id
+ cards = []
+ if os.path.exists(cards_dir):
+ card_ids = os.listdir(cards_dir)
+ for card_id in card_ids:
+ cards += [get_card_data(deck_id, card_id, None)]
+ deck_name = base64.b64decode(deck_id).decode()
+ return dict(cards=cards)
+
@get(web_path + '/decks/<deck_id>/cards/')
def new_card(deck_id):
card_name = request.query.get('card_name')
+ card_type = request.query.get('card_type')
card_id = base64.b64encode(card_name.encode()).decode()
- redirect(web_path + '/decks/' + deck_id + '/cards/' + card_id + '/form')
+ redirect(web_path + '/decks/' + deck_id + '/cards/' + card_id
+ + '/form?type=' + card_type)
@get(web_path + '/decks/<deck_id>/cards/<card_id>/view')
@view('card')
def show_card(deck_id, card_id):
- data = get_card_data(deck_id, card_id)
+ data = get_card_data(deck_id, card_id, None)
return dict(web_path=web_path,
deck_id=deck_id,
+ card_type=data['type'],
title=data['title'],
- prompt=data['prompt'],
+ paragraphs=data['paragraphs'],
answers=data['answers'])
@post(web_path + '/decks/<deck_id>/cards/<card_id>')
if not os.path.exists(cards_dir):
os.makedirs(cards_dir)
path_card = cards_dir + '/' + card_id
- json_dict = {
- 'title': request.forms.get('title'),
- 'prompt': request.forms.get('prompt'),
- 'answers': request.forms.getall('answer')
- }
- json_dict['answers'] = [answer for answer in json_dict['answers']
- if answer.strip() != '']
+ card_type = request.forms.get('type')
+ json_dict = {'type': request.forms.get('type'),
+ 'title': '',
+ 'answers': [],
+ 'paragraphs': []}
+ if card_type == 'action':
+ json_dict['title'] = request.forms.get('title')
+ json_dict['paragraphs'] = request.forms.getall('paragraph')
+ json_dict['paragraphs'] = [paragraph for paragraph in json_dict['paragraphs']
+ if paragraph.strip() != '']
+ else:
+ json_dict['answers'] = request.forms.getall('answer')
+ json_dict['answers'] = [answer for answer in json_dict['answers']
+ if answer.strip() != '']
with open(path_card, 'w') as f:
f.write(json.dumps(json_dict, indent=4))
redirect(web_path + '/decks/' + deck_id + '/cards/' + card_id + '/view')
@get(web_path + '/decks/<deck_id>/cards/<card_id>/form')
@view('card_form')
def card_form(deck_id, card_id):
- data = get_card_data(deck_id, card_id)
+ card_type = request.query.get('type')
+ data = get_card_data(deck_id, card_id, card_type)
card_path = decks_dir + deck_id + '/' + card_id
deletable = False
if os.path.exists(card_path):
return dict(web_path=web_path,
card_id=card_id,
deck_id=deck_id,
+ card_type=data['type'],
title=data['title'],
- prompt=data['prompt'],
+ paragraphs=data['paragraphs'],
answers=data['answers'],
deletable=deletable)
<html>
<body>
<form action="{{ web_path }}/decks/{{deck_id}}/cards/{{ card_id }}" method="POST">
-title: <input type="text" name="title" value="{{ title }}" /><br />
-prompt: <input type="text" name="prompt" value="{{ prompt }}" /><br />
+<input type="hidden" name="type" value="{{ card_type }}" /><br />
+% if card_type == 'guilt':
% for answer in answers:
answer: <input type="text" name="answer" value="{{ answer }}" /><br />
% end
-answer: <input type="text" name="answer" /><br />
-answer: <input type="text" name="answer" /><br />
-answer: <input type="text" name="answer" /><br />
+answer: <input type="text" name="answer" value="" /><br />
+answer: <input type="text" name="answer" value="" /><br />
+answer: <input type="text" name="answer" value="" /><br />
+answer: <input type="text" name="answer" value="" /><br />
+% end
+% if card_type == 'action':
+title: <input type="text" name="title" value="{{ title }}" /><br />
+% for paragraph in paragraphs:
+paragraph: <input type="text" name="paragraph" value="{{ paragraph }}" /><br />
+% end
+paragraph: <input type="text" name="paragraph" value="" /><br />
+paragraph: <input type="text" name="paragraph" value="" /><br />
+paragraph: <input type="text" name="paragraph" value="" /><br />
+paragraph: <input type="text" name="paragraph" value="" /><br />
+% end
<input type="submit" value="OK" />
</form>
<p>
-(leave specific answer fields empty to remove them as answer options)
+(leave specific fields empty to have them not appear on the card)
</p>
% if deletable:
<p>