mumuki-python-runner 1.5.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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