@@ -0,0 +1,59 @@
1+{ stdenv, lib, python3Packages }:
2+
3+python3Packages.buildPythonApplication rec {
4+ pname = "dyndnsc";
5+ version = "0.5.1";
6+
7+ src = python3Packages.fetchPypi {
8+ inherit pname version;
9+ hash = "sha256-Sy6U0XhIQ9mPmznmWKqoyqE34vaE84fwlivouaF7Dd0=";
10+ };
11+
12+ postPatch = ''
13+ substituteInPlace setup.py --replace "bottle==" "bottle>="
14+ '';
15+
16+ nativeBuildInputs = with python3Packages; [ pytestrunner ];
17+ propagatedBuildInputs = with python3Packages; [
18+ daemonocle
19+ dnspython
20+ netifaces
21+ requests
22+ setuptools
23+ ];
24+ checkInputs = with python3Packages; [ bottle pytestCheckHook ];
25+
26+ disabledTests = [
27+ # dnswanip connects to an external server to discover the
28+ # machine's IP address.
29+ "dnswanip"
30+ ] ++ lib.optionals stdenv.isDarwin [
31+ # The tests that spawn a server using Bottle cannot be run on
32+ # macOS or Windows as the default multiprocessing start method
33+ # on those platforms is 'spawn', which requires the code to be
34+ # run to be picklable, which this code isn't.
35+ # Additionaly, other start methods are unsafe and prone to failure
36+ # on macOS; see https://bugs.python.org/issue33725.
37+ "BottleServer"
38+ ];
39+ # Allow tests that bind or connect to localhost on macOS.
40+ __darwinAllowLocalNetworking = true;
41+
42+ meta = with lib; {
43+ description = "Dynamic DNS update client with support for multiple protocols";
44+ longDescription = ''
45+ Dyndnsc is a command line client for sending updates to Dynamic
46+ DNS (DDNS, DynDNS) services. It supports multiple protocols and
47+ services, and it has native support for IPv6. The configuration
48+ file allows using foreign, but compatible services. Dyndnsc
49+ ships many different IP detection mechanisms, support for
50+ configuring multiple services in one place and it has a daemon
51+ mode for running unattended. It has a plugin system to provide
52+ external notification services.
53+ '';
54+ homepage = "https://github.com/infothrill/python-dyndnsc";
55+ license = licenses.mit;
56+ maintainers = with maintainers; [ AluisioASG ];
57+ platforms = platforms.unix;
58+ };
59+}