Sourced
Tooling around mass-scale Python source code analysis.
Usage
Currently there are two datasets: pypi-all and pypi-popular although I highly recommend pypi-popular if you intend to keep your sample size low (the chance of getting far more relevant results with it higher compared to pypi-all).
You can check out any number of datasets with different sample sizes:
$ sourced datasets create \
--source pypi-popular \
--sample-size 10 \
playground
By default it will download all then source code under ~/.cache/sourced/0.0.1/<name> but it might be more pleasant to have a separate directory outside of your home:
$ sourced datasets create \
--source pypi-popular \
--sample-size 5000 \
--base-data-dir /mnt/my-giant-disk/sourced-datasets \
top-5000-packages
All these datasets are accessible through the CLI as long as those paths exist:
$ sourced datasets list
playground /path/to/.cache/sourced/0.0.1/playground
top-5000-packages /path/to/my-giant-disk/sourced-datasets/top-5000-packages
Running analyses on source code
As soon as you have a dataset checked out, you can run any analyses on it with the tooling offered in this package. Here is a simple program that parses every file in the dataset to find out what is the most common name:
from __future__ import annotations
import ast
import tokenize
from argparse import ArgumentParser
from collections import Counter
from sourced import Sourced
def most_common_name(file: str) -> dict[str, int]:
usage: dict[str, int] = {}
try:
with tokenize.open(file) as stream:
tree = ast.parse(stream.read())
except BaseException as exc:
return usage
for node in ast.walk(tree):
if isinstance(node, ast.Name):
usage.setdefault(node.id, 0)
usage[node.id] += 1
return usage
def main():
parser = ArgumentParser()
parser.add_argument("dataset")
options = parser.parse_args()
sourced = Sourced()
results = Counter()
for result in sourced.run_on(options.dataset, most_common_name):
results.update(result)
for name, count in results.most_common(n=20):
print(f"{name}: {count}")
if __name__ == "__main__":
main()
$ python examples/python_specific_source.py playground
Found 10 sources
Collected 959 files from 10 unique projects.
self: 24489
os: 1821
str: 1735
request: 1157
response: 1064
value: 1029
pytest: 984
mock: 966
name: 837
r: 770
isinstance: 715
len: 705
cmd: 701
client: 674
params: 672
path: 668
key: 659
pool: 623
int: 599
config: 553
Metadata
Release files for sourced 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sourced-0.1.0.tar.gz | 10.4 kB | Without provenance | Details for sourced-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sourced-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for sourced-0.1.0-py3-none-any.whl |
Total release size: 21.8 kB
Release files / sourced-0.1.0.tar.gz
| Download URL | sourced-0.1.0.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8e8def3e7508c916a3d4da441964802e2a303fd134e365cc4dda251609b99db8
|
|
BLAKE2b-256 checksum How to use checksums |
ed4de48027b4a4768336fde04cd3b55230362f59c9a03c3f3e6a251d923b72f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.0
|
Release files / sourced-0.1.0-py3-none-any.whl
| Download URL | sourced-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c53731bc097d1da6f566ba9a9d164c155912ce1b446d41cc5e8d1563642292d0
|
|
BLAKE2b-256 checksum How to use checksums |
08b14b9b892512e7fdc560ca458ea5c2b90be22338a130e3947a64be6a9affb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.0
|
Security for sourced 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.