Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process

2016-02-17 Thread Ibarra Lopez, Humberto
Yes, thanks for the heads up. I will send version 2.

Humberto

From: Christopher Larson [mailto:clar...@kergoth.com]
Sent: Tuesday, February 16, 2016 4:20 PM
To: Ibarra Lopez, Humberto <humberto.ibarra.lo...@intel.com>; 
openembedded-core@lists.openembedded.org
Subject: Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to 
run coverage configuration code for sub-process

Shouldn't this use a try/finally to ensure the user's site area is properly 
cleaned up if coverage_report() raises an exception? I doubt you want to risk 
leaving that around.

On Tue, Feb 16, 2016 at 1:10 PM 
<humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>> wrote:
From: Humberto Ibarra 
<humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>>

Coverage in oe-selftest currently requires to create or modify
a sitecustomize.py file according the coverage tool setup instructions
(http://coverage.readthedocs.org/). This file has to be located in
the system's python folder, which is not a good solution since this
folder is not accesible to non-privileged users.

The best solution so far is to create this file in the home directory.
This is implemented by creating the temporal file in the user site
default folder.

[Yocto #8930]

Signed-off-by: Humberto Ibarra 
<humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>>
---
 scripts/oe-selftest | 41 +++--
 1 file changed, 31 insertions(+), 10 deletions(-)

diff --git a/scripts/oe-selftest b/scripts/oe-selftest
index f3865e4..3159d22 100755
--- a/scripts/oe-selftest
+++ b/scripts/oe-selftest
@@ -553,6 +553,7 @@ def main():

 def buildResultClass(args):
 """Build a Result Class to use in the testcase execution"""
+import site

 class StampedResult(unittest.TextTestResult):
 """
@@ -568,26 +569,41 @@ def buildResultClass(args):

 def startTestRun(self):
 """ Setup coverage before running any testcase """
+
+# variable holding the coverage configuration file allowing 
subprocess to be measured
+self.coveragepth = None
+
+# indicates the system if coverage is currently installed
+self.coverage_installed = True
+
 if args.coverage or args.coverage_source or args.coverage_include 
or args.coverage_omit:
 try:
 # check if user can do coverage
 import coverage
-log.info<http://log.info>("Coverage is enabled")
-
-# In case the user has not set the variable 
COVERAGE_PROCESS_START,
-# create a default one and export it. The 
COVERAGE_PROCESS_START
-# value indicates where the coverage configuration file 
resides
-# More info on https://pypi.python.org/pypi/coverage
-if not os.environ.get('COVERAGE_PROCESS_START'):
-os.environ['COVERAGE_PROCESS_START'] = 
coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, 
args.coverage_include, args.coverage_omit)
-
-self.coverage_installed = True
 except:
 log.warn('\n'.join(["python coverage is not installed",
 "Make sure your coverage takes into account 
sub-process",
 "More info on https://pypi.python.org/pypi/coverage;]))
 self.coverage_installed = False

+if self.coverage_installed:
+log.info<http://log.info>("Coverage is enabled")
+
+# In case the user has not set the variable 
COVERAGE_PROCESS_START,
+# create a default one and export it. The 
COVERAGE_PROCESS_START
+# value indicates where the coverage configuration file resides
+# More info on https://pypi.python.org/pypi/coverage
+if not os.environ.get('COVERAGE_PROCESS_START'):
+os.environ['COVERAGE_PROCESS_START'] = 
coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, 
args.coverage_include, args.coverage_omit)
+
+# Use default site.USER_SITE and write corresponding config 
file
+site.ENABLE_USER_SITE = True
+if not os.path.exists(site.USER_SITE):
+os.makedirs(site.USER_SITE)
+self.coveragepth = os.path.join(site.USER_SITE, "coverage.pth")
+with open(self.coveragepth, 'w') as cps:
+cps.write('import sys,site; 
sys.path.extend(site.getsitepackages()); import coverage; 
coverage.process_startup();')
+
 def stopTestRun(self):
 """ Report coverage data after the testcases

Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process

2016-02-16 Thread Christopher Larson
Shouldn't this use a try/finally to ensure the user's site area is properly
cleaned up if coverage_report() raises an exception? I doubt you want to
risk leaving that around.

On Tue, Feb 16, 2016 at 1:10 PM  wrote:

> From: Humberto Ibarra 
>
> Coverage in oe-selftest currently requires to create or modify
> a sitecustomize.py file according the coverage tool setup instructions
> (http://coverage.readthedocs.org/). This file has to be located in
> the system's python folder, which is not a good solution since this
> folder is not accesible to non-privileged users.
>
> The best solution so far is to create this file in the home directory.
> This is implemented by creating the temporal file in the user site
> default folder.
>
> [Yocto #8930]
>
> Signed-off-by: Humberto Ibarra 
> ---
>  scripts/oe-selftest | 41 +++--
>  1 file changed, 31 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/oe-selftest b/scripts/oe-selftest
> index f3865e4..3159d22 100755
> --- a/scripts/oe-selftest
> +++ b/scripts/oe-selftest
> @@ -553,6 +553,7 @@ def main():
>
>  def buildResultClass(args):
>  """Build a Result Class to use in the testcase execution"""
> +import site
>
>  class StampedResult(unittest.TextTestResult):
>  """
> @@ -568,26 +569,41 @@ def buildResultClass(args):
>
>  def startTestRun(self):
>  """ Setup coverage before running any testcase """
> +
> +# variable holding the coverage configuration file allowing
> subprocess to be measured
> +self.coveragepth = None
> +
> +# indicates the system if coverage is currently installed
> +self.coverage_installed = True
> +
>  if args.coverage or args.coverage_source or
> args.coverage_include or args.coverage_omit:
>  try:
>  # check if user can do coverage
>  import coverage
> -log.info("Coverage is enabled")
> -
> -# In case the user has not set the variable
> COVERAGE_PROCESS_START,
> -# create a default one and export it. The
> COVERAGE_PROCESS_START
> -# value indicates where the coverage configuration
> file resides
> -# More info on https://pypi.python.org/pypi/coverage
> -if not os.environ.get('COVERAGE_PROCESS_START'):
> -os.environ['COVERAGE_PROCESS_START'] =
> coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source,
> args.coverage_include, args.coverage_omit)
> -
> -self.coverage_installed = True
>  except:
>  log.warn('\n'.join(["python coverage is not
> installed",
>  "Make sure your coverage takes into account
> sub-process",
>  "More info on
> https://pypi.python.org/pypi/coverage;]))
>  self.coverage_installed = False
>
> +if self.coverage_installed:
> +log.info("Coverage is enabled")
> +
> +# In case the user has not set the variable
> COVERAGE_PROCESS_START,
> +# create a default one and export it. The
> COVERAGE_PROCESS_START
> +# value indicates where the coverage configuration file
> resides
> +# More info on https://pypi.python.org/pypi/coverage
> +if not os.environ.get('COVERAGE_PROCESS_START'):
> +os.environ['COVERAGE_PROCESS_START'] =
> coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source,
> args.coverage_include, args.coverage_omit)
> +
> +# Use default site.USER_SITE and write corresponding
> config file
> +site.ENABLE_USER_SITE = True
> +if not os.path.exists(site.USER_SITE):
> +os.makedirs(site.USER_SITE)
> +self.coveragepth = os.path.join(site.USER_SITE,
> "coverage.pth")
> +with open(self.coveragepth, 'w') as cps:
> +cps.write('import sys,site;
> sys.path.extend(site.getsitepackages()); import coverage;
> coverage.process_startup();')
> +
>  def stopTestRun(self):
>  """ Report coverage data after the testcases are run """
>
> @@ -601,6 +617,11 @@ def buildResultClass(args):
>  log.info("===")
>
>  coverage_report()
> +# remove the pth file
> +try:
> +os.remove(self.coveragepth)
> +except OSError:
> +pass
>
>  return StampedResult
>
> --
> 1.9.1
>
> --
> ___
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
-- 

[OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process

2016-02-16 Thread humberto . ibarra . lopez
From: Humberto Ibarra 

Coverage in oe-selftest currently requires to create or modify
a sitecustomize.py file according the coverage tool setup instructions
(http://coverage.readthedocs.org/). This file has to be located in
the system's python folder, which is not a good solution since this
folder is not accesible to non-privileged users.

The best solution so far is to create this file in the home directory.
This is implemented by creating the temporal file in the user site
default folder.

[Yocto #8930]

Signed-off-by: Humberto Ibarra 
---
 scripts/oe-selftest | 41 +++--
 1 file changed, 31 insertions(+), 10 deletions(-)

diff --git a/scripts/oe-selftest b/scripts/oe-selftest
index f3865e4..3159d22 100755
--- a/scripts/oe-selftest
+++ b/scripts/oe-selftest
@@ -553,6 +553,7 @@ def main():
 
 def buildResultClass(args):
 """Build a Result Class to use in the testcase execution"""
+import site
 
 class StampedResult(unittest.TextTestResult):
 """
@@ -568,26 +569,41 @@ def buildResultClass(args):
 
 def startTestRun(self):
 """ Setup coverage before running any testcase """
+
+# variable holding the coverage configuration file allowing 
subprocess to be measured
+self.coveragepth = None
+
+# indicates the system if coverage is currently installed
+self.coverage_installed = True
+
 if args.coverage or args.coverage_source or args.coverage_include 
or args.coverage_omit:
 try:
 # check if user can do coverage
 import coverage
-log.info("Coverage is enabled")
-
-# In case the user has not set the variable 
COVERAGE_PROCESS_START,
-# create a default one and export it. The 
COVERAGE_PROCESS_START
-# value indicates where the coverage configuration file 
resides
-# More info on https://pypi.python.org/pypi/coverage
-if not os.environ.get('COVERAGE_PROCESS_START'):
-os.environ['COVERAGE_PROCESS_START'] = 
coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, 
args.coverage_include, args.coverage_omit)
-
-self.coverage_installed = True
 except:
 log.warn('\n'.join(["python coverage is not installed",
 "Make sure your coverage takes into account 
sub-process",
 "More info on https://pypi.python.org/pypi/coverage;]))
 self.coverage_installed = False
 
+if self.coverage_installed:
+log.info("Coverage is enabled")
+
+# In case the user has not set the variable 
COVERAGE_PROCESS_START,
+# create a default one and export it. The 
COVERAGE_PROCESS_START
+# value indicates where the coverage configuration file resides
+# More info on https://pypi.python.org/pypi/coverage
+if not os.environ.get('COVERAGE_PROCESS_START'):
+os.environ['COVERAGE_PROCESS_START'] = 
coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, 
args.coverage_include, args.coverage_omit)
+
+# Use default site.USER_SITE and write corresponding config 
file
+site.ENABLE_USER_SITE = True
+if not os.path.exists(site.USER_SITE):
+os.makedirs(site.USER_SITE)
+self.coveragepth = os.path.join(site.USER_SITE, "coverage.pth")
+with open(self.coveragepth, 'w') as cps:
+cps.write('import sys,site; 
sys.path.extend(site.getsitepackages()); import coverage; 
coverage.process_startup();')
+
 def stopTestRun(self):
 """ Report coverage data after the testcases are run """
 
@@ -601,6 +617,11 @@ def buildResultClass(args):
 log.info("===")
 
 coverage_report()
+# remove the pth file
+try:
+os.remove(self.coveragepth)
+except OSError:
+pass
 
 return StampedResult
 
-- 
1.9.1

-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core