Skip to content

Instantly share code, notes, and snippets.

@andrewzah
Last active November 24, 2024 09:46
Show Gist options
  • Save andrewzah/c977111f6da694666c1e2d826c986888 to your computer and use it in GitHub Desktop.
Save andrewzah/c977111f6da694666c1e2d826c986888 to your computer and use it in GitHub Desktop.
pulpcore
{ pkgs ? import <nixpkgs>{}
, fetchFromGitHub ? pkgs.fetchFromGitHub
, fetchPypi ? pkgs.fetchPypi }:
let
importlib-metadata_6_0_1 = pkgs.python311.pkgs.importlib-metadata.overridePythonAttrs (old: rec {
pname = "importlib-metadata";
version = "6.0.1";
src = fetchPypi {
pname = "importlib_metadata";
inherit version;
hash = "sha256-lQEn1X41qAbVIIF9PpLuw/Gf2unwzZnad6QHxaq++6M=";
};
});
pythonEnv = pkgs.python311.override {
packageOverrides = _final: prev: rec {
opentelemetry-api = prev.opentelemetry-api.overridePythonAttrs (old: rec {
version="1.27.0";
src = fetchFromGitHub {
inherit (old.src) owner repo;
rev = "refs/tags/v${version}";
hash = "sha256-5m6VGdt90Aw6ODUWG7A7b0kV8FsDtg+oPkNUKRbzDX4=";
};
dependencies = [prev.deprecated importlib-metadata_6_0_1];
});
opentelemetry-semantic-conventions = prev.opentelemetry-semantic-conventions.overridePythonAttrs (old: {
inherit (opentelemetry-api) version src;
dependencies = [];
propagatedBuildInputs = [
opentelemetry-api
prev.deprecated
];
});
opentelemetry-sdk = prev.opentelemetry-sdk.overridePythonAttrs (old: {
inherit (opentelemetry-api) version src;
dependencies = [];
propagatedBuildInputs = [
opentelemetry-api
opentelemetry-semantic-conventions
prev.typing-extensions
];
});
opentelemetry-proto = prev.opentelemetry-proto.overridePythonAttrs (old: {
inherit (opentelemetry-api) version src;
dependencies = [];
propagatedBuildInputs = [prev.protobuf];
});
opentelemetry-exporter-otlp-proto-common = prev.opentelemetry-exporter-otlp-proto-common.overridePythonAttrs (old: {
version = "1.27.0";
inherit (opentelemetry-api) src;
dependencies = [];
propagatedBuildInputs = [opentelemetry-proto];
doCheck = false;
});
opentelemetry-exporter-otlp-proto-http_1_27_0 = prev.opentelemetry-exporter-otlp-proto-http.overridePythonAttrs (old: {
inherit (opentelemetry-api) version src;
dependencies = [];
propagatedBuildInputs = [
prev.deprecated
prev.requests
prev.googleapis-common-protos
opentelemetry-sdk
opentelemetry-api
opentelemetry-exporter-otlp-proto-common
opentelemetry-proto
];
});
};
};
pulpcore = pythonEnv.pkgs.callPackage ./pulpcore.nix{};
in
pulpcore
{
lib,
buildPythonPackage,
fetchPypi,
fetchFromGitHub,
pythonOlder,
aiofiles,
aiohttp,
asyncio-throttle,
backoff,
click,
cloudevents,
confluent-kafka,
diff-match-patch,
django,
django-filter,
django-prometheus,
django-storages,
djangorestframework,
drf-nested-routers,
drf-spectacular,
googleapis-common-protos,
gunicorn,
jinja2,
jq,
json-stream,
opentelemetry-api,
opentelemetry-exporter-otlp-proto-http,
opentelemetry-sdk,
poetry-core,
protobuf,
psycopg,
pygtrie,
pyopenssl,
pyparsing,
pytest,
python-gnupg,
pyyaml,
redis,
requests,
setuptools,
setuptools-scm,
tablib,
url-normalize,
urlman,
whitenoise,
yarl,
zipp,
}: let
tablib_3_5_0 = tablib.overridePythonAttrs (old: rec {
version = "3.5.0";
src = fetchPypi {
inherit (old) pname;
inherit version;
hash = "sha256-9mYd/EXh1PUfqKYjn5yDSTgIWaW/qnMoBkXwRtbJbjM=";
};
});
diff-match-patch_20241021 = diff-match-patch.overridePythonAttrs (old: rec {
version = "20241021";
src = fetchPypi {
pname = "diff_match_patch";
inherit version;
hash = "sha256-vq5XqZ+kgIRTKTXuKWi4Zh24YYYuyCxvIfSs3W2DUHM=";
};
});
dynaconf = buildPythonPackage rec {
pname = "dynaconf";
version = "3.2.6";
pyproject = true;
nativeBuildInputs = [setuptools];
src = fetchPypi {
inherit pname version;
hash = "sha256-dMwYlzljgLuVdzDrNBzAl27pw4u8tT0zB8UMrtCu37g=";
};
pythonImportsCheck = ["dynaconf"];
meta.license = lib.licenses.mit;
};
drf-access-policy = buildPythonPackage rec {
pname = "drf-access-policy";
version = "1.5.0";
pyproject = true;
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [django djangorestframework pyparsing];
src = fetchFromGitHub {
owner = "rsinger86";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-hg+KOLRd1FZNBAv3WM1LYLwaHzJ5ZVaXN6jN8cTwQeg=";
};
pythonImportsCheck = ["rest_access_policy"];
meta.license = lib.licenses.mit;
};
djangorestframework-queryfields = buildPythonPackage rec {
pname = "djangorestframework-queryfields";
version = "1.1.0";
pyproject = true;
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [django djangorestframework];
src = fetchFromGitHub {
owner = "wimglenn";
repo = pname;
rev = "refs/tags/v${version}";
hash = "sha256-IqubvMncVdnRvw/++OMPMYHQ1r1E6sjiz1sA9ja81EY=";
};
pythonImportsCheck = ["drf_queryfields"];
meta.license = lib.licenses.mit;
};
django-guid = buildPythonPackage rec {
pname = "django_guid";
version = "3.5.0";
pyproject = true;
# fix ERROR Backend 'poetry.masonry.api' is not available.
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail poetry.masonry.api poetry.core.masonry.api \
--replace-fail "poetry>=" "poetry-core>="
'';
nativeBuildInputs = [poetry-core];
propagatedBuildInputs = [django];
src = fetchFromGitHub {
owner = "snok";
repo = "django-guid";
rev = "refs/tags/${version}";
hash = "sha256-ccDWxHOoncdiztDgSNOfKu94fNqJwHPlPzyJElDbW9Y=";
};
build-system = [poetry-core];
pythonImportsCheck = ["django_guid"];
meta.license = lib.licenses.mit;
};
django-import-export_3_3_9 = buildPythonPackage rec {
pname = "django_import_export";
version = "3.3.9";
pyproject = true;
nativeBuildInputs = [setuptools setuptools-scm];
propagatedBuildInputs = [django tablib_3_5_0 diff-match-patch_20241021];
src = fetchFromGitHub {
owner = "django-import-export";
repo = "django-import-export";
rev = "refs/tags/${version}";
hash = "sha256-GObXYqV8RNuG2KgAvooaDLSlQGFttPsIaAs1N8vorOc=";
};
pythonImportsCheck = ["import_export"];
meta.license = lib.licenses.bsd2;
};
django-capture-on-commit-callbacks = buildPythonPackage rec {
pname = "django_capture_on_commit_callbacks";
version = "1.11.0";
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [
django
urlman
];
nativeCheckInputs = [
pytest
];
src = fetchFromGitHub {
owner = "adamchainz";
repo = "django-capture-on-commit-callbacks";
rev = "refs/tags/${version}";
hash = "sha256-KbNYSKRym6att9/WwVJjG5aQNVf+Ng1G7X8NgWQA7hU=";
};
env.DJANGO_SETTINGS_MODULE = "tests.settings";
};
django-lifecycle = buildPythonPackage rec {
pname = "django_lifecycle";
version = "1.2.4";
format = "setuptools";
doCheck = false;
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [
django
django-capture-on-commit-callbacks
];
src = fetchFromGitHub {
owner = "rsinger86";
repo = "django-lifecycle";
rev = "refs/tags/${version}";
hash = "sha256-MYbH4zjVE8uh9Zuu352OdFBtFeEqwJLSe+j0GrdKdVE=";
};
env.DJANGO_SETTINGS_MODULE = "tests.settings";
};
importlib-metadata = buildPythonPackage {
pname = "importlib-metadata";
version = "6.0.1";
pyproject = true;
nativeBuildInputs = [setuptools setuptools-scm];
propagatedBuildInputs = [
zipp
];
src = fetchFromGitHub {
owner = "python";
repo = "importlib_metadata";
rev = "b944c376515b8dc9bd67cb7ca8ef10500ca8d242";
hash = "sha256-/dxvLgtxeAX8jc43xLPEwY4bPjiutTbxmdmYb52MNCA=";
};
pythonImportsCheck = ["importlib.metadata"];
meta.license = lib.licenses.asl20;
meta.priority = 1;
};
pulp-glue = buildPythonPackage rec {
pname = "pulp-glue";
version = "0.29.2";
pyproject = true;
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [requests];
src = fetchPypi {
inherit pname version;
hash = "sha256-T2SAEFyv18Is3wu2jidSdgx1k8AblidBElxyX7uYeqw=";
};
pythonImportsCheck = ["pulp_glue"];
meta.license = lib.licenses.gpl2Plus;
};
uuid6 = buildPythonPackage rec {
pname = "uuid6";
version = "2024.7.10";
pyproject = true;
disabled = pythonOlder "3.8";
# bruh
postPatch = ''
sed -i -e "s#0.0.0.dev0#${version}#" setup.py
'';
src = fetchPypi {
inherit pname version;
hash = "sha256-LSnX9j9ZPKruoODQ3QrYEpycZjsp4ZvfiC6GS+3xj7A=";
};
nativeBuildInputs = [setuptools];
pythonImportsCheck = ["uuid6"];
meta.license = lib.licenses.mit;
};
in {
pulpcore = buildPythonPackage rec {
pname = "pulpcore";
version = "3.68.0";
pyproject = true;
src = fetchFromGitHub {
owner = "pulp";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-DUvrDUQ/fmU/ijSwuyB74kS8MZqg1AZjwwIiSI9yflc=";
};
postPatch = ''
sed -i -e "s#>=6.0.1,<=6.0.1##" requirements.txt
#sed -i -e "s#>=1.27.0,<1.29##" pyproject.toml
#sed -i -e "s#<1.28,>=1.27.0##" pyproject.toml
'';
optional-dependencies = {
sftp = [django-storages] ++ django-storages.optional-dependencies.sftp;
s3 = [django-storages] ++ django-storages.optional-dependencies.boto3;
google = [django-storages] ++ django-storages.optional-dependencies.google;
azure = [django-storages] ++ django-storages.optional-dependencies.azure;
prometheus = [django-prometheus];
kafka = [
cloudevents # 1.11.0
confluent-kafka #>=2.4.0,<2.7.0"
];
};
nativeBuildInputs = [setuptools];
propagatedBuildInputs = [
## nixpkgs' python packages
aiofiles
aiohttp
asyncio-throttle
backoff
click
googleapis-common-protos
gunicorn
jinja2
jq
json-stream
protobuf
psycopg
pygtrie
pyopenssl
pyparsing
python-gnupg
pyyaml
redis
url-normalize
whitenoise
yarl
django
django-filter
djangorestframework
djangorestframework-queryfields
drf-nested-routers
drf-spectacular
] ++ [
## my overrides of nixpkgs
opentelemetry-api
opentelemetry-sdk
opentelemetry-exporter-otlp-proto-http
django-import-export_3_3_9
tablib_3_5_0
] ++ [
## my python packages
django-guid
django-lifecycle
drf-access-policy
dynaconf
pulp-glue
uuid6
## version not being recognized for some reason,
## had to sed it out of requirements.txt
#importlib-metadata_6_0_1
];
pythonImportsCheck = ["pulpcore"];
doCheck = true;
meta = {
homepage = "https://github.com/pulp/pulpcore";
changelog = "https://github.com/pulp/pulpcore/releases";
license = lib.licenses.gpl2Plus;
};
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment