Code Monkey home page Code Monkey logo

fabric8-analytics-worker's Introduction

CI codecov

Fabric8-Analytics Core library and services

This library provides basic infrastructure for development of services and concrete implementation of services.

The following libraries are provided:

  • Database abstraction
  • Task Queue Worker/Node abstraction
  • Utilities
    • File tree walker with filtering
    • One-to-many dictionary
    • Shell command wrapper with timeout support

See workers/README.md for a listing of the concrete services.

Contributing

See our contributing guidelines for more info.

Running worker environment with docker-compose

There are two sets of workers - API and ingestion. API workers serve requests that are passed from API endpoint. Ingestion workers are used for background data ingestion. To run them use:

$ docker-compose up worker-api worker-ingestion

Running the tests locally

Docker based API testing

Run the tests in a container using the helper script:

$ ./runtests.sh

(The above command assumes you have passwordless docker invocation configured - if you don't, then sudo will be necessary to enable docker invocation).

If you're changing dependencies rather than just editing source code locally, you will need images to be rebuilt when invoking runtest.sh. You can set environment variable REBUILD=1 to request image rebuilding.

If the offline virtualenv based tests have been run, then this may complain about mismatched locations in compiled files. Those can be deleted using:

$ find -name *.pyc -delete

NOTE: Running the container based tests is likely to cause any already running local Fabric8-Analytics instance launched via Docker Compose to fall over due to changes in the SELinux labels on mounted volumes, and may also cause spurious test failures.

Virtualenv based offline testing

Test cases marked with pytest.mark.offline may be executed without having a Docker daemon running locally.

To configure a virtualenv (called f8a-worker in the example) to run these tests:

(f8a-worker) $ python -m pip install -r requirements.txt
(f8a-worker) $ python -m pip install -r tests/requirements.txt

The marked offline tests can then be run as:

(f8a-worker) $ py.test -m offline tests/

If the Docker container based tests have been run, then this may complain about mismatched locations in compiled files. Those can be deleted using:

(f8a-worker) $ sudo find -name *.pyc -delete

Some tips for running tests locally

Reusing an existing virtualenv for multiple test runs

When a virtualenv already is setup you can run tests like so:

source /path/to/python_env/bin/activate
NOVENV=1 ./runtest.sh

This will not create a virtualenv every time.

Forcing image builds while testing

When some changes are made to code that will change the docker image, it is good to rebuild images locally for testing. This can re-build can be forced like so:

REBUILD=1 ./runtest.sh 

Footnotes

Check for all possible issues

The script named check-all.sh is to be used to check the sources for all detectable errors and issues. This script can be run w/o any arguments:

./check-all.sh

Expected script output:

Running all tests and checkers
  Check all BASH scripts
    OK
  Check documentation strings in all Python source file
    OK
  Detect common errors in all Python source file
    OK
  Detect dead code in all Python source file
    OK
  Run Python linter for Python source file
    OK
  Unit tests for this project
    OK
Done

Overal result
  OK

An example of script output when one error is detected:

Running all tests and checkers
  Check all BASH scripts
    Error: please look into files check-bashscripts.log and check-bashscripts.err for possible causes
  Check documentation strings in all Python source file
    OK
  Detect common errors in all Python source file
    OK
  Detect dead code in all Python source file
    OK
  Run Python linter for Python source file
    OK
  Unit tests for this project
    OK
Done

Overal result
  One error detected!

Please note that the script creates bunch of *.log and *.err files that are temporary and won't be commited into the project repository.

Coding standards

  • You can use scripts run-linter.sh and check-docstyle.sh to check if the code follows PEP 8 and PEP 257 coding standards. These scripts can be run w/o any arguments:
./run-linter.sh
./check-docstyle.sh

The first script checks the indentation, line lengths, variable names, white space around operators etc. The second script checks all documentation strings - its presence and format. Please fix any warnings and errors reported by these scripts.

List of directories containing source code, that needs to be checked, are stored in a file directories.txt

Code complexity measurement

The scripts measure-cyclomatic-complexity.sh and measure-maintainability-index.sh are used to measure code complexity. These scripts can be run w/o any arguments:

./measure-cyclomatic-complexity.sh
./measure-maintainability-index.sh

The first script measures cyclomatic complexity of all Python sources found in the repository. Please see this table for further explanation how to comprehend the results.

The second script measures maintainability index of all Python sources found in the repository. Please see the following link with explanation of this measurement.

You can specify command line option --fail-on-error if you need to check and use the exit code in your workflow. In this case the script returns 0 when no failures has been found and non zero value instead.

Dead code detection

The script detect-dead-code.sh can be used to detect dead code in the repository. This script can be run w/o any arguments:

./detect-dead-code.sh

Please note that due to Python's dynamic nature, static code analyzers are likely to miss some dead code. Also, code that is only called implicitly may be reported as unused.

Because of this potential problems, only code detected with more than 90% of confidence is reported.

List of directories containing source code, that needs to be checked, are stored in a file directories.txt

Common issues detection

The script detect-common-errors.sh can be used to detect common errors in the repository. This script can be run w/o any arguments:

./detect-common-errors.sh

Please note that only semantical problems are reported.

List of directories containing source code, that needs to be checked, are stored in a file directories.txt

Check for scripts written in BASH

The script named check-bashscripts.sh can be used to check all BASH scripts (in fact: all files with the .sh extension) for various possible issues, incompatibilities, and caveats. This script can be run w/o any arguments:

./check-bashscripts.sh

Please see the following link for further explanation, how the ShellCheck works and which issues can be detected.

Code coverage report

Code coverage is reported via the codecov.io. The results can be seen on the following address:

code coverage report

fabric8-analytics-worker's People

Contributors

abs51295 avatar animuk avatar fche avatar fridex avatar geetikabatra avatar humaton avatar jmelis avatar jparsai avatar jpopelka avatar jyasveer avatar krishnapaparaju avatar maorfr avatar miteshvp avatar mldeveloper01 avatar msehnout avatar msrb avatar rafiu007 avatar rootavish avatar saketjnu avatar sawood14012 avatar shaded-enmity avatar syamgk avatar tisnik avatar tuxdna avatar vinagarw272001 avatar vpavlin avatar yzainee avatar yzainee-zz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fabric8-analytics-worker's Issues

Stack analysis does not schedule component analyses

With the current Selinon configuration, the stackApiGraphFlow flow responsible for stack analyses does not schedule analyses on components that are present in the stack - the bayesianFlowflow. With this approach we will never analyse unknown components that are stated in the manifest files.

Also stack analyses does not perform dependency snapshots.

Stop using forked kombu, if possible

We were experiencing some connection errors in SQS and therefore we started depending on kombu fork which contains workaround for the errors.
We don't want to maintain our fork, therefore we want to test new releases of kombu and switch back to upstream if the problems are solved there.

Note we don't have proper fix for the connection errors, just workaround.

Pin down dependencies properly

Although we pin down versions of our dependencies, we also use some hacks in our Dockerfile. Those hacks can make the pinning ineffective in some cases. See for example the recent issue with amqp 2.2.0 (#104).

[git_stats] Authenticity of host 'github.com' can't be established.

Seeing the following when scanning maven:io.vertx:vertx-core:3.4.2 locally

worker-ingestion_1      | 01 12:24:12,798 [DEBUG] f8a_worker.utils: running command ['git', 'config', '--get', 'user.name']
worker-ingestion_1      | 01 12:24:12,812 [DEBUG] f8a_worker.utils: running command ['git', 'config', '--get', 'user.email']
worker-ingestion_1      | 01 12:24:12,832 [DEBUG] f8a_worker.utils: running command ['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']
worker-ingestion_1      | enticity of host 'github.com (192.30.253.113)' can't be established.
worker-ingestion_1      | RSA key fingerprint is ...
...
worker-ingestion_1      | Are you sure you want to continue connecting (yes/no)? 01 12:29:12,924 [WARNING] f8a_worker.utils: command ['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem'] timed out:
worker-ingestion_1      | Cloning into '/tmp/tmpd3il7uem'...
worker-ingestion_1      | 
worker-ingestion_1      | 01 12:29:12,925 [ERROR] f8a_worker.utils: exception is fatal
worker-ingestion_1      |  "Traceback (most recent call last):\n  File \"/usr/lib64/python3.4/subprocess.py\", line 606, in check_output\n    output, unused_err = process.communicate(inputdata, timeout=timeout)\n  File \"/usr/lib64/python3.4/subprocess.py\", line 959, in communicate\n    stdout, stderr = self._communicate(input, endtime, timeout)\n  File \"/usr/lib64/python3.4/subprocess.py\", line 1621, in _communicate\n    self._check_timeout(endtime, orig_timeout)\n  File \"/usr/lib64/python3.4/subprocess.py\", line 985, in _check_timeout\n    raise TimeoutExpired(self.args, orig_timeout)\nsubprocess.TimeoutExpired: Command '['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']' timed out after 300 seconds\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 255, in get_command_output\n    out = check_output(args, universal_newlines=True, **kwargs)\n  File \"/usr/lib64/python3.4/subprocess.py\", line 610, in check_output\n    raise TimeoutExpired(process.args, timeout, output=output)\nsubprocess.TimeoutExpired: Command '['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']' timed out after 300 seconds\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 132, in execute\n    master_log = self._get_log(arguments['url'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 26, in _get_log\n    git = Git.clone(url, tmp_dir)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/process.py\", line 65, in clone\n    TimedCommand.get_command_output(cmd, graceful=False)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 239, in get_command_output\n    return get_command_output(args, graceful, is_json, **kwargs)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 265, in get_command_output\n    raise TaskError(\"Error during running command %s: %r\" % (args, ex.output))\nf8a_worker.errors.TaskError: Error during running command ['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']: \"Cloning into '/tmp/tmpd3il7uem'...\\n\"\n", "parent": {}, "queue": "jpopelka_ingestion_git_stats_v0", "flow_name": "bayesianPackageAnalysisFlow", "node_args": {"force_graph_sync": false, "_audit": {"started_at": "2017-08-01T12:23:57.195309", "version": "v1", "ended_at": "2017-08-01T12:23:57.237983"}, "_release": "maven:io.vertx:vertx-core:None", "url": "[email protected]:eclipse/vert.x.git", "recursive_limit": 0, "force": true, "document_id": 1, "name": "io.vertx:vertx-core", "ecosystem": "maven"}, "task_name": "git_stats", "task_id": "351e8647-2cc0-4e16-9dd7-ab19947bd674", "dispatcher_id": "90f8f26b-45e1-4db9-9f9a-92fa30dccb5d", "event": "TASK_FAILURE", "retried_count": 0}
worker-ingestion_1      | type": "<class 'f8a_worker.errors.TaskError'>", "task_id": "351e8647-2cc0-4e16-9dd7-ab19947bd674", "flow_name": "bayesianPackageAnalysisFlow", "task_name": "git_stats", "error_value": "Error during running command ['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']: \"Cloning into '/tmp/tmpd3il7uem'...\\n\"", "record_id": null, "node_args": {"force_graph_sync": false, "_audit": {"started_at": "2017-08-01T12:23:57.195309", "version": "v1", "ended_at": "2017-08-01T12:23:57.237983"}, "_release": "maven:io.vertx:vertx-core:None", "url": "[email protected]:eclipse/vert.x.git", "recursive_limit": 0, "force": true, "document_id": 1, "name": "io.vertx:vertx-core", "ecosystem": "maven"}, "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 132, in execute\n    master_log = self._get_log(arguments['url'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 26, in _get_log\n    git = Git.clone(url, tmp_dir)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/process.py\", line 65, in clone\n    TimedCommand.get_command_output(cmd, graceful=False)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 239, in get_command_output\n    return get_command_output(args, graceful, is_json, **kwargs)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 265, in get_command_output\n    raise TaskError(\"Error during running command %s: %r\" % (args, ex.output))\n", "storage_task_name": "git_stats", "event": "STORAGE_STORE_ERROR", "storage_name": "PackagePostgres"}
worker-ingestion_1      | 01 12:29:12,960 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[351e8647-2cc0-4e16-9dd7-ab19947bd674] raised unexpected: TaskError('Error during running command [\'git\', \'clone\', \'[email protected]:eclipse/vert.x.git\', \'/tmp/tmpd3il7uem\']: "Cloning into \'/tmp/tmpd3il7uem\'...\\n"',)
worker-ingestion_1      | Traceback (most recent call last):
worker-ingestion_1      |   File "/usr/lib64/python3.4/subprocess.py", line 606, in check_output
worker-ingestion_1      |     output, unused_err = process.communicate(inputdata, timeout=timeout)
worker-ingestion_1      |   File "/usr/lib64/python3.4/subprocess.py", line 959, in communicate
worker-ingestion_1      |     stdout, stderr = self._communicate(input, endtime, timeout)
worker-ingestion_1      |   File "/usr/lib64/python3.4/subprocess.py", line 1621, in _communicate
worker-ingestion_1      |     self._check_timeout(endtime, orig_timeout)
worker-ingestion_1      |   File "/usr/lib64/python3.4/subprocess.py", line 985, in _check_timeout
worker-ingestion_1      |     raise TimeoutExpired(self.args, orig_timeout)
worker-ingestion_1      | subprocess.TimeoutExpired: Command '['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']' timed out after 300 seconds
worker-ingestion_1      | 
worker-ingestion_1      | During handling of the above exception, another exception occurred:
worker-ingestion_1      | 
worker-ingestion_1      | Traceback (most recent call last):
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 255, in get_command_output
worker-ingestion_1      |     out = check_output(args, universal_newlines=True, **kwargs)
worker-ingestion_1      |   File "/usr/lib64/python3.4/subprocess.py", line 610, in check_output
worker-ingestion_1      |     raise TimeoutExpired(process.args, timeout, output=output)
worker-ingestion_1      | subprocess.TimeoutExpired: Command '['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']' timed out after 300 seconds
worker-ingestion_1      | 
worker-ingestion_1      | During handling of the above exception, another exception occurred:
worker-ingestion_1      | 
worker-ingestion_1      | Traceback (most recent call last):
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
worker-ingestion_1      |     R = retval = fun(*args, **kwargs)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
worker-ingestion_1      |     return self.run(*args, **kwargs)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 170, in run
worker-ingestion_1      |     raise self.retry(max_retries=0, exc=exc)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
worker-ingestion_1      |     raise_with_context(exc)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 115, in run
worker-ingestion_1      |     result = task.run(node_args)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/base.py", line 38, in run
worker-ingestion_1      |     result = self.execute(node_args)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py", line 132, in execute
worker-ingestion_1      |     master_log = self._get_log(arguments['url'])
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py", line 26, in _get_log
worker-ingestion_1      |     git = Git.clone(url, tmp_dir)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/process.py", line 65, in clone
worker-ingestion_1      |     TimedCommand.get_command_output(cmd, graceful=False)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 239, in get_command_output
worker-ingestion_1      |     return get_command_output(args, graceful, is_json, **kwargs)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 265, in get_command_output
worker-ingestion_1      |     raise TaskError("Error during running command %s: %r" % (args, ex.output))
worker-ingestion_1      | f8a_worker.errors.TaskError: Error during running command ['git', 'clone', '[email protected]:eclipse/vert.x.git', '/tmp/tmpd3il7uem']: "Cloning into '/tmp/tmpd3il7uem'...\n"
worker-ingestion_1      | 01 12:29:12,961 [CRITICAL] celery.worker.request: Couldn't ack 26, reason:ConnectionResetError(104, 'Connection reset by peer')
worker-ingestion_1      | Traceback (most recent call last):
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/kombu/message.py", line 130, in ack_log_error
worker-ingestion_1      |     self.ack(multiple=multiple)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/kombu/message.py", line 125, in ack
worker-ingestion_1      |     self.channel.basic_ack(self.delivery_tag, multiple=multiple)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/amqp/channel.py", line 1408, in basic_ack
worker-ingestion_1      |     spec.Basic.Ack, argsig, (delivery_tag, multiple),
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/amqp/abstract_channel.py", line 64, in send_method
worker-ingestion_1      |     conn.frame_writer(1, self.channel_id, sig, args, content)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/amqp/method_framing.py", line 174, in write_frame
worker-ingestion_1      |     write(view[:offset])
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/amqp/transport.py", line 269, in write
worker-ingestion_1      |     self._write(s)
worker-ingestion_1      | ConnectionResetError: [Errno 104] Connection reset by peer
worker-ingestion_1      | 01 12:29:12,965 [CRITICAL] celery.worker: Unrecoverable error: RecoverableConnectionError(None, 'Socket was disconnected', None, '')
worker-ingestion_1      | Traceback (most recent call last):
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/worker/worker.py", line 203, in start
worker-ingestion_1      |     self.blueprint.start(self)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
worker-ingestion_1      |     step.start(parent)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 370, in start
worker-ingestion_1      |     return self.obj.start()
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 318, in start
worker-ingestion_1      |     blueprint.start(self)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
worker-ingestion_1      |     step.start(parent)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 594, in start
worker-ingestion_1      |     c.loop(*c.loop_args())
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/celery/worker/loops.py", line 88, in asynloop
worker-ingestion_1      |     next(loop)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/kombu/async/hub.py", line 282, in create_loop
worker-ingestion_1      |     item()
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/vine/promises.py", line 139, in __call__
worker-ingestion_1      |     return self.throw()
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/vine/promises.py", line 136, in __call__
worker-ingestion_1      |     retval = fun(*final_args, **final_kwargs)
worker-ingestion_1      |   File "/usr/lib/python3.4/site-packages/kombu/transport/base.py", line 216, in _read
worker-ingestion_1      |     raise RecoverableConnectionError('Socket was disconnected')
worker-ingestion_1      | amqp.exceptions.RecoverableConnectionError: Socket was disconnected
worker-ingestion_1      | 01 12:29:12,972 [DEBUG] celery.bootsteps: | Worker: Closing Hub...
worker-ingestion_1      | 2017-08-01 12:29:12,973 [DEBUG] celery.bootsteps: | Worker: Closing Pool...
worker-ingestion_1      | 2017-08-01 12:29:12,973 [DEBUG] celery.bootsteps: | Worker: Closing Consumer...
worker-ingestion_1      | 2017-08-01 12:29:12,973 [DEBUG] celery.bootsteps: | Worker: Stopping Consumer...
worker-ingestion_1      | 2017-08-01 12:29:12,973 [DEBUG] celery.bootsteps: | Consumer: Closing Connection...
worker-ingestion_1      | 2017-08-01 12:29:12,973 [DEBUG] celery.bootsteps: | Consumer: Closing Events...
worker-ingestion_1      | 2017-08-01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Closing Tasks...
worker-ingestion_1      | 01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Closing Control...
worker-ingestion_1      | 2017-08-01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Closing event loop...
worker-ingestion_1      | 2017-08-01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Stopping event loop...
worker-ingestion_1      | 2017-08-01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Stopping Control...
worker-ingestion_1      | 01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Stopping Tasks...
worker-ingestion_1      | 01 12:29:12,974 [DEBUG] celery.worker.consumer.tasks: Canceling task consumer...
worker-ingestion_1      | 01 12:29:12,974 [DEBUG] celery.bootsteps: | Consumer: Stopping Events...
worker-ingestion_1      | 01 12:29:12,975 [DEBUG] celery.bootsteps: | Consumer: Stopping Connection...
worker-ingestion_1      | 2017-08-01 12:29:12,975 [DEBUG] celery.bootsteps: | Worker: Stopping Pool...
worker-ingestion_1      | 01 12:29:12,975 [DEBUG] celery.bootsteps: | Worker: Stopping Hub...
worker-ingestion_1      | 2017-08-01 12:29:12,975 [DEBUG] celery.bootsteps: | Consumer: Shutdown Control...
worker-ingestion_1      | 2017-08-01 12:29:12,975 [DEBUG] celery.bootsteps: | Consumer: Shutdown Tasks...
worker-ingestion_1      | 2017-08-01 12:29:12,975 [DEBUG] celery.worker.consumer.tasks: Canceling task consumer...
worker-ingestion_1      | 2017-08-01 12:29:12,975 [DEBUG] celery.worker.consumer.tasks: Closing consumer channel...
worker-ingestion_1      | 2017-08-01 12:29:12,976 [DEBUG] celery.bootsteps: | Consumer: Shutdown Events...
worker-ingestion_1      | 01 12:29:12,977 [DEBUG] celery.bootsteps: | Consumer: Shutdown Connection...

Disable certain workers

We want to disable following workers as we don't need the data they produce now (we may re-enable them later):

  • digests
  • code metrics

Dependency snapshot for pypi/django-timezone-field/2.0 fails with error ValueError: Package django not found

{"node_args": {"_audit": {"started_at": "2017-07-17T08:39:28.536684", "version": "v1", "ended_at": "2017-07-17T08:39:28.594353"}, "force": true, "version": "2.0", "document_id": 1113522, "force_graph_sync": false, "ecosystem": "pypi", "_release": "pypi:django-timezone-field:2.0", "name": "django-timezone-field", "recursive_limit": 0}, "task_name": "dependency_snapshot", "record_id": null, "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 114, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/dependency_snapshot.py\", line 94, in execute\n    resolved = self._resolve_dependency(ecosystem, dep)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/dependency_snapshot.py\", line 64, in _resolve_dependency\n    pkgspec = solver.solve([dep])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/solver.py\", line 585, in solve\n    name, releases = self.release_fetcher.fetch_releases(dep.name)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/solver.py\", line 148, in fetch_releases\n    return self.fetch_releases(self._search_package_name(package))\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/solver.py\", line 135, in _search_package_name\n    raise ValueError(\"Package {} not found\".format(package))\n", "storage_task_name": "dependency_snapshot", "flow_name": "bayesianAnalysisFlow", "error_type": "<class 'ValueError'>", "event": "STORAGE_STORE_ERROR", "error_value": "Package django not found", "storage_name": "BayesianPostgres", "task_id": "c26d5b8d-f821-4620-b172-07b6b40cea66"}

[code_metrics] javancss doesn't support Java 7/8 syntax

Copied from GitLab.

epv: com.google.guava:guava/21.0

ParseException in /var/lib/cucos-lib/worker_data/maven/com.google.guava:guava/21.0/extracted_jar/com/google/common/collect/Streams.java
Last useful checkpoint: "com.google.common.collect.Streams.concat(T)"
Encountered " ">" "> "" at line 118, column 35.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...

ParseException in /var/lib/cucos-lib/worker_data/maven/com.google.guava:guava/21.0/extracted_jar/com/google/common/collect/LinkedHashMultimap.java
Last useful checkpoint: "com.google.common.collect.LinkedHashMultimap.valueSpliterator()"
Encountered " ":" ": "" at line 575, column 61.
Was expecting one of:
    "instanceof" ...
    ")" ...
    "," ...
    ">" ...
    "<" ...
    "?" ...
    "==" ...
    "<=" ...
    ">=" ...
    "!=" ...
    "||" ...
    "&&" ...
    "++" ...
    "--" ...
    "+" ...
    "-" ...
    "*" ...
    "/" ...
    "&" ...
    "|" ...
    "^" ...
    "%" ...
    "<" ...
    "<" ...
    "++" ...
    "--" ...
    "*" ...
    "/" ...
    "%" ...
    "+" ...
    "-" ...
    ">" ...
    "<" ...
    ">" ...
    "<=" ...
    ">=" ...
    "instanceof" ...
    "==" ...
    "!=" ...
    "&" ...
    "^" ...
    "|" ...
    "&&" ...
    "||" ...
    "?" ...
    "," ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    ">" ...
    "<" ...

ParseException in /var/lib/cucos-lib/worker_data/maven/com.google.guava:guava/21.0/extracted_jar/com/google/common/collect/Multimaps.java
Last useful checkpoint: "com.google.common.collect.Multimaps.toMultimap(K,V,M)"
Encountered " "," ", "" at line 115, column 18.
Was expecting one of:
    "instanceof" ...
    ")" ...
    ">" ...
    "<" ...
    "?" ...
    "==" ...
    "<=" ...
    ">=" ...
    "!=" ...
    "||" ...
    "&&" ...
    "++" ...
    "--" ...
    "+" ...
    "-" ...
    "*" ...
    "/" ...
    "&" ...
    "|" ...
    "^" ...
    "%" ...
    "<" ...
    "<" ...
    "++" ...
    "--" ...
    "*" ...
    "/" ...
    "%" ...
    "+" ...
    "-" ...
    ">" ...
    "<" ...
    ">" ...
    "<=" ...
    ">=" ...
    "instanceof" ...
    "==" ...
    "!=" ...
    "&" ...
    "^" ...
    "|" ...
    "&&" ...
    "||" ...
    "?" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    "<" ...
    "++" ...
    "--" ...
    "*" ...
    "/" ...
    "%" ...
    "+" ...
    "-" ...
    ">" ...
    "<" ...
    ">" ...
    "<=" ...
    ">=" ...
    "instanceof" ...
    "==" ...
    "!=" ...
    "&" ...
    "^" ...
    "|" ...
    "&&" ...
    "||" ...
    "?" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    "<" ...
    "++" ...
    "--" ...
    "*" ...
    "/" ...
    "%" ...
    "+" ...
    "-" ...
    ">" ...
    "<" ...
    ">" ...
    "<=" ...
    ">=" ...
    "instanceof" ...
    "==" ...
    "!=" ...
    "&" ...
    "^" ...
    "|" ...
    "&&" ...
    "||" ...
    "?" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    ")" ...
    "<" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    ">" ...
    "<" ...
    "<" ...
    ")" ...
    "<" ...

[anitya_worker] dependency on digests

Our anitya worker has, from some reason, dependency on results from digests worker. This is kinda weird and unexpected, IMO. We should investigate.

AttributeError: 'NoneType' object has no attribute 'query'

2017-06-08 18:23:53,618 - Scheduling #50408.
INFO:f8a_jobs.handlers.base:Scheduling #50408.
2017-06-08 18:23:53,618 - Scheduling io.mraa.upm:upm_ds1808lc/1.3.0
DEBUG:f8a_jobs.handlers.base:Scheduling io.mraa.upm:upm_ds1808lc/1.3.0
2017-06-08 18:23:53,618 - Scheduling Selinon flow 'bayesianFlow' with node_args: '{'name': 'io.mraa.upm:upm_ds1808lc', 'force_graph_sync': False, 'force': False, 'ecosystem': 'maven', 'recursive_limit': 0, 'version': '1.3.0'}'
DEBUG:f8a_jobs.handlers.base:Scheduling Selinon flow 'bayesianFlow' with node_args: '{'name': 'io.mraa.upm:upm_ds1808lc', 'force_graph_sync': False, 'force': False, 'ecosystem': 'maven', 'recursive_limit': 0, 'version': '1.3.0'}'
ERROR:root:Job 'None' failed, registering ErrorHandler: 'NoneType' object has no attribute 'query'
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/f8a_jobs/scheduler.py", line 190, in job_execute
    instance.execute(**handler_kwargs)
  File "/usr/lib/python3.4/site-packages/f8a_jobs/handlers/base.py", line 264, in execute
    return self.do_execute(popular)
  File "/usr/lib/python3.4/site-packages/f8a_jobs/handlers/maven_popular_analyses.py", line 174, in do_execute
    self._use_maven_index_checker()
  File "/usr/lib/python3.4/site-packages/f8a_jobs/handlers/maven_popular_analyses.py", line 136, in _use_maven_index_checker
    if package_postgres.get_analysis_count(self.ecosystem, name) > 0:
  File "/usr/lib/python3.4/site-packages/cucoslib/storages/package_postgres.py", line 59, in get_analysis_count
    count = PostgresBase.session.query(PackageAnalysis).\
AttributeError: 'NoneType' object has no attribute 'query'
[pid: 1|app: 0|req: 63/63] 10.130.2.1 () {30 vars in 382 bytes} [Thu Jun 8 18:24:41 2017] GET /api/v1/readiness => generated 3 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 70 bytes (1 switches on core 0)

User Profile storage on S3 failed

The bookkeepertask fails when tries to store user profile on S3 with the following error -

  File "/usr/lib/python3.4/site-packages/botocore/validate.py", line 291, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter ServerSideEncryption, value: True, type: <class 'bool'>, valid types: <class 'str'>

Reason:

This happens because of the wrong encryption method set in the nodes.yml file for S3UserProfileStore adapter.

Remedy

Make S3UserProfileStore encryption false which is in sync with other S3 adapters.

source_licenses fails for maven:ch.qos.logback:logback-access:1.1.9

{"task_name": "source_licenses", "node_args": {"recursive_limit": 0, "version": "1.1.9", "document_id": 1116620, "ecosystem": "maven", "force_graph_sync": false, "force": true, "_release": "maven:ch.qos.logback:logback-access:1.1.9", "_audit": {"version": "v1", "started_at": "2017-07-18T07:11:24.117505", "ended_at": "2017-07-18T07:11:24.296110"}, "name": "ch.qos.logback:logback-access"}, "flow_name": "bayesianAnalysisFlow", "event": "TASK_START", "task_id": "f9e8f9f6-8276-4016-95f9-90620a5170fb", "queue": "prod_ingestion_LicenseCheckTask_v0", "parent": {}, "dispatcher_id": "e89a6924-8128-4bf3-ad18-4a6618678e3c"}
/opt/scancode-toolkit/scancode: line 114: 71834 Killed                  $SCANCODE_ROOT_DIR/bin/scancode "$@"
2017-07-18 08:30:58,978 [WARNING] f8a_worker.utils: command ['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '120', '/var/lib/f8a_worker/worker_data/maven/ch.qos.logback:logback-access/1.1.9/extracted_jar', '--ignore', '"*.pyc"', '--ignore', '"*.so"', '--ignore', '"*.dll"'] ended with 137

2017-07-18 08:30:58,980 [ERROR] f8a_worker.utils: exception is fatal
2017-07-18 08:30:58,980 [ERROR] LicenseCheckTask: License scan failed
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 255, in get_command_output
    out = check_output(args, universal_newlines=True, **kwargs)
  File "/usr/lib64/python3.4/subprocess.py", line 617, in check_output
    raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command '['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '120', '/var/lib/f8a_worker/worker_data/maven/ch.qos.logback:logback-access/1.1.9/extracted_jar', '--ignore', '"*.pyc"', '--ignore', '"*.so"', '--ignore', '"*.dll"']' returned non-zero exit status 137

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/f8a_worker/workers/license.py", line 96, in execute
    timeout=1200)
  File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 239, in get_command_output
    return get_command_output(args, graceful, is_json, **kwargs)
  File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 265, in get_command_output
    raise TaskError("Error during running command %s: %r" % (args, ex.output))
f8a_worker.errors.TaskError: Error during running command ['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '120', '/var/lib/f8a_worker/worker_data/maven/ch.qos.logback:logback-access/1.1.9/extracted_jar', '--ignore', '"*.pyc"', '--ignore', '"*.so"', '--ignore', '"*.dll"']: ''

Improvement of sentiment scoring worker

This issue is created to address the review comments for sentiment scoring piece:

[license_worker] KeyError: 'getpwuid(): uid not found: 1000090000'

This seems to be something dsaas/openshift specific as I cant reproduce it locally.

2017-06-21 15:20:20,691 [INFO] celery.app.trace: Task selinon.Dispatcher[32e235bf-b66a-4987-b701-0fa131b3e2c4] retry: Retry in 2s
2017-06-21 15:20:21,733 [INFO] celery.worker.strategy: Received task: selinon.SelinonTaskEnvelope[2239c5e0-1eae-4c26-89d5-207205ffaf07]  
{"task_name": "source_licenses", "task_id": "2239c5e0-1eae-4c26-89d5-207205ffaf07", "parent": {}, "node_args": {"version": "1.5.2.RELEASE", "force": true, "document_id": 755970, "_audit": {"version": "v1", "ended_at": "2017-06-21T15:20:12.037380", "started_at": "2017-06-21T15:20:08.986963"}, "_release": "maven:org.springframework.boot:spring-boot-test-autoconfigure:1.5.2.RELEASE", "name": "org.springframework.boot:spring-boot-test-autoconfigure", "ecosystem": "maven"}, "event": "TASK_START", "flow_name": "bayesianAnalysisFlow", "queue": "prod_ingestion_LicenseCheckTask_v0", "dispatcher_id": "f42514a8-36eb-4d81-a274-37520d0f7314"}
Traceback (most recent call last):
  File "/opt/scancode-toolkit/bin/scancode", line 11, in <module>
    load_entry_point('scancode-toolkit', 'console_scripts', 'scancode')()
  File "/opt/scancode-toolkit/lib/python2.7/site-packages/pkg_resources/__init__.py", line 561, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/opt/scancode-toolkit/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2649, in load_entry_point
    return ep.load()
  File "/opt/scancode-toolkit/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2303, in load
    return self.resolve()
  File "/opt/scancode-toolkit/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2309, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/opt/scancode-toolkit/src/scancode/__init__.py", line 35, in <module>
    from commoncode import fileutils
  File "/opt/scancode-toolkit/src/commoncode/fileutils.py", line 49, in <module>
    from commoncode import system
  File "/opt/scancode-toolkit/src/commoncode/system.py", line 121, in <module>
    username = getpass.getuser()
  File "/usr/lib64/python2.7/getpass.py", line 158, in getuser
    return pwd.getpwuid(os.getuid())[0]
KeyError: 'getpwuid(): uid not found: 1000090000'
2017-06-21 15:20:23,315 [WARNING] cucoslib.utils: command ['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '10', '/var/lib/cucos-lib/worker_data/maven/org.springframework.boot:spring-boot-test-autoconfigure/1.5.2.RELEASE/extracted_jar'] ended with 1

2017-06-21 15:20:23,316 [ERROR] cucoslib.utils: exception is fatal
2017-06-21 15:20:23,316 [ERROR] LicenseCheckTask: License scan failed
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/cucoslib/utils.py", line 237, in get_command_output
    out = check_output(args, universal_newlines=True, **kwargs)
  File "/usr/lib64/python3.4/subprocess.py", line 617, in check_output
    raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command '['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '10', '/var/lib/cucos-lib/worker_data/maven/org.springframework.boot:spring-boot-test-autoconfigure/1.5.2.RELEASE/extracted_jar']' returned non-zero exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/cucoslib/workers/license.py", line 89, in execute
    timeout=600)
  File "/usr/lib/python3.4/site-packages/cucoslib/utils.py", line 221, in get_command_output
    return get_command_output(args, graceful, is_json, **kwargs)
  File "/usr/lib/python3.4/site-packages/cucoslib/utils.py", line 247, in get_command_output
    raise TaskError("Error during running command %s: %r" % (args, ex.output))
cucoslib.errors.TaskError: Error during running command ['/opt/scancode-toolkit/scancode', '--license', '--license-score', '20', '--only-findings', '--processes', '1', '--quiet', '--strip-root', '--timeout', '10', '/var/lib/cucos-lib/worker_data/maven/org.springframework.boot:spring-boot-test-autoconfigure/1.5.2.RELEASE/extracted_jar']: ''

Worker build fails in gem install github-linguist

I came across this build failure in worker for a fresh build in my dev environment -

Step 12 : RUN gem install --no-document github-linguist -v 5.0.2
 ---> Running in c6340410835a
ERROR:  Could not find a valid gem 'github-linguist' (= 5.0.2), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/specs.4.8.gz)
ERROR: Service 'worker-db-migrations' failed to build: The command '/bin/sh -c gem install --no-document github-linguist -v 5.0.2' returned a non-zero code: 2

package level tasks not executed if there is there is no upstream URL

Not all package level tasks require upstream URL, but if there is none, they won't be executed.

2017-07-31 05:26:44,758 [INFO] InitPackageFlow: No upstream URL from metadata task provided
--
  | {"parent": {"metadata": "0c6826c8-f16a-4f95-a60e-c375a93979d0"}, "node_args": {"_audit": {"started_at": "2017-07-31T05:25:07.792882", "version": "v1", "ended_at": "2017-07-31T05:25:08.783253"}, "_release": "pypi:fadvise:4.0.0", "name": "fadvise", "force_graph_sync": false, "ecosystem": "pypi", "force": true, "document_id": 239934, "recursive_limit": 0}, "queue": "STAGE_ingestion_InitPackageFlow_v0", "retried_count": 0, "flow_name": "bayesianPackageFlow", "task_name": "InitPackageFlow", "dispatcher_id": "ad00c2ff-3828-40fd-a380-b2736c046b9f", "what": "Traceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py\", line 84, in execute\n    upstream = self.get_upstream_entry(db, package, self.get_upstream_url(arguments))\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py\", line 59, in get_upstream_entry\n    % (package.ecosystem.name, package.name))\nValueError: No upstream URL provided and no previous active upstream records for pypi/fadvise found\n", "event": "TASK_FAILURE", "task_id": "f04fae6a-4d9b-4dd3-b091-d34be0f70a4b"}
  | {"flow_name": "bayesianPackageFlow", "node_args": {"_audit": {"started_at": "2017-07-31T05:25:07.792882", "version": "v1", "ended_at": "2017-07-31T05:25:08.783253"}, "_release": "pypi:fadvise:4.0.0", "name": "fadvise", "force_graph_sync": false, "ecosystem": "pypi", "force": true, "document_id": 239934, "recursive_limit": 0}, "error_type": "<class 'ValueError'>", "task_id": "f04fae6a-4d9b-4dd3-b091-d34be0f70a4b", "event": "STORAGE_OMIT_STORE_ERROR", "task_name": "InitPackageFlow", "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py\", line 84, in execute\n    upstream = self.get_upstream_entry(db, package, self.get_upstream_url(arguments))\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py\", line 59, in get_upstream_entry\n    % (package.ecosystem.name, package.name))\n", "error_value": "No upstream URL provided and no previous active upstream records for pypi/fadvise found"}
  | 2017-07-31 05:26:44,822 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[f04fae6a-4d9b-4dd3-b091-d34be0f70a4b] raised unexpected: ValueError('No upstream URL provided and no previous active upstream records for pypi/fadvise found',)
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
  | R = retval = fun(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
  | return self.run(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 170, in run
  | raise self.retry(max_retries=0, exc=exc)
  | File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
  | raise_with_context(exc)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 115, in run
  | result = task.run(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/base.py", line 38, in run
  | result = self.execute(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py", line 84, in execute
  | upstream = self.get_upstream_entry(db, package, self.get_upstream_url(arguments))
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/init_package_flow.py", line 59, in get_upstream_entry
  | % (package.ecosystem.name, package.name))
  | ValueError: No upstream URL provided and no previous active upstream records for pypi/fadvise found
  | 2017-07-31 05:26:45,232 [INFO] celery.worker.strategy: Received task: selinon.SelinonTaskEnvelope[bcd64118-e812-4ed1-9e85-97e5122aae55]

[code_metrics] complexity-report can produce 256MB of results for a single package

Output from cr tool used by code_metrics worker is huge for some packages.

The tool spits out 256MB of data for package pypi:django-tinymce:1.5.1b2.

This kills docker-compose:

20.0 for connection 9834c98702b04f1b8437ec9e914f38a7
Traceback (most recent call last):
  File "/bin/docker-compose", line 9, in <module>
    load_entry_point('docker-compose==1.9.0', 'console_scripts', 'docker-compose')()
  File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 65, in main
    command()
  File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 117, in perform_command
    handler(command, command_options)
  File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 862, in up
    log_printer.run()
  File "/usr/lib/python2.7/site-packages/compose/cli/log_printer.py", line 87, in run
    for line in consume_queue(queue, self.cascade_stop):
  File "/usr/lib/python2.7/site-packages/compose/cli/log_printer.py", line 229, in consume_queue
    raise item.exc
OverflowError: signed integer is greater than maximum

And on Thursday last week it looked like dispacher went haywire, rescheduling this package over and over again for couple hours, generating ~90% CPU load on RDS during the process.

RuntimeError: Unable to download: http://repo1.maven.org/maven2/alfresco-rad/org.alfresco.maven/2.1.1/org.alfresco.maven-2.1.1.jar

This happened during selectively rescheduled source_licenses scan.

2017-07-14 14:17:58,633 [INFO] celery.worker.strategy: Received task: selinon.SelinonTaskEnvelope[18fa2699-cf7a-4b1a-ae02-567d163872d8]
2017-07-14 14:17:58,791 [ERROR] f8a_worker.object_cache: Failed to retrieve maven/alfresco-rad:org.alfresco.maven/2.1.1/meta.json
{"flow_name": "bayesianFlow", "dispatcher_id": "bca85899-9dfe-4102-9058-87df9233fae5", "parent": {}, "node_args": {"name": "alfresco-rad:org.alfresco.maven", "force": true, "version": "2.1.1", "ecosystem": "maven"}, "task_id": "18fa2699-cf7a-4b1a-ae02-567d163872d8", "queue": "prod_ingestion_InitAnalysisFlow_v0", "task_name": "InitAnalysisFlow", "event": "TASK_START"}
2017-07-14 14:17:58,813 [INFO] f8a_worker.process: downloading maven package alfresco-rad:org.alfresco.maven:2.1.1
2017-07-14 14:17:58,863 [ERROR] f8a_worker.process: unable to download: http://repo1.maven.org/maven2/alfresco-rad/org.alfresco.maven/2.1.1/org.alfresco.maven-2.1.1.jar

Problem is in the name alfresco-rad:org.alfresco.maven where groupId and artifactId are switched, i.e. correct one is org.alfresco.maven:alfresco-rad.

No idea however where the name was taken from.

list index out of range for pypi/rst2pdf/0.93

{"node_args": {"recursive_limit": 0, "ecosystem": "pypi", "version": "0.93", "name": "rst2pdf", "force_graph_sync": false, "force": true}, "task_name": "InitAnalysisFlow", "record_id": null, "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 114, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_analysis_flow.py\", line 47, in execute\n    target_dir=cache_path\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/process.py\", line 271, in fetch_artifact\n    file_url = release_files[0]['url']\n", "storage_task_name": "InitAnalysisFlow", "flow_name": "bayesianFlow", "error_type": "<class 'IndexError'>", "event": "STORAGE_STORE_ERROR", "error_value": "list index out of range", "storage_name": "BayesianPostgres", "task_id": "0e72f7e2-9554-4c81-b7fe-1fec53aca450"}
2017-07-17 08:43:37,111 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[0e72f7e2-9554-4c81-b7fe-1fec53aca450] raised unexpected: IndexError('list index out of range',)
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 169, in run
    raise self.retry(max_retries=0, exc=exc)
  File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
    raise_with_context(exc)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 114, in run
    result = task.run(node_args)
  File "/usr/lib/python3.4/site-packages/f8a_worker/base.py", line 38, in run
    result = self.execute(node_args)
  File "/usr/lib/python3.4/site-packages/f8a_worker/workers/init_analysis_flow.py", line 47, in execute
    target_dir=cache_path
  File "/usr/lib/python3.4/site-packages/f8a_worker/process.py", line 271, in fetch_artifact
    file_url = release_files[0]['url']
IndexError: list index out of range

IndexError: list index out of range for file_url = release_files[0]['url']

I can see following errors on our staging instance when scheduled selective flows that run just GraphImorterTask:

{"queue": "STAGE_ingestion_InitAnalysisFlow_v0", "task_name": "InitAnalysisFlow", "flow_name": "bayesianFlow", "dispatcher_id": "54a8e41e-b146-44f6-9452-cf2dab483e14", "parent": {}, "node_args": {"version": "0.1", "force": true, "ecosystem": "pypi", "name": "countrysubdomains"}, "task_id": "762ac67a-0c50-432f-8443-bf3e8fca2014", "event": "TASK_START"}
2017-06-26 06:16:52,988 [ERROR] cucoslib.object_cache: Failed to retrieve pypi/countrysubdomains/0.1/meta.json
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/cucoslib/object_cache.py", line 69, in _get_meta
    self._meta = self._s3.retrieve_dict(self._meta_json_object_key)
  File "/usr/lib/python3.4/site-packages/cucoslib/storages/s3.py", line 195, in retrieve_dict
    return json.loads(self.retrieve_blob(object_key).decode())
  File "/usr/lib/python3.4/site-packages/cucoslib/storages/s3.py", line 191, in retrieve_blob
    return self._s3.Object(self.bucket_name, object_key).get()['Body'].read()
  File "/usr/lib/python3.4/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/usr/lib/python3.4/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/usr/lib/python3.4/site-packages/botocore/client.py", line 253, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python3.4/site-packages/botocore/client.py", line 543, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.
{"queue": "STAGE_ingestion_InitAnalysisFlow_v0", "node_args": {"version": "0.1", "force": true, "ecosystem": "pypi", "name": "countrysubdomains"}, "flow_name": "bayesianFlow", "parent": {}, "what": "Traceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 114, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/cucoslib/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/cucoslib/workers/init_analysis_flow.py\", line 47, in execute\n    target_dir=cache_path\n  File \"/usr/lib/python3.4/site-packages/cucoslib/process.py\", line 260, in fetch_artifact\n    file_url = release_files[0]['url']\nIndexError: list index out of range\n", "retried_count": 0, "task_name": "InitAnalysisFlow", "dispatcher_id": "54a8e41e-b146-44f6-9452-cf2dab483e14", "task_id": "762ac67a-0c50-432f-8443-bf3e8fca2014", "event": "TASK_FAILURE"}
{"node_args": {"version": "0.1", "force": true, "ecosystem": "pypi", "name": "countrysubdomains"}, "flow_name": "bayesianFlow", "storage_task_name": "InitAnalysisFlow", "record_id": null, "task_name": "InitAnalysisFlow", "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 114, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/cucoslib/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/cucoslib/workers/init_analysis_flow.py\", line 47, in execute\n    target_dir=cache_path\n  File \"/usr/lib/python3.4/site-packages/cucoslib/process.py\", line 260, in fetch_artifact\n    file_url = release_files[0]['url']\n", "storage_name": "BayesianPostgres", "task_id": "762ac67a-0c50-432f-8443-bf3e8fca2014", "error_value": "list index out of range", "event": "STORAGE_STORE_ERROR", "error_type": "<class 'IndexError'>"}
2017-06-26 06:16:53,209 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[762ac67a-0c50-432f-8443-bf3e8fca2014] raised unexpected: IndexError('list index out of range',)
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 169, in run
    raise self.retry(max_retries=0, exc=exc)
  File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
    raise_with_context(exc)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 114, in run
    result = task.run(node_args)
  File "/usr/lib/python3.4/site-packages/cucoslib/base.py", line 38, in run
    result = self.execute(node_args)
  File "/usr/lib/python3.4/site-packages/cucoslib/workers/init_analysis_flow.py", line 47, in execute
    target_dir=cache_path
  File "/usr/lib/python3.4/site-packages/cucoslib/process.py", line 260, in fetch_artifact
    file_url = release_files[0]['url']
IndexError: list index out of range

--- Logging error --- BlockingIOError: [Errno 11] write could not complete without blocking

{"flow_name": "bayesianAnalysisFlow", "event": "STORAGE_STORE", "result": {"_release": "maven:org.sweble.wikitext:swc-engine:2.2.0", "summary": [], "_audit": {"ended_at": "2017-06-09T15:27:55.625920", "version": "v1", "started_at": "2017-06-09T15:27:40.734579"}, "schema": {"name": "digests", "version": "1-0-0"}, "status": "success", "details": [{"ssdeep": "3::", "md5": "d41d8cd98f00b204e9800998ecf8427e", "path": ".gitignore", "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {"ssdeep": "24:+do4I2QtOU0E+MHQk1vpslpVMdZ8PtqF9Yk:B4Ax0OH31hAk8Ptqgk", "md5": "91aef80fdf8f6d426d02c21966ed8b85", "path": "log4j.properties", "sha1": "0a7d39156af3860e0298532124cafe31365e37df", "sha256": "2010d636b4c2e5736de19fd615de9fb4fb046fcf7ee249df8769d5c063c94fa4"}, {"ssdeep": "12:1Tt/qnKOfc2iPsvYgSdeKI/uah7qnKOb2JA2kGnVyRoahWI4SdeKIxua:/mfc2ikwdK0yJACnV7dIBdY", "md5": "b1103481c5a3bf5270084de458743af6", "path": "META-INF/MANIFEST.MF", "sha1": "4b646a629df8692281536fe50c498636fb69db84", "sha256": "757c5b7fe32ced06de300e7c32fb7e9300a21e0abe6aa2aa80b137b2f3bcef1d"}, {"ssdeep": "96:c4M3HFammHYf0r0+O9VLXFnv4xny4cmNkIXVIJ5UOuTZr7s1Xj:cX3HBVf0r0+O9VbFnv+zjX7s1Xj", "md5": "d418b2dc3cd8bea67816f666eb8dd143", "path": "META-INF/maven/org.sweble.wikitext/swc-engine/pom.xml", "sha1": "3bfeec7e871685c61f25fd651a7d19afa70f1767", "sha256": "ed6c35233bb21142b1d6dc0d4141a445caa59a01901485220ac4a2e2e7b9d614"}, {"ssdeep": "3:x9cForiNFhAGmFnAfIk6WQXLXhabVsBYsJAmdjEXNZ1IUAv:x+SriXB4QCLxabVshJA24dIZv", "md5": "91578fafbd2bdfd023e4a0e06e74875c", "path": "META-INF/maven/org.sweble.wikitext/swc-engine/pom.properties", "sha1": "83a5756293dcb87edd3e3b0271367ce6a54a2297", "sha256": "a79ad834ff0cb1c5547fa4650e3fc39298611c19a2286988cab2423df5613909"}, {"ssdeep": "24:+do4I2QtOU0E+MHQk1vpslfEJACgIFgOewp6GyhujjdWlRYV15caj7c3w0vY:B4Ax0OH31hiEJLgIFgpqjGq5jSajP", "md5": "8e98c6d5c42b0469ed5e9dc772e209ac", "path": "org/sweble/wikitext/swc-engine.buildinfo.properties", "sha1": "84b19848cb64f28
6009a2c2e91ac6494e7262de3", "sha256": "12e519f3ef2f5dd5831440aab9cc061d3223455a1e568cc01fb72defe6c6c38d"}, {"ssdeep": "48:Btp09bEvGlzuz6betw5qtPSiRUAHyI9oX3MWvtipPHarmUYqGg65ITF/cLCYXsWI:NsbEelrbWwk6iSI9K3MYpKskL9sQK", "md5": "e5ca1bc44861452f6b18818839542e22", "path": "org/sweble/wikitext/engine/TagExtensionBase.class", "sha1": "3ddcec37bf61576618b84e13ee08ebf1d356c870", "sha256": "873f18e7bac488bf4d212d1711061b177b12e4e4856e9aba85bfe1664102ed9e"}, {"ssdeep": "12:+bgftI8H3jpe6YKe6H223D78YrMOEjH3CRtEUo:pftIq3jpeywj3CHE7", "md5": "e3fd6d1ed048c300efd8e8f1baa3cee1", "path": "org/sweble/wikitext/engine/ExpansionCallback.class", "sha1": "e3a9154ef6abbc8a64857cdb6e23c04e6e0b93bf", "sha256": "d67600ce0d2cb1bb43ba03cebe353ff9dd282e46035552201953bd8b2af7bce1"}, {"ssdeep": "24:CKVbQulj7EzMm73zM6V3z0Q+jUUgPFR/f1:pxFl3d+jVQQ7F", "md5": "e2e7caef6a2678eb8085d93db7c915ff", "path": "org/sweble/wikitext/engine/ExpansionVisitor$1.class", "sha1": "8686e0a5c699000d47767504b2770629c8009cbf", "sha256": "1dc8c546039c6ee36514bb010d6042fd89b225d26d549e9bb63bb23be2180fca"}, {"ssdeep": "48:ANyFlcmak8LVF2dOkGZb5WXFJysrwZBUXSLfH2gFaomKJeIGWgl:AoFlxessiwuuaXKJe", "md5": "f6abd2befdff233370d0603782354523", "path": "org/sweble/wikitext/engine/TagExtensionBase$TagExtensionAdapter.class", "sha1": "b0ea2f080cc3e5fe417cbe0450c7e39456a7399a", "sha256": "54aebdcf0a128587a5c3cc583188062821cc0d3b42901cef0e5302dc2c6a0c2d"}, {"ssdeep": "12:6c/MOmipMPO/SDQulPsoG3PloM+XsCqlURrlFlSplB3bJl6UMU:6cbpMEyQuljW0taUHF6beVU", "md5": "cc1bb8f555d41c77e47d76d5b3d43396", "path": "org/sweble/wikitext/engine/TagExtensionBase$TagExtensionRef.class", "sha1": "284938a18c7e99dc2d9ced89acf91092b750572f", "sha256": "a6fe1aa683fc17c60a109f20f4904f6f0f103aeac0ed18661a54fd756f1553d8"}, {"ssdeep": "24:IxBTOuljC3RmNF12zRInRgppWVzKEpElS5b:CB/l2Rm52zRMRgppWVzDElS5b", "md5": "d5e6adda585855579c0a1efbff103d76", "path": "org/sweble/wikitext/engine/InvalidNameWarning.class", "sha1": "b13111e22952503135bc0d9d6c110724fb2f6973", "sha256": "c094b2c8dc57f58c2131786e8d1c603fdc85031ca8da2905
c4ea140d08a7545a"}, {"ssdeep": "12:6bXio/MONONddeMXulPsopH2yZkuLbMOCmp6H3iRLP26Im39Icb+S6ZSeldb+SWq:6byoBMulj3mudpai4Rm39IcKMeldGYi0", "md5": "2f916f6c0d08c56be4f684b790fd7e24", "path": "org/sweble/wikitext/engine/FullPage.class", "sha1": "255db69a0eecc49cf83513348e908734a23f550c", "sha256": "56e0d1d47db8db0d3b5bff089899dd80801cbff5477b744956b3cbb4633abea4"}, {"ssdeep": "96:wnrwOlm2j3cs7g84fBIUWt5r1jVHs0N+B7uUUeWft7HGr:w5lljm5rirlVHs0mSUUeW17mr", "md5": "1cfcff960f5ad5493cdd8565ecf02916", "path": "org/sweble/wikitext/engine/PageTitle.class", "sha1": "faf6ac824185736e19f7b8f1ae914d79dad633cf", "sha256": "dd061b16895d5d35c82f154141811c1d6fc8832cabb51b71045519a82151be86"}, {"ssdeep": "96:SzrkljGOhlkRPdOPdLjZXWrvs22ZlXhRO+6gnOZ9MLjU8gAx60pmI333pAn:SzYBhlaclBWrvExUtHZ9MZbI", "md5": "49b8befac1ac4726d9b9d3ec2ba69dfe", "path": "org/sweble/wikitext/engine/ExpansionFrame.class", "sha1": "67348d226f7c932443513962d1df6b4a2d6d5263", "sha256": "c03d14b6339b0c594f11878253677485b5acb4f0a3dfbf0ff6c0b862420eeefb"}, {"ssdeep": "48:XyFluDYHeoMktevtepteHte7tVtXtPttte/teTxteVteHtcptcLtc9ltcEteSHRA:CFl6Y+oMhoCQQYe+KYG+BuUnHIV6l", "md5": "2cddaeb015a7bf718d79747f657e998d", "path": "org/sweble/wikitext/engine/NodeTypeEngVisitor.class", "sha1": "58e6ce38ff287e7b5f1d99b7410be54c86fa6782", "sha256": "26bc8c7a315fe6c6dd5c3138a55aae52143be4570ae68132913f4f1d89cbe373"}, {"ssdeep": "12:ygcEuNqulPsoC6H3YV9kdoYaokIrH3YnX2v4tW0W+sMvZmD8oiF:y+xuljC8369uog33kXgiWlxMvA+F", "md5": "de2d2fe22b68ab7ec128cf9601e8a91d", "path": "org/sweble/wikitext/engine/ExpansionException.class", "sha1": "e4990df6c4dc55c0e49ad80af148b0f3559040ca", "sha256": "4ac6539122c14e853c7e559c93ffd7cfed09dfd32f7e0b1407cdb6b0ccc2c8b8"}, {"ssdeep": "384:3g1Szrz1Xpr/BjkmJrM1r/eoIwu+G4mTa1vM9xUMRJuw0d/CNpEZRK5G0t:3g1SzXzB4wKrDGeY9Kvdli", "md5": "12ebb772b29ad6558818f055630e0e98", "path": "org/sweble/wikitext/engine/ExpansionVisitor.class", "sha1": "1b2ed201f6b90d0da9a9083a8669e5518223e8c2", "sha256": "810d632b4d558bf75c2282900dc2c4dbff9bf5e65eff05a1685042523bf8a2c3"}, {"ssdeep": "12:
nIX9qapl6o6pRkJulPsoFHcIZAp54X6pmfLcqH/RLO5kCJslioES3QGgSB5QqgS/:IEqlVKR0ulj6I8uXKmfLs3JroSmaqlo6", "md5": "86836d07f91c873cebe07ebbf1550373", "path": "org/sweble/wikitext/engine/FullPreprocessedPage.class", "sha1": "7dd1b6c3ed9eea6e8afbb8050ef151e67d11cb7f", "sha256": "95bc8bd3a0ecdff00f7cab3bb44f8fd454b000cf0e640879c5f9f8e506fe14bb"}, {"ssdeep": "24:iouwuljQ1CC+NF1zM1Zo1Q7zqOZlbaluP:ioQl0YC+5zMkm7zqOHx", "md5": "afc79711cc77da7abef7458d94e7b3e6", "path": "org/sweble/wikitext/engine/IllegalArgumentsWarning.class", "sha1": "92e48b768c230a559260aceb2a615f49a7a3e301", "sha256": "3465060e0ff3ede5fc301b040b6647c416478cd90227c708ebcc11ac39b232b4"}, {"ssdeep": "12:ylcxVII0Lcl0J0Jul9KM40J2oC/MONnMAWprqrrqqMX8Ta37Qb1mTESqsl3oAvOa:yll/cbulbpCBLrMKU9TKZtsk0yfIjWcb", "md5": "7012742a9fa10d8acef733349b1aecda", "path": "org/sweble/wikitext/engine/PfnArgumentMode.class", "sha1": "65ee8d0403239a069e342c7f2f7befec2ec81857", "sha256": "10a60f12410497773e0492b9e716430ccfd6fdb4ed4aba5dcc9b59cfa6a8604a"}, {"ssdeep": "48:ANyFlvnzZo/OzTw2diz2vz25gX6zLZrTzlwV/ztXSLfH2gFao3oIqWgZ:AoFlvnzK/OzTuz2vzF6zLZrTzlM/zlwQ", "md5": "3d89627ab6dc39e8f6d7c48183a64ced", "path": "org/sweble/wikitext/engine/ParserFunctionBase$ParserFunctionAdapter.class", "sha1": "793f525c0856bdd018f6cf8643b2ac97ef931607", "sha256": "d9aecfaafc2c83c4ca1ed375e5e50352b8ebabafac455876b5c8ade90b11d8dc"}, {"ssdeep": "48:FL96BhlS5zM5oR26gv9JFzoFLf4JqxFl6l5s2S3UJ9:FLIlw46er0iq/lo5aq9", "md5": "4feb0e772c24084617436571957ae183", "path": "org/sweble/wikitext/engine/InvalidPagenameWarning.class", "sha1": "5732be41ea559d17f8992493d3631575731aadff", "sha256": "1fc33f8d200715bdaae16ce7f0d6377e72df19fe152bc3b59be336067cd160fd"}, {"ssdeep": "12:qtGlIILCpceY2KYgulPso+6SMJx4wIYqYZMJRMz4mM4cPrSMJbufuWMBMlqMNIMf:qtGlIPvOuljFn4rKOPZJTSBgAcg3", "md5": "69d8133b63c13a37d854d36ca16e0d74", "path": "org/sweble/wikitext/engine/RecursiveTransclusionException.class", "sha1": "eef51c90eb00005c342bd4dca83ef3cf837a8d83", "sha256": "79763e7d67809ca32472c347f8d3a3cccf4eb4208b836648c03441dc0337b6c8"}, 
{"ssdeep": "12:2zBcESDQulPso+GH3i9JiWyiUJZH3ic3l1H3iQXHkRS+FGui:2yQulj33ifiCE3iC3iQXrr", "md5": "b19e61126b3c0f48e2ac64f2176226a0", "path": "org/sweble/wikitext/engine/ExpansionDebugHooks$1.class", "sha1": "567917030e4107286b19419e700c9a29cac20fdf", "sha256": "13e9e222c3635596ed1c7f1ad7c2fd24de14c2cef5808a0efb178c3ba3a7b58f"}, {"ssdeep": "384:YDW/3/arU/2h0Kfe6z/1uDL/i/URqL+64M38pE1dIZMoB9WB2:YDEZK8e6jLWI", "md5": "0d6100928c6651935b037e71474b087b", "path": "org/sweble/wikitext/engine/WtEngineImpl.class", "sha1": "b78c88b7aaed93f0ce6a5d88cd81a4cf0a6480b6", "sha256": "3d13148f2b1513bc79e1862df0da1966719fc67fd5bb00dd0dd4b06e23bd81b7"}, {"ssdeep": "12:6QYENKYnulPsoG6CYqYxRGpqrnl1qRLP2zm39Icb+S6ZSeldTziMelU:6ENxuljHRGpq5Q4zm39IcKMeldHiMelU", "md5": "188f9da02782c3582200fd4516b747b8", "path": "org/sweble/wikitext/engine/PageId.class", "sha1": "d642d6e855664674b8311a64fbdc9525c352df73", "sha256": "f66196ff21a1f6f35dd7ffc4bb2ab2846b2776a12a7bbebf9b22e33e29ca5077"}, {"ssdeep": "24:6Gb3iAn0AC3EV3iAhLE3EqRE3ES7PXm8lBuWj2w2k:Bb8o+0R0SjXm8lCw2k", "md5": "74269ff498fb528dce0ba7b47849990e", "path": "org/sweble/wikitext/engine/WtEngine.class", "sha1": "bf76478d4ae7a8c9cb5c1a00bae2c208933d57b2", "sha256": "6e9af2640e93288744bbc731c4a8fe611de8d9edf5640e1d5d2c13c27ca31836"}, {"ssdeep": "48:dWPuol97w5huF/9RoEzvU2zVLfBJMGYX6FPkYFBr:Udl5CETU0bMGYXkPke", "md5": "aa3479d639b2273a08abc651a3f0e899", "path": "org/sweble/wikitext/engine/PageNotFoundWarning.class", "sha1": "ac06d1ce6a2e7d5fe6e82e86c50bfaa8546bc6dd", "sha256": "fe815bd07a8bdedff4dd75fc36182ff8d86e123efe348e84479e875b262f2305"}, {"ssdeep": "96:TdFlllHDYqS0q0q+JqESCgzAB/HPMv3+zJ66djjDGYBu9S7:jlfMCgzy2yQkbtU9S7", "md5": "1b657509d5be905caf3250b847ca6248", "path": "org/sweble/wikitext/engine/ExpansionDebugHooks.class", "sha1": "5a322630647b2bec528e8e03f53571a054824fa8", "sha256": "b2c3742c47d6096cd8450343b37ff3d4ee25bc600c010411a77f5e0371dbfbc4"}, {"ssdeep": "96:tKuImbEelSIybeioge1ZrI9K3MtzNa3eYWz6ziW1cld4caIe5j58KOYR:tngelEPaHcXaEoc0c8BR", "md5": "439e066c1cedd7fa0355350ffbcb521
7", "path": "org/sweble/wikitext/engine/ParserFunctionBase.class", "sha1": "26be1ed150a989c07d35c440c3013df60a03253c", "sha256": "2f07d15990b3eadc5159049e00971f733098cf0eba5f90d5a1cbb495e9ecd34b"}, {"ssdeep": "12:6c/MOmipMPO/SDQulPsonu7dgzRMBgrsOqdgzTRdrdgglSplBDhuGJlp:6cbpMEyQuljnNzhrXzTigOB9", "md5": "2368ca1d60cf10685367ec870c25e56a", "path": "org/sweble/wikitext/engine/ParserFunctionBase$ParserFunctionRef.class", "sha1": "b2425a778840faedb35f74772ac0bde9179f4d26", "sha256": "f17516abef5ed0c8a5bd2bfc8461eebaa66b5e82e6aab1b243bb04925f4f3273"}, {"ssdeep": "48:YHMTwwIl/SC7z5zgrtHtEm7RXOtJbt2ltpMLta6tpLoRHFW7rDWjw5fW/IiEea88:Cl/hm9e+oYHFW7rDWyfin8", "md5": "f3257199e361a662f48ce88378837529", "path": "org/sweble/wikitext/engine/OffendingNodeWarning.class", "sha1": "8fafb6a84a8fd4701703706078db169043fbd9af", "sha256": "ebf2f8d1ac1b5d01d45dc690ccc9a007b9ce116f658cac9ad98cba02563734ef"}, {"ssdeep": "24:X75ZUHguljc7AZxrT6BZ3ZWwbbs3JUWHD5vcscUddGR2E3wlMpPWH/:XFq1loEHTIFRbsrD5E9UdUBFWH/", "md5": "b04f06ceaf4b3eac35db24dade154fde", "path": "org/sweble/wikitext/engine/EngineException.class", "sha1": "8ca1a09c3d493970cf1d0fe5897aac2101d39903", "sha256": "6b4d44f3074b82c1afc410a9bb3f7992f1760626681e87cffcc20b070b3af8f8"}, {"ssdeep": "24:lO28KWB6xL/hyQulj/rfreIIdxco/dc4DJrKr3hr2y+F4tB5Y9+ELnSjE1Y8:lO/KQqL5yFlDr6ddWEMr3hay+Iqv5z", "md5": "cda49ef624b2b7e90bc22a3a25f1e43f", "path": "org/sweble/wikitext/engine/output/MediaInfo.class", "sha1": "f73d3bdf23302cb29b5c0431a881257af38d8b04", "sha256": "014f79e3e0118293c910caad0168c8c8bb38b98111cb1e5db38d13a8b76d96e8"}, {"ssdeep": "48:LT2l7YdjI26AUNqhkh6Ul+Iyrte6tejTaiYt/VY2Iy99kYS0aXdnKV:L6l76Q504+FE/eB/RlmKV", "md5": "721e5422f7d3e7f098a23ab3de735f74", "path": "org/sweble/wikitext/engine/output/HtmlRendererBase.class", "sha1": "08aa42272f091d0ffb84acebc4b70969bee6676f", "sha256": "08ab3a88ccd08d92905a0d28a059de92352ccb5c581932f901700d121a4d51f7"}, {"ssdeep": "768:vbFaZZ5UWj+oft8UHyyH5njLizEhKfVYI/Yw6:RaZZ5UWj+at8UHhH5ny9fV4", "md5": "d9a13961d903ab13d5ca1e83edf7c453", "path": "org/sw
eble/wikitext/engine/output/HtmlRenderer.class", "sha1": "9c26bcb20084d7af238192dfab98d83a9ddc98a4", "sha256": "afce423129b6fe369e16e524bfd210907b908391c89788aed29ab7071135a592"}, {"ssdeep": "96:+7wPTZZlM5j4zLr+ok+qTM98hH9d+3wSnB3nueDoWiLnSmj8NVtCRri66BkZfKw+:+7iZZlw4z+ok+O9dIZ3ue41EVtGfzO", "md5": "3c28358e9aba747b7256ed36dd3929d3", "path": "org/sweble/wikitext/engine/output/SafeLinkTitlePrinter.class", "sha1": "4821b688f30fc096a321153cf4facd8e74296fd5", "sha256": "273e3d160ba045b35166f5f9167127964ab1f7c0180799808136917b868fd5ac"}, {"ssdeep": "12:HwqMy9XSdZYKdYKwMOc8jfiMOOdryMBMOW0G3FRtEZNuUUn:RidFONrAZHEaHn", "md5": "88b94c96c4b2a753a0a56c27c932e5d5", "path": "org/sweble/wikitext/engine/output/HtmlRendererCallback.class", "sha1": "33c5e6283a0df9fe3c7f2c5200d5b6d27f8498b2", "sha256": "a0070ab783b60cc82e7c8189da3f3faa7e74db7c6d51101be0160e189b032a4e"}, {"ssdeep": "48:IBQk2lXKFl322OhhfCBLaGNlAwl+lKdT1rWn1atK:IGkaXKFlqZCBLfAAiKDrc1r", "md5": "fc284b7b2ac75ea2a9bae6a9e4c5c5d9", "path": "org/sweble/wikitext/engine/output/HtmlRenderer$1.class", "sha1": "585fb2a4f6eff728cfaae7659c88e985f9910fdf", "sha256": "d95ac8d74e93db3f1e357313aa8ae61c01d149aaa7f80ad5a9be448223deb34b"}, {"ssdeep": "24:PV2yQuljqxV6OVRmE18xF1457Bx6sf6xwlVz1hrJ+hol34h3ouDV:N2yFlWxVTVAE181453Jf6wVz1hrcholU", "md5": "6a88b1663494b6ee3684722ea8fa7472", "path": "org/sweble/wikitext/engine/serialization/EngineAstNodeConverter$ReadOnlyTypeNameMapper.class", "sha1": "c475324e3020b5a9a3670a4ca0c39237f9cc3ab5", "sha256": "1954b8b252d721fcbd6e6c0a1f5a48a1e550d446c20bb81e7dc4510ff056b532"}, {"ssdeep": "192:JDhhlJhlAGCk1hBhwEQQnjZPpWCU3asT0BgyDJ8FQZSS:JthZk+9jZFU3abh+USS", "md5": "a2b827cad852c82caf740f657c605728", "path": "org/sweble/wikitext/engine/serialization/EngineAstNodeConverter.class", "sha1": "9121fb1a70df90874f36ab8a7abf459391d66e21", "sha256": "7816fa3fac678c0f31380b44aa29f3120d50ae1f023536b31e7bd61055d1d694"}, {"ssdeep": "6:J2kbL+grGCnPyiURG2dxt7vfJwyb3CIwYBRPHxt7vfJwyb3CKl8qt:J/GMyiUZdLJ/wYBRfLJ5t", "md5": "6417569e33e6db346f368faac47c67a5", "path":
 "org/sweble/wikitext/engine/serialization/EngineAstNodeConverter$1.class", "sha1": "7a1199439abd7ec0455f96190909039cab1087b5", "sha256": "1f38a3d56b7d4f561fb0a5c581c0c8de6357dcae9fcbd4888eddb90e85b2f90d"}, {"ssdeep": "12:H8YvlcyCOjCt8QGpbIrWqrKSdVb2REm8dIn:cUpa+F3wbb2y5In", "md5": "0c98082354524ada7558dd51ceab74eb", "path": "org/sweble/wikitext/engine/utils/EngineAstTextUtils.class", "sha1": "bb672fedbbc019f7b370fafc7ce11fbdac4a013c", "sha256": "9d0c8292f4c72709afb34ed0d1cd9b2a59ffa2393ce17edd8c88e0854115d23b"}, {"ssdeep": "768:PHjJFDEA2d5xE/g3WRiDJVTXSMuxH5UOCVlfHLdqm+Gn1yHVLRnPprg:PoArIGosprg", "md5": "51a63dcc8a9cd24fb116ab331a4451f1", "path": "org/sweble/wikitext/engine/utils/DefaultConfigEnWp.xml", "sha1": "bd433cc13dfc34697f316b97f492b2aebd74b271", "sha256": "aab97dd608335cbf76cc494ce48caa48200679467e188a5df8edf5125a47c2f3"}, {"ssdeep": "96:1yoKugASFliyyqywJldQxeUgvll/atLdH4YbKdwn2cpj/ZvLxBz8C48ugD+f8l4p:sS4liJqyOld8eNl/eD4i2c9DqClwmE", "md5": "8c400b9bd754dd66d59013ad58dbadd5", "path": "org/sweble/wikitext/engine/utils/LanguageConfigGenerator.class", "sha1": "57bd30f9c98980695bf905f8ec827727e956f638", "sha256": "d51546787fd14dc0ebf42c83e7c91f959ae62de2098d81538468a0c6d3c4c4ec"}, {"ssdeep": "24:S6F0nulj7zJ716Ah9NMkM7tvmCcWNk0pdYn32:Su0ulXzF1TzMk6ZmCpNkqt", "md5": "892a306fed5708c598d610044e4f61a5", "path": "org/sweble/wikitext/engine/utils/UrlEncoding$1.class", "sha1": "8cec86671210cdad92f750e037b1834cef79ed5b", "sha256": "56355c51c52309a222bef90f62a79e39ab375fa006d3b868c341f8c19f556a2a"}, {"ssdeep": "48:6aaulXcsEHk6OntDQSdXWwXkpIyi44XbvlvIIi3MMU:64lXH6OtDF5WgkKvuE", "md5": "30d8f6f51925eaa48e9d23d41613c7d9", "path": "org/sweble/wikitext/engine/utils/UrlEncoding$2.class", "sha1": "8516cad1e5a767887dc80483717569b0609144d2", "sha256": "cf3bfbc2865bfd1d80ff49f69736628d1ab878b5cb6ca2ea67a7eb82eea2e71f"}, {"ssdeep": "48:9zOWxpGyFlzT6/vn+4s/jHJqGIMmf4FI8cTvAUXrloMRwf2gtX:9zOWxJFlzT0+86pyvjxodZtX", "md5": "424ca150511891eac0cf269ad2066b63", "path": "org/sweble/wikitext/engine/utils/UrlService.class", "sha1": "ac9
4eff24cb983042d716ba6489d39310df03b4c", "sha256": "d02738697d847d1b59a8e91049e619108aad1a669474085c9496d0c5e0de5948"}, {"ssdeep": "6:FAJhwXMhXMOVeJKkLmxt7p5JK98qGsBwBRPxXJ8xt7p5JKPWqADn:FqwMBMOMJWV5JSGsBwBRJqV5JQcn", "md5": "fe2d33b139ef0d405bd9eddffd3a9b6e", "path": "org/sweble/wikitext/engine/utils/ApplyToText$Functor.class", "sha1": "78be01093a3808b01a3dca99ca4d7113e079b08d", "sha256": "9ccc0cc0b2074eab9324162982d78211ba173a09df54bd6d23ef22dc8bf7be67"}, {"ssdeep": "192:3XZpZV118UwlAldE8lwm1Ptf8mELgfxATNo5FvEKnPKsF2Edu/ydxGXr:HZV1qDmzffELgfxAApyE2su6d8Xr", "md5": "bb28c90b5ff3082be2652cf32d127cf4", "path": "org/sweble/wikitext/engine/utils/DefaultConfig.class", "sha1": "b0a289f768492e17eb7266acb6623ad92b0e141d", "sha256": "366e80aa26eff702cb13539deae6782836a628aacf375ac0fc7df87cf07a971b"}, {"ssdeep": "24:icyQuljo4/KftIq3jpemjY3jpp0RB/CE3SYooX+n:icyFll0Bt2tp0RBKECYvOn", "md5": "0537bbdcd98a3a375286b8217a1a956f", "path": "org/sweble/wikitext/engine/utils/WtEngineToolbox$TestExpansionCallback.class", "sha1": "f159d7605ddfb6949faa4ef7f806d3a1ea262447", "sha256": "8d745ebea37d50a5b629c7ccfb9197692b41e10413db848379db2660b7bd467a"}, {"ssdeep": "24:yl+sH41L1uleZpCBDMY4OazrMKU9TKZtsk0yfIOb:2jH414leZ0BDMtOa5WKZyk/w8", "md5": "aa0e7601e72f7083cd89e334f07b35fd", "path": "org/sweble/wikitext/engine/utils/UrlType.class", "sha1": "baa884806c42356b0dfad2c4345530f6aa7d6b4d", "sha256": "85b736823407d304a46af593f87f9fbff8b5f5fab77e67a519106c9d7ed476a3"}, {"ssdeep": "768:I/2cuZlrR26LVU62wMu4bgoqdgwkPejD/R8C4MIdG431Zd:ifHb2b/JK3x", "md5": "0b7cc423b703e3e56817f4d6098269c8", "path": "org/sweble/wikitext/engine/utils/DefaultConfigEnWp.class", "sha1": "544f509624b1434b53d9c18721a47f622efd5d6a", "sha256": "865a353857a4fec1df132d0dd9bc62f671763ff2ef57cdea1148544bcef26562"}, {"ssdeep": "48:UB8ZbcKyWbUlWbAbbclcrBEbpDdbQXUsbUGTxQucQlTB01Ze:UBKbPTbUlWbAbQlcdEbzbQUsb1GK9m4", "md5": "a371ba6c694671143c19704b5c786f92", "path": "org/sweble/wikitext/engine/utils/EngineAstTextUtilsImpl$PartialEngineStringConverter.class", "sha1": "d16d1a28dd63855
a285efdb969ce52cd97e437d9", "sha256": "81fe1735832ab0e0dfdeaaba679eb7f93a583b6eb7daf4e7852998a1b5d51ad1"}, {"ssdeep": "24:KewOIeht6sBg/H2s/ouljSl/3PvuSynx8U/v/c3s/F8Rn08gbWtSl70Y9VQAX18J:KewOHhyfrFlGfHuN5/vk3sA6bRXQA10r", "md5": "346570c4a1641243cac070fe3ed58c2e", "path": "org/sweble/wikitext/engine/utils/ApplyToText.class", "sha1": "dddac7bde316d0a078acde7b6b48d91d80b03520", "sha256": "b24e7f3e903ef8c536b657a555c2d877148c98625d0f552a529ade38f011b9ff"}, {"ssdeep": "48:404rlRNY+gsteEOhNDmWWP21Cb8EWdiiljZrl+Ts:402lR5qxhBlWe1o8EuXR", "md5": "6418dc183c0c08e57a94d83a262f8094", "path": "org/sweble/wikitext/engine/utils/NoTransparentRtDataPrettyPrinter.class", "sha1": "b81a0321a69ebdb8cfa3fe6564b351320c125320", "sha256": "8d4ec0eca448bc05126a8abfceef8e04a6422f34a478792b9dc2fd11b45ce379"}, {"ssdeep": "24:sCs/TU0ulnva8pCB3E0zZCVRAUvUx8COgUNexWUQ9GCHzfV+B:N+TUZlS80B37zcVvUx8tgMj+CTfVW", "md5": "a1c0aa008e3909d91ae3af77f1564f10", "path": "org/sweble/wikitext/engine/utils/UrlEncoding.class", "sha1": "c3b6d237776aaf682de3c561ce9c114ce9ab4caf", "sha256": "bfa70455e570b80b5104006eaf4f8d5b783aafc3a3e5040afe95afa223c37131"}, {"ssdeep": "24:icWRknulj7H717AhGAQkM7XQFcWJpxiczkmUo:a+ulXb16wk6XQFpJpTzkmv", "md5": "5c836a90df0b2e3a1ff9e0d76fa59d7c", "path": "org/sweble/wikitext/engine/utils/UrlEncoding$3.class", "sha1": "2c83657507e818d69d5f2008b8c19d99cf280ec1", "sha256": "ab8c03e21e2aa3941160267a8917ae95b3a018d07c9743a11481e0547d23bdb4"}, {"ssdeep": "96:xl/b0g6fOqOL6bUbLbcbnGTb+EnbT5XeRv2qeelH:xl/IJ2L6YvQyTtpuRvLeel", "md5": "9b1951dff1133de60febd561a0eab84e", "path": "org/sweble/wikitext/engine/utils/EngineAstTextUtilsImpl.class", "sha1": "74e9e213e7dc6d55eb47c2ef71b5df9e0a8412cd", "sha256": "8904c2c89e0d924c91210a1c64909d5fccf17936ce08ac8ddd55f7d28ccc25e2"}, {"ssdeep": "48:MDyFlpbuNhrBEbabbVXmob3MrKgI+xtBaGZPQDJT:hFlpbGhdEbEbVRbcr1IOtoGQ1T", "md5": "4e2b063005cfdcaa5f865e77c1b40fea", "path": "org/sweble/wikitext/engine/utils/EngineAstTextUtilsImpl$SimpleEngineStringConverter.class", "sha1": "9685bda4cdad794e16f9bc89732868197f21095
c", "sha256": "361ac3dc18987e0787171632d9b603a2cc7b0e668e974b33a70cb2ab0fa5bab7"}, {"ssdeep": "48:TeiUlMmR/RpUgCI7n7mzluX5pn8tej28SKiGa3:ZUlMKSgC4rJS8Sj3", "md5": "4f034c9d34aabb088537615da93d3579", "path": "org/sweble/wikitext/engine/utils/EngineRtDataPrettyPrinter.class", "sha1": "55be22cd4794a6c1dbc120e297de6e136e692fec", "sha256": "0251fa1b346ed625d5a309939a5c25bf5dcc7cc2eba6811d122f83712a2c77b0"}, {"ssdeep": "48:TeiUl2lQR/RpUgCIV1npQN3uX5pnKteotej28SKiGa3:ZUl+MSgCW7ZvVS8Sj3", "md5": "60e7544eff4221d4ba8f8d82396db6df", "path": "org/sweble/wikitext/engine/utils/EnginePrettyPrinter.class", "sha1": "00f89d47201cc3c5f6cb04b86164cbafb5e50171", "sha256": "6ba30a20a4db89d8e2a59400ea56ab05ccfe8fa78f82e38e29d8831f97880dab"}, {"ssdeep": "24:pIbOwqBuljX2XuvS3XO9/x5w6vw2llrVRSgjNQ:+Kklj2+gO9/Lw6I2j5RSsu", "md5": "0cf83bcc1155f8b171957b3c94e0487c", "path": "org/sweble/wikitext/engine/utils/NoTransparentRtDataPrinter.class", "sha1": "db1c6f0691f7193858aa2082b03d54ba559f837a", "sha256": "97b0161b2c0f9d4449bccb738e6a8a8067957e2279cfb3273d8b2034fb0ff100"}, {"ssdeep": "48:Iz7naAkyFlKYBsp4Kf0vpRmntkb8Ll+ul6MteJ4GRfH9F2ABW:IPn1VFlKk29nibwln6dpS4W", "md5": "144252e0f2ee827460df1ba6e9e767d7", "path": "org/sweble/wikitext/engine/utils/WtEngineToolbox.class", "sha1": "788f20dbc7dbf458f35db8de74041c0f09c70afe", "sha256": "d92ff7858ac211d841acfbf58cc6267c0b18075300aac098f03b72b1c0f1a098"}, {"ssdeep": "12:COXcESDQulPsoKXK4KzkX4K1wZK4K4VmuHk6vxuF4:CoyQuljKJKIIK1w3KGmuBL", "md5": "bc819713801b5f5697eabb82979bfdb7", "path": "org/sweble/wikitext/engine/nodes/EngLogValidatorPass.class", "sha1": "b260bfaab2953ee02e10962e50e09b1a8def31b5", "sha256": "ea05952e7de97f30217bbed4c70b47aa49e3996d306fcee50902d3c872adebae"}, {"ssdeep": "12:yNGbdJcESDQulPsoWX281xG0CDxZYKrRdLrKSrKUrKFhBHKqdLrKNTalUXCFYI49:yN+DyQuljBH7Dlfvd+LHKYf81uOizkkK", "md5": "96a611748e2dbff1fc3838e97e4b9bdd", "path": "org/sweble/wikitext/engine/nodes/EngPage.class", "sha1": "6d65884607cb141a60772eb020e686db2009fa09", "sha256": "4d37e4e5137c44ae089948a5c4046d9acbf6fb27e0a1fdefa6c7
2a8d36b2d401"}, {"ssdeep": "48:408Kycli7kvgF6af+VlQteK92fuHloUQsdCmR:40vNlNEm/NtfgQQ", "md5": "dc019d9c29b77fb9612559a8427b1cd1", "path": "org/sweble/wikitext/engine/nodes/EngLogTargetResolution$1.class", "sha1": "563ab22c6d0a96db9f15b94007d60317c721a946", "sha256": "38c02ccd51b2dad9f27c25d6fb032b01e344a1c33d07f6ee8d9db88b0abc4560"}, {"ssdeep": "24:yfJ3KNIkuljOo7k/tkHuuZN97qtgtec7X4JplGGPj8DlITqU/0AApk:i3KyJl/7k/tkHuUNJte4SpwDlQ/0A3", "md5": "8c520012c4de5127390a2fe55c38b370", "path": "org/sweble/wikitext/engine/nodes/EngLogPreprocessorPass$1.class", "sha1": "fef9fcb2c4c34130dc207ceca17477e07fe464ed", "sha256": "85e0db741974a4970526d76683fd06530709ec52c72da8e610b6305d9f138e39"}, {"ssdeep": "12:QcESDQulPso+6l9Mc/MOvUIryil4l7F5HsE9om4:OyQuljXPlIJ5HsE9oh", "md5": "9f3d3a1cb33f8a040f3c054381df6601", "path": "org/sweble/wikitext/engine/nodes/EngLogRedirectResolution.class", "sha1": "a912e04794ef9412d80c8612b6b877a3a2b831b4", "sha256": "6fef3cb9317fbde8aa5bc98b9eb9cf13b21e6f9be79b9df0f29f8e43dc78ffd0"}, {"ssdeep": "24:KQfByQulj2qx1ctgtec7470d3FaYSKI2NjUYgaz9DG6e:KQfByFlKovtej0RFi8pgg9DGX", "md5": "cfdef0aaad6987caad3333a01e2fa6b3", "path": "org/sweble/wikitext/engine/nodes/EngLogUnhandledError.class", "sha1": "2dceee5f11a167449a1b14d9a4c799e53727028e", "sha256": "215ae4c2f5d6e62808f96093b2d1e70b67173a17617cff0b7ceed970c55b4e10"}, {"ssdeep": "12:9tcESDQulPsomYehXMsC/MOSeGYiYYYe7NQHkRta+9tRtCIRt5CvXm/85SSN/x0D:ryQulj3V+UYta+9jthtIvXf51x0Ke", "md5": "e535d85c6cd371c1b8a012ef5b57b89c", "path": "org/sweble/wikitext/engine/nodes/EngNowiki.class", "sha1": "29d46524029b789eab5a5518c1433b82e09e1824", "sha256": "f49e4cab3b1d6592ea6330d3314b66fb7d4920bdab59eb38c185aedd00bb372d"}, {"ssdeep": "48:BrtD+q2yliM7kvgElp0mMMBtep440ql5eUQGu8:Br/lmmLu400jQU", "md5": "27a9728fe7b632529f6e417bb410d80a", "path": "org/sweble/wikitext/engine/nodes/EngLogProcessingPass$1.class", "sha1": "628fdc7d7f06b982e4da93511019eef03b9152d6", "sha256": "75cd7ec3cdaf49c26e6f82bb770d4893a88bf70f43e4340d300a6b705919b5a1"}, {"ssdeep": "24:5XsuljjR1E7kGc3mpeavtec
7IB2MBXpkHb5zQ7jyAtNB3:BxlU7knWBteJNdpk1zajyAZ3", "md5": "f40dcb32258a6d47ae14adfcc5d1fe01", "path": "org/sweble/wikitext/engine/nodes/EngLogContainer$EngLogContainerPropertyIterator.class", "sha1": "b31a8dccdd0e9d3502425a4a59096ec16d977a1d", "sha256": "22f1f6225443cb40ca77dd512b9c29bf6c91c27dd8c5ffae267518d158e84ad4"}, {"ssdeep": "12:QcESDQulPso7Q9Mc/MOThqTil4l7F5HsE9om4:OyQulj0fhJIJ5HsE9oh", "md5": "741001cee7d4cb30b9e85f6b2e9c5d8f", "path": "org/sweble/wikitext/engine/nodes/EngLogTagExtensionResolution.class", "sha1": "a0e32dcdb7c691a20b50a995d1794307f30afd2f", "sha256": "758806fd7e520ed1ae5f64eaf4b9f8b68642ba0bf3d8bdf6a5befe5c5d128bbe"}, {"ssdeep": "24:tFsrh5Qulj7VRHE7k/uvvJC7lsmW4zTCqg0ITqqKAsZaTjh:DqhvlPc7k/EvQ60uKAJXh", "md5": "8a3a2c74dfca0536453191e0027f5af3", "path": "org/sweble/wikitext/engine/nodes/EngLogResolution$EngLogResolutionPropertyIterator.class", "sha1": "f87428131dd8d620ee959c0da61a1c4666517c75", "sha256": "e87f0015a9e17fcd8b391b5fa1727931429f7b02450a7c033b8b7108fb34d7e5"}, {"ssdeep": "3:DbllT5Gy8jXRsqglXs8TEkYrxt7yKhOZe5QQCK8PFSNrxt7yKhMXklGlHlllKlg:Fpqgds8TOrxt7ZMg5QRPFqxt7ZOXklM9", "md5": "d6fc766befe40362821d48b69a0979fa", "path": "org/sweble/wikitext/engine/nodes/EngLogNode.class", "sha1": "29677d2b2504a712b3bb7dc2687ad7d55499c6f0", "sha256": "080a001565d624b63f6bcbfa5481bcaee812bbd20b3e2f3d9ebd198bd2c5f42a"}, {"ssdeep": "48:qUDRyFl1xiyWGmDyGFCIZ88MpmRPoBte+DKQNz2taythtI2Rvte2teqste1rtCLa:2FljjW3+Dso7SltH5EDd3gFc+EW4GX", "md5": "f3fd0304f847344226231c89fd7b9366", "path": "org/sweble/wikitext/engine/nodes/EngProcessedPage.class", "sha1": "887ba64d16d835c31454a395bc851f59b21b2b9e", "sha256": "fbc35f642250ddcf423e304948fc00e1109e5d67fa5c2906fec916121b7594a9"}, {"ssdeep": "192:K2Rfl8UlvDywuV4Dacs0CZRiR+IPo0+1Qz:rftxDrXvCrf4jt", "md5": "08351797bf66e692a361df718f867168", "path": "org/sweble/wikitext/engine/nodes/EngineNodeFactoryImpl.class", "sha1": "05a39b5d68685666681dda0f4b91a951dac19612", "sha256": "7a91f486ecdcc1afd1653d6fecc10831581bb0e20dd392248d3e6f3dffc1eea0"}, {"ssdeep": "48:6RDyFl
w+ksBte60TRDSrZpaAp4sapdowPnBpUzyS:TFlWbzTIrZEAyJPowfBmzyS", "md5": "8e8f51362f22bc70075700fd6d624568", "path": "org/sweble/wikitext/engine/nodes/EngLogTargetResolution.class", "sha1": "26af5017d7b919231a20cad99b886d7f6130606d", "sha256": "58ad390f8dfc6806e2d41529dc6d2699fb2a2fbc6651e94273c57c1af44013c2"}, {"ssdeep": "48:rlmRZly97kgg+m083Cte8IteqD68B5Ws2JH2:QZlUIiMws2h2", "md5": "b4c1a8ee741c6af534332ce2e9a4560e", "path": "org/sweble/wikitext/engine/nodes/EngProcessedPage$1.class", "sha1": "449af6a49e16d297af5ad2e3d2b6b7edfd902e22", "sha256": "f6f3f70e30c19bf89fd0551076b8ce5c68edfbbf4564ea20e2e4682b360a4c58"}, {"ssdeep": "48:pg9Qlh67k7F8DdHM3jlte//tekQ1+G7UQW/sytJw:pKQlhQxMTu/Yz+PQ4w", "md5": "16a7b471da31bd181c2417ac12938ccf", "path": "org/sweble/wikitext/engine/nodes/EngLogUnhandledError$1.class", "sha1": "6dbaa94955e3c6ded3a2ac0af71227821ae93551", "sha256": "005c417e31dd1fd9e28c25dfada5b3ac560cfae4a2d89f63c68dab324e9e025a"}, {"ssdeep": "48:14jlB7kvgFpcqPgm74teYteSGu+ww5wyAgSl:1ElOJqPgUFlSw35wyAZl", "md5": "f1acb44cc02dee17fd80c42b922cc2c1", "path": "org/sweble/wikitext/engine/nodes/EngLogParserError$1.class", "sha1": "a4d9f89c916a04fa934a333a34d357726548a62e", "sha256": "ab128cf0defbd882a53cfe9ecba3d8fad205596b907cf877cf13bb2f6241515c"}, {"ssdeep": "6:COXctEhszswQpAEgPsoqTCdxt7ZM+XqgUPkCNrxt7ZM5xt7ZM30lWoknZ78Whh4O:COXcESDQulPsoByk6uC0HkZIF4", "md5": "e956df680ee117957e3252fc327afc73", "path": "org/sweble/wikitext/engine/nodes/EngLogPass.class", "sha1": "8a4ac230d2fb54a8a71c64275441acff43b38809", "sha256": "ca4485e87512a0ca213cce17acb9cbbcb15367525d459ac7924262d145e250b6"}, {"ssdeep": "48:x9k+O0HyFl6FZPmrugESEvI2mx6tW1pbuBmRgJM5kz727nsY/:4iSFlMwHEWxlbuBmRgGE727nsY/", "md5": "c5a10521d5229e1a75283b046cbbe407", "path": "org/sweble/wikitext/engine/nodes/EngineRtData.class", "sha1": "a126c5f06172f45e58e6ecd9118210b6fcf18c51", "sha256": "12e46b706ea07dae64c938ac69c4fdf8fe8c7f88ed3b0c5732510613f6388ac0"}, {"ssdeep": "12:+bhTFpRkuYeYqXk72QQOaVw8OQl1PSRFq1s0WityFX:YTfRFxROarOwFSrhMyFX", "md5": "65099df94cb9f258b4a4a17
690a4494c", "path": "org/sweble/wikitext/engine/nodes/CompleteEngineVisitorNoReturn.class", "sha1": "8020480441387c7cadb3ed09e5734fe746e55dbf", "sha256": "8c9b0b8d970e5c274fbea7c26a2f212b6d5ecd83e1883ff690dabb69b8d1c82a"}, {"ssdeep": "6:1rtbIlsOytCaak1GTJUR93rsly0GiLTwxt7QoTxt7ZOwQRPQlma4o8nCEccz28hC:1rBSsOyKkQJURJHxTYPR2H8KEif", "md5": "70323adca98efe695d565ed35ba04c1f", "path": "org/sweble/wikitext/engine/nodes/EngNode.class", "sha1": "8315de5ddef5649e551cb7a223a1eb4516376f0d", "sha256": "29f7652ba3ec8cf0d9116c7a3b738255df39e75f19192d9fdabf915ce453353c"}, {"ssdeep": "48:IaFyFlLpwBte3t/SSqW18y0Ro/LhXpFbQ00e:uFl9vZ8y0RQ95FbfH", "md5": "63ff645f59d195542c2d154ed2d3e737", "path": "org/sweble/wikitext/engine/nodes/EngLogProcessingPass.class", "sha1": "3e6806c37a4d0a6621f66b45a62200d16373e6c1", "sha256": "4a206adadcda7e5f37e1c6fcecf40c1362b4a596680ed474c012632a9652894a"}, {"ssdeep": "24:0ImByQuljd77Itgtec7qsoTEX9/4erSqdnHROeUTn1aSQ:PmByFlx77BteNEX9/zpdHRs1nQ", "md5": "6a87a6b8818bb6f28e5596a01219a020", "path": "org/sweble/wikitext/engine/nodes/EngLogNameResolution.class", "sha1": "480aa187a5d689752e6b7fbd887539c59a37ee03", "sha256": "1f79e9436de0c47826686bbc7effe79a54a9f0568ad7963abd14ad460eea4f26"}, {"ssdeep": "48:oolm7kvgFaJMyzl8ted7kovyr9vg+bAGZ4E+:5lxlxJAZ1bAGZA", "md5": "9de8f8c00dc873a39ea3b44a78af48a7", "path": "org/sweble/wikitext/engine/nodes/EngLogNameResolution$1.class", "sha1": "afaee9d1de2abb7436320dabb75eeabb8879c7d8", "sha256": "16b22d4496575731759d4618356a0310dac0691848949a89fe63932e4326fa55"}, {"ssdeep": "24:yKR36hyQuljWytgtec7DEfwE3vICCSJPjNDG:yTyFlKtepf73wZSJPjNDG", "md5": "2430aa50a655ec7bcc1bea1a1ba1ba31", "path": "org/sweble/wikitext/engine/nodes/EngLogContainer.class", "sha1": "bdca11cf6c48d663cbd6c30094d19a0e75013c74", "sha256": "1973c119cc5ac1873e66e8b402a5a814e4e22603bcec9cc417501a78171a6f82"}, {"ssdeep": "12:QcESDQulPsoWvC9MA/MOtWZvTwl4l7F5HsE9om4:OyQuljM6hq0IJ5HsE9oh", "md5": "2df900e5e2122c7a959a70772637df70", "path": "org/sweble/wikitext/engine/nodes/EngLogMagicWordResolution.class", "sh
a1": "2d3e7c9e7372e5e432ce6454948fda69231fec97", "sha256": "9161e3c3783eed72bd4239742f9b242b133e603c452bc89f6d544b2cfd27071b"}, {"ssdeep": "12:COXcESDQulPsoGXAnkvZ8ZAUVmuHk6vxuF4:CoyQulj+B2muBL", "md5": "9d1708710ceb24b9b164ad7245e28cee", "path": "org/sweble/wikitext/engine/nodes/EngLogPostprocessorPass.class", "sha1": "4006270e15728a49baf14b209e78c14333b48340", "sha256": "cb5dd9ff52cd00583dd12bfc296b0e15e254373f7660fc88e6a818dd575f9d7f"}, {"ssdeep": "12:QcESDQulPsoW8/9MA/MOmRZ8Kwl4l7F5HsE9om4:OyQuljL9IJ5HsE9oh", "md5": "d830a75a8ea5e0fc1b5dc8e00dbd1995", "path": "org/sweble/wikitext/engine/nodes/EngLogParameterResolution.class", "sha1": "c47512f889ce5ecb51924240142ebad54881893c", "sha256": "cf89e90bf75abf8785c5d34635f6dd345547530a1779af253d4ee61084e2ef3c"}, {"ssdeep": "48:RrKXrcGCeqDWGFNA6XIkLkivj9DzewsqCqsyV4wnw25Ynv:tKD8lvDywsqCqsyV4wn5Ynv", "md5": "4267277029c23b68df08155880b87142", "path": "org/sweble/wikitext/engine/nodes/EngineNodeFactory.class", "sha1": "0b9b13b9adc76d1dab6a48d639e0ce74f260844f", "sha256": "30c5220b56847a3a6b002cb64396f24e1d9056874fd6ccd8a48359c4876f2621"}, {"ssdeep": "12:COXcESDQulPsoKXq4U4FwZq4oVmuHk6vxIF4:CoyQuljKzZFwF2muB5", "md5": "62d4209a49a27337ae116f0291b49e75", "path": "org/sweble/wikitext/engine/nodes/EngLogExpansionPass.class", "sha1": "c84c603fc4d395ebbda874427d8f3c5affb6bb74", "sha256": "0df9459b1daf2ff5935438c1a2a4ef00ff00ac51d0dbfe12532ec312b4f0882a"}, {"ssdeep": "12:QcESDQulPso1Wqo9MA/MOxqhdWqpwl4l7F5HsE9om4:OyQuljQqEVqh4qqIJ5HsE9oh", "md5": "4922c071b21acda0cff023c093b9491f", "path": "org/sweble/wikitext/engine/nodes/EngLogParserFunctionResolution.class", "sha1": "fea3d44856abd42b5872d6395af265e2920d6d86", "sha256": "d1f116e03ff994b53a9fa6fd7f3b6126fa056975a01520e668b411da0870a8c1"}, {"ssdeep": "12:QcESDQulPso7Lw9Mc/MOT0SqLzil4l7F5HsE9om4:OyQuljofFlIJ5HsE9oh", "md5": "c191da24cb354ff29757e8d7f5a37e3b", "path": "org/sweble/wikitext/engine/nodes/EngLogTransclusionResolution.class", "sha1": "290cd3f3e24531c88936875d5a80443d878210a4", "sha256": "275a5e0007b5535c03fdb50f0e8a6
7164d6dbf95fa90f76679796312e954e18e"}, {"ssdeep": "24:vmkABXyQuljpZ4ltZMG/ElXZP2tCEsg+LzidReqQ0BZrBAU7M:QyFldmltZMG/cZOtF5+CLe2RM", "md5": "acce6a24816a1991225c20412723ea3e", "path": "org/sweble/wikitext/engine/nodes/EngLogLeafNode.class", "sha1": "57c9ce958b2a66ab0c86c2d677c740731a83884c", "sha256": "a4b95b9969fd5bf8c0505998565676c1fac2bbd41e225ca8b6de454063536c68"}, {"ssdeep": "24:xZByQuljy+tgtec74mF5fl4s4Fi1RElZcoX:PByFlePteb+fl4bFi1RElZcoX", "md5": "667b6a7973ed9e94bb7901f27316ca92", "path": "org/sweble/wikitext/engine/nodes/EngLogParserError.class", "sha1": "9a4960ca775feab0d68df4ad07ce0677df494509", "sha256": "90d130f48cfe435945cb6e38563eed7f920deaf5226c4b865f36900b256f49a3"}, {"ssdeep": "24:Vx1yQuljoiNItgtec7lkjih51PHCPlgDTHWUqD8kq:FyFlk6Bte6kji5PisHRf", "md5": "1d6c1368297f3f6dc5c23e56fd60eea3", "path": "org/sweble/wikitext/engine/nodes/EngLogPreprocessorPass.class", "sha1": "f8e87da16c5938f65652f3064021f344bbacd96d", "sha256": "7a422e82db026ddb5590a56cd6a0168b77d8dfacc275296d7f70107929bbecdc"}, {"ssdeep": "24:qS7VRqyQuljTItgtec77suDCw0rSW4slWT3lJM/:qS7CyFlXBteBJZlO3la", "md5": "6712119c940d39a21a30d06f21597560", "path": "org/sweble/wikitext/engine/nodes/EngLogResolution.class", "sha1": "92c47000961165eeddbc11ced89cd4d3ac3bee24", "sha256": "9979583b8ea6d029d542f38d081bc9c8896ed7b6e20e6b1421b87970cb206d00"}, {"ssdeep": "12:c2fcESDQulPsof2TvKMJddm/MOLml+tMJZSZYpYP2IYrnjCQJdfQVIhm7tmmO0H2:cIyQuljOTVmZQGuj2QkVtbOylU", "md5": "b1b78d760ce3382032f63417f4caded9", "path": "org/sweble/wikitext/engine/nodes/EngSoftErrorNode.class", "sha1": "4463d5d4da036ac66a933b2ea649b9c215f1f5da", "sha256": "08d7d378445097b62ca8dac6f3e5de5e465eeb77dd0343c15e8721734eb500e0"}, {"ssdeep": "12:COXcESDQulPsofqekgb+7qhVmuHk6vxIF4:CoyQulj9kpYmuB5", "md5": "643a130b47a44df20f923147127405d8", "path": "org/sweble/wikitext/engine/nodes/EngLogParserPass.class", "sha1": "6ecd9e53f6f767101e75e623d738d59d93261200", "sha256": "6d5f560244e97eccd742fed3c82c8075fa62867a583b535e757e8955447e60ce"}, {"ssdeep": "12:wXuXpGHdp9FYegyYerI8IVqTq2KB1d2skRNIa
y1set8mMw8EQRNq1+WiOkhmtkkj:wXuZ4BIYzK8skmHeEQTykhmdZ", "md5": "d5485c60f3f2f704ca0391f15c4cbc33", "path": "org/sweble/wikitext/engine/nodes/CompleteEngineVisitor.class", "sha1": "2c1e0fdd0a7f82c055600fb73f4535f78f696075", "sha256": "632d3922cc75b2b14ba56bb3c28c7bae3c9610b5e8f6ca32ede99ce44467c81f"}, {"ssdeep": "48:2be3JsnHvVSCY3slDdlZDXnf/eIusP9l/1e:2bNvVSQDdfnuITl/1e", "md5": "9a65b7dcd0042a9048f573507aa2cedc", "path": "org/sweble/wikitext/engine/config/WikiConfig.class", "sha1": "79620e1a32d7cdd349b8023ce10c69ecb049865c", "sha256": "e5fca3eed2036ccf388fbb8fdf068033741999212f48668e741bdbdf3fdd4084"}, {"ssdeep": "768:AOAjFnQJ2SQhLEMu6psE21Dm/hpHhCnYp:Arx3OzhaHhV", "md5": "5e9f78f88c13abe0bfc4b824bb11dbec", "path": "org/sweble/wikitext/engine/config/WikiConfigImpl.class", "sha1": "640a56f77aa6e054ecd4f6121d3a696cd2037718", "sha256": "6b14061121b95b2717f3c915c1eaa0a30c536bc72dbe4c88c98dc8fd3a7f95ea"}, {"ssdeep": "12:60vSDQulPso+f86ZQaybbTQ3UyiUO6ZQgSRcATL66ZQ8Td7ESKX9zkrqlod:60vyQulj2hCPCwuy+Af/fi9zgl", "md5": "26ad468ce7514d0efd05bf36c859209b", "path": "org/sweble/wikitext/engine/config/WikiConfigImpl$2.class", "sha1": "601e38c3559f3a21cc34a835a693ef9ecb222ffa", "sha256": "340c69aaa66c4141f29ac32e710b250a5c9e51f94fc4fc7e744548031b345db3"}, {"ssdeep": "3:DbllT46ka5ILucXQi5G2LXXRs0tK6ASSK8xt7/QX6b9D3QCK8PmkllrSwl0:aScgCLG0txn8xt7/26b9bRPiwl0", "md5": "06bc44c613c44242effb88262d039ca0", "path": "org/sweble/wikitext/engine/config/EngineConfig.class", "sha1": "397b276e7b58b7add20e2f504ad106da801d6b91", "sha256": "69245e2b36a7ea03fcc36921fe1ba1e513b3aa4ba957b2dec5e516cd217f6e32"}, {"ssdeep": "12:NCuSpcEzEKMYulPsoCX6ZUi/MODMITUD6ZUWvcuNSG3/60e2fhtm:NCuQoouljCIJJTfX0uNGRT", "md5": "416211a061e27478483ed709a7b05942", "path": "org/sweble/wikitext/engine/config/WikiConfigurationException.class", "sha1": "50a9d5103497450d9ebeec0a52168acd2ead41b9", "sha256": "353ee322c6115b959d228a3243c492dd5e0c6f61768511d8e02c7d08818366e9"}, {"ssdeep": "24:k7eOzyQuljMabBE/ARWEbWzCDmJArIFx8Jk72lAtFLKCIUp+cV2S/q:ky8yFl9y/RTJb5OAHK5U32Si", "md5
": "2be8e67feb23989c5c0ae04a33a720d3", "path": "org/sweble/wikitext/engine/config/WikiConfigImpl$NamespaceMapper.class", "sha1": "361fd9bef851501610e6e37d99d197d47ac828cb", "sha256": "eb1f7133b8946bb6ff97b984e3ce1d52628514598b5af43c69e3ccaf2548c505"}, {"ssdeep": "6:ClZHJBHGfEIOZGpuGHL1OMgLqkNUxt7/2iCqxRPGl64:CXHLHGfvOZGpuGsqp65qxRMr", "md5": "e093c43af6a0d5713fb203a9026f3b0a", "path": "org/sweble/wikitext/engine/config/WikiRuntimeInfo.class", "sha1": "84407a16deea1ed28c46ae39083ed14f1bccdc96", "sha256": "825d5729b7241a1f181c68a090ca3e723c3dca82c880b914abf45a2f95bc4269"}, {"ssdeep": "24:HcpxeaXyQuljUff+2H9792RmCbiReg9OBJAldteSTUa3lXM88q2b2gmpaTgbJ:OpXyFl4dRXCm4J4jJXMW2b2gNTOJ", "md5": "6aa6530142261f5acdb31ea63f362792", "path": "org/sweble/wikitext/engine/config/EngineConfigImpl.class", "sha1": "c6ebadc6e31b46fe9be96b5759e373f97a63d1eb", "sha256": "053859839cf592baaacaaf8409545b9dd7cdddbe6fab773f198697ecbdce590b"}, {"ssdeep": "192:oymAjal/zQBRoiSfLGNi/PlfRRN/QRaJST3ZOK2mL8etBXqwJ3tDsotcHyqeiDf0:oymmal9tRgTJOK2mL8etBXqwZthSnfDM", "md5": "ac4e816c020b352abffce72d731e992f", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl.class", "sha1": "27b7c67fc317881bb96503242e75bba706b03fd9", "sha256": "182b37af43313f8645a00081b142e319899db5c439fd9b524ebd9799c3783b6e"}, {"ssdeep": "24:Vtvvgmxulj2WCPCwoTx+Af/+HqngsYzp5taiE:VqVlRCrA+AfmHYY9Tan", "md5": "0fb00c9cb2a6a7aaf9f72471fd9dfe78", "path": "org/sweble/wikitext/engine/config/WikiConfigImpl$1.class", "sha1": "2242572d601e6d27153a9cd6d23fb2c3ddd26151", "sha256": "f8ea7574c610bc9d472cbe58f8ff07a4a549960f482f3c0a3be92d6d466bc3d9"}, {"ssdeep": "6:+5T+nXMO/VlT46xt7kJILRRgr/DgqGRrxt7/2LQRPAnBHskU:+5T+XMONlTFYKtQx86kRonBHskU", "md5": "708bcd8ec0eb8303ad0265ec473c5ec6", "path": "org/sweble/wikitext/engine/config/Interwiki.class", "sha1": "ca536bb3a7cecce56d27781e1cf55142d5b24cba", "sha256": "19048915d31ddbdf790263af2e98b0f59b99c5384b036096048fec76cf7474d8"}, {"ssdeep": "12:9Qk/MOmipMPOSDQulPsoaS+OY36TnlS+sMDWsg6TnlS+frMOt433X6TnlS+oRG6x:6kbpMGyQuljacpvhx+n66FKR/CvBv", "md5"
: "cb98fd16d21e025ca9548484f18b41ea", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl$UrlProtocolEntry.class", "sha1": "ab86e7aed609ede102aa608b0c0837a51a54458f", "sha256": "56393633afa59a59f8208d283bcec677a6757df268630e9375feb68d6c75daee"}, {"ssdeep": "24:n6Jq8l+cvgmxuljstrH059O+20uYXn4RIvibCqnrvKlLU+Dj3WZtD3fudlm:6JR54VlYtrINBZ3f6CsrySeSZV3f2m", "md5": "9131fdb3363d4a439c5bf8998280c93c", "path": "org/sweble/wikitext/engine/config/WikiRuntimeInfoImpl.class", "sha1": "c8c5acb5fb3c1fa440cf00357fd24c9fd656c110", "sha256": "d10d47a932569a7d2cd130ed4777d584e89bf4532abe4417f1e93aceeba6a04f"}, {"ssdeep": "24:qA/kHkQYCNCHkQ5uljDHkfugJEGyXkVwlQDHkID5HkncHkQ+4LyxrKBxEsc4xAs:qA/k8OC0l/pgJEGwiDdFpy42MBu4t", "md5": "e35b54311c8035d441f140197194bc02", "path": "org/sweble/wikitext/engine/config/I18nAliasImpl$1.class", "sha1": "e1adfd869697119f31bf12f555238fce5f218bbb", "sha256": "18e20a67afe57d5f834568c52af6a1a46a5b3b117c6522885b7ab3a235268928"}, {"ssdeep": "48:gesIm1OEEhyFl14YJdCuPRGxB7ingYsi6CZIP24zUNer2rrJbPXZP0whJd0pIXNX:NstOmFl5CBdYsX+IPvUNeoxdNjaw9", "md5": "9f71f6b5c4ea67be29ac9d2cc3c1b8fd", "path": "org/sweble/wikitext/engine/config/TagExtensionGroup.class", "sha1": "a87ff0d50dde154fdb8d54017a37f0bc912c3053", "sha256": "b1889da71d040220559ad44e1b9493eb8d1f4ba2c29a0d2b448d5ee3d6848c43"}, {"ssdeep": "24:a+kbpMU3yQuljlEgeakgvOnnD/0YXPgZDnu6cg9NI9Ug93Yu:vk1H3yFlJOaJvOD/rXPKN2", "md5": "422a9f4f962a9d4591d04a37fe93d21b", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl$LctVariantMapEntry.class", "sha1": "2ef876751111b3ece985c64bf0dfb759e33d16c4", "sha256": "0f88f8e4601f1dc945654049b0ac9d7b4d82e5a474ffa32656ed87614b2c2e9f"}, {"ssdeep": "12:XpMOcV+62TXGYlhGJK7MyLqghzGEo6vbR3lBHO23EFvgDou:t6cJhmBgpb1bHO20FoDL", "md5": "23bf4738d2fe2341acd1fbf8ff6ffcb1", "path": "org/sweble/wikitext/engine/config/Namespace.class", "sha1": "647c7f0d928a41a6bc69c7bb5dcca15a017d335c", "sha256": "0dbc59c1485c06dca3dd19a69a2184fa9ec59b56203277e079d19665ff337c96"}, {"ssdeep": "24:a+kbpMlhyQuljYEikgXhgnVM/0YXPyyu6cF9m99UF93Yu:vk
1shyFlMRJXqVM/rXPUmE", "md5": "6c4e24c7e5ea7b9bf4ff4ca1f9b3a5b3", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl$XmlEntityMapEntry.class", "sha1": "cec0a10b71d9e38b336173d578c9b32554165048", "sha256": "f9d715272fb0c7ab14b87254344612328310edac86055aa8ad96523bd6745add"}, {"ssdeep": "24:Umeh5/pxegYX6ryQuljS0mtsL1rC4CEDdCZ/4zTIyie0nsXJKq8:Umet+XqyFlW2F3zRie0s5W", "md5": "bd56cbf4e88888b2a076a38e1eb3a012", "path": "org/sweble/wikitext/engine/config/WikiConfigImpl$Namespaces.class", "sha1": "23f150b9f4ec953d66489c3553cd867c4e4f0c0e", "sha256": "62578f2d482ea126ec1b4c32e5dd3034aa926451eb63e328412fdcb5837ae119"}, {"ssdeep": "6:J2kbLw4W5I3UyiURG26xt7/2TOIgYBRP+xt7/2TOIRNl8qt:J/E433UyiU66TngYBRG6Tnht", "md5": "a487f38261855d748dcfa014e07a29d1", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl$1.class", "sha1": "c134031a81b6ef759eed0ac5fcc5a6f1c0e9b7f5", "sha256": "735e37471d7a08c59e8118a192ac1001f50857057934fc495c81f6189f740bde"}, {"ssdeep": "96:I69Fl4lvV2t62IaixFxNgOFvXT9uxpWGtiMGrW5VVB:LlSV2gx57/kxpDtiMYW5VVB", "md5": "b72732a394cfdc9a9937bca65174754a", "path": "org/sweble/wikitext/engine/config/NamespaceImpl.class", "sha1": "a0f3430abb79037035fce1de57392079441bbf36", "sha256": "0770ed34c83f0202d472cc942590d9ea2a0b84b2faa622371f3d4a366d74d6ff"}, {"ssdeep": "6:L3LXMOmzruV6fFwAh2usvKzXMv5BoXMn2LG3qMJrxt7/2XH2RPAnB1Kr:LzMOmzBfphKK7MiM2kqE6XH2RonBC", "md5": "25a372cb9f22b0ecf3d92862905ef65e", "path": "org/sweble/wikitext/engine/config/I18nAlias.class", "sha1": "a311664c6d11fa4c47743a23ae1f4d2dbfe185de", "sha256": "928f1c00a2b4b32535f543d9da784ffa16d2de4b4b915b6a2c79ad479923c74b"}, {"ssdeep": "96:abuvQpFlD9KooosSWNTsSQcz9osbdONHxdNjawf:a7lO59oX97NjRf", "md5": "3a4f87d5a8b9db6b749cb4ed70559724", "path": "org/sweble/wikitext/engine/config/ParserFunctionGroup.class", "sha1": "9a5659cf8912f49b26fcd5b6adb51ac0aa1bc177", "sha256": "c63c99a69f8bc5d899cbf5f68ac209eda3a1a6ae3699a19222c0cf097139c423"}, {"ssdeep": "24:a+kbpMU3yQuljREpIkgaLhnP/0YXPQpTu6cp9Kx9Up93Yu:vk1H3yFl1VJaVP/rXP9KM", "md5": "557a8441cd6a16087
23bba04f5fb50bf", "path": "org/sweble/wikitext/engine/config/ParserConfigImpl$LctFlagMapEntry.class", "sha1": "2e407fbe3fe52ecc9986126eb30112c34e8ec218", "sha256": "c827c9ee94cb4df45f7cbc6779af543745c1e7dc342cc21489727952b0a27bcc"}, {"ssdeep": "96:vqFlDsV8OgpOl1a8OyFZACRh//SHBkd0Xy8eLK3:vAlbOgpoaSXx/kBkddi", "md5": "2e114a319878bd857cd7014e35878bc8", "path": "org/sweble/wikitext/engine/config/I18nAliasImpl.class", "sha1": "1a638a653c525aba105b5a8b8b429a4b344f66c1", "sha256": "ccb03cb2566c52f2fce313b71cbe02f2a1b22e5b70d0313e9ada069a661fbebc"}, {"ssdeep": "96:ftFleWtqfjb0WmIWZZg4xkRYA1wu77Zt2:fHl3qjb0Wgzg2kyOwu77ZY", "md5": "e86593cbaa2cf179460e7228baaf3430", "path": "org/sweble/wikitext/engine/config/InterwikiImpl.class", "sha1": "15aacd3de9c676b8fb82d60b296096a4915a6598", "sha256": "a341b02a36d5db9c7464e6cf4be4f40977859950fb840230a2e96fc92ec1becd"}, {"ssdeep": "24:/OqqDuljBMwkmp2MwAwpid/8Mw0A5MOMMwP/xiYDuj/0lP:/Oqfldl6l5AZ8lX5/MlP/oYDuj/01", "md5": "27c5fc8c2f5d51c8047a700a4e285b1c", "path": "org/sweble/wikitext/engine/ext/builtin/BuiltInParserFunctions.class", "sha1": "b99b0a634a50491ec9ee544a1e6abf036ebd928e", "sha256": "95a5eb7ab1fd20b1bbaacccc8033d402ba670f3e3e0929d9bd8fb461c27f010b"}, {"ssdeep": "48:o3pXyFlR5lXwstkHtoh9T7st1MIi8YlXb8alteGbtl4LvlrvROYlzjif7:oZCFlRnXZ6Udo1M/Xby99FflPif7", "md5": "52152ab208999ea50ad22bf35fb26a69", "path": "org/sweble/wikitext/engine/ext/builtin/BuiltInParserFunctions$ParserFunctionSafeSubst.class", "sha1": "63cdd0656bd9988544bf0b7bcf80d9f77c7e4dcf", "sha256": "c78d242b467f2fe415830743ddd9722153612c71981331bddcc2161c12db8d16"}, {"ssdeep": "48:9v0ZyFlovWtwDtzOqtPSElem94ONef97S09dDC:OEFloWwxP6w4OK713DC", "md5": "f1a7aad7161f16ce0f6d943f7cedb032", "path": "org/sweble/wikitext/engine/ext/builtin/BuiltInTagExtensions$TagExtensionPre.class", "sha1": "58467a062151bfc1dd7927f7535fc05b97ead9c5", "sha256": "454ce0a59c0a3a2c0e6b0ade5361e925e58533012362c7a0fee7feb3013bec5e"}, {"ssdeep": "24:aF2kShaqDuljHMmvv20IBEy8qSmnMkeil5ol84:azKaflzdewy8qvnpeM5om4", "md5": "f8ecdf167ad0ed12beb0fd39ddc8
6c12", "path": "org/sweble/wikitext/engine/ext/builtin/BuiltInTagExtensions.class", "sha1": "e2174eb5776a80a3312d91f70caa2a065a5bee17", "sha256": "455d249b14281ef8b4fa4c0c96af57a6be978b0dd89b22748905e42cceae2b4a"}, {"ssdeep": "24:rlL/yQuljnmSwCmq3jpeCcD3jpnWNIjOq3jpeCzSyr5MSUuybN2UQj64lzGpMyeG:N/yFlystwDtXOqtPSyMnrEU0uMyNr", "md5": "49cf857c1e20476e57fd4fcd6e28eb93", "path": "org/sweble/wikitext/engine/ext/builtin/BuiltInTagExtensions$TagExtensionNowiki.class", "sha1": "51ab13bf748eae5c73264d391ee947ae3caabebc", "sha256": "a6b773f756e40c2aeb60a81f2dedac0e9cee9e75b339e7f0be90a5a62dd8c844"}, {"ssdeep": "24:Jat5uljt9p2kgKqjl6zl/6iAt06/vZM283/+uFkO9KFRc/frLTAp3:Jat4lJ97BAyaq73/YO9Kfc/n85", "md5": "5199fb03319af881adf4eda4c1ea9a15", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$10.class", "sha1": "7e729526cfdacea31bafb26b5fc11d73748f6785", "sha256": "a51c5e225aa18616d4c3b55cbee2c161861a4001a8759b1e60a4e5bdb4db7eb4"}, {"ssdeep": "48:JrARyFlG1OGtctTOthOIvbdOIfTYO5OKOGMbEWGOXtWOG+kIafn:PFlGkO0qgcbsKR4DGMb9P9fGSaf", "md5": "c09994dd2cba8f95194ff84b7687ec5b", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionSwitch.class", "sha1": "e132886f9c22520858bed6c4bacb1b0b9b8fc774", "sha256": "d9486c4461746add79502f5bbb6f07d9b2621befe53d620b832d3cd0fbe65370"}, {"ssdeep": "24:gOqY5uljtz4p2kgKqbBl6zlyg6i9YSzG2Ra761NSD+uq679QMSw0WzONv0wNbqCC:gtY4lJ0W4z9YSKyUemF9bSeSvTs", "md5": "26642aeeee287d74d4237dfb5f6d9239", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$28.class", "sha1": "2a38c30fae32e2a6d68ef619496290623bb97e87", "sha256": "59d80c7e2ac548326a5f99018218d4f43522b9ccfe26d447df30b70654886a3a"}, {"ssdeep": "48:ijGNfl+MOJOOIv5OmOSMMOtObO7OVOfOUOsOk/orBqo:iQl+FIOIv4vbF8iCEGtlk/orBqo", "md5": "086df2134ff032d3b4a75dc5194a6676", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionsPfnExt.class", "sha1": "53d3e1ec1b729c6a6e1039b17a1aecbc54ce702f", "sha256": "0093ca7d68f0b4073503816d9a4f84ee031f14711ab2aa10092cda9d56e04237"}, {"ssdeep": "24:K9j
5uljt5p2kgKqbBl6zl/6iFW6I3/aSD+uFkO9jRwlXOlnIVZQP9DeaJFHcDr:K54lJ5W4BFWP/amYO9twklnIVGDpzs", "md5": "625ca657658daccfc596a63e723cbcd2", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$21.class", "sha1": "c31fed2840a523701cc0193424511915c7a352e1", "sha256": "5d1c14fcfa12e880381e26b2b0ad062151570e48677ad3a652c6fa72eb324e1e"}, {"ssdeep": "48:xIyFlG1OkbbtylnvtrZECgIte59IfGdH/QOlOGSuXte6MbVb6WWOGwWzbNWCeg6:jFlGkGkrgIg7ZhUGS+e6MbVbJGwWvwu6", "md5": "8d9fb9d2eb3b3cb8cbd341e0a34d561b", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionIfExpr.class", "sha1": "1727779a45817941296e45fc54234271b13b26f3", "sha256": "c0ab1e970d1def293c8ad8e719a31ac360c075a9a75306a745fa48a971fa117b"}, {"ssdeep": "24:v5uljtMp2kgKqjl6y6iEHV86jp/+uFkj79QMKf2OtrewO8I/0e:v4lJMIEHV8o/YP9b4trez87e", "md5": "e1d42c69b16ee160682554751e6112ff", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$15.class", "sha1": "34fc6a440bc9ff6a00e78863f3f12a9ab06a0a29", "sha256": "6c695b8e996e0b4e598ae2fe74220b79cbe2fa17366360d50942bcbb52ae6d4b"}, {"ssdeep": "24:gOqY5uljtxkp2kgKqbBl6zlyg6i9YS9a761NSD+uq679QMSwMzOD0NbqCC:gtY4lJxkW4z9YS9UemF9bS1Iks", "md5": "e877440ff551374b03c05697d45b4303", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$31.class", "sha1": "98de643567d0639fc1f77492e48cb14e1d2f559d", "sha256": "8d525b258a025e7e569b4c41cb7cb061683a99f175d4f79b80f401ac9e98eadc"}, {"ssdeep": "96:F/yNuP91lL5xZOBbeSP/DkXWcbVbE2b3kH9RDLvmuVhw4JsfwC7FDaW:Fzlbmb3P/QvRfkXmUGPwmFD5", "md5": "6b623d6ffeb4cf7a8f1dcc7032a711d5", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionSwitch$Evaluator.class", "sha1": "a45011e2c8c72bd0a52e4a15900b2d9adf54e369", "sha256": "99021467c0aece6d9dc7536dc3fdffc0ec54699b631854a9fbc360ffc011a037"}, {"ssdeep": "24:veW5ulj2hWp2kgKqNl6i6ixV865/+uEM9QM6VdFNP9lkQcD:veW4lyhWaxV8M/qM9b6VVl+9", "md5": "b99407dee3d593ff4a7ccd41100d711c", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$4.class", "sha1": "5873c1b8cccf37
c9daf2ea26cf6bee32711a649f", "sha256": "18ec0724e0840e4c4a3ce391e706e57fcb8e157f6726190065c1a791c69ee4ef"}, {"ssdeep": "48:vGlVOGDsRtcttCtZGVOGIOGm/XbZL1bWz/q0uq:elEGQH04ZGEGBGQb91bWzh", "md5": "2b98ac6b6347123012de0a2994da52db", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionsExtPfn$CtrlStmt.class", "sha1": "0e18cbab9afb9e1f6818194aa593a4a4b70b4c8b", "sha256": "ac6f5a5e073f122daaf91a68d51360c863e0b0214725a16bacb56d435d07d99c"}, {"ssdeep": "24:gOqY5uljtxp2kgKqbBl6zlyg6i9YSma761NSD+uq679QMSwazOgV4qoNbqCC:gtY4lJxW4z9YSmUemF9bSzhV4Hs", "md5": "64949053e2cddbe2c0544d3cfe2e4278", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$29.class", "sha1": "ae909f19c7c3c082819f6e9c12c679e11bcf469d", "sha256": "40354b8834d64a7a4dcf87e6ba035307103e93f41ab6383869c187b411b02d56"}, {"ssdeep": "24:cT6V5uljt+kp2kgKqjl6zl/6inSs/6wpbNZvN/+uFkO9sRnfLa1WEC/t:cT6V4lJJ7BnSAlvN/YO9MnzSS", "md5": "f8a2254a02aaf6e248d0f19d3d44f14c", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$14.class", "sha1": "820bb83f599971b9622703b993134216d8e32b8f", "sha256": "6c4b463b09d09786d58d5c886401909ba2474f031eeb69dd6f69e2e771f8a333"}, {"ssdeep": "24:v5ulj2Jp2kgKqNl666iJtqZa86V9ybkO9QMMFgqdjVH:v4lyJyHqY8Y9G9bU7bH", "md5": "03d2c30ff99cbda65f98dfb5a75b58b8", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$1.class", "sha1": "1ed67c11ac683caf5c4a1a90b043be0c66f11201", "sha256": "340646f9faec9cdca18048a51a830e1182f44dfd20d3bd5bc7c687a1350df189"}, {"ssdeep": "24:V65uljtTp2kgKqNl6S6idVvReyM9QM6uV1AMDg:V64lJTKvvReyM9b6u78", "md5": "ac881cb7ced7689e807248e6087472d7", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$34.class", "sha1": "308c3303c554060545cbd0e066d0786381c7ba8d", "sha256": "07a340eb1f8b34861d5578fe661d8346ff56729af223eeee7e25fe06d5b57a40"}, {"ssdeep": "96:BpdaMIFlNkH0ItPHCXTkP14IGCenogrd4qMbVbGDh5G1vgIcKdxI6S:BpdaM6lynA2Qno4MRCD2vgIcKdxTS", "md5": "490d70471cf36d3100f8858359413d62", "path": "org/sweble/wikitext/engine/ext/parser_f
unctions/ParserFunctionTime.class", "sha1": "1ab8e10536ff16e5f64b05e59d187d5dd8be7231", "sha256": "1330a80d998882ebe156613481f023f7c030e9f9a793c6053a46b3e5c2a82fac"}, {"ssdeep": "24:zH5uljtzcp2kgKqbBl686iApo0U86qSD+uFkf679QMSwbzO3WMdB:zH4lJQWhMo0U8bmYo9bSemdB", "md5": "35f389b09734377125c0a1f9123e89d6", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$24.class", "sha1": "7bd204f82b6f65f80adc1e6d4b2215087e0b2878", "sha256": "8308328ae5d2daeacf49c2aa1b7a1bdf39962b6ed159f0da0c017a1e96795c37"}, {"ssdeep": "24:V65uljtWp2kgKqNl6S6idV4eyM9QMU9udyMDg:V64lJWKv4eyM9bSud58", "md5": "d65477d3e00d5cc0fa92e627d2b8ae69", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$35.class", "sha1": "ceaa287c8da94801bd51c312718467bb82320070", "sha256": "3233521f4865324bba9a637bc5559adaf0851156c21a5a9a7d68e6fb95a0deb0"}, {"ssdeep": "96:W1b3fXxWlioDkbTJcg6X+XT3D+yECZUlzYV:W1zhWlioDuTEX51YUM", "md5": "2fb5fb7d1e7565f355dd6a20ad208e6c", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token.class", "sha1": "7bbd7dee2a1bf7d0426cc8394e24bf80f4b16541", "sha256": "ad984b8de52ad2a06ce1e3311e3b3da8a24747eb57c84609a99f4489ec0fec7c"}, {"ssdeep": "24:fNV0BfuljC6F6oH39Qp6f17ywfLslXU7vuQlCpb:P0BGlu3oH39WGBZHKnpb", "md5": "baad112ecb8bcb3f5a5f303e4cb30502", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$ExprError.class", "sha1": "e95f7fd34584b7179435b1a95f38a9b176eec718", "sha256": "a4369ec4ce976fe81a8b2911d8c85110e0ae72db5f200ed5e58bc7ed5a2536a6"}, {"ssdeep": "24:v5ulj2Bp2kgKqjl6y6iEeBK86jp/+uFkg79QMKn2OtrewOYsCI/0e:v4lyBIEeBK8o/Ya9bwtrez87e", "md5": "307f1d3ea6ff32396011c3513ead8ab5", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$9.class", "sha1": "22bd4a132cbb8d1884b85df12cc5440f342be333", "sha256": "25db3def0178b7cab40b3dbfaf5c26729be20c2005219d0d036fd5a294c292d8"}, {"ssdeep": "24:Jat5uljtgp2kgKqjl6zl/6iAt06/vZMc/3/+uFkO9K+vNRcDf3TAp3:Jat4lJg7BAyaqQ3/YO9KG3cDP85", "md5": "ed7f9e562a6607ee921ecd62a52c74ac", "path": "org/sweble/wikitext/
engine/ext/parser_functions/ExprParser$Token$11.class", "sha1": "90e99efaa87891137ba41132ae3b2e7d65293663", "sha256": "c9813a7e12423cccb14b430da78379ee5111bcf652a91eb05d3e6ad3ec9836f4"}, {"ssdeep": "48:9SiCyFl0OuRtQ4vtvGLECcdtQiWLtUGjhti/OD/OGmXiMbVbzWsLVuLZJ8H:UoFlNuHZvNQtLVjtDmGZMbVbrkLZJ8H", "md5": "20a81285d7558270d5177bbaa97f2a02", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionExpr.class", "sha1": "dc23bd3ed6353dbcb7d12ee17463d01f075ded05", "sha256": "edb83425f73ad8062c24f3629966ff2f7264a04f4e944b33ff7fa05e902e89c1"}, {"ssdeep": "96:d49mgxpFlpTE09eTu4ko4TIjEJ+upzeWC1oRqomKxBcxX6fiJFnlB0N3EUj:drg9lxErT6oAIjEXec5Tzel0F", "md5": "5f7ed2322bf47b216aefa5daf9158612", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser.class", "sha1": "4b47aefac82de322a908850a3caecbe5b4cc26ec", "sha256": "b7671753a4a2c48bd2131e799fde5778336626b26409ee593ab52ad10cb3f8cd"}, {"ssdeep": "24:zH5uljt/p2kgKqbBl686iApo0T86qSD+uFkf679QMSw3OzOkLIMdB:zH4lJ/WhMo0T8bmYo9bSMiRNdB", "md5": "f67ff7599bea67fa1f211ccefc67318e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$23.class", "sha1": "a09e305dc106c9ec3cf36f2c55e74e43cae61718", "sha256": "79370772c9a5fbab0739953e5bf3069ed3ac3bfbc2ebd0432fd5b7b110700ae6"}, {"ssdeep": "24:v5uljt1p2kgKqjl6y6iEH086jp/+uFk/Vh79QMKE2OtrewO9CI/0e:v4lJ1IEH08o/Y/VB9b5trez9C7e", "md5": "6f4194ecd792684318eb6d64650142be", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$18.class", "sha1": "64ff9d03d0e39bd7b102e38b0139149128c69e10", "sha256": "0eac10a84ac1505e11882198348db7e389bc11b008256c19766c536ea7184955"}, {"ssdeep": "48:aV4xcEGl+MOGN836stkqtx7st6t8WtdG9OGW0OGTOG3bN3OLxYAmKu5i2:aVycxl+FGNwzNxoa8+dGMGWNGaG3blOc", "md5": "5979156b3dc0827c215a24c73ef342ae", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionsExtPfn.class", "sha1": "39143d777673c1f9ab7ef2f89be7defdd91d3235", "sha256": "be80710431607b1ffddcedb231e2db66f7e69689a158bfbbcf00ef9993083bf3"}, {"ssdeep": "24:9vpy45ulj2Pp2kgKqbBl6J6i4mGr86SSD+uFkk79QM
ycg1CuFSQGSOFKx:9044lyPWC4fr8jmY29bxg1CuFSQC2", "md5": "809bb583f0de6b1dcd65cf0844d14a99", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$3.class", "sha1": "83799e86439039b9456f9c4e98e64ee0bfc0c931", "sha256": "aaec378c1c74b03f71a38cfde9dd73e0fd0d27c6273880fb1fd737a7642055ae"}, {"ssdeep": "24:zH5uljt74p2kgKqbBl686iApo07M86qSD+uFkf679QMSwGzOcoMdB:zH4lJ74WhMo07M8bmYo9bSrRxdB", "md5": "07d9267d2f42c51b17dfc248924d3626", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$20.class", "sha1": "0a18617c05c37497927650991be50156db326c0c", "sha256": "f9cfbdc7c4f6aec515747c1689deb354ad8972e8c6585a7169876bb2ce3810a2"}, {"ssdeep": "48:+byFl0OZbbtv0dtdPAtezDp98p73O2XOGSRXte6MbVbSuSOGj78uHDuxfnnsh0mZ:+WFlNjK6CDHQe2+GSLe6MbVb1rGjBHDF", "md5": "ccbac549f24cc517f2bd5bba2a59295e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionIfeq.class", "sha1": "b6b55d22f8255fdaf15003873a6cf9250b1dcf2d", "sha256": "06bfd650d5f8db253d06d1eb3c444498ef58886443e87fba059172f38f1ed6f5"}, {"ssdeep": "24:K9j5uljtip2kgKqbBl6zl/6iFW6I3KaSD+uFkO9jRwlXOlnImZQPQ/CIFHcDr:K54lJiW4BFWPKamYO9twklnImRs", "md5": "13427aad43eeacfd0ef4eb1d8cfbe7ea", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$22.class", "sha1": "6a9fc10eb856896517cac2dfdccf2f0fd6e50b6b", "sha256": "23b0c3f93e28ce328e2cb9fd4dbe231598f960ecdddc68209c5c44fa6afa9d8a"}, {"ssdeep": "24:v5uljtCcp2kgKqjl6y6iEHyR86jp/+uFk/079QMK92OtrewOpCI/0e:v4lJCcIEHyR8o/Y/m9bytrezM7e", "md5": "de09dc8a3d77a3c8dc1ddc346043488e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$12.class", "sha1": "7316e97eeabf6886df10f987467761c5e48eced9", "sha256": "4cc767cb9f751c06418d2996c70022b4c6a3ffc2f06ae39ce5b67ffd4aa9cae1"}, {"ssdeep": "24:ylZuVeMo8dTo/o0uldo8pCBXoTLj9oOTtRaI3DL:24QMo8Vo/oZldo80BXovj9RtDzL", "md5": "c7a5befa9b2d5e710dfd775590536a2f", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Production.class", "sha1": "8caf95be06d63ca101fb3a68e3fecbe94a3324d0", "sha256": "82e7824c
f765c106cbb4ca262d4155803cd3bb4d0b5d2e6664da68266448a556"}, {"ssdeep": "24:v5ulj2Ep2kgKqjl6y6iEe986jp/+uFkSN79QMK52OtrewO+dI/0e:v4lyEIEe98o/YS19bOtrez07e", "md5": "3c9e3c1a3ba47dab9b9177a6ebff13f1", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$8.class", "sha1": "7f02f1400d22a9471415b21cc84bc7b2d709cd44", "sha256": "4914645dc23f15fe46e936a2ba3f14ae78372cbda453a78128a6f185d3166321"}, {"ssdeep": "24:gOqY5uljtsp2kgKqbBl6zlyg6i9YSna761NSD+uq679QMSwFzO2eVhaA/O2CC:gtY4lJsW4z9YSnUemF9bSkUhaAX", "md5": "84e9a77dfd2cad09985dd4dfd84772fe", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$33.class", "sha1": "2c9ea6ef4967726f7d9783ddb2520bb8141d6aee", "sha256": "7734ec988a6825887346b69468659a767be9e64c58bc86de61722c2c861c6772"}, {"ssdeep": "24:gOqY5uljt6+p2kgKqbBl6zlyg6i9YSOa761NSD+uq679QMSw+zOqV4aA7qCC:gtY4lJpW4z9YSOUemF9bS3p4aAM", "md5": "0f6b65195ae0e81361336d584a16ade3", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$32.class", "sha1": "f77a028ad59a1d5573d4aa7c1401a306021bad99", "sha256": "2e16e306ed23187f5eae04e80b12baaa46938d6bf0e9801b09b6d51325c963b0"}, {"ssdeep": "24:gOqY5uljtjp2kgKqbBl6zlyg6i9YSQa761NSD+uq679QMSwzzOeOfNbqCC:gtY4lJjW4z9YSQUemF9bSG/Ols", "md5": "0df2e12f6cb9a2737f8910685342aa89", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$27.class", "sha1": "398a5661e10be7ed29b80b222de8473366008f1e", "sha256": "b171068b72ad9257e8a71ab7c4f7b503ead3c2f699836d79765466a5df37017c"}, {"ssdeep": "24:sY5uljtyp2kgKqjl6K06ipi6M86L/+uFkf679QMSwzzOQVXTi/:sY4lJy3pi6M86/Yo9bSG/6", "md5": "994162a1041a0e3f4929c067c5643758", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$17.class", "sha1": "0a006ca90cbb559de361e3b5dfb85e259918cb8e", "sha256": "f2ab519aee1a3fc8e77dc4b31cbe119dcef992a6d5b2ad48e904ffa6a37ab0ec"}, {"ssdeep": "24:gOqY5uljtvp2kgKqbBl6zlyg6i9YSI/a761NSD+uq679QMSwhzOqhLvNbqCC:gtY4lJvW4z9YSI/UemF9bSgThL1s", "md5": "d6217eec9bf06b605a8e6e1782c35996", "path": "org/sweble/wikitext/engine/ext/p
arser_functions/ExprParser$Token$30.class", "sha1": "79d3386f6702b5ed64419e579d82925639946c92", "sha256": "4704c4ded53fa14262475a5d27de5c09ba89ca561875260728784710ce07f7a2"}, {"ssdeep": "24:v5ulj2zp2kgKqjl6y6iEeG86jp/+uFkZ79QMKL2OtrewOxCI/0e:v4lyzIEeG8o/YJ9bktrezk7e", "md5": "de98254330a31dc900d9d92282adde22", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$7.class", "sha1": "74d648f454a3a1ea6d68be92c006a73aa7da67b2", "sha256": "854bf292be11723c71e574aa3e5573137f44bceab269bd390d825de986e4f264"}, {"ssdeep": "24:v5uljt2p2kgKqjl6y6iEHj86jp/+uFkCh79QMK82OtrewOYI/0e:v4lJ2IEHj8o/YCB9bBtrezY7e", "md5": "5c13412eced791d85e3c096ac61abd96", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$13.class", "sha1": "8a0f1a93291998522425aa10a2e4c795d2646819", "sha256": "bf2a1806a554b90b206802c61108b475ee1455bbd5e70b9c87d9eb461adea358"}, {"ssdeep": "96:FFFlbZH0ksf1+twBlGxMbVbADPJXw/wc5cV5de7r0qq:FPllUewWMRchceoo", "md5": "f3a05fb91a0d578d2d5a27ffc3a6f8a0", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionTitleparts.class", "sha1": "90f122081621c929791b6cff46e05802e5bfaee8", "sha256": "647d777418c0126672fb8f11eb9cad85ef8f233ed8011990041191dc3e64ee3a"}, {"ssdeep": "24:RNE5ulj2D+p2kgKqNl666iJtqf86V9ybkO9QMEFoOjVH:RK4lyyyHqf8Y9G9bcocH", "md5": "843c4814a9c9f1456e223afba170a865", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$2.class", "sha1": "a500078b6972b4c0c854ba75b54a079737ae8a34", "sha256": "bc2f08d35fb94f24f0f28995cfe5d33ebbae42e6920624b137150ec13e1609b4"}, {"ssdeep": "48:hZMyyFlqOzbbtyct3jTtecwBcTfGjOTOGSRXte6MbVbkOGafWGrSC39+c1c:DiFljhHdDwmeqaGSLe6MbVb9GQWg3IKc", "md5": "20f8002d1ef6537f3ed2f63d48632c48", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionIf.class", "sha1": "16a60ee6faf37655e02b332c1b44f0e115bcbf3d", "sha256": "236597622d841da1ad0e56353111ba4905e73f61291e2a4b54fea7243c63fae7"}, {"ssdeep": "24:7U5uljttp2kgKqzl6y6iEpV86X+SD+uFkIp79QMKgH2Othozmh+:7U4lJtKEpV8y+mYS9bN/tizmI", "md5": "92e564a8a03aee3
eb7ed3fe3a5088578", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$25.class", "sha1": "b8e8466510352d08d0c08258784adebcf51cb8a7", "sha256": "84405cd053602bebefcfa89c8e0a5a366bcb8b779e09731c027d69ea6ead4658"}, {"ssdeep": "24:gOqY5uljtNsp2kgKqbBl6zlyg6i9YSha761NSD+uq679QMSw2zOoSPNbqCC:gtY4lJNsW4z9YShUemF9bSbjcs", "md5": "3c0b4c771227d3d88960caeb71d5285e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$26.class", "sha1": "fcc2c2be61d42b31b41ddfd74917b9ac8a7dff18", "sha256": "91a8040b34eef56bd8ec2a585e3e52cb8d3ef5b5a7e4f58b933e703176ab2261"}, {"ssdeep": "96:9mlzMGP+fErFq3/GwGaGEGaauAi7FE+ISYBNYp:9mlzBSZ2SYBNYp", "md5": "280923b84efa1e83ca5ac281e9e5071e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionsExtPfn$IfThenElseStmt.class", "sha1": "737e93597f3ead212e796e00d30cac497d89e2c3", "sha256": "c4803b2fed084fe7c494efc2cf7d232da5d99874fa97799b82cacbf38d38ad24"}, {"ssdeep": "24:v5uljtAsp2kgKqjl6y6iEHi86jp/+uFk379QMKo2OtrewOU01gI/0e:v4lJAsIEHi8o/Yr9bttrezU/7e", "md5": "0f8f52a4db7149fbe24a6dfebb977c9f", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$16.class", "sha1": "529c633b1dd2bfe8d766c69b556fbe4fc7bd1bfb", "sha256": "32d9011cf833024f0fdd587c8b17f835de3ffab942c3eff07a9738b1473c4307"}, {"ssdeep": "24:sY5ulj29p2kgKqjl6K06ipL9M86L/+uFkf679QMSwhzOJ89KaAJHi/:sY4ly93pL9M86/Yo9bSEq8yZ6", "md5": "367bc92e212f30fa1725274ce03da858", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$5.class", "sha1": "0bd9bd1cb6e4a2f7bc0069f9250dbb70642d97de", "sha256": "7b8607aac50a58fc28ea6a27d63a6e350f64c236b1bcbf5f35ee557cdc958e32"}, {"ssdeep": "48:URUy8yFl+MOjbbtmtfsAktvicpj2x4OVOGSRXF6RzndOG8L3utj8z/6w/o:U+QFl+FxuCqc52xxEGS76dnsG8jz/6Z", "md5": "86347ce1f6f6f9dfc616972f5311843e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionIfError.class", "sha1": "ae938bf45775c7b9249a016d8bfd02b00f8d4793", "sha256": "2dafe66deef74d6c90ea7ffd1c4de3e47bf73fc3d20ed5521af866aaff038ff9"}, {"ssdeep": "48:oRyF
l+MOebbtr4t3Ekte+69IDbLO9OGSRXte6MbVb2fIOGM8uWX+0gKcLKx:XFl+F0Ef/0FMGSLe6MbVbSGEWX+rLKx", "md5": "8b26400e127a6eda05e4172b2f16ac84", "path": "org/sweble/wikitext/engine/ext/parser_functions/ParserFunctionIfExist.class", "sha1": "f1171e92d5ab38736feb8627ace53a0f55d5f1c0", "sha256": "68c12608cd2991114a2f24be14c69b6f397b80641f5fcb28098f7fa9d4709213"}, {"ssdeep": "24:SE5ulj2dsp2kgKqjl6zli6i2JZTIa76Y/+uq679QMSw8zOi2X+hDfY6K:T4lyds7a2JZsUV/F9bSBb8+lG", "md5": "44ae8a39043c79dfff578e4287ba02b6", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$6.class", "sha1": "ae702f3ab95cef11b301c3bdba05137f409688a5", "sha256": "8fc6eed526640d96c2a4df5c47883fe5b029c340d3b951ac97211cab532a9dcd"}, {"ssdeep": "48:QEZQFl3RbeeCmm9nfqj6AaiF8e0N+pEOE5jUtJIkuZUvC:QEKFl0e/6GF5DvC", "md5": "2341ea1cc4fb4fdc3f55637a14bb3ab9", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$1.class", "sha1": "131a9954dfe6a8fa18673c43d90278fb72ce2e27", "sha256": "3c231f9dacb1bb20f72a4a3592f2d7b26ae1ce2d43f8ae5cd647819fb3b2524b"}, {"ssdeep": "24:m65uljt4p2kgKqLVl6zl/6ib86I4ITSD+uFkl9jRDrQVtBlU5Y47c91u:m64lJ4GEBb8AITmYl9tDEJO54/u", "md5": "d62670678f6011ecd6ee8fe57644dc8e", "path": "org/sweble/wikitext/engine/ext/parser_functions/ExprParser$Token$19.class", "sha1": "9077b4d45e6ed691cbbf3e0fe6eee95bf94d6466", "sha256": "68e9952a54e93c375c874e48a5be4acfcf10a1b9544de9c837e8188c84a4a308"}, {"ssdeep": "24:KLGyQuljc4reCmq3jpeCcD3jpnWNIjOq3jpeCzStJAOut/gj6IGaNUNKy//m:uGyFlvVtwDtXOqtPSAOmhOep/O", "md5": "1cc4f52b7eb3d309c7819f8653a21fe5", "path": "org/sweble/wikitext/engine/ext/ref/RefTagExt$RefTagExtImpl.class", "sha1": "3065b01f4302cc1b768f89b4c9319e6e9bafee67", "sha256": "e9309f518ea4cb09a9219dd46859b04125538262f42e2ef7510647763ba3860a"}, {"ssdeep": "12:WO+fWh2cEl6ZDulPsoSXFujgQQB6Zwe6ZV6FujjPv8VPu06FujIW1oZFujl69M0E:/LCqDuljS17ma22D0M2o/PknN1j/zvlP", "md5": "6f09e0c57deb766e43dd4bbfeba1bff6", "path": "org/sweble/wikitext/engine/ext/ref/RefTagExt.class", "sha1": "ae85e6d166e9e2408ea62db0f76c19473b5db6c8", "sha256": "af2177907
8b70a060a00773406410148c484863d615932d8515308972276ab5f"}, {"ssdeep": "24:BE5yQuljfRKYCmOR3jpIk3jpjXe8M3jpIsSRKWRKFAsZaRKIiJRAdHjAGBl:BiyFlbRcRt5totsRbRa7aR8RAdDAAl", "md5": "ad1ef8d3c09a91c9a0acda78dc80c2a5", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVariablesTechnicalMetadata$ProtectionLevelPfn.class", "sha1": "ca86a637a579df5aeea1583becaa390fc293cda1", "sha256": "68187add9f6a7c92e642a88d6fe7054101520b95004827644f16f7f7bfa20deb"}, {"ssdeep": "24:WyQulj11RKILACmk3jpS3jpZ6ZrpkRKILuRKih3jkq3jp9wI8RKINpj6WAc:WyFlh1R3tStcZ9kRCR1Iqtf8RFtAc", "md5": "9e57753e6e03abc46e556f1d9c38c870", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVariablesPageNames$BasePagenamePfn.class", "sha1": "de2897f813129cc49c01995b41dbcbfb132be18b", "sha256": "4fe4ce42e08fd7d03656ed8ccfaa510269544ca6e19bce28c1476beca0634d55"}, {"ssdeep": "24:WseqDuljZGRKvqm82RKvUx/RKSjRKiRKyRKB/xiAqAqG57J:Defl1GR0RpR5jR5RrRw/oFAX", "md5": "15f08757a98a9a31e312b5cd77c1308d", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVariablesNamespaces.class", "sha1": "6822367b455eb946f4370f76d3088ca5638bb88b", "sha256": "b9ad741ce83f6ec044175bc7f5e28dbff298b0b0484c3541260028bf288942f4"}, {"ssdeep": "24:/xqDuljdRK4m92RKoTpOHKsJRKVxRKz/xiYcj/ilP:/xflBRJR5iHRWRw/oYcj/i1", "md5": "aa5a5e3090beea2200cc7d8dc9e5abb2", "path": "org/sweble/wikitext/engine/ext/core/CorePfnFunctionsMiscellaneous.class", "sha1": "7a11c0e474a49d49a7d09898c6636272f3eff4fa", "sha256": "79e0a1dbb9658ad43b23f8eb14a1d597919a67648335ad8c90851d296df9f15f"}, {"ssdeep": "12:McEl6ZDulPsoxFRKBQQB6Zwiq6ZV6FRKd6FRK76TgeMOMKAn2j35C:KqDuljHRKxmvv2RKuRKHCMFyJC", "md5": "ef7b4dba571ce902c758ded9b85fb222", "path": "org/sweble/wikitext/engine/ext/core/CorePfnBehaviorSwitches.class", "sha1": "855b1060d6e0f57e2f11094ee277af7366e84e1f", "sha256": "aa82fb1b670da18630f2422d8a6b321ed78142f4257625ff54d35ec689e39c4f"}, {"ssdeep": "48:domyFlMRaRtb7ktPgtpsiO+RVRG7kbVbLfbqtmR7R/98Kg2HJL:efFl+aHUo1O43lbVbqAl/mEp", "md5": "c02afe7632078663d6505aa75c1faaab", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVari
ablesNamespaces$NamespacePfn.class", "sha1": "9d9128e16c3f877cbf09e4bef6f5c7b798ae98f9", "sha256": "01c3f4a443ab0fefafbd89e5ae5718f6990bda4b858ee3bccf30bae5aa5cc664"}, {"ssdeep": "24:FtvAyQuljkCRKQCmOR3jpIk3jpjXe8M3jpI6CnRK+RKih3jGsACBz8RKIpQj6mlJ:Ft4yFlXRMRt5totlCnRLR1izDRpayrS", "md5": "e5d80a356bee6b2acbd10cb4f6df7420", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVariablesTechnicalMetadata$ContentLanguagePfn.class", "sha1": "b87b7d22553cc06c4eb154907ae06f71c70441ab", "sha256": "1af8b745d9e0568c1d887bd3c05008b94d8c891d1a070df5658e26394675fcba"}, {"ssdeep": "48:KLGyFlZR12RtB7tTOtEoRRRjRGEZR4tTRl9RIasRs9TuYtSj1OB5:s/FlL12HnqEqD9h4tTRl/Ia2mTrSJOn", "md5": "201221dc2d39438a46dcecba26497a8d", "path": "org/sweble/wikitext/engine/ext/core/CorePfnFunctionsFormatting$UcFirstPfn.class", "sha1": "28c93ec7ca7ecf1428d9e41cf9f3dd46a8d58fa1", "sha256": "5c0383ef1342e92fca08a1fcfb25afbb72649c3b96e425573dc1896ab0bff934"}, {"ssdeep": "96:1/PvpFl7b2Hmpkpp13c3P5MbVbWFe1ng6cOw3w:tlOXT13yMR/1ngwwg", "md5": "c01f293debf6a5dcade24ce7c64ef3ca", "path": "org/sweble/wikitext/engine/ext/core/CorePfnFunctionsFormatting$PadLeftPfn.class", "sha1": "7a07ad7ec32e711ff565def5e4c9a43dea2b1f49", "sha256": "b3fb5402c0f35571b66180e8a26d12b8f53dfc7c4ef2f6d9779255360afdf85f"}, {"ssdeep": "48:oLbRoNgR8lDR5c1YOl8RFhKdTRzRt+pgStR+1QD:Koo8ld5MoDKdtzHwgSvrD", "md5": "654ab47a31a215fe2b3a90b69fcf241c", "path": "org/sweble/wikitext/engine/ext/core/CorePfnFunctionsFormatting$LcFirstPfn$1.class", "sha1": "862281a452cfcbe4a16a27a8f67129a291685f76", "sha256": "7f2cd29d064f7a2b9dbca81f0d0169414dc79376b531b53caa7b734ddc67581b"}, {"ssdeep": "48:z4yFl11RjtStcsROR1Iqtd8RMlMxElj+wxNI:lFl1XRCceIVQKMxSjPI", "md5": "95c1375da6120f31728c28c96a326cf8", "path": "org/sweble/wikitext/engine/ext/core/CorePfnVariablesPageNames$FullPagenamePfn.class", "sha1": "375ffbdd132569fb3b32b24b48f0c67337c429cf", "sha256": "8602942cbe2849570d624cd2fdce72a138d0373fc42aa89a5e3f2e4219ed0c8d"}, {"ssdeep": "96:3TFl4eHWaRIAYwNFsv6jFgbVbwE7Ma48JZcJ1oQGwyGKE77zif:3plX2eYwAvpRPMa48Af+GKYE"
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.4/logging/__init__.py", line 980, in emit
    stream.write(msg)
BlockingIOError: [Errno 11] write could not complete without blocking
Call stack:
  File "/usr/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python3.4/site-packages/celery/__main__.py", line 14, in main
    _main()
  File "/usr/lib/python3.4/site-packages/celery/bin/celery.py", line 326, in main
    cmd.execute_from_commandline(argv)
  File "/usr/lib/python3.4/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/usr/lib/python3.4/site-packages/celery/bin/base.py", line 281, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/usr/lib/python3.4/site-packages/celery/bin/celery.py", line 480, in handle_argv
    return self.execute(command, argv)
  File "/usr/lib/python3.4/site-packages/celery/bin/celery.py", line 412, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/usr/lib/python3.4/site-packages/celery/bin/worker.py", line 221, in run_from_argv
    return self(*args, **options)
  File "/usr/lib/python3.4/site-packages/celery/bin/base.py", line 244, in __call__
    ret = self.run(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/bin/worker.py", line 256, in run
    worker.start()
  File "/usr/lib/python3.4/site-packages/celery/worker/worker.py", line 203, in start
    self.blueprint.start(self)
  File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 370, in start
    return self.obj.start()
  File "/usr/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 318, in start
    blueprint.start(self)
  File "/usr/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "/usr/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 594, in start
    c.loop(*c.loop_args())
  File "/usr/lib/python3.4/site-packages/celery/worker/loops.py", line 88, in asynloop
    next(loop)
  File "/usr/lib/python3.4/site-packages/kombu/async/hub.py", line 284, in create_loop
    poll_timeout = fire_timers(propagate=propagate) if scheduled else 1
  File "/usr/lib/python3.4/site-packages/kombu/async/hub.py", line 137, in fire_timers
    entry()
  File "/usr/lib/python3.4/site-packages/kombu/async/timer.py", line 68, in __call__
    return self.fun(*self.args, **self.kwargs)
  File "/usr/lib/python3.4/site-packages/kombu/async/timer.py", line 127, in _reschedules
    return fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/kombu/async/http/curl.py", line 112, in _timeout_check
    self._process_pending_requests()
  File "/usr/lib/python3.4/site-packages/kombu/async/http/curl.py", line 134, in _process_pending_requests
    self._process(curl)
  File "/usr/lib/python3.4/site-packages/kombu/async/http/curl.py", line 182, in _process
    buffer=buffer, effective_url=effective_url, error=error,
  File "/usr/lib/python3.4/site-packages/vine/promises.py", line 146, in __call__
    svpending(*ca, **ck)
  File "/usr/lib/python3.4/site-packages/vine/promises.py", line 136, in __call__
    retval = fun(*final_args, **final_kwargs)
  File "/usr/lib/python3.4/site-packages/vine/funtools.py", line 100, in _transback
    return callback(ret)
  File "/usr/lib/python3.4/site-packages/vine/promises.py", line 136, in __call__
    retval = fun(*final_args, **final_kwargs)
  File "/usr/lib/python3.4/site-packages/vine/funtools.py", line 100, in _transback
    return callback(ret)
  File "/usr/lib/python3.4/site-packages/vine/promises.py", line 136, in __call__
    retval = fun(*final_args, **final_kwargs)
  File "/usr/lib/python3.4/site-packages/vine/funtools.py", line 96, in _transback
    ret = filter_(*args + (ret,), **kwargs)
  File "/usr/lib/python3.4/site-packages/kombu/transport/SQS.py", line 324, in _on_messages_ready
    callbacks[qname](message)
  File "/usr/lib/python3.4/site-packages/kombu/transport/virtual/base.py", line 633, in _callback
    return callback(message)
  File "/usr/lib/python3.4/site-packages/kombu/messaging.py", line 623, in _receive_callback
    return on_m(message) if on_m else self.receive(decoded, message)
  File "/usr/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 568, in on_task_received
    callbacks,
  File "/usr/lib/python3.4/site-packages/celery/worker/strategy.py", line 145, in task_message_handler
    handle(req)
  File "/usr/lib/python3.4/site-packages/celery/worker/worker.py", line 226, in _process_task
    req.execute_using_pool(self.pool)
  File "/usr/lib/python3.4/site-packages/celery/worker/request.py", line 531, in execute_using_pool
    correlation_id=task_id,
  File "/usr/lib/python3.4/site-packages/celery/concurrency/base.py", line 155, in apply_async
    **options)
  File "/usr/lib/python3.4/site-packages/celery/concurrency/base.py", line 31, in apply_target
    ret = target(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 530, in _fast_trace_task
    uuid, args, kwargs, request,
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 124, in run
    StoragePool.set(node_args, flow_name, task_name, self.request.id, result)
  File "/usr/lib/python3.4/site-packages/selinon/storagePool.py", line 146, in set
    'record_id': record_id
  File "/usr/lib/python3.4/site-packages/selinon/trace.py", line 256, in log
    cls._trace_func(event, to_report)
  File "/usr/lib/python3.4/site-packages/cucoslib/dispatcher/trace.py", line 31, in trace_func
    _logger.info(json.dumps(report))

[data_normalizer.py] TypeError: 'NoneType' object is not subscriptable

"_release": "pypi:pydocstyle:2.0.0"

File "/usr/lib/python3.4/site-packages/f8a_worker/workers/mercator.py", line 225, in run_mercator
  result_data['details'] = [self._data_normalizer.handle_data(data, keep_path=keep_path) for data in items]
File "/usr/lib/python3.4/site-packages/f8a_worker/data_normalizer.py", line 468, in handle_data
  result = switch.get(data['ecosystem'].lower(), _passthrough)(data.get('result', {}))
TypeError: 'NoneType' object is not subscriptable

CodeMetricsTask for maven:com.zaxxer:HikariCP:2.4.1 fails with ParseException

{"task_name": "code_metrics", "node_args": {"recursive_limit": 0, "version": "2.4.1", "force": true, "ecosystem": "maven", "force_graph_sync": false, "document_id": 1116663, "_release": "maven:com.zaxxer:HikariCP:2.4.1", "_audit": {"version": "v1", "started_at": "2017-07-18T07:12:54.363986", "ended_at": "2017-07-18T07:12:54.526150"}, "name": "com.zaxxer:HikariCP"}, "flow_name": "bayesianAnalysisFlow", "event": "TASK_START", "task_id": "93ee3a1c-89f2-444a-a85c-31a7b8544cdd", "queue": "prod_ingestion_CodeMetricsTask_v0", "parent": {}, "dispatcher_id": "c3426e26-d433-4916-b16e-8587dca5ec14"}
2017-07-18 08:29:43,913 [WARNING] CodeMetricsTask: Executing command failed, return value: 1, stderr: 'ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/HikariPool.java
Last useful checkpoint: "com.zaxxer.hikari.pool.HikariPoolcom.zaxxer.hikari.pool.HikariPool.HikariPool(HikariConfig)"
Encountered " ">" "> "" at line 116, column 46.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/PoolBagEntry.java
Last useful checkpoint: "com.zaxxer.hikari.pool.PoolBagEntrycom.zaxxer.hikari.pool.PoolBagEntry.PoolBagEntry(Connection,HikariPool)"
Encountered " ">" "> "" at line 79, column 42.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/PoolElf.java
Last useful checkpoint: "com.zaxxer.hikari.pool.PoolElf.isConnectionAlive(Connection,Throwable)"
Encountered " "(" "( "" at line 219, column 14.
Was expecting:
    "{" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/proxy/ConnectionProxy.java
Last useful checkpoint: "com.zaxxer.hikari.proxy.ConnectionProxy"
Encountered " ">" "> "" at line 64, column 32.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/proxy/JavassistProxyFactory.java
Last useful checkpoint: "com.zaxxer.hikari.proxy.JavassistProxyFactory.generateProxyClass(T,String,String)"
Encountered " ">" "> "" at line 121, column 43.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/ConcurrentBag.java
Last useful checkpoint: "com.zaxxer.hikari.util.ConcurrentBagcom.zaxxer.hikari.util.ConcurrentBag.ConcurrentBag(IBagStateListener)"
Encountered " ">" "> "" at line 94, column 50.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/PropertyElf.java
Last useful checkpoint: "com.zaxxer.hikari.util.PropertyElf.getPropertyNames(Class)"
Encountered " ">" "> "" at line 77, column 41.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/Sequence.java
Last useful checkpoint: "com.zaxxer.hikari.util.Sequence.DropwizardSequence.increment()"
Encountered " "|" "| "" at line 106, column 40.
Was expecting one of:
    "assert" ...
    "enum" ...
    <IDENTIFIER> ...
    "..." ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/UtilityElf.java
Last useful checkpoint: "com.zaxxer.hikari.util.UtilityElf.createThreadPoolExecutor(int,String,ThreadFactory,RejectedExecutionHandler)"
Encountered " ">" "> "" at line 98, column 69.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/HikariConfig.java
Last useful checkpoint: "com.zaxxer.hikari.HikariConfig.logConfiguration()"
Encountered " ">" "> "" at line 827, column 53.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    


' 
2017-07-18 08:29:43,914 [WARNING] CodeMetricsTask: JavaNCSS tool reported some errors: ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/HikariPool.java
Last useful checkpoint: "com.zaxxer.hikari.pool.HikariPoolcom.zaxxer.hikari.pool.HikariPool.HikariPool(HikariConfig)"
Encountered " ">" "> "" at line 116, column 46.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/PoolBagEntry.java
Last useful checkpoint: "com.zaxxer.hikari.pool.PoolBagEntrycom.zaxxer.hikari.pool.PoolBagEntry.PoolBagEntry(Connection,HikariPool)"
Encountered " ">" "> "" at line 79, column 42.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/pool/PoolElf.java
Last useful checkpoint: "com.zaxxer.hikari.pool.PoolElf.isConnectionAlive(Connection,Throwable)"
Encountered " "(" "( "" at line 219, column 14.
Was expecting:
    "{" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/proxy/ConnectionProxy.java
Last useful checkpoint: "com.zaxxer.hikari.proxy.ConnectionProxy"
Encountered " ">" "> "" at line 64, column 32.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/proxy/JavassistProxyFactory.java
Last useful checkpoint: "com.zaxxer.hikari.proxy.JavassistProxyFactory.generateProxyClass(T,String,String)"
Encountered " ">" "> "" at line 121, column 43.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/ConcurrentBag.java
Last useful checkpoint: "com.zaxxer.hikari.util.ConcurrentBagcom.zaxxer.hikari.util.ConcurrentBag.ConcurrentBag(IBagStateListener)"
Encountered " ">" "> "" at line 94, column 50.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/PropertyElf.java
Last useful checkpoint: "com.zaxxer.hikari.util.PropertyElf.getPropertyNames(Class)"
Encountered " ">" "> "" at line 77, column 41.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/Sequence.java
Last useful checkpoint: "com.zaxxer.hikari.util.Sequence.DropwizardSequence.increment()"
Encountered " "|" "| "" at line 106, column 40.
Was expecting one of:
    "assert" ...
    "enum" ...
    <IDENTIFIER> ...
    "..." ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/util/UtilityElf.java
Last useful checkpoint: "com.zaxxer.hikari.util.UtilityElf.createThreadPoolExecutor(int,String,ThreadFactory,RejectedExecutionHandler)"
Encountered " ">" "> "" at line 98, column 69.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...
    
ParseException in /var/lib/f8a_worker/worker_data/maven/com.zaxxer:HikariCP/2.4.1/extracted_jar/com/zaxxer/hikari/HikariConfig.java
Last useful checkpoint: "com.zaxxer.hikari.HikariConfig.logConfiguration()"
Encountered " ">" "> "" at line 827, column 53.
Was expecting one of:
    "boolean" ...
    "byte" ...
    "char" ...
    "double" ...
    "float" ...
    "int" ...
    "long" ...
    "short" ...
    <IDENTIFIER> ...
    "?" ...
    "boolean" ...
    "char" ...
    "byte" ...
    "short" ...
    "int" ...
    "long" ...
    "float" ...
    "double" ...
    <IDENTIFIER> ...
    "?" ...
    "?" ...
    "?" ...
    "?" ...

[FutureFeature] Use GraphQL in github worker

Github's API v4 uses GraphQL.

Using it would avoid constantly reaching rate limit, because you can get all you need (and only what you need) with one GraphQL query instead of about 10 REST API v3 requests.

Our GithubTask currently gets the following info from github:

  • forks_count
  • last_year_commits
  • open_issues_count
  • stargazers_count
  • subscribers_count
  • updated_issues
  • updated_pull_requests
  • contributors_count
  • topics

I'm able to get forks_count, open_issues_count, stargazers_count, subscribers_count (aka. watchers), and topics from a repository with the following query (can be tested in GraphQL API Explorer):

{
  repository(owner: "moby", name: "moby") {
    issues(states: OPEN) {
      totalCount
    }
    forks {
      totalCount
    }
    stargazers {
      totalCount
    }
    watchers {
      totalCount
    }
    repositoryTopics(first: 100) {
      nodes {
        topic {
          name
        }
      }
    }
  }
}

The switch to v4 however does not look like a viable solution so far, because I already hit some issues, like:

So maybe later.

sqlalchemy.orm.exc.NoResultFound: No row was found for one()

Trying to scan nuget:Json.NET:10.0.3:


2017-08-02 20:49:56,485 [INFO] celery.worker.strategy: Received task: selinon.Dispatcher[438ac9ef-50a5-418b-9f1a-77db1e1ed5d5]
--
  | {"event": "DISPATCHER_WAKEUP", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "queue": "STAGE_ingestion_bayesianFlow_v0", "selective": false, "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "flow_name": "bayesianFlow", "state": null, "retry": null}
  | {"event": "FLOW_START", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "selective": false, "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "flow_name": "bayesianFlow", "queue": "STAGE_ingestion_bayesianFlow_v0"}
  | {"foreach_str": null, "selective_edge": false, "parent": {}, "countdown": null, "event": "TASK_SCHEDULE", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "task_id": "e96efc79-db25-44ea-b5ae-36ea8045e938", "selective": false, "task_name": "InitAnalysisFlow", "flow_name": "bayesianFlow", "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "queue": "STAGE_ingestion_InitAnalysisFlow_v0", "condition_str": "True"}
  | {"event": "DISPATCHER_RETRY", "retry": 10, "queue": "STAGE_ingestion_bayesianFlow_v0", "selective": false, "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "state_dict": {"active_nodes": [{"name": "InitAnalysisFlow", "id": "e96efc79-db25-44ea-b5ae-36ea8045e938"}], "finished_nodes": {}, "waiting_edges": [1, 2, 3], "failed_nodes": {}}, "flow_name": "bayesianFlow", "parent": null, "state": {"active_nodes": [{"name": "InitAnalysisFlow", "id": "e96efc79-db25-44ea-b5ae-36ea8045e938"}], "finished_nodes": {}, "waiting_edges": [1, 2, 3], "failed_nodes": {}}, "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}}
  | 2017-08-02 20:49:56,845 [INFO] celery.app.trace: Task selinon.Dispatcher[438ac9ef-50a5-418b-9f1a-77db1e1ed5d5] retry: Retry in 10s
  | 2017-08-02 20:49:56,905 [INFO] celery.worker.strategy: Received task: selinon.SelinonTaskEnvelope[e96efc79-db25-44ea-b5ae-36ea8045e938]
  | {"event": "TASK_START", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "task_id": "e96efc79-db25-44ea-b5ae-36ea8045e938", "task_name": "InitAnalysisFlow", "flow_name": "bayesianFlow", "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "queue": "STAGE_ingestion_InitAnalysisFlow_v0", "parent": {}}
  | {"storage_name": "BayesianPostgres", "event": "STORAGE_CONNECT"}
  | {"what": "Traceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_analysis_flow.py\", line 22, in execute\n    e = Ecosystem.by_name(db, arguments['ecosystem'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/models.py\", line 92, in by_name\n    return cls._by_attrs(session, name=name)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/models.py\", line 45, in _by_attrs\n    return session.query(cls).filter_by(**attrs).one()\n  File \"/usr/lib/python3.4/site-packages/sqlalchemy/orm/query.py\", line 2820, in one\n    raise orm_exc.NoResultFound(\"No row was found for one()\")\nsqlalchemy.orm.exc.NoResultFound: No row was found for one()\n", "parent": {}, "event": "TASK_FAILURE", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "task_id": "e96efc79-db25-44ea-b5ae-36ea8045e938", "dispatcher_id": "438ac9ef-50a5-418b-9f1a-77db1e1ed5d5", "flow_name": "bayesianFlow", "task_name": "InitAnalysisFlow", "queue": "STAGE_ingestion_InitAnalysisFlow_v0", "retried_count": 0}
  | {"storage_task_name": "InitAnalysisFlow", "error_value": "No row was found for one()", "record_id": null, "event": "STORAGE_STORE_ERROR", "storage_name": "BayesianPostgres", "node_args": {"version": "10.0.3", "force": true, "name": "Json.NET", "recursive_limit": 0, "ecosystem": "nuget", "force_graph_sync": false}, "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/init_analysis_flow.py\", line 22, in execute\n    e = Ecosystem.by_name(db, arguments['ecosystem'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/models.py\", line 92, in by_name\n    return cls._by_attrs(session, name=name)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/models.py\", line 45, in _by_attrs\n    return session.query(cls).filter_by(**attrs).one()\n  File \"/usr/lib/python3.4/site-packages/sqlalchemy/orm/query.py\", line 2820, in one\n    raise orm_exc.NoResultFound(\"No row was found for one()\")\n", "task_id": "e96efc79-db25-44ea-b5ae-36ea8045e938", "task_name": "InitAnalysisFlow", "flow_name": "bayesianFlow", "error_type": "<class 'sqlalchemy.orm.exc.NoResultFound'>"}
  | 2017-08-02 20:49:57,102 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[e96efc79-db25-44ea-b5ae-36ea8045e938] raised unexpected: NoResultFound('No row was found for one()',)
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
  | R = retval = fun(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
  | return self.run(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 170, in run
  | raise self.retry(max_retries=0, exc=exc)
  | File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
  | raise_with_context(exc)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 115, in run
  | result = task.run(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/base.py", line 38, in run
  | result = self.execute(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/init_analysis_flow.py", line 22, in execute
  | e = Ecosystem.by_name(db, arguments['ecosystem'])
  | File "/usr/lib/python3.4/site-packages/f8a_worker/models.py", line 92, in by_name
  | return cls._by_attrs(session, name=name)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/models.py", line 45, in _by_attrs
  | return session.query(cls).filter_by(**attrs).one()
  | File "/usr/lib/python3.4/site-packages/sqlalchemy/orm/query.py", line 2820, in one
  | raise orm_exc.NoResultFound("No row was found for one()")
  | sqlalchemy.orm.exc.NoResultFound: No row was found for one()


Worker-API runtime error while invoking /stack-analyses-v2 endpoint

Seeing the following error on worker-api pod while invoking a stack-analyses-v2 API endpoint


{"flow_name": "stackApiGraphV2Flow", "node_args": {"external_request_id": "d5624335243a45aab476cee657305f8e", "manifest": [{"content": "click==6.7\nhttpie==0.9.9\nparsimonious==0.7.0\npygments==2.2.0\nsix==1.10.0\nwheel==0.30.0a0\nsetuptools==36.0.1\n", "filename": "requirements.txt", "ecosystem": "pypi"}], "ecosystem": "pypi"}, "retried_count": 0, "what": "Traceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/graphaggregator.py\", line 55, in execute\n    out[\"details\"][0]['manifest_file_path'] = manifest['filepath']\nKeyError: 'filepath'\n", "event": "TASK_FAILURE", "queue": "STAGE_api_GraphAggregatorTask_v0", "dispatcher_id": "b4a6aac6-1723-4170-9dc7-74e8f88954b9", "task_name": "GraphAggregatorTask", "parent": {}, "task_id": "d1e3aa2b-dc22-42e6-b208-c9c59ff4a594"}
--


ValueError: Unknown archive for /.../alfanous-0.7.00-py2.7.egg

{"flow_name": "bayesianFlow", "dispatcher_id": "e95fd3d4-f2fc-45ab-8124-44c4295bb2da", "parent": {}, "node_args": {"name": "alfanous", "force": true, "version": "0.7.00", "ecosystem": "pypi"}, "task_id": "221cda76-6f9a-4098-beb2-20594515a5ef", "queue": "prod_ingestion_InitAnalysisFlow_v0", "task_name": "InitAnalysisFlow", "event": "TASK_START"}
...
 File "/usr/lib/python3.4/site-packages/f8a_worker/process.py", line 275, in fetch_artifact
  Archive.extract(artifact_path, target_dir)
 File "/usr/lib/python3.4/site-packages/f8a_worker/process.py", line 162, in extract
  raise ValueError('Unknown archive for {0}'.format(target))
 ValueError: Unknown archive for /var/lib/f8a_worker/worker_data/tmpnpvijy1o/alfanous-0.7.00-py2.7.egg

need to component_summary in extract_component_details() method

Hi,

As integration_test related to sentiment analysis has included a new variable "magnitude" in "sentiment" data. The same is required to include in "component_summary" of "extract_component_details()" in "stackaggregator_v2.py". and default values are also incorrect.

Otherwise, it may results in failure of integration test for sentiment.

Thanks,
Saket

1024Mi memory limit is not enough for scancode

Current limit for worker is 1024Mi

docker stats on locally running worker container reveals that during license scan the memory usage spikes to something around 1024Mi, which is probably the reason why on Openshift many license scans fail with no obvious reason.

graph_importer worker can slow down ingestion considerably

It can take forever (almost 1 minute in this particular case) for graph_importer worker to finish. I guess it's waiting for response from data-importer, which in turns is waiting for gremlin.

If my assumption is correct, then the worker is basically blocked and it does nothing during this time. What's even worse, there can be multiple workers processing tasks from graph_importer queue, so in theory significant portion of the system can be doing nothing, just waiting for graph ingestion.

One solution could be to implement changes described in the trello card and then deploy and scale this particular worker separately.

[2017-06-05 07:21:09,246: DEBUG/MainProcess] Task accepted: selinon.SelinonTaskEnvelope[4b9e0b07-e5a7-4a51-bc73-cb2c1cb28a2b] pid:1
[2017-06-05 07:21:09,276: INFO/MainProcess] SELINON bayesian-worker-ingestion-5-g9sdy - TASK_START : {"details": {"dispatcher_id": "62e7ad4e-2693-44dd-af33-edaffbac4d12", "flow_name": "bayesianFlow", "node_args": {"_audit": {"ended_at": "2017-06-04T08:38:54.956815", "started_at": "2017-06-04T08:38:53.805331", "version": "v1"}, "_release": "maven:com.craterdog.java-security-framework:java-certificate-generation:3.15", "document_id": 329103, "ecosystem": "maven", "force": false, "force_graph_sync": false, "name": "com.craterdog.java-security-framework:java-certificate-generation", "version": "3.15"}, "parent": {"ResultCollector": "31e966ee-58a5-4ead-9ec2-38afecd768ce"}, "queue": "prod_ingestion_GraphImporterTask_v0", "task_id": "4b9e0b07-e5a7-4a51-bc73-cb2c1cb28a2b", "task_name": "GraphImporterTask"}, "event": "TASK_START", "time": "2017-06-05 07:21:09.276095"}
[2017-06-05 07:21:09,276: INFO/MainProcess] selinon.SelinonTaskEnvelope[4b9e0b07-e5a7-4a51-bc73-cb2c1cb28a2b]: Invoke graph importer at url: http://172.30.245.248:9192/api/v1/ingest_to_graph
[2017-06-05 07:21:09,278: DEBUG/MainProcess] Starting new HTTP connection (1): 172.30.245.248
[2017-06-05 07:22:02,699: DEBUG/MainProcess] http://172.30.245.248:9192 "POST /api/v1/ingest_to_graph HTTP/1.1" 200 248
[2017-06-05 07:22:02,701: INFO/MainProcess] selinon.SelinonTaskEnvelope[4b9e0b07-e5a7-4a51-bc73-cb2c1cb28a2b]: Graph import succeeded with response: {
  "count_imported_EPVs": 1, 
  "epv": [
    {
      "ecosystem": "maven", 
      "name": "com.craterdog.java-security-framework:java-certificate-generation", 
      "version": "3.15"
    }
  ], 
  "message": "The import finished successfully!"
}

[Python] false positives in security scans

It has already been reported to DependencyCheck upstream that its experimental analyzer for Python packages has quite a lot of false positives. It is getting CVEs not only for python-<package>-<version>, but also for python-<version> (Python interpreter itself).

As mentioned in that report I think it might be caused by the wrong cpe:/a:python:python:<version> CPE identifier used,

We should either create a suppression XML or check the DependencyCheck code if there's a possibility how to fix this ourselves - maybe all we need is some ugly but simple hack that would avoid using of these CPEs.

(Copied from https://github.com/baytemp/worker/issues/65)

Unit test failure: projectatomic/atomic-reactor-https://github.com/projectatomic/atomic-reactor

tests/workers/test_githuber.py::TestGithuber::test_execute[projectatomic/atomic-reactor-https://github.com/projectatomic/atomic-reactor] FAILED

=================================== FAILURES ===================================
 TestGithuber.test_execute[projectatomic/atomic-reactor-https://github.com/projectatomic/atomic-reactor] 

self = <f8a_worker.conf.F8aConfiguration object at 0x7fd9f83fb550>
item = 'github_token'

    def __getattr__(self, item):
        """
            by default, do what getattr this; in case it fails, look for the configuration
            value in self.entries
            """
        try:
            # original behavior
>           return self.__dict__[item]
E           KeyError: 'github_token'

f8a_worker/conf.py:119: KeyError

During handling of the above exception, another exception occurred:

self = <tests.workers.test_githuber.TestGithuber object at 0x7fd9ed5f2240>
repo_name = 'projectatomic/atomic-reactor'
repo_url = 'https://github.com/projectatomic/atomic-reactor'

    @pytest.mark.parametrize(('repo_name', 'repo_url'), [
        ('projectatomic/atomic-reactor', 'https://github.com/projectatomic/atomic-reactor'),
    ])
    def test_execute(self, repo_name, repo_url):
        task = GithubTask.create_test_instance(repo_name, repo_url)
>       results = task.execute(arguments={})

tests/workers/test_githuber.py:18: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
f8a_worker/workers/githuber.py:102: in execute
    token = self.configuration.github_token
f8a_worker/conf.py:127: in __getattr__
    return self.get(c.path, graceful=c.graceful)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <f8a_worker.conf.F8aConfiguration object at 0x7fd9f83fb550>
path = ['github', 'token'], graceful = True

    def get(self, path, graceful=True):
        """
            get value from merged configuration
    
            :param path: list of str, path within configuration
            :param graceful: bool, fail if the value doesn't exist?
            :return: value it found or None
            """
        node = self.data
        for p in path:
            try:
>               node = node[p]
E               TypeError: 'NoneType' object is not subscriptable

f8a_worker/conf.py:151: TypeError

Split error in GitReadmeCollector

{"task_name": "GitReadmeCollectorTask", "flow_name": "bayesianPackageAnalysisFlow", "event": "TASK_FAILURE", "task_id": "75d57414-9fb0-43c4-ba1f-48359c232342", "retried_count": 0, "queue": "prod_ingestion_GitReadmeCollector_v0", "parent": {}, "dispatcher_id": "f590a7a6-99d9-4abe-90cb-3ba43b9949e0", "what": "Traceback (most recent call last):\n  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py\", line 186, in run\n    readme = self._get_github_readme(arguments['url'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py\", line 166, in _get_github_readme\n    project, repo = repo_tuple.split('/')\nAttributeError: 'NoneType' object has no attribute 'split'\n", "node_args": {"recursive_limit": 0, "document_id": 206382, "ecosystem": "maven", "url": "http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-data-jpa", "force_graph_sync": false, "force": true, "_release": "maven:org.springframework.boot:spring-boot-starter-data-jpa:None", "_audit": {"version": "v1", "started_at": "2017-07-18T08:27:11.238473", "ended_at": "2017-07-18T08:27:11.325836"}, "name": "org.springframework.boot:spring-boot-starter-data-jpa"}}
--
  | {"task_name": "GitReadmeCollectorTask", "error_type": "<class 'AttributeError'>", "node_args": {"recursive_limit": 0, "document_id": 206382, "ecosystem": "maven", "url": "http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-data-jpa", "force_graph_sync": false, "force": true, "_release": "maven:org.springframework.boot:spring-boot-starter-data-jpa:None", "_audit": {"version": "v1", "started_at": "2017-07-18T08:27:11.238473", "ended_at": "2017-07-18T08:27:11.325836"}, "name": "org.springframework.boot:spring-boot-starter-data-jpa"}, "flow_name": "bayesianPackageAnalysisFlow", "event": "STORAGE_OMIT_STORE_ERROR", "task_id": "75d57414-9fb0-43c4-ba1f-48359c232342", "error_value": "'NoneType' object has no attribute 'split'", "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py\", line 186, in run\n    readme = self._get_github_readme(arguments['url'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py\", line 166, in _get_github_readme\n    project, repo = repo_tuple.split('/')\n"}
  | 2017-07-18 08:28:44,546 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[75d57414-9fb0-43c4-ba1f-48359c232342] raised unexpected: AttributeError("'NoneType' object has no attribute 'split'",)
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
  | R = retval = fun(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
  | return self.run(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 170, in run
  | raise self.retry(max_retries=0, exc=exc)
  | File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
  | raise_with_context(exc)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 115, in run
  | result = task.run(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py", line 186, in run
  | readme = self._get_github_readme(arguments['url'])
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/githuber.py", line 166, in _get_github_readme
  | project, repo = repo_tuple.split('/')
  | AttributeError: 'NoneType' object has no attribute 'split'

[githuber] worker depends on GitHub's Search API which has limit 30 requests/minute for authenticated users

In _issues_or_prs_count(self, gh, query) we call gh.search_issues(query=query) which uses GitHub's Search API. This API has a custom rate limit 30 requests per minute.

No wonder we are getting 403 so often.

    {
      "rate": {
        "limit": 5000,
        "remaining": 4992,
        "reset": 1499694994
      },
      "resources": {
        "core": {
          "limit": 5000,
          "remaining": 4992,
          "reset": 1499694994
        },
        "graphql": {
          "limit": 5000,
          "remaining": 5000,
          "reset": 1499697453
        },
        "search": {
          "limit": 30,
          "remaining": 22,
          "reset": 1499693874
        }
      }

[ERROR] f8a_worker.process: unable to download: http://repo1.maven.org/maven2/<artifact>.jar

examples:

psycopg2.IntegrityError: insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"

2017-06-07 13:28:26,033 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[4f4bc5dc-1942-4354-9cd8-835d6d4f54d9] raised unexpected: IntegrityError('(psycopg2.IntegrityError) insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"\nDETAIL:  Key (package_analysis_id)=(432710) is not present in table "package_analyses".\n',)
Traceback (most recent call last):
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/default.py", line 462, in do_execute
    cursor.execute(statement, parameters)
psycopg2.IntegrityError: insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"
DETAIL:  Key (package_analysis_id)=(432710) is not present in table "package_analyses".


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 124, in run
    StoragePool.set(node_args, flow_name, task_name, self.request.id, result)
  File "/usr/lib/python3.4/site-packages/selinon/storagePool.py", line 137, in set
    record_id = storaption:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 124, in run
    StoragePool.set(node_args, flow_name, task_name, self.request.id, result)
  File "/usr/lib/python3.4/site-packages/selinon/storagePool.py", line 137, in set
    record_id = storage.store(node_args, flow_name, storage_task_name, task_id, result)
  File "/usr/lib/python3.4/site-packages/cucoslib/storages/postgres_base.py", line 102, in store
    PostgresBase.session.commit()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 874, in commit
    self.transaction.commit()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 461, in commit
    self._prepare_impl()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 441, in _prepare_impl
    self.session.flush()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2137, in flush
    self._flush(objects)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2257, in _flush
    transaction.rollback(_capture_exception=True)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
    raise value
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2221, in _flush
    flush_context.execute()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 389, in execute
    rec.execute(self)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 548, in execute
    uow
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/persistence.py", line 176, in save_obj
    mapper, table, insert)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/persistence.py", line 830, in _emit_insert_statements
    execute(statement, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
    exc_info
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 185, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/default.py", line 462, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"
DETAIL:  Key (package_analysis_id)=(432710) is not present in table "package_analyses".
 [SQL: 'INSERT INTO package_worker_results (package_analysis_id, worker, worker_id, external_request_id, task_result, error) VALUES (%(package_analysis_id)s, %(worker)s, %(worker_id)s, %(external_request_id)s, %(task_result)s, %(error)s) RETURNING package_worker_results.id'] [parameters: {'external_request_id': None, 'error': False, 'package_analysis_id': 432710, 'worker': 'InitPackageFlow', 'worker_id': '4f4bc5dc-1942-4354-9cd8-835d6d4f54d9', 'task_result': '{"ecosystem": "maven", "_release": "maven:org.xwiki.commons:xwiki-commons-legacy-configuration:None", "force": false, "name": "org.xwiki.commons:xwik ... (203 characters truncated) ... /xwiki-commons/tree/master/xwiki-commons-pom/xwiki-commons-core/xwiki-commons-legacy/xwiki-commons-legacy-configuration/", "force_graph_sync": false}'}]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/default.py", line 462, in do_execute
    cursor.execute(statement, parameters)
psycopg2.IntegrityError: insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"
DETAIL:  Key (package_analysis_id)=(432710) is not present in table "package_analyses".


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
    return self.run(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 162, in run
    and not StoragePool.set_error(node_args, flow_name, task_name, self.request.id, exc_info):
  File "/usr/lib/python3.4/site-packages/selinon/storagePool.py", line 167, in set_error
    record_id = storage.store_error(node_args, flow_name, storage_task_name, task_id, exc_info)
  File "/usr/lib/python3.4/site-packages/cucoslib/storages/postgres_base.py", line 115, in store_error
    PostgresBase.session.commit()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 874, in commit
    self.transaction.commit()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 461, in commit
    self._prepare_impl()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 441, in _prepare_impl
    self.session.flush()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2137, in flush
    self._flush(objects)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2257, in _flush
    transaction.rollback(_capture_exception=True)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
    raise value
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/session.py", line 2221, in _flush
    flush_context.execute()
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 389, in execute
    rec.execute(self)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 548, in execute
    uow
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/persistence.py", line 176, in save_obj
    mapper, table, insert)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/orm/persistence.py", line 830, in _emit_insert_statements
    execute(statement, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
    exc_info
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/util/compat.py", line 185, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib64/python3.4/site-packages/sqlalchemy/engine/default.py", line 462, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) insert or update on table "package_worker_results" violates foreign key constraint "package_worker_results_package_analysis_id_fkey"
DETAIL:  Key (package_analysis_id)=(432710) is not present in table "package_analyses".
[SQL: 'INSERT INTO package_worker_results (package_analysis_id, worker, worker_id, external_request_id, task_result, error) VALUES (%(package_analysis_id)s, %(worker)s, %(worker_id)s, %(external_request_id)s, %(task_result)s, %(error)s) RETURNING package_worker_results.id'] [parameters: {'worker': 'InitPackageFlow', 'error': False, 'package_analysis_id': 432710, 'external_request_id': None, 'worker_id': '4f4bc5dc-1942-4354-9cd8-835d6d4f54d9', 'task_result': 'null'}]

KeyError in recommender task

A Key error in the recommender task caused that to fail on prod -

Following is the stacktrace -


2017-08-03 08:34:25,458 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[d6ce0880-b186-4efd-a783-8358ee2a349d] raised unexpected: KeyError('latest_version',)
--

File "/usr/lib/python3.4/site-packages/f8a_worker/workers/recommender.py", line 620, in execute
--

git_stats fail when cloning repo

{"task_name": "git_stats", "error_value": "[Errno 2] No such file or directory: '/tmp/tmp9_tec_rf'", "flow_name": "bayesianPackageAnalysisFlow", "event": "STORAGE_STORE_ERROR", "task_id": "0c6ed8f6-bf6f-4ef8-8a68-fc357010f51e", "error_traceback": "  File \"/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py\", line 115, in run\n    result = task.run(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/base.py\", line 38, in run\n    result = self.execute(node_args)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 132, in execute\n    master_log = self._get_log(arguments['url'])\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py\", line 29, in _get_log\n    log = git.log()\n  File \"/usr/lib64/python3.4/contextlib.py\", line 77, in __exit__\n    self.gen.throw(type, value, traceback)\n  File \"/usr/lib/python3.4/site-packages/f8a_worker/utils.py\", line 145, in tempdir\n    shutil.rmtree(dirpath)\n  File \"/usr/lib64/python3.4/shutil.py\", line 459, in rmtree\n    onerror(os.lstat, path, sys.exc_info())\n  File \"/usr/lib64/python3.4/shutil.py\", line 457, in rmtree\n    orig_st = os.lstat(path)\n", "storage_name": "PackagePostgres", "error_type": "<class 'FileNotFoundError'>", "node_args": {"recursive_limit": 0, "force": true, "ecosystem": "maven", "url": "http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-web", "force_graph_sync": false, "document_id": 206327, "_release": "maven:org.springframework.boot:spring-boot-starter-web:None", "_audit": {"version": "v1", "started_at": "2017-07-18T08:25:06.696910", "ended_at": "2017-07-18T08:25:06.721314"}, "name": "org.springframework.boot:spring-boot-starter-web"}, "record_id": null, "storage_task_name": "git_stats"}
--
  | 2017-07-18 08:31:43,388 [ERROR] celery.app.trace: Task selinon.SelinonTaskEnvelope[0c6ed8f6-bf6f-4ef8-8a68-fc357010f51e] raised unexpected: FileNotFoundError(2, 'No such file or directory')
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 255, in get_command_output
  | out = check_output(args, universal_newlines=True, **kwargs)
  | File "/usr/lib64/python3.4/subprocess.py", line 617, in check_output
  | raise CalledProcessError(retcode, process.args, output=output)
  | subprocess.CalledProcessError: Command '['git', 'clone', 'http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-web', '/tmp/tmp9_tec_rf']' returned non-zero exit status 128
  |  
  | During handling of the above exception, another exception occurred:
  |  
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 143, in tempdir
  | yield dirpath
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py", line 26, in _get_log
  | git = Git.clone(url, tmp_dir)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/process.py", line 65, in clone
  | TimedCommand.get_command_output(cmd, graceful=False)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 239, in get_command_output
  | return get_command_output(args, graceful, is_json, **kwargs)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 265, in get_command_output
  | raise TaskError("Error during running command %s: %r" % (args, ex.output))
  | f8a_worker.errors.TaskError: Error during running command ['git', 'clone', 'http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-web', '/tmp/tmp9_tec_rf']: "Cloning into '/tmp/tmp9_tec_rf'...\n"
  |  
  | During handling of the above exception, another exception occurred:
  |  
  | Traceback (most recent call last):
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 367, in trace_task
  | R = retval = fun(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 622, in __protected_call__
  | return self.run(*args, **kwargs)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 170, in run
  | raise self.retry(max_retries=0, exc=exc)
  | File "/usr/lib/python3.4/site-packages/celery/app/task.py", line 668, in retry
  | raise_with_context(exc)
  | File "/usr/lib/python3.4/site-packages/selinon/selinonTaskEnvelope.py", line 115, in run
  | result = task.run(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/base.py", line 38, in run
  | result = self.execute(node_args)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py", line 132, in execute
  | master_log = self._get_log(arguments['url'])
  | File "/usr/lib/python3.4/site-packages/f8a_worker/workers/git_stats.py", line 29, in _get_log
  | log = git.log()
  | File "/usr/lib64/python3.4/contextlib.py", line 77, in __exit__
  | self.gen.throw(type, value, traceback)
  | File "/usr/lib/python3.4/site-packages/f8a_worker/utils.py", line 145, in tempdir
  | shutil.rmtree(dirpath)
  | File "/usr/lib64/python3.4/shutil.py", line 459, in rmtree
  | onerror(os.lstat, path, sys.exc_info())
  | File "/usr/lib64/python3.4/shutil.py", line 457, in rmtree
  | orig_st = os.lstat(path)
  | FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp9_tec_rf'

I saw this error more times.

[idea] Introduce worker base image

It takes forever (30-60 minutes) to build our worker image and this makes it hard for example to quickly push fixes to stage/prod environment when needed.

Therefore I propose to create a base image for our worker image which would contain various command line tools that we currently download on each build over and over again.
Worker image would then inherit the tools from the base image and only add actual worker code + dependencies on top of it.

This should speed up the build process quite significantly. However, I am not sure about cons of this approach. Please share your thoughts :)

Thanks.

psycopg2.InternalError: ALTER TYPE ... ADD cannot run inside a transaction block

I can see following error on staging:

[fabric8-analytics-worker-master] Running shell script
+ oc logs -f dc/bayesian-worker-api
--> pre: Running hook pod ...
+ RESULT=1
+ ((  1 != 0  ))
+ echo 'Trying to create database...'
Trying to create database...
+ psql -h bayesian-pgbouncer -p 5432 -U coreapi -d postgres -tc 'SELECT 1 FROM pg_database WHERE datname = '\''coreapi'\'''
+ grep -q 1
+ RESULT=0
+ ((  0 == 0  ))
+ echo 'Database created'
+ ((  0 != 0  ))
+ pushd /alembic
+ export MIGRATE_ONLY=1
+ MIGRATE_ONLY=1
+ alembic upgrade head
Database created
/alembic ~
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade e2762a61d34c -> f8bb0efac483, nuget ecosystem
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
    cursor.execute(statement, parameters)
psycopg2.InternalError: ALTER TYPE ... ADD cannot run inside a transaction block


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/bin/alembic", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python3.4/site-packages/alembic/config.py", line 479, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/usr/lib/python3.4/site-packages/alembic/config.py", line 473, in main
    self.run_cmd(cfg, options)
  File "/usr/lib/python3.4/site-packages/alembic/config.py", line 456, in run_cmd
    **dict((k, getattr(options, k, None)) for k in kwarg)
  File "/usr/lib/python3.4/site-packages/alembic/command.py", line 254, in upgrade
    script.run_env()
  File "/usr/lib/python3.4/site-packages/alembic/script/base.py", line 425, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/usr/lib/python3.4/site-packages/alembic/util/pyfiles.py", line 93, in load_python_file
    module = load_module_py(module_id, path)
  File "/usr/lib/python3.4/site-packages/alembic/util/compat.py", line 64, in load_module_py
    module_id, path).load_module(module_id)
  File "<frozen importlib._bootstrap>", line 539, in _check_name_wrapper
  File "<frozen importlib._bootstrap>", line 1614, in load_module
  File "<frozen importlib._bootstrap>", line 596, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 1220, in load
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "alembic/env.py", line 84, in <module>
    run_migrations_online()
  File "alembic/env.py", line 79, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/usr/lib/python3.4/site-packages/alembic/runtime/environment.py", line 836, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/usr/lib/python3.4/site-packages/alembic/runtime/migration.py", line 330, in run_migrations
    step.migration_fn(**kw)
  File "/alembic/alembic/versions/f8bb0efac483_nuget_ecosystem.py", line 23, in upgrade
    conn.execute("ALTER TYPE ecosystem_backend_enum ADD VALUE 'nuget'")
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 939, in execute
    return self._execute_text(object, multiparams, params)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1097, in _execute_text
    statement, parameters
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
    context)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
    exc_info
  File "/usr/lib/python3.4/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/usr/lib/python3.4/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.InternalError: (psycopg2.InternalError) ALTER TYPE ... ADD cannot run inside a transaction block
 [SQL: "ALTER TYPE ecosystem_backend_enum ADD VALUE 'nuget'"]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.