| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Web.RedHatBugzilla
Description
This package is designed to provide an easy-to-use, typesafe interface to querying Bugzilla from Haskell.
A modified version of Web.Bugzilla to support the list fields in Red Hat's modified bugzilla API.
A very simple program using this package might look like this:
let session = anonymousSession "https://bugzilla.redhat.com"
user = "me@example.org"
query = AssignedToField .==. user .&&.
FlagRequesteeField .==. user .&&.
(FlagsField `contains` "review" .||. FlagsField `contains` "feedback")
bugs <- searchBugs session query
mapM_ (putStrLn . show . bugSummary) bugsThere's a more in-depth demo program included with the source code to this package.
Synopsis
- apikeySession :: BugzillaServer -> BugzillaApiKey -> BugzillaSession
- anonymousSession :: BugzillaServer -> BugzillaSession
- type BugzillaServer = Text
- data BugzillaSession
- newtype BugzillaApiKey = BugzillaApiKey Text
- searchBugs :: BugzillaSession -> SearchExpression -> IO [Bug]
- searchBugsAll :: BugzillaSession -> SearchExpression -> IO [Bug]
- searchBugs' :: BugzillaSession -> SearchExpression -> IO [BugId]
- searchBugsWithLimit :: BugzillaSession -> Int -> Int -> SearchExpression -> IO [Bug]
- searchBugsAllWithLimit :: BugzillaSession -> Int -> Int -> SearchExpression -> IO [Bug]
- searchBugsWithLimit' :: BugzillaSession -> Int -> Int -> SearchExpression -> IO [BugId]
- getBug :: BugzillaSession -> BugId -> IO (Maybe Bug)
- getBugAll :: BugzillaSession -> BugId -> IO (Maybe Bug)
- getAttachment :: BugzillaSession -> AttachmentId -> IO (Maybe Attachment)
- getAttachments :: BugzillaSession -> BugId -> IO [Attachment]
- getComments :: BugzillaSession -> BugId -> IO [Comment]
- getHistory :: BugzillaSession -> BugId -> IO History
- searchUsers :: BugzillaSession -> Text -> IO [User]
- getUser :: BugzillaSession -> UserEmail -> IO (Maybe User)
- getUserById :: BugzillaSession -> UserId -> IO (Maybe User)
- newBzRequest :: BugzillaSession -> [Text] -> QueryText -> Request
- sendBzRequest :: FromJSON a => Request -> IO a
- intAsText :: Int -> Text
- data Request
- type BugId = Int
- type AttachmentId = Int
- type CommentId = Int
- type UserId = Int
- type EventId = Int
- type FlagId = Int
- type FlagType = Int
- type UserEmail = Text
- data Field a where
- AliasField :: Field [Text]
- AssignedToField :: Field UserEmail
- AttachmentCreatorField :: Field UserEmail
- AttachmentDataField :: Field Text
- AttachmentDescriptionField :: Field Text
- AttachmentFilenameField :: Field Text
- AttachmentIsObsoleteField :: Field Bool
- AttachmentIsPatchField :: Field Bool
- AttachmentIsPrivateField :: Field Bool
- AttachmentMimetypeField :: Field Text
- BlocksField :: Field Int
- BugIdField :: Field Int
- CcField :: Field UserEmail
- CcListAccessibleField :: Field Bool
- ClassificationField :: Field Text
- CommentField :: Field Text
- CommentIsPrivateField :: Field Text
- CommentTagsField :: Field Text
- CommenterField :: Field UserEmail
- ComponentField :: Field [Text]
- ContentField :: Field Text
- CreationDateField :: Field UTCTime
- DaysElapsedField :: Field Int
- DependsOnField :: Field Int
- EverConfirmedField :: Field Bool
- FlagRequesteeField :: Field UserEmail
- FlagSetterField :: Field UserEmail
- FlagsField :: Field Text
- GroupField :: Field Text
- KeywordsField :: Field [Text]
- ChangedField :: Field UTCTime
- CommentCountField :: Field Int
- OperatingSystemField :: Field Text
- HardwareField :: Field Text
- PriorityField :: Field Text
- ProductField :: Field Text
- QaContactField :: Field UserEmail
- ReporterField :: Field UserEmail
- ReporterAccessibleField :: Field Bool
- ResolutionField :: Field Text
- RestrictCommentsField :: Field Bool
- SeeAlsoField :: Field Text
- SeverityField :: Field Text
- StatusField :: Field Text
- WhiteboardField :: Field Text
- SummaryField :: Field Text
- TagsField :: Field Text
- TargetMilestoneField :: Field Text
- TimeSinceAssigneeTouchedField :: Field Int
- BugURLField :: Field Text
- VersionField :: Field Text
- VotesField :: Field Text
- CustomField :: Text -> Field Text
- data User = User {}
- data Flag = Flag {}
- data Bug = Bug {
- bugId :: !BugId
- bugAlias :: Maybe [Text]
- bugAssignedTo :: UserEmail
- bugAssignedToDetail :: User
- bugBlocks :: [BugId]
- bugCc :: [UserEmail]
- bugCcDetail :: [User]
- bugClassification :: Text
- bugComponent :: [Text]
- bugCreationTime :: UTCTime
- bugCreator :: UserEmail
- bugCreatorDetail :: User
- bugDependsOn :: [BugId]
- bugDupeOf :: Maybe BugId
- bugFlags :: Maybe [Flag]
- bugGroups :: [Text]
- bugIsCcAccessible :: Bool
- bugIsConfirmed :: Bool
- bugIsCreatorAccessible :: Bool
- bugIsOpen :: Bool
- bugKeywords :: [Text]
- bugLastChangeTime :: UTCTime
- bugOpSys :: Text
- bugPlatform :: Text
- bugPriority :: Text
- bugProduct :: Text
- bugQaContact :: UserEmail
- bugResolution :: Text
- bugSeeAlso :: [Text]
- bugSeverity :: Text
- bugStatus :: Text
- bugSummary :: Text
- bugTargetMilestone :: Text
- bugUrl :: Text
- bugVersion :: [Text]
- bugWhiteboard :: Text
- bugCustomFields :: KeyMap Text
- bugExternalBugs :: Maybe [ExternalBug]
- data ExternalBug = ExternalBug {}
- data ExternalType = ExternalType {}
- data Attachment = Attachment {
- attachmentId :: !AttachmentId
- attachmentBugId :: !BugId
- attachmentFileName :: Text
- attachmentSummary :: Text
- attachmentCreator :: UserEmail
- attachmentIsPrivate :: Bool
- attachmentIsObsolete :: Bool
- attachmentIsPatch :: Bool
- attachmentFlags :: [Flag]
- attachmentCreationTime :: UTCTime
- attachmentLastChangeTime :: UTCTime
- attachmentContentType :: Text
- attachmentSize :: !Int
- attachmentData :: Text
- data Comment = Comment {}
- data History = History {
- historyBugId :: !BugId
- historyEvents :: [HistoryEvent]
- data HistoryEvent = HistoryEvent {}
- data Change
- = TextFieldChange (Field Text) (Modification Text)
- | ListFieldChange (Field [Text]) (Modification [Text])
- | IntFieldChange (Field Int) (Modification Int)
- | TimeFieldChange (Field UTCTime) (Modification UTCTime)
- | BoolFieldChange (Field Bool) (Modification Bool)
- data (Eq a, Show a) => Modification a = Modification {
- modRemoved :: Maybe a
- modAdded :: Maybe a
- modAttachmentId :: Maybe AttachmentId
- fieldName :: Field a -> Text
- data BugzillaException
Connecting to Bugzilla
apikeySession :: BugzillaServer -> BugzillaApiKey -> BugzillaSession Source #
Creates a BugzillaSession using the provided api key.
anonymousSession :: BugzillaServer -> BugzillaSession Source #
Creates an anonymous BugzillaSession. Note that some content
will be hidden by Bugzilla when you make queries in this state.
type BugzillaServer = Text Source #
data BugzillaSession Source #
A session for Bugzilla queries. Use anonymousSession and
loginSession, as appropriate, to create one.
newtype BugzillaApiKey Source #
Constructors
| BugzillaApiKey Text |
Querying Bugzilla
searchBugs :: BugzillaSession -> SearchExpression -> IO [Bug] Source #
Searches Bugzilla and returns a list of Bugs. The SearchExpression
can be constructed conveniently using the operators in Web.Bugzilla.Search.
searchBugsAll :: BugzillaSession -> SearchExpression -> IO [Bug] Source #
Similar to searchBugs, but return _all fields.
searchBugs' :: BugzillaSession -> SearchExpression -> IO [BugId] Source #
Like searchBugs, but returns a list of BugIds. You can
retrieve the Bug for each BugId using getBug. The combination
of searchBugs' and getBug is much less efficient than
searchBugs. searchBugs' is suitable for cases where you won't need to call
getBug most of the time - for example, polling to determine whether the
set of bugs returned by a query has changed.
Arguments
| :: BugzillaSession | |
| -> Int | The maximum number of results to return. |
| -> Int | The offset from the first result to start from. |
| -> SearchExpression | |
| -> IO [Bug] |
Search Bugzilla and returns a limited number of results. You can
call this repeatedly and use offset to retrieve the results of
a large query incrementally. Note that most Bugzillas won't
return all of the results for a very large query by default, but
you can request this by calling searchBugsWithLimit with 0 for
the limit.
searchBugsAllWithLimit Source #
Arguments
| :: BugzillaSession | |
| -> Int | The maximum number of results to return. |
| -> Int | The offset from the first result to start from. |
| -> SearchExpression | |
| -> IO [Bug] |
Similar to searchBugsWithLimit, but return _all fields.
Arguments
| :: BugzillaSession | |
| -> Int | The maximum number of results to return. |
| -> Int | The offset from the first result to start from. |
| -> SearchExpression | |
| -> IO [BugId] |
Like searchBugsWithLimit, but returns a list of BugIds. See
searchBugs' for more discussion.
getBugAll :: BugzillaSession -> BugId -> IO (Maybe Bug) Source #
Retrieve all bug field by bug number
getAttachment :: BugzillaSession -> AttachmentId -> IO (Maybe Attachment) Source #
Retrieve a bug by attachment number.
getAttachments :: BugzillaSession -> BugId -> IO [Attachment] Source #
Get all attachments for a bug.
getComments :: BugzillaSession -> BugId -> IO [Comment] Source #
Get all comments for a bug.
getHistory :: BugzillaSession -> BugId -> IO History Source #
Get the history for a bug.
searchUsers :: BugzillaSession -> Text -> IO [User] Source #
Search user names and emails using a substring search.
getUserById :: BugzillaSession -> UserId -> IO (Maybe User) Source #
Get a user by user ID.
newBzRequest :: BugzillaSession -> [Text] -> QueryText -> Request Source #
All information on how to connect to a host and what should be sent in the HTTP request.
If you simply wish to download from a URL, see parseRequest.
The constructor for this data type is not exposed. Instead, you should use
either the defaultRequest value, or parseRequest to
construct from a URL, and then use the records below to make modifications.
This approach allows http-client to add configuration options without
breaking backwards compatibility.
For example, to construct a POST request, you could do something like:
initReq <- parseRequest "http://www.example.com/path"
let req = initReq
{ method = "POST"
}For more information, please see http://www.yesodweb.com/book/settings-types.
Since 0.1.0
type AttachmentId = Int Source #
A field which you can search by using searchBugs or track
changes to using getHistory. To get a human-readable name for
a field, use fieldName.
Constructors
A Bugzilla user.
Constructors
| User | |
Flags, which may be set on an attachment or on a bug directly.
Constructors
| Flag | |
Fields
| |
A Bugzilla bug.
Constructors
| Bug | |
Fields
| |
data ExternalBug Source #
An external bug.
Constructors
| ExternalBug | |
Fields
| |
Instances
| Eq ExternalBug Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
| Ord ExternalBug Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods compare :: ExternalBug -> ExternalBug -> Ordering # (<) :: ExternalBug -> ExternalBug -> Bool # (<=) :: ExternalBug -> ExternalBug -> Bool # (>) :: ExternalBug -> ExternalBug -> Bool # (>=) :: ExternalBug -> ExternalBug -> Bool # max :: ExternalBug -> ExternalBug -> ExternalBug # min :: ExternalBug -> ExternalBug -> ExternalBug # | |
| Show ExternalBug Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods showsPrec :: Int -> ExternalBug -> ShowS # show :: ExternalBug -> String # showList :: [ExternalBug] -> ShowS # | |
| FromJSON ExternalBug Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
data ExternalType Source #
An external bug type
Constructors
| ExternalType | |
Fields | |
Instances
| Eq ExternalType Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
| Ord ExternalType Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods compare :: ExternalType -> ExternalType -> Ordering # (<) :: ExternalType -> ExternalType -> Bool # (<=) :: ExternalType -> ExternalType -> Bool # (>) :: ExternalType -> ExternalType -> Bool # (>=) :: ExternalType -> ExternalType -> Bool # max :: ExternalType -> ExternalType -> ExternalType # min :: ExternalType -> ExternalType -> ExternalType # | |
| Show ExternalType Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods showsPrec :: Int -> ExternalType -> ShowS # show :: ExternalType -> String # showList :: [ExternalType] -> ShowS # | |
| FromJSON ExternalType Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
data Attachment Source #
An attachment to a bug.
Constructors
Instances
| Eq Attachment Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
| Show Attachment Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods showsPrec :: Int -> Attachment -> ShowS # show :: Attachment -> String # showList :: [Attachment] -> ShowS # | |
| FromJSON Attachment Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
A bug comment. To display these the way Bugzilla does, you'll
need to call getUser and use the userRealName for each user.
Constructors
| Comment | |
Fields
| |
History information for a bug.
Constructors
| History | |
Fields
| |
data HistoryEvent Source #
An event in a bug's history.
Constructors
| HistoryEvent | |
Fields
| |
Instances
| Eq HistoryEvent Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
| Show HistoryEvent Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods showsPrec :: Int -> HistoryEvent -> ShowS # show :: HistoryEvent -> String # showList :: [HistoryEvent] -> ShowS # | |
| FromJSON HistoryEvent Source # | |
Defined in Web.RedHatBugzilla.Internal.Types | |
A single change which is part of an event. Different constructors
are used according to the type of the field. The Modification
describes the value of the field before and after the change.
Constructors
data (Eq a, Show a) => Modification a Source #
A description of how a field changed during a HistoryEvent.
Constructors
| Modification | |
Fields
| |
Instances
| (Eq a, Show a) => Eq (Modification a) Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods (==) :: Modification a -> Modification a -> Bool # (/=) :: Modification a -> Modification a -> Bool # | |
| (Eq a, Show a) => Show (Modification a) Source # | |
Defined in Web.RedHatBugzilla.Internal.Types Methods showsPrec :: Int -> Modification a -> ShowS # show :: Modification a -> String # showList :: [Modification a] -> ShowS # | |
data BugzillaException Source #
Constructors
| BugzillaJSONParseError String | |
| BugzillaAPIError Int String | |
| BugzillaUnexpectedValue String |
Instances
| Show BugzillaException Source # | |
Defined in Web.RedHatBugzilla.Internal.Network Methods showsPrec :: Int -> BugzillaException -> ShowS # show :: BugzillaException -> String # showList :: [BugzillaException] -> ShowS # | |
| Exception BugzillaException Source # | |
Defined in Web.RedHatBugzilla.Internal.Network Methods toException :: BugzillaException -> SomeException # | |