Skip to content

Commit a3e0468

Browse files
Philipp FleischhackerAntiDog
Philipp Fleischhacker
authored andcommitted
STCC-173 Add more logging to Scratch3 parser (#86)
1 parent cb8a40a commit a3e0468

File tree

10 files changed

+47
-0
lines changed

10 files changed

+47
-0
lines changed

config/default.ini

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ version: 0.9.1
66
build_name: Aegean cat
77
build_number: 937
88

9+
910
;-------------------------------------------------------------------------------
1011
[CATROBAT]
1112
; TODO: update this field manually every time the hierarchy changes

src/scratchtocatrobat/scratch/scratch3.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from scratchtocatrobat.tools import logger
2+
3+
log = logger.log
14

25
def get_block_attribute(block, key):
36
if key in block.keys():
@@ -75,6 +78,8 @@ def parse_sprites(self):
7578

7679
def parse_sprite(self, sprite):
7780
from scratch3visitor.visitorUtil import BlockContext, visitScriptBlock
81+
log.info("-" * 80)
82+
log.info("[Scratch3] Converting Sprite: {}".format(sprite["name"]))
7883

7984
script_blocks = []
8085
temp_block_dict = {}

src/scratchtocatrobat/scratch/scratch3visitor/data.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
25

36
def visitSetvariableto(blockcontext):
47
block = blockcontext.block
@@ -58,6 +61,7 @@ def visitItemnumoflist(blockcontext):
5861
block = blockcontext.block
5962
list = block.fields["LIST"][0]
6063
item = visitGeneric(blockcontext, "ITEM")
64+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(block.opcode, block.name))
6165
return ["placeholder_itemnumoflist", list, item] #TODO: not in scratch2
6266

6367
def visitLengthoflist(blockcontext):

src/scratchtocatrobat/scratch/scratch3visitor/looks.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
25

36
def visitSayforsecs(blockcontext):
47
message = visitGeneric(blockcontext, "MESSAGE")
@@ -30,6 +33,7 @@ def visitSwitchbackdropto(blockcontext):
3033
return ["startScene", backdrop]
3134

3235
def visitNextbackdrop(blockcontext):
36+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
3337
return ["nextBackdropPlaceholder"] #TODO: not in scratch2
3438

3539
def visitChangesizeby(blockcontext):
@@ -84,6 +88,7 @@ def visitCostumenumbername(blockcontext):
8488
def visitBackdropnumbername(blockcontext):
8589
block = blockcontext.block
8690
name_number = block.fields["NUMBER_NAME"][0]
91+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
8792
return ["sceneNamePlaceholder"] #TODO: implement properly
8893

8994
def visitSize(blockcontext):

src/scratchtocatrobat/scratch/scratch3visitor/motion.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
25

36
def visitMovesteps(blockcontext):
47
steps = visitGeneric(blockcontext, "STEPS")
@@ -24,6 +27,7 @@ def visitGotoxy(blockcontext):
2427
def visitGlideto(blockcontext):
2528
secs = visitGeneric(blockcontext, "SECS")
2629
to = visitGeneric(blockcontext, "TO")
30+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
2731
return ["glideTo:", secs, to] #TODO: not in scratch2?
2832

2933
def visitGlidesecstoxy(blockcontext):

src/scratchtocatrobat/scratch/scratch3visitor/operator.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
5+
26

37
def visitSubtract(blockcontext):
48
operand1 = visitGeneric(blockcontext, "NUM1")
@@ -83,6 +87,8 @@ def visitDivide(blockcontext):
8387
def visitContains(blockcontext):
8488
operand1 = visitGeneric(blockcontext, "STRING1")
8589
operand2 = visitGeneric(blockcontext, "STRING2")
90+
91+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
8692
return ["contains:", operand1, operand2]
8793
#TODO: not in scratch2?
8894

src/scratchtocatrobat/scratch/scratch3visitor/pen.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
23

4+
log = logger.log
35

46
def visitClear(blockcontext):
57
return ["clearPenTrails"]
@@ -20,6 +22,7 @@ def visitSetPenColorToColor(blockcontext):
2022
def visitChangePenColorParamBy(blockcontext):
2123
colorparam = visitGeneric(blockcontext, "COLOR_PARAM")
2224
value = visitGeneric(blockcontext, "VALUE")
25+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
2326
return ["changePenHueBy:", colorparam, value] #TODO: not in scratch2? can choose parameter
2427

2528
def visitPen_menu_colorParam(blockcontext):
@@ -28,6 +31,7 @@ def visitPen_menu_colorParam(blockcontext):
2831
def visitSetPenColorParamTo(blockcontext):
2932
colorparam = visitGeneric(blockcontext, "COLOR_PARAM")
3033
value = visitGeneric(blockcontext, "VALUE")
34+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
3135
return ["setPenHueTo:", colorparam, value] #TODO: not in scratch2? can choose parameter
3236

3337
def visitChangePenSizeBy(blockcontext):
@@ -48,5 +52,6 @@ def visitChangePenShadeByNumber(blockcontext):
4852

4953
def visitSetPenHueToNumber(blockcontext):
5054
size = visitGeneric(blockcontext, "HUE")
55+
log.warn("[Scratch3] SetPenHue block possibly not available in Scratch2")
5156
return ["penHue:", size]
5257

src/scratchtocatrobat/scratch/scratch3visitor/sensing.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
25

36
def visitTouchingObject(blockcontext):
47
touch = visitGeneric(blockcontext, "TOUCHINGOBJECTMENU")
@@ -20,6 +23,7 @@ def visitAskandwait(blockcontext):
2023
def visitSetdragmode(blockcontext):
2124
block = blockcontext.block
2225
dragmode = block.fields["DRAG_MODE"][0]
26+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
2327
return ["dragMode", dragmode] #TODO: not implemented in old converter?
2428

2529

src/scratchtocatrobat/scratch/scratch3visitor/sound.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from visitorUtil import visitGeneric
2+
from scratchtocatrobat.tools import logger
3+
4+
log = logger.log
25

36
def visitPlay(blockcontext):
47
sound = visitGeneric(blockcontext, 'SOUND_MENU')
@@ -13,13 +16,16 @@ def visitStopallsounds(blockcontext):
1316

1417
def visitChangeeffectby(blockcontext):
1518
block = blockcontext.block
19+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
1620
pass #TODO: doesnt exist in scratch2/catroid
1721

1822
def visitSeteffectto(blockcontext):
1923
block = blockcontext.block
24+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
2025
pass #TODO: doesnt exist in scratch2/catroid
2126

2227
def visitCleareffects(blockcontext):
28+
log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name))
2329
return ["clearSoundEffects"] #TODO: not in scratch2
2430

2531
def visitChangevolumeby(blockcontext):

src/scratchtocatrobat/scratch/scratch3visitor/visitorUtil.py

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def visitScriptBlock(blockcontext):
2424
if not isinstance(blockcontext, BlockContext):
2525
return blockcontext
2626

27+
log.info("[Scratch3] Converting Script: {}".format(blockcontext.block.opcode))
2728
scriptblock_handler = blockcontext.getBlockHandler()
2829
scriptblock = scriptblock_handler(blockcontext)
2930
blockcontext.nextBlock()
@@ -67,6 +68,7 @@ def isShadowBlock(block, attributename):
6768
def visitGeneric(blockcontext, attributename):
6869
block = blockcontext.block
6970
if not attributename in block.inputs:
71+
log.warn("[Scratch3] Failed to convert attribute: {} of block {} (type {}). Input is: {}".format(attributename, block.name, block.opcode, block.inputs.get(attributename)))
7072
return [False]
7173

7274
block_id = blockcontext.getInput(attributename)[1]
@@ -88,10 +90,13 @@ def visitDefault(blockcontext):
8890
def visitCondition(blockcontext):
8991
block = blockcontext.block
9092
if not "CONDITION" in block.inputs:
93+
log.warn("[Scratch3] Possibly empty condition in block {} ({})".format(blockcontext.block.name, blockcontext.block.opcode))
9194
return False
95+
9296
block_id = blockcontext.getInput("CONDITION")[1]
9397
conditionblock = blockcontext.get_block(block_id)
9498
if not isinstance(conditionblock, Scratch3Block):
99+
log.warn("[Scratch3] Possibly empty condition in block {} ({})".format(blockcontext.block.name, blockcontext.block.opcode))
95100
return False
96101
condition = visitGeneric(blockcontext, "CONDITION")
97102
return condition
@@ -111,6 +116,7 @@ def visitBlockList(blockcontext):
111116

112117
def visitSubstack(blockcontext, substackkey):
113118
if not substackkey in blockcontext.block.inputs:
119+
log.warn("[Scratch3] Possibly empty if or else clause in block {} ({})".format(blockcontext.block.name, blockcontext.block.opcode))
114120
return None
115121
block_id = blockcontext.getInput(substackkey)[1]
116122
substackstartblock = blockcontext.get_block(block_id)
@@ -120,6 +126,7 @@ def visitSubstack(blockcontext, substackkey):
120126
substack = visitBlockList(substack_context)
121127
return substack
122128

129+
123130
def visitMutation(blockcontext):
124131
return blockcontext.block.mutation["proccode"]
125132

0 commit comments

Comments
 (0)