mumuki-python-runner 1.5.1 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91dfdb4a06fa385a926782155a7bdfff919556373be784c9bad9dcad981f334d
4
- data.tar.gz: f3bdcb46a6ef02ea2ed62643df3a4b66963490e13752bbd5a27d34641a31e7ba
3
+ metadata.gz: e7ac08925c7c447effe33a7cdadc6d8135d2a3d412586c546550630afe76e5db
4
+ data.tar.gz: 8b64922903b757f02e1df5714ee78c7dad8dfa5556d32a351396aab73e03c044
5
5
  SHA512:
6
- metadata.gz: 0d3941d354533c48fec8a34b6029ade0e06d4a464f7a87f58307774248901501f7d0f55647ea261f95fce07b95baef97d9593360f7008d15f88bb146a5d1e945
7
- data.tar.gz: 63b075164c4272bff420460cba8dd1efd946d234785a3001ea6d28c4a2feaf864296900bf5db69a711f7a78c535e0e72ca6059c80cc698d411cc08cd9acaf4cd
6
+ metadata.gz: cb86a2680d68c97a33028bf367b07918b8b64b41e85b8a588819bffe69afa621e033fcd2501ffe5fa0651c15de01e4851e31cc9e3d4084df80f820977f1dc6c1
7
+ data.tar.gz: c189e9eb01ea000eac2a8f24f8c4bd4b68e57cf4701f49e4984bd3b9be8f17eef47e4108be03ebd5124aa655138038adeb8c5442ca75f472d8a95b2dd12502c6
@@ -7,6 +7,10 @@ class BasePythonQueryHook < Mumukit::Templates::FileHook
7
7
  end
8
8
 
9
9
  def compile_file_content(req)
10
+ "#{compile_file_header(req)}\n#{compile_query(req.query)}"
11
+ end
12
+
13
+ def compile_file_header(req)
10
14
  <<python
11
15
  # -*- coding: UTF-8 -*-
12
16
  import string, sys, os
@@ -16,19 +20,30 @@ import string, sys, os
16
20
  sys.stdout = open(os.devnull, 'w')
17
21
  #{compile_cookie(req.cookie)}
18
22
  sys.stdout = sys.__stdout__
19
- #{build_query req.query}
20
23
  python
21
24
  end
22
25
 
23
- def build_query(query)
24
- if query.match /print *(\(| ).*|^[a-zA-Z_]\w*\s*=.*|^raise\b/
26
+ def compile_query(query, output_prefix = "=> ")
27
+ if query.match /print *(\(| ).*|.*[^=]=[^=].*|^raise\b/
25
28
  query
26
29
  else
27
- "print(string.Template(\"=> $result\").substitute(result = #{query}))"
30
+ <<~python
31
+ __mumuki_error__ = None
32
+ try:
33
+ __mumuki_args__ = {'mumuki_query_result': eval("""#{query.gsub('"', '\"')}""")}
34
+ print(string.Template(\"#{output_prefix}\${mumuki_query_result}\").safe_substitute(**__mumuki_args__))
35
+ except SyntaxError as e:
36
+ __mumuki_error__ = SyntaxError(e.msg, ('<console>', e.lineno, e.offset, e.text))
37
+ if __mumuki_error__:
38
+ print(__mumuki_error__.text)
39
+ print(" "*(__mumuki_error__.offset - 1) + "^")
40
+ print('SyntheticMumukiSyntaxError: SyntaxError: ' + str(__mumuki_error__))
41
+ exit(1)
42
+ python
28
43
  end
29
44
  end
30
45
 
31
- def build_state(cookie)
46
+ def compile_state(cookie)
32
47
  (cookie||[]).map do |statement|
33
48
  <<~python
34
49
  try:
@@ -40,7 +55,7 @@ python
40
55
  end
41
56
 
42
57
  def compile_cookie(cookie)
43
- build_state(cookie).join("\n")
58
+ compile_state(cookie).join("\n")
44
59
  end
45
60
 
46
61
  def error_patterns
@@ -50,7 +65,7 @@ python
50
65
  end
51
66
 
52
67
  def syntax_error_regexp
53
- /\A File .*\n(?m)(?=.*(SyntaxError|IndentationError))/
68
+ /(SyntheticMumukiSyntaxError: )|(\A File .*\n(?m)(?=.*(SyntaxError|IndentationError)))/
54
69
  end
55
70
  end
56
71
 
@@ -17,8 +17,8 @@ import unittest
17
17
  import xmlrunner
18
18
  import sys
19
19
 
20
- #{request.content}
21
20
  #{request.extra}
21
+ #{request.content}
22
22
  #{test_class(request.test)}
23
23
 
24
24
  unittest.main(
@@ -1,3 +1,4 @@
1
+
1
2
  module BasePythonVersionHook
2
- VERSION = '1.5.1'
3
+ VERSION = '1.7.1'
3
4
  end
@@ -0,0 +1,48 @@
1
+ class Python3TryHook < Mumukit::Templates::TryHook
2
+ isolated true
3
+ attr_reader :query_hook
4
+
5
+ def initialize(config = nil)
6
+ super config
7
+ @query_hook = Python3QueryHook.new
8
+ end
9
+
10
+ def compile_file_content(r)
11
+ <<python
12
+ #{query_hook.compile_file_header(r)}
13
+ print("#{query_separator}");
14
+ #{query_hook.compile_query(r.query, '')}
15
+ print("#{goal_separator}");
16
+ #{query_hook.compile_query(r.goal.indifferent_get(:query) || 'None', '')}
17
+ python
18
+ end
19
+
20
+ delegate :tempfile_extension, to: :query_hook
21
+ delegate :command_line, to: :query_hook
22
+
23
+ def query_separator
24
+ '!!!MUMUKI-QUERY-START!!!'
25
+ end
26
+
27
+ def goal_separator
28
+ '!!!MUMUKI-GOAL-START!!!'
29
+ end
30
+
31
+ def to_structured_results(_file, result, status)
32
+ /#{query_separator}
33
+ ?(.*)
34
+ #{goal_separator}
35
+ ?(.*)
36
+ /m =~ result
37
+
38
+ {
39
+ query: to_query_result($1, status),
40
+ goal: $2,
41
+ status: status
42
+ }
43
+ end
44
+
45
+ def to_query_result(result, status)
46
+ { result: result, status: status }
47
+ end
48
+ end
@@ -16,5 +16,6 @@ reload_python3_runner!
16
16
  require_relative './python3/version'
17
17
  require_relative './python3/test_hook'
18
18
  require_relative './python3/query_hook'
19
+ require_relative './python3/try_hook'
19
20
  require_relative './python3/expectations_hook'
20
21
  require_relative './python3/metadata_hook'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumuki-python-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Leonardo Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-01 00:00:00.000000000 Z
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit
@@ -24,48 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.30'
27
- - !ruby/object:Gem::Dependency
28
- name: mulang
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '4.5'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '4.5'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '1.7'
33
+ version: '2.0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '1.7'
40
+ version: '2.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '10.0'
47
+ version: '12.3'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '10.0'
54
+ version: '12.3'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +133,7 @@ files:
147
133
  - lib/python3/metadata_hook.rb
148
134
  - lib/python3/query_hook.rb
149
135
  - lib/python3/test_hook.rb
136
+ - lib/python3/try_hook.rb
150
137
  - lib/python3/version.rb
151
138
  - lib/python3_runner.rb
152
139
  - lib/python_runner.rb