Skip to content

Commit

Permalink
chore(cloud): Add subscriptions and project environments
Browse files Browse the repository at this point in the history
  • Loading branch information
dnys1 committed Sep 15, 2024
1 parent 9c98a25 commit 47dede3
Show file tree
Hide file tree
Showing 106 changed files with 13,323 additions and 2,600 deletions.
11 changes: 2 additions & 9 deletions packages/celest_cloud/lib/celest_cloud.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,10 @@ export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;

export 'src/cloud/authentication/session_state.dart';
export 'src/cloud/cloud.dart';
export 'src/proto.dart'
show
Organization,
Organization_State,
CreateOrganizationMetadata,
OperationMetadata,
Project,
Project_State;
export 'src/proto.dart' hide OperationState;
export 'src/proto/celest/cloud/auth/v1alpha1/authentication.pb.dart'
show ClientType;
export 'src/proto/celest/cloud/auth/v1alpha1/users.pb.dart'
show IdentityProviderType, User;
export 'src/proto/google/protobuf/field_mask.pb.dart' show FieldMask;
export 'src/proto/operations.dart' hide WaitForOperation, OperationWaiter;
export 'src/util/operations.dart' hide WaitForOperation, OperationWaiter;
2 changes: 1 addition & 1 deletion packages/celest_cloud/lib/src/cloud/base/base_service.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:celest_cloud/src/cloud/operations/operations_protocol.dart';
import 'package:celest_cloud/src/proto.dart' show Operation;
import 'package:celest_cloud/src/proto/operations.dart';
import 'package:celest_cloud/src/util/operations.dart';
import 'package:celest_core/celest_core.dart';
import 'package:grpc/grpc_or_grpcweb.dart';
import 'package:logging/logging.dart';
Expand Down
8 changes: 7 additions & 1 deletion packages/celest_cloud/lib/src/cloud/cloud.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:celest_cloud/src/cloud/cloud_protocol.grpc.dart';
import 'package:celest_cloud/src/cloud/cloud_protocol.http.dart';
import 'package:celest_cloud/src/cloud/organizations/organizations.dart';
import 'package:celest_cloud/src/cloud/projects/projects.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions.dart';
import 'package:celest_cloud/src/cloud/users/users.dart';
import 'package:celest_cloud/src/proto.dart';
import 'package:celest_core/_internal.dart';
Expand Down Expand Up @@ -54,8 +55,8 @@ class CelestCloud {
Empty(),
OperationMetadata(),
Organization(),
CreateOrganizationMetadata(),
Project(),
ProjectEnvironment(),
]);

final CloudProtocol _protocol;
Expand Down Expand Up @@ -84,4 +85,9 @@ class CelestCloud {
operations: _protocol.operations,
logger: _logger,
);

late final Subscriptions subscriptions = Subscriptions(
protocol: _protocol.subscriptions,
logger: _logger,
);
}
2 changes: 2 additions & 0 deletions packages/celest_cloud/lib/src/cloud/cloud_protocol.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:celest_cloud/src/cloud/authentication/authentication_protocol.da
import 'package:celest_cloud/src/cloud/operations/operations_protocol.dart';
import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.dart';
import 'package:celest_cloud/src/cloud/projects/projects_protocol.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions_protocol.dart';
import 'package:celest_cloud/src/cloud/users/users_protocol.dart';

abstract interface class CloudProtocol {
Expand All @@ -10,4 +11,5 @@ abstract interface class CloudProtocol {
OperationsProtocol get operations;
UsersProtocol get users;
ProjectsProtocol get projects;
SubscriptionsProtocol get subscriptions;
}
6 changes: 6 additions & 0 deletions packages/celest_cloud/lib/src/cloud/cloud_protocol.grpc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.dart
import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.grpc.dart';
import 'package:celest_cloud/src/cloud/projects/projects_protocol.dart';
import 'package:celest_cloud/src/cloud/projects/projects_protocol.grpc.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions_protocol.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions_protocol.grpc.dart';
import 'package:celest_cloud/src/cloud/users/users_protocol.dart';
import 'package:celest_cloud/src/cloud/users/users_protocol.grpc.dart';
import 'package:celest_core/_internal.dart';
Expand Down Expand Up @@ -66,4 +68,8 @@ final class CloudProtocolGrpc implements CloudProtocol {
@override
late final ProjectsProtocol projects =
ProjectsProtocolGrpc(_channel, interceptors: _interceptors);

@override
late final SubscriptionsProtocol subscriptions =
SubscriptionsProtocolGrpc(_channel, interceptors: _interceptors);
}
8 changes: 8 additions & 0 deletions packages/celest_cloud/lib/src/cloud/cloud_protocol.http.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.dart
import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.http.dart';
import 'package:celest_cloud/src/cloud/projects/projects_protocol.dart';
import 'package:celest_cloud/src/cloud/projects/projects_protocol.http.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions_protocol.dart';
import 'package:celest_cloud/src/cloud/subscriptions/subscriptions_protocol.http.dart';
import 'package:celest_cloud/src/cloud/users/users_protocol.dart';
import 'package:celest_cloud/src/cloud/users/users_protocol.http.dart';
import 'package:celest_core/_internal.dart';
Expand Down Expand Up @@ -58,4 +60,10 @@ final class CloudProtocolHttp implements CloudProtocol {
uri: _baseUri,
httpClient: _client,
);

@override
late final SubscriptionsProtocol subscriptions = SubscriptionsProtocolHttp(
uri: _baseUri,
httpClient: _client,
);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:celest_cloud/src/proto.dart';
import 'package:celest_cloud/src/proto/google/longrunning/operations.pb.dart';

abstract interface class OperationsProtocol {
Future<Operation> get(GetOperationRequest request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'dart:convert';
import 'package:celest_cloud/src/cloud/base/base_protocol.dart';
import 'package:celest_cloud/src/cloud/cloud.dart';
import 'package:celest_cloud/src/cloud/operations/operations_protocol.dart';
import 'package:celest_cloud/src/proto.dart';
import 'package:celest_cloud/src/proto/google/longrunning/operations.pb.dart';
import 'package:http/http.dart' as http;

final class OperationsProtocolHttp
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:celest_cloud/src/cloud/base/base_service.dart';
import 'package:celest_cloud/src/cloud/operations/operations_protocol.dart';
import 'package:celest_cloud/src/cloud/organizations/organizations_protocol.dart';
import 'package:celest_cloud/src/proto.dart' hide OperationState, Duration;
import 'package:celest_cloud/src/proto/operations.dart';
import 'package:celest_cloud/src/proto.dart' hide OperationState;
import 'package:celest_cloud/src/util/operations.dart';
import 'package:celest_core/celest_core.dart';
import 'package:logging/logging.dart';

Expand All @@ -19,12 +19,12 @@ final class Organizations with BaseService {
final OrganizationsProtocol _protocol;
final OperationsProtocol _operations;

Future<Organization> create({
Stream<OperationState<OperationMetadata, Organization>> create({
String? parent,
String? organizationId,
Organization? organization,
bool validateOnly = false,
}) async {
}) async* {
final request = CreateOrganizationRequest(
parent: parent,
organizationId: organizationId,
Expand All @@ -36,11 +36,11 @@ final class Organizations with BaseService {
request: request,
action: _protocol.create,
);
return operation.wait(
yield* operation.stream(
operations: _operations,
logger: logger,
metadata: OperationMetadata(),
response: Organization(),
timeout: const Duration(minutes: 1),
);
}

Expand Down Expand Up @@ -80,12 +80,12 @@ final class Organizations with BaseService {
);
}

Future<Organization> update({
Stream<OperationState<OperationMetadata, Organization>> update({
required Organization organization,
FieldMask? updateMask,
bool allowMissing = false,
bool validateOnly = false,
}) async {
}) async* {
final request = UpdateOrganizationRequest(
organization: organization,
updateMask: updateMask,
Expand All @@ -97,11 +97,11 @@ final class Organizations with BaseService {
request: request,
action: _protocol.update,
);
return operation.wait(
yield* operation.stream(
operations: _operations,
logger: logger,
response: Organization(),
timeout: const Duration(minutes: 1),
metadata: OperationMetadata(),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,6 @@ final class OrganizationsProtocolHttp
},
);
final req = http.Request('DELETE', uri)
..body = jsonEncode(
request.toProto3Json(
typeRegistry: CelestCloud.typeRegistry,
),
)
..headers['content-type'] = 'application/json'
..headers['accept'] = 'application/json';
final res = await _client.send(req);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import 'package:celest_cloud/src/cloud/base/base_service.dart';
import 'package:celest_cloud/src/cloud/operations/operations_protocol.dart';
import 'package:celest_cloud/src/cloud/project_environments/project_environments_protocol.dart';
import 'package:celest_cloud/src/proto.dart' hide OperationState;
import 'package:celest_cloud/src/proto/celest/ast/v1/resolved_ast.pb.dart';
import 'package:celest_cloud/src/util/operations.dart';
import 'package:celest_core/celest_core.dart';
import 'package:logging/logging.dart';

final class ProjectEnvironments with BaseService {
ProjectEnvironments({
required ProjectEnvironmentsProtocol protocol,
required OperationsProtocol operations,
this.logger,
}) : _protocol = protocol,
_operations = operations;

@override
final Logger? logger;
final ProjectEnvironmentsProtocol _protocol;
final OperationsProtocol _operations;

Future<ProjectEnvironment> create({
required String parent,
required String projectEnvironmentId,
required ResolvedProject resolvedProject,
required Iterable<ProjectAsset> assets,
String? displayName,
Map<String, String>? annotations,
bool validateOnly = false,
}) async {
final request = CreateProjectEnvironmentRequest(
parent: parent,
projectEnvironmentId: projectEnvironmentId,
projectEnvironment: ProjectEnvironment(
displayName: displayName,
assets: assets,
resolvedProjectAst: resolvedProject,
annotations: annotations,
),
validateOnly: validateOnly,
);
final operation = await run(
'ProjectEnvironments.Create',
request: request,
action: _protocol.create,
);
return operation.wait(
operations: _operations,
response: ProjectEnvironment(),
logger: logger,
);
}

Future<ProjectEnvironment?> get(String name) async {
try {
final request = GetProjectEnvironmentRequest(name: name);
return await run(
'ProjectEnvironments.Get',
request: request,
action: _protocol.get,
);
} on NotFoundException {
return null;
}
}

Future<ListProjectEnvironmentsResponse> list({
String? parent,
int? pageSize,
String? pageToken,
String? filter,
String? orderBy,
}) async {
final request = ListProjectEnvironmentsRequest(
parent: parent,
pageSize: pageSize,
pageToken: pageToken,
filter: filter,
orderBy: orderBy,
);
return run(
'ProjectEnvironments.List',
request: request,
action: _protocol.list,
);
}

Future<ProjectEnvironment> update({
required ProjectEnvironment projectEnvironment,
FieldMask? updateMask,
bool allowMissing = false,
bool validateOnly = false,
}) async {
final request = UpdateProjectEnvironmentRequest(
projectEnvironment: projectEnvironment,
updateMask: updateMask,
validateOnly: validateOnly,
allowMissing: allowMissing,
);
final operation = await run(
'ProjectEnvironments.Update',
request: request,
action: _protocol.update,
);
return operation.wait(
operations: _operations,
logger: logger,
response: ProjectEnvironment(),
);
}

Future<Empty> delete(
String name, {
String? etag,
bool allowMissing = false,
bool validateOnly = false,
}) async {
final request = DeleteProjectEnvironmentRequest(
name: name,
etag: etag,
allowMissing: allowMissing,
validateOnly: validateOnly,
);
final operation = await run(
'ProjectEnvironments.Delete',
request: request,
action: _protocol.delete,
);
return operation.wait(
operations: _operations,
logger: logger,
response: Empty(),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:celest_cloud/src/proto.dart';

abstract interface class ProjectEnvironmentsProtocol {
Future<Operation> create(CreateProjectEnvironmentRequest request);
Future<ProjectEnvironment> get(GetProjectEnvironmentRequest request);
Future<ListProjectEnvironmentsResponse> list(
ListProjectEnvironmentsRequest request,
);
Future<Operation> update(UpdateProjectEnvironmentRequest request);
Future<Operation> delete(DeleteProjectEnvironmentRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:celest_cloud/src/cloud/project_environments/project_environments_protocol.dart';
import 'package:celest_cloud/src/grpc.dart';
import 'package:grpc/grpc.dart';

final class ProjectEnvironmentsProtocolGrpc
implements ProjectEnvironmentsProtocol {
ProjectEnvironmentsProtocolGrpc(
ClientChannel channel, {
List<ClientInterceptor>? interceptors,
}) : _client = ProjectEnvironmentsClient(channel, interceptors: interceptors);

final ProjectEnvironmentsClient _client;

@override
Future<Operation> create(CreateProjectEnvironmentRequest request) {
return _client.createProjectEnvironment(request);
}

@override
Future<Operation> delete(DeleteProjectEnvironmentRequest request) {
return _client.deleteProjectEnvironment(request);
}

@override
Future<ProjectEnvironment> get(GetProjectEnvironmentRequest request) {
return _client.getProjectEnvironment(request);
}

@override
Future<ListProjectEnvironmentsResponse> list(
ListProjectEnvironmentsRequest request,
) {
return _client.listProjectEnvironments(request);
}

@override
Future<Operation> update(UpdateProjectEnvironmentRequest request) {
return _client.updateProjectEnvironment(request);
}
}
Loading

0 comments on commit 47dede3

Please sign in to comment.