From 5706e9a6d06f88decc722379d4dc0cf1af806f1f Mon Sep 17 00:00:00 2001 From: Valentin Knabel Date: Thu, 24 Sep 2026 10:30:56 +0200 Subject: [PATCH] feat: project slug --- doc/index.html | 8 +++++ go/fits/api/v1/project.pb.go | 18 ++++++++--- js/fits/api/v1/project_pb.d.ts | 7 ++++ js/fits/api/v1/project_pb.js | 3 +- js/fits/api/v1/project_pb.ts | 11 +++++-- proto/fits/api/v1/project.proto | 4 ++- python/fits/api/v1/project_pb2.py | 51 +++++++++++++++--------------- python/fits/api/v1/project_pb2.pyi | 7 ++-- 8 files changed, 71 insertions(+), 38 deletions(-) diff --git a/doc/index.html b/doc/index.html index 1d54944..74be57a 100644 --- a/doc/index.html +++ b/doc/index.html @@ -3234,6 +3234,14 @@

Project

AvatarUrl of the Project

+ + slug + string + +

Slug is an immutable identifier of the project. +Guaranteed to be unique within a tenant.

+ + diff --git a/go/fits/api/v1/project.pb.go b/go/fits/api/v1/project.pb.go index cf9d970..52b83a0 100644 --- a/go/fits/api/v1/project.pb.go +++ b/go/fits/api/v1/project.pb.go @@ -10,7 +10,6 @@ import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" unsafe "unsafe" @@ -38,7 +37,10 @@ type Project struct { // Tenant this project belongs to Tenant string `protobuf:"bytes,5,opt,name=tenant,proto3" json:"tenant,omitempty"` // AvatarUrl of the Project - AvatarUrl *string `protobuf:"bytes,6,opt,name=avatar_url,json=avatarUrl,proto3,oneof" json:"avatar_url,omitempty"` + AvatarUrl *string `protobuf:"bytes,6,opt,name=avatar_url,json=avatarUrl,proto3,oneof" json:"avatar_url,omitempty"` + // Slug is an immutable identifier of the project. + // Guaranteed to be unique within a tenant. + Slug string `protobuf:"bytes,7,opt,name=slug,proto3" json:"slug,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -115,6 +117,13 @@ func (x *Project) GetAvatarUrl() string { return "" } +func (x *Project) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + // ProjectServiceListRequest is the request payload to list all projects type ProjectServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -688,7 +697,7 @@ var File_fits_api_v1_project_proto protoreflect.FileDescriptor const file_fits_api_v1_project_proto_rawDesc = "" + "\n" + - "\x19fits/api/v1/project.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x01\n" + + "\x19fits/api/v1/project.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf3\x01\n" + "\aProject\x12\x12\n" + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + @@ -696,7 +705,8 @@ const file_fits_api_v1_project_proto_rawDesc = "" + "\vdescription\x18\x04 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12\x16\n" + "\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n" + "\n" + - "avatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01B\r\n" + + "avatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12\x12\n" + + "\x04slug\x18\a \x01(\tR\x04slugB\r\n" + "\v_avatar_url\"\xd8\x01\n" + "\x19ProjectServiceListRequest\x12\x13\n" + "\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n" + diff --git a/js/fits/api/v1/project_pb.d.ts b/js/fits/api/v1/project_pb.d.ts index 1ea9eb6..f0cb9ea 100644 --- a/js/fits/api/v1/project_pb.d.ts +++ b/js/fits/api/v1/project_pb.d.ts @@ -48,6 +48,13 @@ export type Project = Message<"fits.api.v1.Project"> & { * @generated from field: optional string avatar_url = 6; */ avatarUrl?: string | undefined; + /** + * Slug is an immutable identifier of the project. + * Guaranteed to be unique within a tenant. + * + * @generated from field: string slug = 7; + */ + slug: string; }; /** * Describes the message fits.api.v1.Project. diff --git a/js/fits/api/v1/project_pb.js b/js/fits/api/v1/project_pb.js index d24ede8..f530b23 100644 --- a/js/fits/api/v1/project_pb.js +++ b/js/fits/api/v1/project_pb.js @@ -5,11 +5,10 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2 import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; /** * Describes the file fits/api/v1/project.proto. */ -export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); +export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSK7AQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBEgwKBHNsdWcYByABKAlCDQoLX2F2YXRhcl91cmwivgEKGVByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QSDwoCaWQYASABKAlIAIgBARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEiAKBnRlbmFudBgDIAEoCUILukgIcgbAs66xAgFIAogBARIoCgZsYWJlbHMYBCABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIA4gBAUIFCgNfaWRCBwoFX25hbWVCCQoHX3RlbmFudEIJCgdfbGFiZWxzIkQKGlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlEiYKCHByb2plY3RzGAEgAygLMhQuZml0cy5hcGkudjEuUHJvamVjdCI1ChhQcm9qZWN0U2VydmljZUdldFJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiQgoZUHJvamVjdFNlcnZpY2VHZXRSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCLDAQobUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhoKBWxvZ2luGAEgASgJQgu6SAhyBsCzrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESFwoKYXZhdGFyX3VybBgEIAEoCUgAiAEBEiMKBmxhYmVscxgFIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0INCgtfYXZhdGFyX3VybCJFChxQcm9qZWN0U2VydmljZUNyZWF0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0IjgKG1Byb2plY3RTZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASJFChxQcm9qZWN0U2VydmljZURlbGV0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0IrECChtQcm9qZWN0U2VydmljZVVwZGF0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARIXCgphdmF0YXJfdXJsGAUgASgJSAKIAQESLgoGbGFiZWxzGAYgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSAOIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQg0KC19hdmF0YXJfdXJsQgkKB19sYWJlbHMiRQocUHJvamVjdFNlcnZpY2VVcGRhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdDKWBAoOUHJvamVjdFNlcnZpY2USYQoETGlzdBImLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QaJy5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYQoDR2V0EiUuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0GiYuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISaQoGQ3JlYXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJoCgZEZWxldGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZURlbGV0ZVJlc3BvbnNlIgnK8xgBAeDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYAUKYAQoPY29tLmZpdHMuYXBpLnYxQgxQcm9qZWN0UHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Describes the message fits.api.v1.Project. * Use `create(ProjectSchema)` to create a new message. diff --git a/js/fits/api/v1/project_pb.ts b/js/fits/api/v1/project_pb.ts index 9af8676..df4f575 100644 --- a/js/fits/api/v1/project_pb.ts +++ b/js/fits/api/v1/project_pb.ts @@ -8,14 +8,13 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import type { Labels, Meta, UpdateLabels, UpdateMeta } from "./common_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/v1/project.proto. */ export const file_fits_api_v1_project: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); + fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSK7AQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBEgwKBHNsdWcYByABKAlCDQoLX2F2YXRhcl91cmwivgEKGVByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QSDwoCaWQYASABKAlIAIgBARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEiAKBnRlbmFudBgDIAEoCUILukgIcgbAs66xAgFIAogBARIoCgZsYWJlbHMYBCABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIA4gBAUIFCgNfaWRCBwoFX25hbWVCCQoHX3RlbmFudEIJCgdfbGFiZWxzIkQKGlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlEiYKCHByb2plY3RzGAEgAygLMhQuZml0cy5hcGkudjEuUHJvamVjdCI1ChhQcm9qZWN0U2VydmljZUdldFJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiQgoZUHJvamVjdFNlcnZpY2VHZXRSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCLDAQobUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhoKBWxvZ2luGAEgASgJQgu6SAhyBsCzrrECARIZCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECARIgCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgESFwoKYXZhdGFyX3VybBgEIAEoCUgAiAEBEiMKBmxhYmVscxgFIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0INCgtfYXZhdGFyX3VybCJFChxQcm9qZWN0U2VydmljZUNyZWF0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0IjgKG1Byb2plY3RTZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASJFChxQcm9qZWN0U2VydmljZURlbGV0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0IrECChtQcm9qZWN0U2VydmljZVVwZGF0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARIXCgphdmF0YXJfdXJsGAUgASgJSAKIAQESLgoGbGFiZWxzGAYgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSAOIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQg0KC19hdmF0YXJfdXJsQgkKB19sYWJlbHMiRQocUHJvamVjdFNlcnZpY2VVcGRhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdDKWBAoOUHJvamVjdFNlcnZpY2USYQoETGlzdBImLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QaJy5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYQoDR2V0EiUuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0GiYuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISaQoGQ3JlYXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJoCgZEZWxldGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZURlbGV0ZVJlc3BvbnNlIgnK8xgBAeDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYAUKYAQoPY29tLmZpdHMuYXBpLnYxQgxQcm9qZWN0UHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Project defines a group of resources belonging to a tenant @@ -65,6 +64,14 @@ export type Project = Message<"fits.api.v1.Project"> & { * @generated from field: optional string avatar_url = 6; */ avatarUrl?: string | undefined; + + /** + * Slug is an immutable identifier of the project. + * Guaranteed to be unique within a tenant. + * + * @generated from field: string slug = 7; + */ + slug: string; }; /** diff --git a/proto/fits/api/v1/project.proto b/proto/fits/api/v1/project.proto index a4a2871..8f610d8 100644 --- a/proto/fits/api/v1/project.proto +++ b/proto/fits/api/v1/project.proto @@ -5,7 +5,6 @@ package fits.api.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -import "google/protobuf/timestamp.proto"; // ProjectService provides project management operations. service ProjectService { @@ -55,6 +54,9 @@ message Project { string tenant = 5; // AvatarUrl of the Project optional string avatar_url = 6; + // Slug is an immutable identifier of the project. + // Guaranteed to be unique within a tenant. + string slug = 7; } // ProjectServiceListRequest is the request payload to list all projects diff --git a/python/fits/api/v1/project_pb2.py b/python/fits/api/v1/project_pb2.py index 73dad2b..ce0622d 100644 --- a/python/fits/api/v1/project_pb2.py +++ b/python/fits/api/v1/project_pb2.py @@ -25,10 +25,9 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/v1/project.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x42\r\n\x0b_avatar_url\"\xd8\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12(\n\x06tenant\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x06tenant\x88\x01\x01\x12\x30\n\x06labels\x18\x04 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"N\n\x1aProjectServiceListResponse\x12\x30\n\x08projects\x18\x01 \x03(\x0b\x32\x14.fits.api.v1.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"K\n\x19ProjectServiceGetResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xf0\x01\n\x1bProjectServiceCreateRequest\x12!\n\x05login\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\r\n\x0b_avatar_url\"N\n\x1cProjectServiceCreateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"N\n\x1cProjectServiceDeleteResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xec\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"N\n\x1cProjectServiceUpdateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project2\x96\x04\n\x0eProjectService\x12\x61\n\x04List\x12&.fits.api.v1.ProjectServiceListRequest\x1a\'.fits.api.v1.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12\x61\n\x03Get\x12%.fits.api.v1.ProjectServiceGetRequest\x1a&.fits.api.v1.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.v1.ProjectServiceCreateRequest\x1a).fits.api.v1.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x06\x44\x65lete\x12(.fits.api.v1.ProjectServiceDeleteRequest\x1a).fits.api.v1.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.v1.ProjectServiceUpdateRequest\x1a).fits.api.v1.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x98\x01\n\x0f\x63om.fits.api.v1B\x0cProjectProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/v1/project.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf3\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12\x12\n\x04slug\x18\x07 \x01(\tR\x04slugB\r\n\x0b_avatar_url\"\xd8\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12(\n\x06tenant\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x06tenant\x88\x01\x01\x12\x30\n\x06labels\x18\x04 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"N\n\x1aProjectServiceListResponse\x12\x30\n\x08projects\x18\x01 \x03(\x0b\x32\x14.fits.api.v1.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"K\n\x19ProjectServiceGetResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xf0\x01\n\x1bProjectServiceCreateRequest\x12!\n\x05login\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\r\n\x0b_avatar_url\"N\n\x1cProjectServiceCreateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"N\n\x1cProjectServiceDeleteResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xec\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"N\n\x1cProjectServiceUpdateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project2\x96\x04\n\x0eProjectService\x12\x61\n\x04List\x12&.fits.api.v1.ProjectServiceListRequest\x1a\'.fits.api.v1.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12\x61\n\x03Get\x12%.fits.api.v1.ProjectServiceGetRequest\x1a&.fits.api.v1.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.v1.ProjectServiceCreateRequest\x1a).fits.api.v1.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x06\x44\x65lete\x12(.fits.api.v1.ProjectServiceDeleteRequest\x1a).fits.api.v1.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.v1.ProjectServiceUpdateRequest\x1a).fits.api.v1.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x98\x01\n\x0f\x63om.fits.api.v1B\x0cProjectProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -72,28 +71,28 @@ _globals['_PROJECTSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\001\001\340\363\030\001' _globals['_PROJECTSERVICE'].methods_by_name['Update']._loaded_options = None _globals['_PROJECTSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_PROJECT']._serialized_start=167 - _globals['_PROJECT']._serialized_end=390 - _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=393 - _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=609 - _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=611 - _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=689 - _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=691 - _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=753 - _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=755 - _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=830 - _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=833 - _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1073 - _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1075 - _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1153 - _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1155 - _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1220 - _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1222 - _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=1300 - _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=1303 - _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=1667 - _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=1669 - _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=1747 - _globals['_PROJECTSERVICE']._serialized_start=1750 - _globals['_PROJECTSERVICE']._serialized_end=2284 + _globals['_PROJECT']._serialized_start=134 + _globals['_PROJECT']._serialized_end=377 + _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=380 + _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=596 + _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=598 + _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=676 + _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=678 + _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=740 + _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=742 + _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=817 + _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=820 + _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1060 + _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1062 + _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1140 + _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1142 + _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1207 + _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1209 + _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=1287 + _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=1290 + _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=1654 + _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=1656 + _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=1734 + _globals['_PROJECTSERVICE']._serialized_start=1737 + _globals['_PROJECTSERVICE']._serialized_end=2271 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/v1/project_pb2.pyi b/python/fits/api/v1/project_pb2.pyi index 8756f92..9bcd24e 100644 --- a/python/fits/api/v1/project_pb2.pyi +++ b/python/fits/api/v1/project_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -11,20 +10,22 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class Project(_message.Message): - __slots__ = ("uuid", "meta", "name", "description", "tenant", "avatar_url") + __slots__ = ("uuid", "meta", "name", "description", "tenant", "avatar_url", "slug") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] TENANT_FIELD_NUMBER: _ClassVar[int] AVATAR_URL_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] uuid: str meta: _common_pb2.Meta name: str description: str tenant: str avatar_url: str - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., tenant: _Optional[str] = ..., avatar_url: _Optional[str] = ...) -> None: ... + slug: str + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., tenant: _Optional[str] = ..., avatar_url: _Optional[str] = ..., slug: _Optional[str] = ...) -> None: ... class ProjectServiceListRequest(_message.Message): __slots__ = ("id", "name", "tenant", "labels")