From e9ecfccdb31066c911eaaf0dd99074f54d6607ba Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 13 Apr 2023 06:56:07 +0200 Subject: [PATCH 1/2] Fully tested --- happydomain/admin.py | 2 +- happydomain/authuser.py | 9 ++++++--- happydomain/provider.py | 16 ++++++++-------- happydomain/service.py | 13 +++++++++---- happydomain/zone.py | 32 ++++++++++++++++++++------------ 5 files changed, 44 insertions(+), 28 deletions(-) diff --git a/happydomain/admin.py b/happydomain/admin.py index 075cadb..513fd97 100644 --- a/happydomain/admin.py +++ b/happydomain/admin.py @@ -65,7 +65,7 @@ class Admin: return ret - def authuser_udpate(self, Id, au): + def authuser_update(self, Id, au): r = self.session.put( "http+unix://" + self.socket_path + "/api/auth/" + quote_plus(Id), data=json.dumps({ diff --git a/happydomain/authuser.py b/happydomain/authuser.py index c9d72e9..be4c86d 100644 --- a/happydomain/authuser.py +++ b/happydomain/authuser.py @@ -1,3 +1,6 @@ +import json +from urllib.parse import quote + class AuthUser: def __init__(self, _session, Id, Email, EmailVerification, Password, CreatedAt, LastLoggedIn, AllowCommercials): @@ -14,9 +17,9 @@ class AuthUser: def Delete(self): self._session.authuser_delete(self.Id) - def ResetPassword(self, Id, NewPassword): - r = self.session.post( - "http+unix://" + self.socket_path + "/api/auth/" + quote_plus(Id) + "/reset_password", + def ResetPassword(self, NewPassword): + r = self._session.session.post( + "http+unix://" + self._session.socket_path + "/api/auth/" + quote(self.Id) + "/reset_password", data=json.dumps({ "password": NewPassword, }) diff --git a/happydomain/provider.py b/happydomain/provider.py index 3f78381..12174e2 100644 --- a/happydomain/provider.py +++ b/happydomain/provider.py @@ -1,4 +1,5 @@ import json +from urllib.parse import quote from .error import HappyError from .domain import Domain @@ -15,14 +16,13 @@ class Provider: self.args = kwargs def _dumps(self): - d = { + return json.dumps({ "_srctype": self._srctype, "_id": self._id, "_ownerid": self._ownerid, "_comment": self._comment, - } - d.update(self.kwargs) - return json.dumps(d) + "Provider": self.args, + }) def domain_add(self, dn): r = self._session.session.post( @@ -36,11 +36,11 @@ class Provider: if r.status_code != 200: raise HappyError(r.status_code, **r.json()) - return Domain(self, **r.json()) + return Domain(self._session, **r.json()) def delete(self): r = self._session.session.delete( - self.baseurl + "/api/providers/" + quote(self._id), + self._session.baseurl + "/api/providers/" + quote(self._id), ) if r.status_code > 300: @@ -50,8 +50,8 @@ class Provider: def update(self): r = self._session.session.put( - self.baseurl + "/api/providers/" + quote(self._id), - date=self._dumps(), + self._session.baseurl + "/api/providers/" + quote(self._id), + data=self._dumps(), ) if r.status_code > 300: diff --git a/happydomain/service.py b/happydomain/service.py index 8fa655c..fd8e544 100644 --- a/happydomain/service.py +++ b/happydomain/service.py @@ -6,6 +6,8 @@ from .error import HappyError class ServiceMeta: def __init__(self, _session, _svctype, _domain, _ttl, _id=None, _ownerid=None, _comment="", _mycomment="", _aliases=[], _tmp_hint_nb=0): + self._session = _session + self._svctype = _svctype self._domain = _domain self._ttl = _ttl @@ -42,22 +44,25 @@ class HService(ServiceMeta): return json.dumps(self._flat()) def _flat(self): - return { + d = { "_svctype": self._svctype, "_domain": self._domain, "_ttl": self._ttl, - "_id": self._id, - "_ownerid": self._ownerid, "_comment": self._comment, "_mycomment": self._mycomment, "_aliases": self._aliases, "_tmp_hint_nb": self._tmp_hint_nb, "Service": self.service, } + if self._id is not None: + d["_id"] = self._id + if self._ownerid is not None: + d["_ownerid"] = self._ownerid + return d def delete(self): r = self._session.session.delete( - self.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self._zoneid) + "/" + quote(self._domain) + "/services/" + quote(self._id), + self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self._zoneid) + "/" + quote(self._domain) + "/services/" + quote(self._id), ) if r.status_code > 300: diff --git a/happydomain/zone.py b/happydomain/zone.py index 68786a4..bd8757c 100644 --- a/happydomain/zone.py +++ b/happydomain/zone.py @@ -33,23 +33,20 @@ class ZoneMeta: class Zone(ZoneMeta): - def __init__(self, _session, _domainid, services, **kwargs): + def __init__(self, _session, _domainid, **kwargs): + self._domainid = _domainid + super(Zone, self).__init__(_session, **kwargs) - self._domainid = _domainid - self._load(services) - - def _load(self, services, **kwargs): - if "id" in kwargs: - super(Zone, self).__init__(**kwargs) + super(Zone, self)._load(**kwargs) self.services = {} if services is not None: for k in services: self.services[k] = [] for s in services[k]: - self.services[k].append(HService(_session, self._domainid, self.id, **s)) + self.services[k].append(HService(self._session, self._domainid, self.id, **s)) def _svc_dumps(self): services = {} @@ -62,9 +59,7 @@ class Zone(ZoneMeta): return services def _dumps(self): - return json.dumps({ - "id": self.id, - "id_author": self.id_author, + d = json.dumps({ "default_ttl": self.default_ttl, "last_modified": self.last_modified, "commit_message": self.commit_message, @@ -72,6 +67,11 @@ class Zone(ZoneMeta): "published": self.published, "services": self._svc_dumps(), }) + if self.id is not None: + d["id"] = self.id + if self.id_author is not None: + d["id_author"] = self.id_author + return d def add_zone_service(self, subdomain, svctype, svc): r = self._session.session.post( @@ -97,11 +97,19 @@ class Zone(ZoneMeta): return r.json() def apply_changes(self): + rdiff = self._session.session.post( + self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/diff_zones/%40/" + quote(self.id), + ) + + if rdiff.status_code > 300: + raise HappyError(rdiff.status_code, **rdiff.json()) + r = self._session.session.post( self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self.id) + "/apply_changes", + data=rdiff.text ) if r.status_code > 300: raise HappyError(r.status_code, **r.json()) - return r.json() + return ZoneMeta(self._session, **r.json()) From b2bf152af4738bfb28ab4fad502eceff031a126e Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 13 Apr 2023 06:56:39 +0200 Subject: [PATCH 2/2] Prepare 0.0.5 --- pyproject.toml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index eaf9551..5ea4d83 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "happydomain" -version = "0.0.4" +version = "0.0.5" authors = [ { name="happyDomain's team", email="contact+pypi@happydomain.org" }, ] diff --git a/setup.py b/setup.py index eb9e78e..6bc6916 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ try: except ImportError: from distutils.core import setup -version = "0.0.4" +version = "0.0.5" setup( name = "happydomain",