mumuki-python-runner 1.1.2 → 1.2.0

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: a20c24cf3d50c5ffd25634e7eca49a1c5bcf91f53ee7b1dbeeec65eb0875f152
4
- data.tar.gz: 4289c596dad901e99572419a75609452b6a79ef768dd5426cc4a7c3cff97c829
3
+ metadata.gz: 7d9650ed6490f860cbc6f99920e4cb0e20d3d021f2d60e691437d60c3d5cecdb
4
+ data.tar.gz: 681d4896b37179bdec46e097c642a0ab1da1cb5c58e6229c3223edcacd593754
5
5
  SHA512:
6
- metadata.gz: a84f8de3b8316e96778ffa7048bec1b68a93c917b75da0d9a5e329e508380b4a25db5a2907cf387601ce5913754d6511226bc1cb339eca68cee45a4f8f437720
7
- data.tar.gz: 1d18b0fe1be552e8ed7a11cd60263096b03b14b3af772f8c72a3de6baa1c41d480a8b9f30c1c9f1a23b48d6d98d674d4873feefcbfecce4288a9602d0ffb4d33
6
+ metadata.gz: 549db14da85cef8c7f1485bd55398587bb8cb1988e49964c995d0ec68870e9df63d8d84781c5e230f514c218c2cee12e433799835478b0c664ee744a677f0a4a
7
+ data.tar.gz: 5a7b67fc170fa4cae85d1e4a3a5c2614fdb14a116a2a6fd729aab4614e90f1e7ae5fd412b56414aefa0eb0da922d04afb1e6a333a3c7bf518891ee6d88f446d9
data/lib/python_runner.rb CHANGED
@@ -1,15 +1,14 @@
1
1
  require 'mumukit'
2
+ require 'nokogiri'
2
3
 
3
4
  I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
4
5
 
5
6
  Mumukit.runner_name = 'python'
6
7
  Mumukit.configure do |config|
7
- config.docker_image = 'mumuki/mumuki-python-worker'
8
+ config.docker_image = 'mumuki/mumuki-python-worker:1.1'
8
9
  end
9
10
 
10
11
  require_relative 'version'
11
12
  require_relative 'test_hook'
12
13
  require_relative 'query_hook'
13
14
  require_relative 'metadata_hook'
14
-
15
-
data/lib/query_hook.rb CHANGED
@@ -11,11 +11,17 @@ import string
11
11
 
12
12
  #{req.extra}
13
13
  #{req.content}
14
-
15
- print(string.Template("=> $result").substitute(result = #{req.query}))
14
+ #{build_query req.query}
16
15
  python
17
16
  end
18
17
 
18
+ def build_query(query)
19
+ if query.match /print *(\(| ).*/
20
+ query
21
+ else
22
+ "print(string.Template(\"=> $result\").substitute(result = #{query}))"
23
+ end
24
+ end
19
25
  end
20
26
 
21
27
 
data/lib/test_hook.rb CHANGED
@@ -12,16 +12,33 @@ class PythonTestHook < Mumukit::Templates::FileHook
12
12
  def compile_file_content(request)
13
13
  <<python
14
14
  import unittest
15
+ import xmlrunner
16
+ import sys
15
17
 
16
18
  #{request.content}
17
19
  #{request.extra}
18
20
  #{test_class(request.test)}
19
21
 
20
-
21
- unittest.main()
22
+ unittest.main(
23
+ testRunner=xmlrunner.XMLTestRunner(output=sys.__stdout__),
24
+ failfast=False,
25
+ buffer=False,
26
+ catchbreak=False
27
+ )
22
28
  python
23
29
  end
24
30
 
31
+ def post_process_file(_file, output, status)
32
+ xml = output.split("Generating XML reports...\n").last
33
+ raise StandardError, 'No XML found' unless xml.start_with? '<?xml'
34
+
35
+ [generate_test_results(Nokogiri::XML(xml))]
36
+ rescue
37
+ [output, :errored]
38
+ end
39
+
40
+ private
41
+
25
42
  def test_class(test)
26
43
  return test if test =~ /class.*\( *unittest.TestCase *\) *:/
27
44
  <<python
@@ -29,5 +46,25 @@ class MumukiTest(unittest.TestCase):
29
46
  #{test.gsub(/\n/,"\n\t")}
30
47
  python
31
48
  end
49
+
50
+ def generate_test_results(report)
51
+ report.xpath('//testcase').map(&method(:test_result))
52
+ end
53
+
54
+ def test_result(test_case)
55
+ failure = test_case.xpath('failure', 'error')
56
+ error = failure.attribute('type')
57
+ message = failure.attribute('message')
58
+
59
+ [
60
+ format_test_name(test_case.attribute('name').to_s),
61
+ error.nil? ? :passed: :failed,
62
+ error.nil? ? '' : "#{error}: #{message}"
63
+ ]
64
+ end
65
+
66
+ def format_test_name(name)
67
+ name.sub('test_', '').gsub('_', ' ').capitalize
68
+ end
32
69
  end
33
70
 
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PythonVersionHook
2
- VERSION = '1.1.2'
2
+ VERSION = '1.2.0'
3
3
  end
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.1.2
4
+ version: 1.2.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-01-17 00:00:00.000000000 Z
11
+ date: 2019-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit