3 people like it.
Like the snippet!
Querying NuGet via OData TypeProvider
Querying NuGet package manager via OData TypeProvider
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:
|
#if INTERACTIVE
#r "FSharp.Data.TypeProviders"
#r "System.Data.Services.Client"
#else
module PackageManager
#endif
type Nuget = Microsoft.FSharp.Data.TypeProviders.ODataService<"https://nuget.org/api/v2">
let NugetConnection = Nuget.GetDataContext()
// NugetConnection.Credentials <- ...
let fetchNugetInfo id version =
try
query { for package in NugetConnection.Packages do
where (package.Id = id && package.Version = version)
select (package.Title, package.IsLatestVersion)
headOrDefault
} |> Some
with //Not found:
| :? System.Data.Services.Client.DataServiceClientException -> None
| :? System.Data.Services.Client.DataServiceQueryException -> None
let searchNuget name version =
(name, fetchNugetInfo name version)
|> function
| n, Some(title, true) -> printfn "%s is up-to-date: %s" title n
| n, Some(title, false) -> printfn "%s is outdated: %s" title n
| n, _ -> printfn "Not found: %s" n
//searchNuget "EntityFramework" "6.0.0.0"
|
type Nuget =
static member GetDataContext : unit -> V2FeedContext + 1 overload
nested type ServiceTypes
Full name: Script.Nuget
<summary>Provides the types to access an OData service</summary><param name="ServiceUri">The Uri for the OData service</param><param name='LocalSchemaFile'>The local .csdl file for the service schema</param><param name='ForceUpdate'>Require that a direct connection to the service be available at design-time and force the refresh of the local schema file (default: true)</param><param name='ResolutionFolder'>The folder used to resolve relative file paths at compile-time (default: folder containing the project or script)</param><param name='DataServiceCollection'>Generate collections derived from DataServiceCollection (default: false)</param>
namespace Microsoft
namespace Microsoft.FSharp
namespace Microsoft.FSharp.Data
namespace Microsoft.FSharp.Data.TypeProviders
type ODataService
Full name: Microsoft.FSharp.Data.TypeProviders.ODataService
<summary>Provides the types to access an OData service</summary><param name="ServiceUri">The Uri for the OData service</param><param name='LocalSchemaFile'>The local .csdl file for the service schema</param><param name='ForceUpdate'>Require that a direct connection to the service be available at design-time and force the refresh of the local schema file (default: true)</param><param name='ResolutionFolder'>The folder used to resolve relative file paths at compile-time (default: folder containing the project or script)</param><param name='DataServiceCollection'>Generate collections derived from DataServiceCollection (default: false)</param>
val NugetConnection : Nuget.ServiceTypes.SimpleDataContextTypes.V2FeedContext
Full name: Script.NugetConnection
Nuget.GetDataContext() : Nuget.ServiceTypes.SimpleDataContextTypes.V2FeedContext
Get a simplified data context for this OData Service. By default, no credentials are set
Nuget.GetDataContext(uri: System.Uri) : Nuget.ServiceTypes.SimpleDataContextTypes.V2FeedContext
Get a simplified data context for this OData Service. By default, no credentials are set
val fetchNugetInfo : id:string -> version:string -> (string * bool) option
Full name: Script.fetchNugetInfo
val id : string
val version : string
val query : Linq.QueryBuilder
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.query
val package : Nuget.ServiceTypes.V2FeedPackage
property Nuget.ServiceTypes.SimpleDataContextTypes.V2FeedContext.Packages: System.Data.Services.Client.DataServiceQuery<Nuget.ServiceTypes.V2FeedPackage>
Gets the 'Packages' entities from the OData Service. This property may be used as the source in a query expression.
custom operation: where (bool)
Calls Linq.QueryBuilder.Where
property Nuget.ServiceTypes.V2FeedPackage.Id: string
property Nuget.ServiceTypes.V2FeedPackage.Version: string
custom operation: select ('Result)
Calls Linq.QueryBuilder.Select
property Nuget.ServiceTypes.V2FeedPackage.Title: string
property Nuget.ServiceTypes.V2FeedPackage.IsLatestVersion: bool
custom operation: headOrDefault
Calls Linq.QueryBuilder.HeadOrDefault
union case Option.Some: Value: 'T -> Option<'T>
namespace System
namespace System.Data
namespace System.Data.Services
namespace System.Data.Services.Client
Multiple items
type DataServiceClientException =
inherit InvalidOperationException
new : unit -> DataServiceClientException + 4 overloads
member GetObjectData : info:SerializationInfo * context:StreamingContext -> unit
member StatusCode : int
Full name: System.Data.Services.Client.DataServiceClientException
--------------------
System.Data.Services.Client.DataServiceClientException() : unit
System.Data.Services.Client.DataServiceClientException(message: string) : unit
System.Data.Services.Client.DataServiceClientException(message: string, innerException: exn) : unit
System.Data.Services.Client.DataServiceClientException(message: string, statusCode: int) : unit
System.Data.Services.Client.DataServiceClientException(message: string, innerException: exn, statusCode: int) : unit
union case Option.None: Option<'T>
Multiple items
type DataServiceQueryException =
inherit InvalidOperationException
new : unit -> DataServiceQueryException + 3 overloads
member Response : QueryOperationResponse
Full name: System.Data.Services.Client.DataServiceQueryException
--------------------
System.Data.Services.Client.DataServiceQueryException() : unit
System.Data.Services.Client.DataServiceQueryException(message: string) : unit
System.Data.Services.Client.DataServiceQueryException(message: string, innerException: exn) : unit
System.Data.Services.Client.DataServiceQueryException(message: string, innerException: exn, response: System.Data.Services.Client.QueryOperationResponse) : unit
val searchNuget : name:string -> version:string -> unit
Full name: Script.searchNuget
val name : string
val n : string
val title : string
val printfn : format:Printf.TextWriterFormat<'T> -> 'T
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
More information