mumuki-python-runner 1.5.0 → 1.7.0

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: b96184406c101c4a7b9e627936c5b4a06fa263b5a9de6a3e3f78a0a62f78499b
4
- data.tar.gz: d6f7a4575bded83c5f11c368c5aefe0a0b2d93bc3678bcf11b213eee03c2a5bf
3
+ metadata.gz: '039cd7e8daf34032853b80ad08223b1af629432395e1036d0c141bcd2a81cb4c'
4
+ data.tar.gz: eb45b266b689d2d13a18d54a1815a6d2f1b5d255c0dea700f67a17b5a34a5b40
5
5
  SHA512:
6
- metadata.gz: 42aeb75b306a206b0d70dbbfee375b687871db2d16f392bdd47c0ce9f7010f79968608542fc0d2e94747dc45600d2736f720784f9ae6a120f8a9bb1cae1b41fa
7
- data.tar.gz: 222ba1f7dd0b7096e79eb5723bc08c05af42bbdbc77696d6660a724cf110312b3678ca95114bde71fc71046525e41790f166972bdc9314e29801d3ed4c5c29ae
6
+ metadata.gz: a154c8202c04203bfd5a577d2a70d407ebfd98f24a3050fc524f97bbcb60c724f6944fd613911869160418590a80acf9abdf0aef3dd5b3a7e41904e752cb41f7
7
+ data.tar.gz: b609e0a9fa6624bb99e1e3b5a2db1ed63d5c131af554feee56e488eb6da67fcfb41abe607a8d2ada3ef0dbd38cfd583be8503388bcb1c658408cf64281b26dbc
@@ -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 *(\(| ).*|^[a-zA-Z_]\w*\s*=[^=].*|^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.0'
3
+ VERSION = '1.7.0'
3
4
  end
@@ -3,3 +3,5 @@ class Python2ExpectationsHook < BasePythonExpectationsHook
3
3
  'Python2'
4
4
  end
5
5
  end
6
+
7
+ PythonExpectationsHook = Python2ExpectationsHook
@@ -4,7 +4,10 @@ def reload_python2_runner!
4
4
  Mumukit.runner_name = 'python'
5
5
  Mumukit.configure do |config|
6
6
  config.docker_image = 'mumuki/mumuki-python2-worker:0.1'
7
+ # comment type should be Mumukit::Directives::CommentType::Ruby, but it is
8
+ # Mumukit::Directives::CommentType::Cpp for backward compatibility
7
9
  config.stateful = true
10
+ config.structured = true
8
11
  end
9
12
  end
10
13
 
@@ -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
@@ -4,6 +4,8 @@ def reload_python3_runner!
4
4
  Mumukit.runner_name = 'python3'
5
5
  Mumukit.configure do |config|
6
6
  config.docker_image = 'mumuki/mumuki-python3-worker:0.1'
7
+ config.comment_type = Mumukit::Directives::CommentType::Ruby
8
+ config.structured = true
7
9
  config.stateful = true
8
10
  end
9
11
  end
@@ -14,5 +16,6 @@ reload_python3_runner!
14
16
  require_relative './python3/version'
15
17
  require_relative './python3/test_hook'
16
18
  require_relative './python3/query_hook'
19
+ require_relative './python3/try_hook'
17
20
  require_relative './python3/expectations_hook'
18
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.0
4
+ version: 1.7.0
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: 2020-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '12.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '12.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +147,7 @@ files:
147
147
  - lib/python3/metadata_hook.rb
148
148
  - lib/python3/query_hook.rb
149
149
  - lib/python3/test_hook.rb
150
+ - lib/python3/try_hook.rb
150
151
  - lib/python3/version.rb
151
152
  - lib/python3_runner.rb
152
153
  - lib/python_runner.rb
@@ -169,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
170
  - !ruby/object:Gem::Version
170
171
  version: '0'
171
172
  requirements: []
172
- rubygems_version: 3.0.3
173
+ rubygems_version: 3.0.8
173
174
  signing_key:
174
175
  specification_version: 4
175
176
  summary: Python Runner for Mumuki