Skip to content

Commit 91400a0

Browse files
committed
Added Rename and Remove methods to facebox
1 parent b5af4a3 commit 91400a0

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

facebox/facebox_teach.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,78 @@ func (c *Client) TeachURL(imageURL *url.URL, id, name string) error {
9595
return nil
9696
}
9797

98+
// Remove makes facebox to forget a face
99+
func (c *Client) Remove(id string) error {
100+
if id == "" {
101+
return errors.New("id can not be empty")
102+
}
103+
u, err := url.Parse(c.addr + "/facebox/teach")
104+
if err != nil {
105+
return err
106+
}
107+
if !u.IsAbs() {
108+
return errors.New("box address must be absolute")
109+
}
110+
111+
q := u.Query()
112+
u.Path = u.Path + "/" + id
113+
u.RawQuery = q.Encode()
114+
req, err := http.NewRequest("DELETE", u.String(), nil)
115+
if err != nil {
116+
return err
117+
}
118+
req.Header.Set("Accept", "application/json; charset=utf-8")
119+
resp, err := c.HTTPClient.Do(req)
120+
if err != nil {
121+
return err
122+
}
123+
defer resp.Body.Close()
124+
err = c.parseResponse(resp.Body)
125+
if err != nil {
126+
return err
127+
}
128+
return nil
129+
}
130+
131+
// Rename allows to change the name for a given face
132+
func (c *Client) Rename(id, name string) error {
133+
if id == "" {
134+
return errors.New("id can not be empty")
135+
}
136+
if name == "" {
137+
return errors.New("name can not be empty")
138+
}
139+
u, err := url.Parse(c.addr + "/facebox/teach")
140+
if err != nil {
141+
return err
142+
}
143+
if !u.IsAbs() {
144+
return errors.New("box address must be absolute")
145+
}
146+
form := url.Values{}
147+
form.Set("name", name)
148+
149+
q := u.Query()
150+
u.Path = u.Path + "/" + id
151+
u.RawQuery = q.Encode()
152+
req, err := http.NewRequest("PATCH", u.String(), strings.NewReader(form.Encode()))
153+
if err != nil {
154+
return err
155+
}
156+
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
157+
req.Header.Set("Accept", "application/json; charset=utf-8")
158+
resp, err := c.HTTPClient.Do(req)
159+
if err != nil {
160+
return err
161+
}
162+
defer resp.Body.Close()
163+
err = c.parseResponse(resp.Body)
164+
if err != nil {
165+
return err
166+
}
167+
return nil
168+
}
169+
98170
func (c *Client) parseResponse(r io.Reader) error {
99171
var response struct {
100172
Success bool

facebox/facebox_teach_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,40 @@ func TestTeachImageError(t *testing.T) {
108108
is.Equal(err.Error(), "facebox: something went wrong")
109109

110110
}
111+
112+
func TestRemove(t *testing.T) {
113+
is := is.New(t)
114+
115+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
116+
is.Equal(r.URL.Path, "/facebox/teach/john1.jpg")
117+
is.Equal(r.Header.Get("Accept"), "application/json; charset=utf-8")
118+
is.Equal(r.Method, "DELETE")
119+
io.WriteString(w, `{
120+
"success": true
121+
}`)
122+
}))
123+
defer srv.Close()
124+
125+
fb := facebox.New(srv.URL)
126+
err := fb.Remove("john1.jpg")
127+
is.NoErr(err)
128+
}
129+
130+
func TestRename(t *testing.T) {
131+
is := is.New(t)
132+
133+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
134+
is.Equal(r.URL.Path, "/facebox/teach/john1.jpg")
135+
is.Equal(r.Header.Get("Accept"), "application/json; charset=utf-8")
136+
is.Equal(r.Method, "PATCH")
137+
is.Equal(r.FormValue("name"), "Sir John L")
138+
io.WriteString(w, `{
139+
"success": true
140+
}`)
141+
}))
142+
defer srv.Close()
143+
144+
fb := facebox.New(srv.URL)
145+
err := fb.Rename("john1.jpg", "Sir John L")
146+
is.NoErr(err)
147+
}

0 commit comments

Comments
 (0)