| 69 | return json.loads(data.decode('utf-8')) |
| 70 | |
| 71 | def _execute(self, subcmd, data_input): |
| 72 | if self.exe is None: |
| 73 | raise errors.StoreError( |
| 74 | f'{self.program} not installed or not available in PATH' |
| 75 | ) |
| 76 | output = None |
| 77 | env = create_environment_dict(self.environment) |
| 78 | try: |
| 79 | output = subprocess.check_output( |
| 80 | [self.exe, subcmd], input=data_input, env=env, |
| 81 | ) |
| 82 | except subprocess.CalledProcessError as e: |
| 83 | raise errors.process_store_error(e, self.program) from e |
| 84 | except OSError as e: |
| 85 | if e.errno == errno.ENOENT: |
| 86 | raise errors.StoreError( |
| 87 | f'{self.program} not installed or not available in PATH' |
| 88 | ) from e |
| 89 | else: |
| 90 | raise errors.StoreError( |
| 91 | f'Unexpected OS error "{e.strerror}", errno={e.errno}' |
| 92 | ) from e |
| 93 | return output |