-
Notifications
You must be signed in to change notification settings - Fork 1
/
exceptions.go
84 lines (75 loc) · 2.46 KB
/
exceptions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright 2022 geebytes
// Licensed under the Apache License, Version 2.0 (the 'License');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tegenaria
import (
"errors"
"fmt"
"strconv"
)
var (
ErrSpiderMiddleware error = errors.New("handle spider middleware error")
ErrSpiderCrawls error = errors.New("handle spider crawl error")
ErrDuplicateSpiderName error = errors.New("register a duplicate spider name error")
ErrEmptySpiderName error = errors.New("register a empty spider name error")
ErrSpiderNotExist error = errors.New("not found spider")
ErrNotAllowStatusCode error = errors.New("not allow handle status code")
ErrGetCacheItem error = errors.New("getting item from cache error")
ErrGetHttpProxy error = errors.New("getting http proxy ")
ErrGetHttpsProxy error = errors.New("getting https proxy ")
ErrParseSocksProxy error = errors.New("parse socks proxy ")
ErrResponseRead error = errors.New("read response to buffer error")
ErrResponseParse error = errors.New("parse response error")
)
type RedirectError struct {
RedirectNum int
}
type HandleError struct {
CtxId string
Err error
Request *Request
Response *Response
Item *ItemMeta
}
type ErrorOption func(e *HandleError)
func NewError(ctxId string, err error, opts ...ErrorOption) *HandleError {
h := &HandleError{
CtxId: ctxId,
Err: err,
Request: nil,
Response: nil,
Item: nil,
}
for _, o := range opts {
o(h)
}
return h
}
func ErrorWithRequest(request *Request) ErrorOption {
return func(e *HandleError) {
e.Request = request
}
}
func ErrorWithResponse(response *Response) ErrorOption {
return func(e *HandleError) {
e.Response = response
}
}
func ErrorWithItem(item *ItemMeta) ErrorOption {
return func(e *HandleError) {
e.Item = item
}
}
func (e *HandleError) Error() string {
return fmt.Sprintf("%s with context id %s", e.Err.Error(), e.CtxId)
}
func (e *RedirectError) Error() string {
return "exceeded the maximum number of redirects: " + strconv.Itoa(e.RedirectNum)
}