commit b581bb012cddfc5ac20d2ba94ed461c68c01f304 parent 4ea59e350c027a4a36beb2121906df1cc87679db Author: NovaBryan <29001820+NovaBryan@users.noreply.github.com> Date: Wed, 14 Oct 2026 13:51:30 +0000 Auto-dump EVE code: 24.01.3615610 (20261014_3615610_code) Diffstat:
113 files changed, 10007 insertions(+), 5140 deletions(-)
diff --git a/README.md b/README.md @@ -8,6 +8,7 @@ A timeline of all version captures and synchronizations is documented here: | Update Date | Target Version Tag | Version | Notes | | :--- | :--- | :--- | :--- | +| **2026-10-14** | `eve-24_01_3615610` | 24.01.3615610 | Automated unpack and sync | | **2026-10-13** | `eve-24_01_3611656` | 24.01.3611656 | Automated unpack and sync | | **2026-10-12** | `eve-24_01_3607705` | 24.01.3607705 | Automated unpack and sync | | **2026-10-09** | `eve-24_01_3599281` | 24.01.3599281 | Automated unpack and sync | diff --git a/caching/client/ttl_cache.py b/caching/client/ttl_cache.py @@ -0,0 +1,99 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\caching\client\ttl_cache.py +from collections import MutableMapping +from datetime import datetime, timedelta +NO_CACHED_DATA = 'ttl_cache_no_cached' + +class TTLCacheEntry(object): + + def __init__(self, data, expiration): + self.data = data + self.expiration = expiration + + def __repr__(self): + return '<TTLCacheEntry>' + self.__dict__.__repr__() + + +class TTLCache(MutableMapping): + + def __init__(self, ttl): + if not isinstance(ttl, timedelta): + raise TypeError('ttl must be a datetime.timedelta') + self._ttl = ttl + self._cache = {} + + def __setitem__(self, key, value): + self.store(key, value) + + def __delitem__(self, key): + self.remove(key) + + def __getitem__(self, key): + return self.get(key) + + def __iter__(self): + for key in self._cache.iterkeys(): + yield key + + def __len__(self): + return len(self._cache) + + def __contains__(self, key): + return key in self._cache + + def __repr__(self): + return '<TTLCache>' + self.__dict__.__repr__() + + def store(self, key, data): + now = datetime.utcnow() + self._cache[key] = TTLCacheEntry(data, now + self._ttl) + + def reset_expiration(self, key): + if key not in self._cache: + raise KeyError('Tried to get expired data for a key that is not in the cache', key) + entry = self._cache[key] + entry.expiration = datetime.utcnow() + self._ttl + + def remove(self, key): + self._cache.pop(key, None) + + def get(self, key, default_value = NO_CACHED_DATA): + if key not in self._cache: + return default_value + entry = self._cache[key] + now = datetime.utcnow() + if entry.expiration <= now: + return default_value + return entry.data + + def itervalues_ignore_expiry(self): + for key in self: + yield self.get_ignore_expiry(key) + + def get_ignore_expiry(self, key, default_value = NO_CACHED_DATA): + if key not in self._cache: + return default_value + entry = self._cache[key] + return entry.data + + def get_expiration(self, key): + if key not in self._cache: + raise KeyError('key not found in cache', key) + entry = self._cache[key] + return entry.expiration + + def clear_cache(self): + self._cache.clear() + + def set_ttl(self, ttl): + if not isinstance(ttl, timedelta): + raise TypeError('ttl must be a datetime.timedelta') + self._ttl = ttl + + def expire(self, key): + if key not in self._cache: + raise KeyError('key not found in cache', key) + entry = self._cache[key] + entry.expiration = datetime.utcnow() + + def has_cached_data_for_key(self, key): + return self.get(key, NO_CACHED_DATA) != NO_CACHED_DATA diff --git a/campaigns/client/api.py b/campaigns/client/api.py @@ -1,21 +1,42 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\api.py -from campaigns.client.listeners.campaign_listener import CampaignListener -from campaigns.client.listeners.objective_listener import ObjectiveListener -from campaigns.client.messengers.campaigns_messenger import CampaignsMessenger -from campaigns.client.messengers.contribution_methods_messenger import CampaignContributionMethodsMessenger -from campaigns.client.mock_data.mock_gateway import MockCampaignsGateway from campaigns.client.qa.settings import ShouldMockSetting -from campaigns.client.repository import CampaignsRepository -_campaigns_repository = None +from campaigns.client.v1.listeners.campaign_listener import CampaignListener +from campaigns.client.v1.listeners.objective_listener import ObjectiveListener +from campaigns.client.v1.messengers.campaigns_messenger import CampaignsMessenger +from campaigns.client.v1.messengers.contribution_methods_messenger import CampaignContributionMethodsMessenger +from campaigns.client.v1.mock_data.mock_gateway import MockCampaignsGateway as MockCampaignsGatewayV1 +from campaigns.client.v1.repository import CampaignsRepository as CampaignsRepositoryV1 +from campaigns.client.v2.listeners.track_listener import TrackListener as TrackListenerV2 +from campaigns.client.v2.messengers.track_messenger import TrackMessenger as TrackMessengerV2 +from campaigns.client.v2.mock_data.mock_gateway import MockCampaignsGateway as MockCampaignsGatewayV2 +from campaigns.client.v2.repository import CampaignsRepository as CampaignsRepositoryV2 +from campaigns.client.v2.messengers.campaigns_messenger import CampaignsMessenger as CampaignsMessengerV2 +from campaigns.client.v2.messengers.objective_messenger import ObjectiveMessenger as ObjectiveMessengerV2 +from campaigns.client.v2.messengers.event_matcher_messenger import CampaignEventMatcherMessenger as CampaignEventMatcherMessengerV2 +_campaigns_repository_v1 = None +_campaigns_repository_v2 = None -def initialize_campaigns_repository(public_gateway, service_manager, message_player): - global _campaigns_repository - mock_public_gateway = MockCampaignsGateway(message_player) +def initialize_campaigns_repository_v1(public_gateway, service_manager, message_player): + global _campaigns_repository_v1 + mock_public_gateway = MockCampaignsGatewayV1(message_player) mock_setting = ShouldMockSetting() - _campaigns_repository = CampaignsRepository(public_gateway, service_manager, mock_public_gateway, mock_setting, CampaignsMessenger, CampaignContributionMethodsMessenger, CampaignListener, ObjectiveListener) + _campaigns_repository_v1 = CampaignsRepositoryV1(public_gateway, service_manager, mock_public_gateway, mock_setting, CampaignsMessenger, CampaignContributionMethodsMessenger, CampaignListener, ObjectiveListener) -def get_campaigns_repository(): - if _campaigns_repository is None: +def get_campaigns_repository_v1(): + if _campaigns_repository_v1 is None: raise AttributeError('Campaigns repository is not initialized') - return _campaigns_repository + return _campaigns_repository_v1 + + +def initialize_campaigns_repository_v2(public_gateway, service_manager, message_player): + global _campaigns_repository_v2 + mock_public_gateway = MockCampaignsGatewayV2(message_player) + mock_setting = ShouldMockSetting() + _campaigns_repository_v2 = CampaignsRepositoryV2(public_gateway, service_manager, mock_public_gateway, mock_setting, CampaignsMessengerV2, ObjectiveMessengerV2, TrackMessengerV2, TrackListenerV2, CampaignEventMatcherMessengerV2) + + +def get_campaigns_repository_v2(): + if _campaigns_repository_v2 is None: + raise AttributeError('Campaigns repository is not initialized') + return _campaigns_repository_v2 diff --git a/campaigns/client/caches/__init__.py b/campaigns/client/caches/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\caches\__init__.py -pass diff --git a/campaigns/client/caches/ttl_cache.py b/campaigns/client/caches/ttl_cache.py @@ -1,99 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\caches\ttl_cache.py -from collections import MutableMapping -from datetime import datetime, timedelta -NO_CACHED_DATA = 'ttl_cache_no_cached' - -class TTLCacheEntry(object): - - def __init__(self, data, expiration): - self.data = data - self.expiration = expiration - - def __repr__(self): - return '<TTLCacheEntry>' + self.__dict__.__repr__() - - -class TTLCache(MutableMapping): - - def __init__(self, ttl): - if not isinstance(ttl, timedelta): - raise TypeError('ttl must be a datetime.timedelta') - self._ttl = ttl - self._cache = {} - - def __setitem__(self, key, value): - self.store(key, value) - - def __delitem__(self, key): - self.remove(key) - - def __getitem__(self, key): - return self.get(key) - - def __iter__(self): - for key in self._cache.iterkeys(): - yield key - - def __len__(self): - return len(self._cache) - - def __contains__(self, key): - return key in self._cache - - def __repr__(self): - return '<TTLCache>' + self.__dict__.__repr__() - - def store(self, key, data): - now = datetime.utcnow() - self._cache[key] = TTLCacheEntry(data, now + self._ttl) - - def reset_expiration(self, key): - if key not in self._cache: - raise KeyError('Tried to get expired data for a key that is not in the cache', key) - entry = self._cache[key] - entry.expiration = datetime.utcnow() + self._ttl - - def remove(self, key): - self._cache.pop(key, None) - - def get(self, key, default_value = NO_CACHED_DATA): - if key not in self._cache: - return default_value - entry = self._cache[key] - now = datetime.utcnow() - if entry.expiration <= now: - return default_value - return entry.data - - def itervalues_ignore_expiry(self): - for key in self: - yield self.get_ignore_expiry(key) - - def get_ignore_expiry(self, key, default_value = NO_CACHED_DATA): - if key not in self._cache: - return default_value - entry = self._cache[key] - return entry.data - - def get_expiration(self, key): - if key not in self._cache: - raise KeyError('key not found in cache', key) - entry = self._cache[key] - return entry.expiration - - def clear_cache(self): - self._cache.clear() - - def set_ttl(self, ttl): - if not isinstance(ttl, timedelta): - raise TypeError('ttl must be a datetime.timedelta') - self._ttl = ttl - - def expire(self, key): - if key not in self._cache: - raise KeyError('key not found in cache', key) - entry = self._cache[key] - entry.expiration = datetime.utcnow() - - def has_cached_data_for_key(self, key): - return self.get(key, NO_CACHED_DATA) != NO_CACHED_DATA diff --git a/campaigns/client/data_model/__init__.py b/campaigns/client/data_model/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\__init__.py -pass diff --git a/campaigns/client/data_model/campaign.py b/campaigns/client/data_model/campaign.py @@ -1,567 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\campaign.py -import campaigns.client.data_model.flatbuffer.campaigndefinition_generated as fb_campaign -from campaigns.client.data_model.career_paths import PROTO_CAREER_TO_FDS_CAREER -from campaigns.client.data_model.contribution_method import ContributionMethodConfiguration -from campaigns.client.data_model.objective import FutureObjective, Objective, ObjectiveID -from characterdata.careerpathconst import career_paths -from datetimeutils import datetime_to_filetime, filetime_to_datetime -from eve.common.script.sys.idCheckers import IsCorporation, IsCharacter, IsFaction -from eveProto.generated.eve_public.campaign.campaign_pb2 import STATE_EXPIRED, STATE_CANCELLED, STATE_UNSPECIFIED, STATE_ACTIVE, STATE_COMPLETED, Identifier, Version -from itertoolsext.Enum import Enum -from semantic_version import SemanticVersion -from uuid import UUID -import logging -logger = logging.getLogger('campaigns') - -def serialize_semantic_version(builder, version): - prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] - build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] - fb_campaign.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) - for prerelease_string in reversed(prerelease_strings): - builder.PrependUOffsetTRelative(prerelease_string) - - prerelease_offset = builder.EndVector() - fb_campaign.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) - for build_string in reversed(build_strings): - builder.PrependUOffsetTRelative(build_string) - - build_offset = builder.EndVector() - fb_campaign.SemanticVersionStart(builder) - fb_campaign.SemanticVersionAddMajor(builder, version.major) - fb_campaign.SemanticVersionAddMinor(builder, version.minor) - fb_campaign.SemanticVersionAddPatch(builder, version.patch) - fb_campaign.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) - fb_campaign.SemanticVersionAddBuildTags(builder, build_offset) - return fb_campaign.SemanticVersionEnd(builder) - - -def deserialize_semantic_version(version_flatbuffer): - major = version_flatbuffer.Major() - minor = version_flatbuffer.Minor() - patch = version_flatbuffer.Patch() - prerelease_tags = [] - for i in range(version_flatbuffer.PrereleaseTagsLength()): - prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) - - build_tags = [] - for i in range(version_flatbuffer.BuildTagsLength()): - build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) - - return SemanticVersion(major, minor, patch, prerelease_tags, build_tags) - - -class CampaignID(object): - - def __init__(self, campaign_uuid): - self._campaign_uuid = campaign_uuid - - @property - def uuid(self): - return self._campaign_uuid - - @classmethod - def from_proto(cls, proto): - return CampaignID(UUID(bytes=proto.uuid)) - - def to_proto(self): - return Identifier(uuid=self._campaign_uuid.bytes) - - def __eq__(self, other): - if not isinstance(other, CampaignID): - return NotImplemented - return self._campaign_uuid == other._campaign_uuid - - def __ne__(self, other): - return not self.__eq__(other) - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __hash__(self): - return hash(self.uuid) - - -class Campaign(object): - - def __init__(self, campaign_id, version, title, subtitle, goal_description, success_description, failure_description, icon, logo, dashboard_background, ao_feature_page, objective_background, issuer, presenting_character, annotations, total_objectives, scheduled_start_datetime, finished_datetime, target_progress, contribution_method_configuration, current_objectives, future_objectives, campaign_state, scheduled_expiry_datetime, definition_name): - self._campaign_id = campaign_id - self._version = version - self._title = title - self._subtitle = subtitle - self._goal_description = goal_description - self._success_description = success_description - self._failure_description = failure_description - self._icon = icon - self._logo = logo - self._dashboard_background = dashboard_background - self._ao_feature_page = ao_feature_page - self._objective_background = objective_background - self._issuer = issuer - self._presenting_character = presenting_character - self._annotations = annotations - self._total_objectives = total_objectives - self._scheduled_start_datetime = scheduled_start_datetime - self._finished_datetime = finished_datetime - self._target_progress = target_progress - self._contribution_method_configuration = contribution_method_configuration - self._current_objectives = current_objectives - self._future_objectives = future_objectives - self._campaign_state = campaign_state - self._scheduled_expiry_datetime = scheduled_expiry_datetime - self._definition_name = definition_name - - @property - def id(self): - return self._campaign_id - - @property - def version(self): - return self._version - - @property - def title(self): - return self._title - - @property - def subtitle(self): - return self._subtitle - - @property - def goal_description(self): - return self._goal_description - - @property - def success_description(self): - return self._success_description - - @property - def failure_description(self): - return self._failure_description - - @property - def icon(self): - return self._icon - - @property - def logo(self): - return self._logo - - @property - def issuer(self): - return self._issuer - - @property - def is_character_issuer(self): - return IsCharacter(self.issuer) - - @property - def is_corporation_issuer(self): - return IsCorporation(self.issuer) - - @property - def is_faction_issuer(self): - return IsFaction(self.issuer) - - @property - def dashboard_background(self): - return self._dashboard_background - - @property - def ao_feature_page(self): - return self._ao_feature_page - - @property - def objective_background(self): - return self._objective_background - - @property - def presenting_character(self): - return self._presenting_character - - @property - def annotations(self): - return self._annotations - - @property - def total_objectives(self): - return self._total_objectives - - @property - def scheduled_start_datetime(self): - return self._scheduled_start_datetime - - @property - def scheduled_expiry_datetime(self): - return self._scheduled_expiry_datetime - - @property - def finished_datetime(self): - return self._finished_datetime - - @property - def is_finished(self): - return self._finished_datetime is not None - - @property - def target_progress(self): - return self._target_progress - - @property - def contribution_method_configuration(self): - return self._contribution_method_configuration - - @property - def current_objectives(self): - return self._current_objectives - - @property - def future_objectives(self): - return self._future_objectives - - @property - def campaign_state(self): - return self._campaign_state - - @property - def definition_name(self): - return self._definition_name - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, campaign_identifier, campaign_attributes, available_objectives, restricted_objectives): - campaign_id = CampaignID.from_proto(campaign_identifier) - future_objectives = [] - for objective in restricted_objectives: - obj = FutureObjective(objective.scheduled_start_time.ToDatetime(), PROTO_CAREER_TO_FDS_CAREER[objective.career], objective.contribution_method.name) - obj.campaign_id = campaign_id - future_objectives.append(obj) - - current_objectives = [] - for available_objective in available_objectives: - obj = Objective.from_proto(available_objective.objective, available_objective.attributes) - obj.campaign_id = campaign_id - current_objectives.append(obj) - - if campaign_attributes.issuer.WhichOneof('issuer') == 'character': - issuer = campaign_attributes.issuer.character.sequential - elif campaign_attributes.issuer.WhichOneof('issuer') == 'corporation': - issuer = campaign_attributes.issuer.corporation.sequential - else: - issuer = campaign_attributes.issuer.faction.sequential - annotations = {annotation.key:annotation.value for annotation in campaign_attributes.annotations} - finished_time = None if campaign_attributes.WhichOneof('finished') == 'not_finished' else campaign_attributes.finish_time.ToDatetime() - logo = ImageDefinition.from_proto(campaign_attributes.logo.image, campaign_attributes.logo.attributes) - return Campaign(campaign_id=campaign_id, future_objectives=future_objectives, current_objectives=current_objectives, title=campaign_attributes.title.sequential, subtitle=campaign_attributes.subtitle.sequential, goal_description=campaign_attributes.goal_description.sequential, success_description=campaign_attributes.success_description.sequential, failure_description=campaign_attributes.failure_description.sequential, icon=campaign_attributes.icon.name, logo=logo, dashboard_background=campaign_attributes.dashboard_background.path, ao_feature_page=campaign_attributes.ao_feature_page.path, objective_background=campaign_attributes.objective_background.path, presenting_character=campaign_attributes.presenting_character.sequential, issuer=issuer, annotations=annotations, total_objectives=campaign_attributes.total_objectives, campaign_state=CampaignState.from_proto(campaign_attributes.state), scheduled_start_datetime=campaign_attributes.scheduled_start_time.ToDatetime(), scheduled_expiry_datetime=campaign_attributes.scheduled_expiry_time.ToDatetime(), finished_datetime=finished_time, target_progress=campaign_attributes.target_progress, contribution_method_configuration=ContributionMethodConfiguration.from_proto(campaign_attributes.contribution_method_configuration), version=CampaignVersion.from_proto(campaign_attributes.version), definition_name=campaign_attributes.definition_name) - - def to_flatbuffer(self, builder): - uuid_bytes = [ ord(byte) for byte in self.id.uuid.bytes ] - definition_version_fb = serialize_semantic_version(builder, self.version.definition_semantic_verison) - definition_name = self.definition_name if self.definition_name is not None else '' - definition_name_fb = builder.CreateString(definition_name) - fb_campaign.CampaignVersionStart(builder) - fb_campaign.CampaignVersionAddDefinitionVersion(builder, definition_version_fb) - fb_campaign.CampaignVersionAddEtag(builder, self.version.etag) - version_fb = fb_campaign.CampaignVersionEnd(builder) - icon_fb = builder.CreateString(self.icon) - dashboard_background_fb = builder.CreateString(self.dashboard_background) - ao_feature_page_fb = builder.CreateString(self.ao_feature_page) - objective_background_fb = builder.CreateString(self.objective_background) - logo_fb = self.logo.to_flatbuffer(builder) - annotations_list = [] - for key, value in self.annotations.iteritems(): - key_fb = builder.CreateString(key) - value_fb = builder.CreateString(value) - fb_campaign.AnnotationStart(builder) - fb_campaign.AnnotationAddKey(builder, key_fb) - fb_campaign.AnnotationAddValue(builder, value_fb) - annotation_fb = fb_campaign.AnnotationEnd(builder) - annotations_list.append(annotation_fb) - - fb_campaign.CampaignStartAnnotationsVector(builder, len(annotations_list)) - for annotation in reversed(annotations_list): - builder.PrependUOffsetTRelative(annotation) - - annotations_fb = builder.EndVector() - if self.finished_datetime is not None: - finished_type = fb_campaign.FinishedTime.FinishedTime - else: - finished_type = fb_campaign.FinishedTime.NONE - finished_time_fb = None - if self.finished_datetime is not None: - fb_campaign.FinishedStart(builder) - fb_campaign.FinishedAddTimestamp(builder, datetime_to_filetime(self.finished_datetime)) - finished_time_fb = fb_campaign.FinishedEnd(builder) - future_objective_offsets = [] - for future_objective in self.future_objectives: - contribution_method_fb = builder.CreateString(future_objective.contribution_method_name) - fb_campaign.FutureObjectiveStart(builder) - fb_campaign.FutureObjectiveAddContributionMethod(builder, contribution_method_fb) - fb_campaign.FutureObjectiveAddScheduledStartTime(builder, datetime_to_filetime(future_objective.start_datetime)) - fb_campaign.FutureObjectiveAddCareer(builder, future_objective.career_path) - future_objective_offsets.append(fb_campaign.FutureObjectiveEnd(builder)) - - fb_campaign.CampaignStartFutureObjectivesVector(builder, len(future_objective_offsets)) - for future_objective in reversed(future_objective_offsets): - builder.PrependUOffsetTRelative(future_objective) - - future_objectives_fb = builder.EndVector() - current_objective_offsets = [] - for current_objective in self.current_objectives: - current_objective_offsets.append(current_objective.to_flatbuffer(builder)) - - fb_campaign.CampaignStartCurrentObjectivesVector(builder, len(current_objective_offsets)) - for current_objective in reversed(current_objective_offsets): - builder.PrependUOffsetTRelative(current_objective) - - current_objectives_fb = builder.EndVector() - contribution_method_fb = self.contribution_method_configuration.to_flatbuffer(builder) - fb_campaign.CampaignStart(builder) - fb_campaign.CampaignAddUuid(builder, fb_campaign.CreateUuid(builder, uuid_bytes)) - fb_campaign.CampaignAddVersion(builder, version_fb) - fb_campaign.CampaignAddTitle(builder, self.title) - fb_campaign.CampaignAddSubtitle(builder, self.subtitle) - fb_campaign.CampaignAddBriefingGoalDescription(builder, self.goal_description) - fb_campaign.CampaignAddBriefingSuccessDescription(builder, self.success_description) - fb_campaign.CampaignAddBriefingFailureDescription(builder, self.failure_description) - fb_campaign.CampaignAddIcon(builder, icon_fb) - fb_campaign.CampaignAddLogo(builder, logo_fb) - fb_campaign.CampaignAddDashboardBackground(builder, dashboard_background_fb) - fb_campaign.CampaignAddAoFeaturePage(builder, ao_feature_page_fb) - fb_campaign.CampaignAddObjectiveBackground(builder, objective_background_fb) - fb_campaign.CampaignAddIssuer(builder, self.issuer) - fb_campaign.CampaignAddPresentingCharacter(builder, self.presenting_character) - fb_campaign.CampaignAddAnnotations(builder, annotations_fb) - fb_campaign.CampaignAddTotalObjectives(builder, self.total_objectives) - fb_campaign.CampaignAddState(builder, self.campaign_state) - fb_campaign.CampaignAddScheduledStartTime(builder, datetime_to_filetime(self.scheduled_start_datetime)) - fb_campaign.CampaignAddScheduledExpiryTime(builder, datetime_to_filetime(self.scheduled_expiry_datetime)) - fb_campaign.CampaignAddFinishedTimeType(builder, finished_type) - if finished_time_fb is not None: - fb_campaign.CampaignAddFinishedTime(builder, finished_time_fb) - fb_campaign.CampaignAddTargetProgress(builder, self.target_progress) - fb_campaign.CampaignAddContributionMethodConfig(builder, contribution_method_fb) - fb_campaign.CampaignAddFutureObjectives(builder, future_objectives_fb) - fb_campaign.CampaignAddCurrentObjectives(builder, current_objectives_fb) - fb_campaign.CampaignAddDefinitionName(builder, definition_name_fb) - return fb_campaign.CampaignEnd(builder) - - @classmethod - def from_flatbuffer(cls, campaign_fb): - campaign_id_bytes = [ chr(byte) for byte in campaign_fb.Uuid().Bytes() ] - campaign_id = CampaignID(UUID(bytes=campaign_id_bytes)) - definition_version = deserialize_semantic_version(campaign_fb.Version().DefinitionVersion()) - definition_name = campaign_fb.DefinitionName() - if definition_name is not None: - definition_name = definition_name.decode('utf-8') - annotations = {} - for i in range(campaign_fb.AnnotationsLength()): - annotation = campaign_fb.Annotations(i) - annotations[annotation.Key().decode('utf-8')] = annotation.Value().decode('utf-8') - - if campaign_fb.FinishedTimeType() == fb_campaign.FinishedTime.NONE: - finished_time = None - else: - union_data = campaign_fb.FinishedTime() - finished_time = fb_campaign.Finished() - finished_time.Init(union_data.Bytes, union_data.Pos) - finished_time = filetime_to_datetime(finished_time.Timestamp()) - future_objectives = [] - for i in range(campaign_fb.FutureObjectivesLength()): - objective = campaign_fb.FutureObjectives(i) - future_objective = FutureObjective(start_datetime=filetime_to_datetime(objective.ScheduledStartTime()), career_path=objective.Career(), contribution_method_name=objective.ContributionMethod().decode('utf-8'), campaign_id=campaign_id) - future_objectives.append(future_objective) - - current_objectives = [] - for i in range(campaign_fb.CurrentObjectivesLength()): - objective = campaign_fb.CurrentObjectives(i) - current_objective = Objective.from_flatbuffer(objective) - current_objective.campaign_id = campaign_id - current_objectives.append(current_objective) - - return Campaign(campaign_id=campaign_id, version=CampaignVersion(definition_semantic_version=definition_version, etag=campaign_fb.Version().Etag()), title=campaign_fb.Title(), subtitle=campaign_fb.Subtitle(), goal_description=campaign_fb.BriefingGoalDescription(), success_description=campaign_fb.BriefingSuccessDescription(), failure_description=campaign_fb.BriefingFailureDescription(), icon=campaign_fb.Icon().decode('utf-8'), logo=ImageDefinition.from_flatbuffer(campaign_fb.Logo()), dashboard_background=campaign_fb.DashboardBackground().decode('utf-8'), ao_feature_page=campaign_fb.AoFeaturePage().decode('utf-8'), objective_background=campaign_fb.ObjectiveBackground().decode('utf-8'), issuer=campaign_fb.Issuer(), presenting_character=campaign_fb.PresentingCharacter(), annotations=annotations, total_objectives=campaign_fb.TotalObjectives(), campaign_state=campaign_fb.State(), scheduled_start_datetime=filetime_to_datetime(campaign_fb.ScheduledStartTime()), scheduled_expiry_datetime=filetime_to_datetime(campaign_fb.ScheduledExpiryTime()), finished_datetime=finished_time, target_progress=campaign_fb.TargetProgress(), contribution_method_configuration=ContributionMethodConfiguration.from_flatbuffer(campaign_fb.ContributionMethodConfig()), future_objectives=future_objectives, current_objectives=current_objectives, definition_name=definition_name) - - def __eq__(self, other): - if not isinstance(other, Campaign): - return False - return self.id == other.id and self.title == other.title and self.subtitle == other.subtitle and self.goal_description == other.goal_description and self.success_description == other.success_description and self.failure_description == other.failure_description and self.icon == other.icon and self.logo == other.logo and self.dashboard_background == other.dashboard_background and self.ao_feature_page == other.ao_feature_page and self.objective_background == other.objective_background and self.presenting_character == other.presenting_character and self.issuer == other.issuer and self.annotations == other.annotations and self.total_objectives == other.total_objectives and self.campaign_state == other.campaign_state and self.scheduled_start_datetime == other.scheduled_start_datetime and self.scheduled_expiry_datetime == other.scheduled_expiry_datetime and self.finished_datetime == other.finished_datetime and self.target_progress == other.target_progress and self.contribution_method_configuration == other.contribution_method_configuration and self.version == other.version and self.future_objectives == other.future_objectives and self.current_objectives == other.current_objectives and self.definition_name == other.definition_name - - def __ne__(self, other): - result = self.__eq__(other) - return not result - - -@Enum - -class CampaignState(object): - UNSPECIFIED = 0 - ACTIVE = 1 - COMPLETED = 2 - EXPIRED = 3 - CANCELLED = 4 - - @classmethod - def from_proto(cls, campaign_state): - enum_value = _campaign_state_proto_to_enum.get(campaign_state, None) - if enum_value is None: - raise ValueError('Campaign State: Conversion to enum failed with unrecognized value: %s' % campaign_state) - return enum_value - - -_campaign_state_proto_to_enum = {STATE_UNSPECIFIED: CampaignState.UNSPECIFIED, - STATE_ACTIVE: CampaignState.ACTIVE, - STATE_COMPLETED: CampaignState.COMPLETED, - STATE_EXPIRED: CampaignState.EXPIRED, - STATE_CANCELLED: CampaignState.CANCELLED} - -class CampaignVersion(object): - - def __init__(self, definition_semantic_version, etag): - self._definition_semantic_version = definition_semantic_version - self._etag = etag - - @property - def definition_semantic_verison(self): - return self._definition_semantic_version - - @property - def etag(self): - return self._etag - - @classmethod - def from_proto(cls, version): - return CampaignVersion(SemanticVersion.from_proto(version.definition_version), version.etag) - - def to_proto(self): - return Version(definition_version=self._definition_semantic_version.to_eve_public_proto(), etag=self._etag) - - def __repr__(self): - return '<CampaignVersion>' + self.__dict__.__repr__() - - def __eq__(self, other): - if not isinstance(other, CampaignVersion): - return NotImplemented - return self.definition_semantic_verison == other.definition_semantic_verison and self.etag == other.etag - - def __ne__(self, other): - return not self.__eq__(other) - - -class CampaignStats(object): - - def __init__(self, campaign_id, current_campaign_progress, total_contributors): - self._campaign_id = campaign_id - self._current_campaign_progress = current_campaign_progress - self._total_contributors = total_contributors - - @property - def id(self): - return self._campaign_id - - @property - def current_campaign_progress(self): - return self._current_campaign_progress - - @property - def total_contributors(self): - return self._total_contributors - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, campaign_id, proto): - return CampaignStats(campaign_id=CampaignID.from_proto(campaign_id), current_campaign_progress=proto.current_campaign_progress, total_contributors=proto.total_contributors) - - def __eq__(self, other): - if not isinstance(other, CampaignStats): - return NotImplemented - return self.id == other.id and self.current_campaign_progress == other.current_campaign_progress and self.total_contributors == other.total_contributors - - def __ne__(self, other): - return not self == other - - -class ImageDefinition(object): - - def __init__(self, path, width, height): - self._path = path - self._width = width - self._height = height - - @property - def path(self): - return self._path - - @property - def display_width(self): - return self._width - - @property - def display_height(self): - return self._height - - @classmethod - def from_proto(cls, identifier, attributes): - return ImageDefinition(path=identifier.path, width=attributes.display_width, height=attributes.display_height) - - @classmethod - def from_flatbuffer(cls, imagedef_fb): - return ImageDefinition(path=imagedef_fb.Path().decode('utf-8'), width=imagedef_fb.Width(), height=imagedef_fb.Height()) - - def to_flatbuffer(self, builder): - path_fb = builder.CreateString(self._path) - fb_campaign.ImageDefinitionStart(builder) - fb_campaign.ImageDefinitionAddPath(builder, path_fb) - fb_campaign.ImageDefinitionAddWidth(builder, self.display_width) - fb_campaign.ImageDefinitionAddHeight(builder, self.display_height) - return fb_campaign.ImageDefinitionEnd(builder) - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __eq__(self, other): - if not isinstance(other, ImageDefinition): - return NotImplemented - return self.path == other.path and self.display_width == other.display_width and self.display_height == other.display_height - - def __ne__(self, other): - return not self.__eq__(other) - - -class UnredeemedReward(object): - - def __init__(self, objective_id, isk_intervals, lp_intervals): - self._objective_id = objective_id - self._isk_intervals = isk_intervals - self._lp_intervals = lp_intervals - - @property - def objective_id(self): - return self._objective_id - - @property - def isk_intervals(self): - return self._isk_intervals - - @property - def lp_intervals(self): - return self._lp_intervals - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, reward): - isk_intervals = 0 if reward.WhichOneof('isk') == 'no_isk_unredeemed' else reward.isk_intervals_unredeemed - lp_intervals = 0 if reward.WhichOneof('lp') == 'no_lp_unredeemed' else reward.lp_intervals_unredeemed - return UnredeemedReward(objective_id=ObjectiveID.from_proto(reward.objective), isk_intervals=isk_intervals, lp_intervals=lp_intervals) - - def __eq__(self, other): - if not isinstance(other, UnredeemedReward): - return NotImplemented - return self.objective_id == other.objective_id and self.isk_intervals == other.isk_intervals and self.lp_intervals == other.lp_intervals - - def __ne__(self, other): - return not self.__eq__(other) diff --git a/campaigns/client/data_model/career_paths.py b/campaigns/client/data_model/career_paths.py @@ -1,11 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\career_paths.py -import eveProto.generated.eve_public.career.career_pb2 as careerConst -career_path_none = 0 -career_path_explorer = 4 -career_path_enforcer = 6 -career_path_industrialist = 5 -career_path_soldier_of_fortune = 7 -PROTO_CAREER_TO_FDS_CAREER = {careerConst.CAREER_EXPLORATION: career_path_explorer, - careerConst.CAREER_INDUSTRIALIST: career_path_industrialist, - careerConst.CAREER_ENFORCER: career_path_enforcer, - careerConst.CAREER_SOLDIER_OF_FORTUNE: career_path_soldier_of_fortune} diff --git a/campaigns/client/data_model/contribution_method.py b/campaigns/client/data_model/contribution_method.py @@ -1,335 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\contribution_method.py -import campaigns.client.data_model.flatbuffer.contributionmethod_generated as fb_contributionmethod -import campaigns.client.data_model.flatbuffer.campaigndefinition_generated as fb_campaigndefinition -from campaigns.client.contributionmethods.job_definitions import JobContributionMethodDefinition, JobContributionMethodConfiguration, JobParameterDefinitionController -from requests.status_codes import title - -class ContributionMethodDefinition(object): - - def __init__(self, contribution_method, parameter_definitions, title, progress_description, icon): - self._contribution_method = contribution_method - self._parameter_definitions = parameter_definitions - self._title = title - self._progress_description = progress_description - self._icon = icon - - @property - def contribution_method(self): - return self._contribution_method - - @property - def parameter_definitions(self): - return self._parameter_definitions - - @property - def title(self): - return self._title - - @property - def progress_description(self): - return self._progress_description - - @property - def icon(self): - return self._icon - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, definition): - parameters = [] - for definition_parameter in definition.attributes.parameters: - matcher = definition_parameter.matcher - parameter = MatcherParameterDefinition(key=matcher.key, type=matcher.type, accepted_value_types_list=matcher.accepted_value_types[:], title=matcher.title.sequential, description=matcher.description.sequential, icon=matcher.icon.name) - parameters.append(parameter) - - contribution_method_attributes = definition.attributes - return ContributionMethodDefinition(contribution_method=definition.definition.name, parameter_definitions=parameters, title=contribution_method_attributes.title.sequential, progress_description=contribution_method_attributes.progress_description.sequential, icon=contribution_method_attributes.icon.name) - - @classmethod - def from_flatbuffer(cls, definition_fb): - name = definition_fb.Name().decode('utf-8') - title = definition_fb.Title() - progress_description = definition_fb.ProgressDescription() - icon = definition_fb.Icon().decode('utf-8') - parameters = [] - for i in range(definition_fb.MatcherParametersLength()): - parameters.append(MatcherParameterDefinition.from_flatbuffer(definition_fb.MatcherParameters(i))) - - return ContributionMethodDefinition(name, parameters, title, progress_description, icon) - - def to_flatbuffer(self, builder): - name = builder.CreateString(self._contribution_method) - icon = builder.CreateString(self._icon) - parameter_offsets = [ parameter.to_flatbuffer(builder) for parameter in self.parameter_definitions ] - fb_contributionmethod.DefinitionStartMatcherParametersVector(builder, len(parameter_offsets)) - for offset in reversed(parameter_offsets): - builder.PrependUOffsetTRelative(offset) - - parameters_offset = builder.EndVector() - fb_contributionmethod.DefinitionStart(builder) - fb_contributionmethod.DefinitionAddName(builder, name) - fb_contributionmethod.DefinitionAddTitle(builder, self._title) - fb_contributionmethod.DefinitionAddProgressDescription(builder, self._progress_description) - fb_contributionmethod.DefinitionAddIcon(builder, icon) - fb_contributionmethod.DefinitionAddMatcherParameters(builder, parameters_offset) - return fb_contributionmethod.DefinitionEnd(builder) - - def to_job_format(self): - return JobContributionMethodDefinition(self) - - def __eq__(self, other): - if not isinstance(other, ContributionMethodDefinition): - return NotImplemented - return self.contribution_method == other.contribution_method and self._parameter_definitions == other._parameter_definitions and self._title == other._title and self._progress_description == other._progress_description and self._icon == other._icon - - def __ne__(self, other): - return not self.__eq__(other) - - -class MatcherParameterDefinition(object): - - def __init__(self, key, type, accepted_value_types_list, title, description, icon): - self._key = key - self._type = type - self._accepted_value_types_list = accepted_value_types_list - self._title = title - self._description = description - self._icon = icon - - @property - def key(self): - return self._key - - @property - def type(self): - return self._type - - @property - def accepted_value_types_list(self): - return self._accepted_value_types_list - - @property - def title(self): - return self._title - - @property - def description(self): - return self._description - - @property - def icon(self): - return self._icon - - @classmethod - def from_flatbuffer(cls, matcher_parameter_fb): - key = matcher_parameter_fb.Key().decode('utf-8') - type = matcher_parameter_fb.Type().decode('utf-8') - title = matcher_parameter_fb.Title() - description = matcher_parameter_fb.Description() - icon = matcher_parameter_fb.Icon().decode('utf-8') - accepted_value_types_list = [] - for i in range(matcher_parameter_fb.AcceptedValueTypesLength()): - accepted_value_types_list.append(matcher_parameter_fb.AcceptedValueTypes(i).decode('utf-8')) - - return MatcherParameterDefinition(key, type, accepted_value_types_list, title, description, icon) - - def to_flatbuffer(self, builder): - key = builder.CreateString(self._key) - type = builder.CreateString(self._type) - icon = builder.CreateString(self._icon) - accepted_value_types_list = [ builder.CreateString(accepted_value_type) for accepted_value_type in self._accepted_value_types_list ] - fb_contributionmethod.MatcherParameterStartAcceptedValueTypesVector(builder, len(accepted_value_types_list)) - for accepted_value_type in reversed(accepted_value_types_list): - builder.PrependUOffsetTRelative(accepted_value_type) - - avt_list_offset = builder.EndVector() - fb_contributionmethod.MatcherParameterStart(builder) - fb_contributionmethod.MatcherParameterAddKey(builder, key) - fb_contributionmethod.MatcherParameterAddType(builder, type) - fb_contributionmethod.MatcherParameterAddIcon(builder, icon) - fb_contributionmethod.MatcherParameterAddTitle(builder, self.title) - fb_contributionmethod.MatcherParameterAddDescription(builder, self.description) - fb_contributionmethod.MatcherParameterAddAcceptedValueTypes(builder, avt_list_offset) - return fb_contributionmethod.MatcherParameterEnd(builder) - - def to_job_format(self): - return JobParameterDefinitionController(self) - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __eq__(self, other): - if not isinstance(other, MatcherParameterDefinition): - return NotImplemented - return self.key == other.key and self.type == other.type and self.accepted_value_types_list == other.accepted_value_types_list and self.title == other.title and self.description == other.description and self.icon == other.icon - - def __ne__(self, other): - return not self.__eq__(other) - - -class ContributionMethodConfiguration(object): - - def __init__(self, contribution_method, parameter_configs): - self._contribution_method = contribution_method - self._parameter_configs = parameter_configs - - @property - def contribution_method(self): - return self._contribution_method - - @property - def parameter_configs(self): - return self._parameter_configs - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, contribution_method_configuration): - parameter_configs = [] - for parameter_config in contribution_method_configuration.parameters: - parameter_values_configs = [] - for parameter_value in parameter_config.matcher.values: - parameter_values_configs.append(MatcherValueEntry(parameter_value.value_type, parameter_value.values)) - - parameter_configs.append(ParameterConfiguration(parameter_config.key, parameter_values_configs)) - - return ContributionMethodConfiguration(contribution_method=contribution_method_configuration.contribution_method.name, parameter_configs=parameter_configs) - - @classmethod - def from_flatbuffer(cls, configuration): - name = configuration.Name().decode('utf-8') - parameters = [] - for params_idx in range(configuration.ParametersLength()): - parameter = configuration.Parameters(params_idx) - matchers = [] - for values_idx in range(parameter.ValuesLength()): - value_type = parameter.Values(values_idx) - type_values = [] - for type_values_idx in range(value_type.ValuesLength()): - type_values.append(value_type.Values(type_values_idx)) - - matcher = MatcherValueEntry(value_type.Type().decode('utf-8'), type_values) - matchers.append(matcher) - - parameter = ParameterConfiguration(key=parameter.Key().decode('utf-8'), values=matchers) - parameters.append(parameter) - - return ContributionMethodConfiguration(contribution_method=name, parameter_configs=parameters) - - def to_flatbuffer(self, builder): - name_fb = builder.CreateString(self.contribution_method) - parameter_offset_list = [] - for parameter_config in self.parameter_configs: - key = builder.CreateString(parameter_config.key) - values_list = [] - for parameter_value in parameter_config.values: - value_type = builder.CreateString(parameter_value.value_type) - value_strings = [] - for value in parameter_value.values: - value_string = builder.CreateString(value) - value_strings.append(value_string) - - fb_campaigndefinition.ValueEntryStartValuesVector(builder, len(value_strings)) - for value_string in reversed(value_strings): - builder.PrependUOffsetTRelative(value_string) - - values_fb = builder.EndVector() - fb_campaigndefinition.ValueEntryStart(builder) - fb_campaigndefinition.ValueEntryAddType(builder, value_type) - fb_campaigndefinition.ValueEntryAddValues(builder, values_fb) - values_list.append(fb_campaigndefinition.ValueEntryEnd(builder)) - - fb_campaigndefinition.MatcherParameterConfigurationStartValuesVector(builder, len(values_list)) - for value_offset in reversed(values_list): - builder.PrependUOffsetTRelative(value_offset) - - values_list_fb = builder.EndVector() - fb_campaigndefinition.MatcherParameterConfigurationStart(builder) - fb_campaigndefinition.MatcherParameterConfigurationAddKey(builder, key) - fb_campaigndefinition.MatcherParameterConfigurationAddValues(builder, values_list_fb) - parameter_offset_list.append(fb_campaigndefinition.MatcherParameterConfigurationEnd(builder)) - - fb_campaigndefinition.ContributionMethodConfigurationStartParametersVector(builder, len(parameter_offset_list)) - for parameter_offset in reversed(parameter_offset_list): - builder.PrependUOffsetTRelative(parameter_offset) - - parameters_fb = builder.EndVector() - fb_campaigndefinition.ContributionMethodConfigurationStart(builder) - fb_campaigndefinition.ContributionMethodConfigurationAddName(builder, name_fb) - fb_campaigndefinition.ContributionMethodConfigurationAddParameters(builder, parameters_fb) - return fb_campaigndefinition.ContributionMethodConfigurationEnd(builder) - - def to_job_format(self): - return JobContributionMethodConfiguration(self) - - def __eq__(self, other): - if not isinstance(other, ContributionMethodConfiguration): - return NotImplemented - return self.contribution_method == other.contribution_method and self._parameter_configs == other._parameter_configs - - def __ne__(self, other): - return not self.__eq__(other) - - -class ParameterConfiguration(object): - - def __init__(self, key, values): - self._key = key - self._values = values - - @property - def key(self): - return self._key - - @property - def values(self): - return self._values - - def get_values(self): - value_list = [] - for value_entry in self._values: - for v in value_entry.values: - value_list.append((value_entry.value_type, int(v))) - - return value_list - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __eq__(self, other): - if not isinstance(other, ParameterConfiguration): - return NotImplemented - return self.key == other.key and self._values == other.values - - def __ne__(self, other): - return not self.__eq__(other) - - -class MissingParameterConfiguration(ParameterConfiguration): - pass - - -class MatcherValueEntry(object): - - def __init__(self, value_type, values): - self._value_type = value_type - self._values = values - - @property - def value_type(self): - return self._value_type - - @property - def values(self): - return self._values - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __eq__(self, other): - if not isinstance(other, MatcherValueEntry): - return NotImplemented - return self.value_type == other.value_type and self.values == other.values diff --git a/campaigns/client/data_model/flatbuffer/__init__.py b/campaigns/client/data_model/flatbuffer/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\flatbuffer\__init__.py -pass diff --git a/campaigns/client/data_model/flatbuffer/campaigndefinition_generated.py b/campaigns/client/data_model/flatbuffer/campaigndefinition_generated.py @@ -1,1423 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\flatbuffer\campaigndefinition_generated.py -import flatbuffers -from flatbuffers.compat import import_numpy -np = import_numpy() - -class CampaignState(object): - Unspecified = 0 - Active = 1 - Completed = 2 - Expired = 3 - Cancelled = 4 - - -class ObjectiveState(object): - Unspecified = 0 - Active = 1 - Completed = 2 - Expired = 3 - Cancelled = 4 - - -class FinishedTime(object): - NONE = 0 - FinishedTime = 1 - - -class IskReward(object): - NONE = 0 - details = 1 - - -class LpReward(object): - NONE = 0 - details = 1 - - -class StandingReward(object): - NONE = 0 - details = 1 - - -class UUID(object): - __slots__ = ['_tab'] - - @classmethod - def SizeOf(cls): - return 16 - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Bytes(self, j = None): - if j is None: - return [ self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + i * 1)) for i in range(self.BytesLength()) ] - elif j >= 0 and j < self.BytesLength(): - return self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + j * 1)) - else: - return - - def BytesAsNumpy(self): - return self._tab.GetArrayAsNumpy(flatbuffers.number_types.Uint8Flags, self._tab.Pos + 0, self.BytesLength()) - - def BytesLength(self): - return 16 - - def BytesIsNone(self): - return False - - -def CreateUuid(builder, bytes): - builder.Prep(1, 16) - for _idx0 in range(16, 0, -1): - builder.PrependUint8(bytes[_idx0 - 1]) - - return builder.Offset() - - -class SemanticVersion(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SemanticVersion() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsSemanticVersion(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Major(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Minor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Patch(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def PrereleaseTags(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def PrereleaseTagsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def PrereleaseTagsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - return o == 0 - - def BuildTags(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def BuildTagsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def BuildTagsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - return o == 0 - - -def SemanticVersionStart(builder): - builder.StartObject(5) - - -def SemanticVersionAddMajor(builder, major): - builder.PrependUint64Slot(0, major, 0) - - -def SemanticVersionAddMinor(builder, minor): - builder.PrependUint64Slot(1, minor, 0) - - -def SemanticVersionAddPatch(builder, patch): - builder.PrependUint64Slot(2, patch, 0) - - -def SemanticVersionAddPrereleaseTags(builder, prereleaseTags): - builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(prereleaseTags), 0) - - -def SemanticVersionStartPrereleaseTagsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def SemanticVersionCreatePrereleaseTagsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def SemanticVersionAddBuildTags(builder, buildTags): - builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buildTags), 0) - - -def SemanticVersionStartBuildTagsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def SemanticVersionCreateBuildTagsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def SemanticVersionEnd(builder): - return builder.EndObject() - - -class CampaignVersion(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CampaignVersion() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsCampaignVersion(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def DefinitionVersion(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = SemanticVersion() - obj.Init(self._tab.Bytes, x) - return obj - - def Etag(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - -def CampaignVersionStart(builder): - builder.StartObject(2) - - -def CampaignVersionAddDefinitionVersion(builder, definitionVersion): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(definitionVersion), 0) - - -def CampaignVersionAddEtag(builder, etag): - builder.PrependUint64Slot(1, etag, 0) - - -def CampaignVersionEnd(builder): - return builder.EndObject() - - -class ImageDefinition(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ImageDefinition() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsImageDefinition(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Path(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Width(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def Height(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - -def ImageDefinitionStart(builder): - builder.StartObject(3) - - -def ImageDefinitionAddPath(builder, path): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(path), 0) - - -def ImageDefinitionAddWidth(builder, width): - builder.PrependUint32Slot(1, width, 0) - - -def ImageDefinitionAddHeight(builder, height): - builder.PrependUint32Slot(2, height, 0) - - -def ImageDefinitionEnd(builder): - return builder.EndObject() - - -class Annotation(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Annotation() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsAnnotation(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Key(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Value(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - -def AnnotationStart(builder): - builder.StartObject(2) - - -def AnnotationAddKey(builder, key): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) - - -def AnnotationAddValue(builder, value): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) - - -def AnnotationEnd(builder): - return builder.EndObject() - - -class ValueEntry(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ValueEntry() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsValueEntry(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Type(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Values(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def ValuesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def ValuesIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - return o == 0 - - -def ValueEntryStart(builder): - builder.StartObject(2) - - -def ValueEntryAddType(builder, type): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(type), 0) - - -def ValueEntryAddValues(builder, values): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(values), 0) - - -def ValueEntryStartValuesVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def ValueEntryCreateValuesVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def ValueEntryEnd(builder): - return builder.EndObject() - - -class MatcherParameterConfiguration(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MatcherParameterConfiguration() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsMatcherParameterConfiguration(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Key(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Values(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = ValueEntry() - obj.Init(self._tab.Bytes, x) - return obj - - def ValuesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def ValuesIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - return o == 0 - - -def MatcherParameterConfigurationStart(builder): - builder.StartObject(2) - - -def MatcherParameterConfigurationAddKey(builder, key): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) - - -def MatcherParameterConfigurationAddValues(builder, values): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(values), 0) - - -def MatcherParameterConfigurationStartValuesVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def MatcherParameterConfigurationCreateValuesVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def MatcherParameterConfigurationEnd(builder): - return builder.EndObject() - - -class ContributionMethodConfiguration(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ContributionMethodConfiguration() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsContributionMethodConfiguration(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Name(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Parameters(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = MatcherParameterConfiguration() - obj.Init(self._tab.Bytes, x) - return obj - - def ParametersLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def ParametersIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - return o == 0 - - -def ContributionMethodConfigurationStart(builder): - builder.StartObject(2) - - -def ContributionMethodConfigurationAddName(builder, name): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) - - -def ContributionMethodConfigurationAddParameters(builder, parameters): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(parameters), 0) - - -def ContributionMethodConfigurationStartParametersVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def ContributionMethodConfigurationCreateParametersVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def ContributionMethodConfigurationEnd(builder): - return builder.EndObject() - - -class Finished(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Finished() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsFinished(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Timestamp(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - -def FinishedStart(builder): - builder.StartObject(1) - - -def FinishedAddTimestamp(builder, timestamp): - builder.PrependUint64Slot(0, timestamp, 0) - - -def FinishedEnd(builder): - return builder.EndObject() - - -class FutureObjective(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FutureObjective() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsFutureObjective(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def ScheduledStartTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Career(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def ContributionMethod(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - -def FutureObjectiveStart(builder): - builder.StartObject(3) - - -def FutureObjectiveAddScheduledStartTime(builder, scheduledStartTime): - builder.PrependUint64Slot(0, scheduledStartTime, 0) - - -def FutureObjectiveAddCareer(builder, career): - builder.PrependUint32Slot(1, career, 0) - - -def FutureObjectiveAddContributionMethod(builder, contributionMethod): - builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethod), 0) - - -def FutureObjectiveEnd(builder): - return builder.EndObject() - - -class RewardDetails(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = RewardDetails() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsRewardDetails(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def AmountPerInterval(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float64Flags, o + self._tab.Pos) - return 0.0 - - def Issuer(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def IntervalSize(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - -def RewardDetailsStart(builder): - builder.StartObject(3) - - -def RewardDetailsAddAmountPerInterval(builder, amountPerInterval): - builder.PrependFloat64Slot(0, amountPerInterval, 0.0) - - -def RewardDetailsAddIssuer(builder, issuer): - builder.PrependUint64Slot(1, issuer, 0) - - -def RewardDetailsAddIntervalSize(builder, intervalSize): - builder.PrependUint64Slot(2, intervalSize, 0) - - -def RewardDetailsEnd(builder): - return builder.EndObject() - - -class Rewards(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Rewards() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsRewards(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def IskType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - def Isk(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - - def LpType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - def Lp(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - - def StandingType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - def Standing(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - - -def RewardsStart(builder): - builder.StartObject(6) - - -def RewardsAddIskType(builder, iskType): - builder.PrependUint8Slot(0, iskType, 0) - - -def RewardsAddIsk(builder, isk): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(isk), 0) - - -def RewardsAddLpType(builder, lpType): - builder.PrependUint8Slot(2, lpType, 0) - - -def RewardsAddLp(builder, lp): - builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(lp), 0) - - -def RewardsAddStandingType(builder, standingType): - builder.PrependUint8Slot(4, standingType, 0) - - -def RewardsAddStanding(builder, standing): - builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(standing), 0) - - -def RewardsEnd(builder): - return builder.EndObject() - - -class Objective(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Objective() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsObjective(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Uuid(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = o + self._tab.Pos - obj = UUID() - obj.Init(self._tab.Bytes, x) - return obj - - def Title(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Subtitle(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Issuer(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def PresentingCharacter(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def ContentTags(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def ContentTagsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def ContentTagsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - return o == 0 - - def ScheduledStartTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def FinishedTimeType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - def FinishedTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - - def Career(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def TargetProgress(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def MaxProgressPerParticipant(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def ContributionMethodConfig(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = ContributionMethodConfiguration() - obj.Init(self._tab.Bytes, x) - return obj - - def Rewards(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = Rewards() - obj.Init(self._tab.Bytes, x) - return obj - - def ObjectiveState(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def Annotations(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Annotation() - obj.Init(self._tab.Bytes, x) - return obj - - def AnnotationsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def AnnotationsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) - return o == 0 - - -def ObjectiveStart(builder): - builder.StartObject(16) - - -def ObjectiveAddUuid(builder, uuid): - builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(uuid), 0) - - -def ObjectiveAddTitle(builder, title): - builder.PrependUint64Slot(1, title, 0) - - -def ObjectiveAddSubtitle(builder, subtitle): - builder.PrependUint64Slot(2, subtitle, 0) - - -def ObjectiveAddIssuer(builder, issuer): - builder.PrependUint64Slot(3, issuer, 0) - - -def ObjectiveAddPresentingCharacter(builder, presentingCharacter): - builder.PrependUint64Slot(4, presentingCharacter, 0) - - -def ObjectiveAddContentTags(builder, contentTags): - builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(contentTags), 0) - - -def ObjectiveStartContentTagsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def ObjectiveCreateContentTagsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def ObjectiveAddScheduledStartTime(builder, scheduledStartTime): - builder.PrependUint64Slot(6, scheduledStartTime, 0) - - -def ObjectiveAddFinishedTimeType(builder, finishedTimeType): - builder.PrependUint8Slot(7, finishedTimeType, 0) - - -def ObjectiveAddFinishedTime(builder, finishedTime): - builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(finishedTime), 0) - - -def ObjectiveAddCareer(builder, career): - builder.PrependUint32Slot(9, career, 0) - - -def ObjectiveAddTargetProgress(builder, targetProgress): - builder.PrependUint64Slot(10, targetProgress, 0) - - -def ObjectiveAddMaxProgressPerParticipant(builder, maxProgressPerParticipant): - builder.PrependUint64Slot(11, maxProgressPerParticipant, 0) - - -def ObjectiveAddContributionMethodConfig(builder, contributionMethodConfig): - builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethodConfig), 0) - - -def ObjectiveAddRewards(builder, rewards): - builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(rewards), 0) - - -def ObjectiveAddObjectiveState(builder, objectiveState): - builder.PrependUint32Slot(14, objectiveState, 0) - - -def ObjectiveAddAnnotations(builder, annotations): - builder.PrependUOffsetTRelativeSlot(15, flatbuffers.number_types.UOffsetTFlags.py_type(annotations), 0) - - -def ObjectiveStartAnnotationsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def ObjectiveCreateAnnotationsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def ObjectiveEnd(builder): - return builder.EndObject() - - -class Campaign(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Campaign() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsCampaign(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Uuid(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = o + self._tab.Pos - obj = UUID() - obj.Init(self._tab.Bytes, x) - return obj - - def Version(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = CampaignVersion() - obj.Init(self._tab.Bytes, x) - return obj - - def Title(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Subtitle(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def BriefingGoalDescription(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def BriefingSuccessDescription(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def BriefingFailureDescription(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Icon(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Logo(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = ImageDefinition() - obj.Init(self._tab.Bytes, x) - return obj - - def DashboardBackground(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def AoFeaturePage(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def ObjectiveBackground(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Issuer(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def PresentingCharacter(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Annotations(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Annotation() - obj.Init(self._tab.Bytes, x) - return obj - - def AnnotationsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def AnnotationsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) - return o == 0 - - def TotalObjectives(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def State(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - def ScheduledStartTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(38)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def ScheduledExpiryTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(40)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def FinishedTimeType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - def FinishedTime(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(44)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - - def TargetProgress(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(46)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def ContributionMethodConfig(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(48)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = ContributionMethodConfiguration() - obj.Init(self._tab.Bytes, x) - return obj - - def FutureObjectives(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = FutureObjective() - obj.Init(self._tab.Bytes, x) - return obj - - def FutureObjectivesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def FutureObjectivesIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) - return o == 0 - - def CurrentObjectives(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Objective() - obj.Init(self._tab.Bytes, x) - return obj - - def CurrentObjectivesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def CurrentObjectivesIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) - return o == 0 - - def DefinitionName(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(54)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - -def CampaignStart(builder): - builder.StartObject(26) - - -def CampaignAddUuid(builder, uuid): - builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(uuid), 0) - - -def CampaignAddVersion(builder, version): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(version), 0) - - -def CampaignAddTitle(builder, title): - builder.PrependUint64Slot(2, title, 0) - - -def CampaignAddSubtitle(builder, subtitle): - builder.PrependUint64Slot(3, subtitle, 0) - - -def CampaignAddBriefingGoalDescription(builder, briefingGoalDescription): - builder.PrependUint64Slot(4, briefingGoalDescription, 0) - - -def CampaignAddBriefingSuccessDescription(builder, briefingSuccessDescription): - builder.PrependUint64Slot(5, briefingSuccessDescription, 0) - - -def CampaignAddBriefingFailureDescription(builder, briefingFailureDescription): - builder.PrependUint64Slot(6, briefingFailureDescription, 0) - - -def CampaignAddIcon(builder, icon): - builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) - - -def CampaignAddLogo(builder, logo): - builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(logo), 0) - - -def CampaignAddDashboardBackground(builder, dashboardBackground): - builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(dashboardBackground), 0) - - -def CampaignAddAoFeaturePage(builder, aoFeaturePage): - builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(aoFeaturePage), 0) - - -def CampaignAddObjectiveBackground(builder, objectiveBackground): - builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(objectiveBackground), 0) - - -def CampaignAddIssuer(builder, issuer): - builder.PrependUint64Slot(12, issuer, 0) - - -def CampaignAddPresentingCharacter(builder, presentingCharacter): - builder.PrependUint64Slot(13, presentingCharacter, 0) - - -def CampaignAddAnnotations(builder, annotations): - builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(annotations), 0) - - -def CampaignStartAnnotationsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def CampaignCreateAnnotationsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def CampaignAddTotalObjectives(builder, totalObjectives): - builder.PrependUint32Slot(15, totalObjectives, 0) - - -def CampaignAddState(builder, state): - builder.PrependUint32Slot(16, state, 0) - - -def CampaignAddScheduledStartTime(builder, scheduledStartTime): - builder.PrependUint64Slot(17, scheduledStartTime, 0) - - -def CampaignAddScheduledExpiryTime(builder, scheduledExpiryTime): - builder.PrependUint64Slot(18, scheduledExpiryTime, 0) - - -def CampaignAddFinishedTimeType(builder, finishedTimeType): - builder.PrependUint8Slot(19, finishedTimeType, 0) - - -def CampaignAddFinishedTime(builder, finishedTime): - builder.PrependUOffsetTRelativeSlot(20, flatbuffers.number_types.UOffsetTFlags.py_type(finishedTime), 0) - - -def CampaignAddTargetProgress(builder, targetProgress): - builder.PrependUint64Slot(21, targetProgress, 0) - - -def CampaignAddContributionMethodConfig(builder, contributionMethodConfig): - builder.PrependUOffsetTRelativeSlot(22, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethodConfig), 0) - - -def CampaignAddFutureObjectives(builder, futureObjectives): - builder.PrependUOffsetTRelativeSlot(23, flatbuffers.number_types.UOffsetTFlags.py_type(futureObjectives), 0) - - -def CampaignStartFutureObjectivesVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def CampaignCreateFutureObjectivesVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def CampaignAddCurrentObjectives(builder, currentObjectives): - builder.PrependUOffsetTRelativeSlot(24, flatbuffers.number_types.UOffsetTFlags.py_type(currentObjectives), 0) - - -def CampaignStartCurrentObjectivesVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def CampaignCreateCurrentObjectivesVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def CampaignAddDefinitionName(builder, definitionName): - builder.PrependUOffsetTRelativeSlot(25, flatbuffers.number_types.UOffsetTFlags.py_type(definitionName), 0) - - -def CampaignEnd(builder): - return builder.EndObject() - - -class CampaignList(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CampaignList() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsCampaignList(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Campaigns(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Campaign() - obj.Init(self._tab.Bytes, x) - return obj - - def CampaignsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def CampaignsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - return o == 0 - - -def CampaignListStart(builder): - builder.StartObject(1) - - -def CampaignListAddCampaigns(builder, campaigns): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(campaigns), 0) - - -def CampaignListStartCampaignsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def CampaignListCreateCampaignsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def CampaignListEnd(builder): - return builder.EndObject() diff --git a/campaigns/client/data_model/flatbuffer/campaigndefinition_serialization.py b/campaigns/client/data_model/flatbuffer/campaigndefinition_serialization.py @@ -1,31 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\flatbuffer\campaigndefinition_serialization.py -import campaigns.client.data_model.flatbuffer.campaigndefinition_generated as fb_campaign -from campaigns.client.data_model.campaign import Campaign -from flatbuffers import Builder - -def serialize_campaigns_list_to_flatbuffer(campaign_list): - builder = Builder() - serialized_campaigns = [] - for campaign in campaign_list: - serialized_campaigns.append(campaign.to_flatbuffer(builder)) - - fb_campaign.CampaignListStartCampaignsVector(builder, len(serialized_campaigns)) - for serialized_campaign in reversed(serialized_campaigns): - builder.PrependUOffsetTRelative(serialized_campaign) - - campaigns_fb = builder.EndVector() - fb_campaign.CampaignListStart(builder) - fb_campaign.CampaignListAddCampaigns(builder, campaigns_fb) - campaign_list_fb = fb_campaign.CampaignListEnd(builder) - builder.Finish(campaign_list_fb) - return builder.Output() - - -def deserialize_flatbuffer_to_campaigns_list(flatbuffer_data): - campaign_list = fb_campaign.CampaignList.GetRootAs(flatbuffer_data) - definitions = [] - for i in range(campaign_list.CampaignsLength()): - definition = Campaign.from_flatbuffer(campaign_list.Campaigns(i)) - definitions.append(definition) - - return definitions diff --git a/campaigns/client/data_model/flatbuffer/contribution_method_serialization.py b/campaigns/client/data_model/flatbuffer/contribution_method_serialization.py @@ -1,96 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\flatbuffer\contribution_method_serialization.py -import campaigns.client.data_model.flatbuffer.contributionmethod_generated as fb_contributionmethod -from campaigns.client.data_model.contribution_method import ContributionMethodDefinition -from flatbuffers import Builder -from semantic_version import SemanticVersion - -def serialize_versioned_definitions_to_flatbuffer(version_definition_dict): - builder = Builder() - versioned_definitions_list = _serialize_versioned_definitions_list(builder, version_definition_dict) - fb_contributionmethod.VersionedDefinitionsStartDefinitionsVector(builder, len(versioned_definitions_list)) - for versioned_definition in versioned_definitions_list: - builder.PrependUOffsetTRelative(versioned_definition) - - versioned_definitions_offset = builder.EndVector() - fb_contributionmethod.VersionedDefinitionsStart(builder) - fb_contributionmethod.VersionedDefinitionsAddDefinitions(builder, versioned_definitions_offset) - versioned_definitions_fb = fb_contributionmethod.VersionedDefinitionsEnd(builder) - builder.Finish(versioned_definitions_fb) - return builder.Output() - - -def deserialize_flatbuffer_to_versioned_definitions_dict(flatbuffer_data): - versioned_definitions_dict = {} - versioned_definitions = fb_contributionmethod.VersionedDefinitions.GetRootAs(flatbuffer_data) - for i in range(versioned_definitions.DefinitionsLength()): - semantic_version, definitions = _deserialize_version_and_definitions_list(versioned_definitions.Definitions(i)) - versioned_definitions_dict[semantic_version] = definitions - - return versioned_definitions_dict - - -def _serialize_versioned_definitions_list(builder, version_definition_dict): - versioned_definitions = [] - for version, definitions in version_definition_dict.iteritems(): - version_offset = _serialize_semantic_version(builder, version) - definition_offsets = [] - for definition in definitions: - definition_offsets.append(definition.to_flatbuffer(builder)) - - fb_contributionmethod.DefinitionsStartMethodsVector(builder, len(definition_offsets)) - for definition_offset in reversed(definition_offsets): - builder.PrependUOffsetTRelative(definition_offset) - - definitions_offset = builder.EndVector() - fb_contributionmethod.DefinitionsStart(builder) - fb_contributionmethod.DefinitionsAddVersion(builder, version_offset) - fb_contributionmethod.DefinitionsAddMethods(builder, definitions_offset) - versioned_definitions.append(fb_contributionmethod.DefinitionsEnd(builder)) - - return versioned_definitions - - -def _deserialize_version_and_definitions_list(definitions_fb): - semantic_version = _deserialize_semantic_version(definitions_fb.Version()) - methods = [] - for i in range(definitions_fb.MethodsLength()): - methods.append(ContributionMethodDefinition.from_flatbuffer(definitions_fb.Methods(i))) - - return (semantic_version, methods) - - -def _serialize_semantic_version(builder, version): - prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] - build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] - fb_contributionmethod.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) - for prerelease_string in reversed(prerelease_strings): - builder.PrependUOffsetTRelative(prerelease_string) - - prerelease_offset = builder.EndVector() - fb_contributionmethod.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) - for build_string in reversed(build_strings): - builder.PrependUOffsetTRelative(build_string) - - build_offset = builder.EndVector() - fb_contributionmethod.SemanticVersionStart(builder) - fb_contributionmethod.SemanticVersionAddMajor(builder, version.major) - fb_contributionmethod.SemanticVersionAddMinor(builder, version.minor) - fb_contributionmethod.SemanticVersionAddPatch(builder, version.patch) - fb_contributionmethod.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) - fb_contributionmethod.SemanticVersionAddBuildTags(builder, build_offset) - return fb_contributionmethod.SemanticVersionEnd(builder) - - -def _deserialize_semantic_version(version_flatbuffer): - major = version_flatbuffer.Major() - minor = version_flatbuffer.Minor() - patch = version_flatbuffer.Patch() - prerelease_tags = [] - for i in range(version_flatbuffer.PrereleaseTagsLength()): - prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) - - build_tags = [] - for i in range(version_flatbuffer.BuildTagsLength()): - build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) - - return SemanticVersion(major, minor, patch, prerelease_tags, build_tags) diff --git a/campaigns/client/data_model/flatbuffer/contributionmethod_generated.py b/campaigns/client/data_model/flatbuffer/contributionmethod_generated.py @@ -1,443 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\flatbuffer\contributionmethod_generated.py -import flatbuffers -from flatbuffers.compat import import_numpy -np = import_numpy() - -class MatcherParameter(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MatcherParameter() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsMatcherParameter(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Key(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Type(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Icon(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def AcceptedValueTypes(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def AcceptedValueTypesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def AcceptedValueTypesIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - return o == 0 - - def Title(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Description(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - -def MatcherParameterStart(builder): - builder.StartObject(6) - - -def MatcherParameterAddKey(builder, key): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) - - -def MatcherParameterAddType(builder, type): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(type), 0) - - -def MatcherParameterAddIcon(builder, icon): - builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) - - -def MatcherParameterAddAcceptedValueTypes(builder, acceptedValueTypes): - builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(acceptedValueTypes), 0) - - -def MatcherParameterStartAcceptedValueTypesVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def MatcherParameterCreateAcceptedValueTypesVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def MatcherParameterAddTitle(builder, title): - builder.PrependUint64Slot(4, title, 0) - - -def MatcherParameterAddDescription(builder, description): - builder.PrependUint64Slot(5, description, 0) - - -def MatcherParameterEnd(builder): - return builder.EndObject() - - -class Definition(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Definition() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsDefinition(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Name(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def Title(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def ProgressDescription(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Icon(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - - def MatcherParameters(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = MatcherParameter() - obj.Init(self._tab.Bytes, x) - return obj - - def MatcherParametersLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def MatcherParametersIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - return o == 0 - - -def DefinitionStart(builder): - builder.StartObject(5) - - -def DefinitionAddName(builder, name): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) - - -def DefinitionAddTitle(builder, title): - builder.PrependUint64Slot(1, title, 0) - - -def DefinitionAddProgressDescription(builder, progressDescription): - builder.PrependUint64Slot(2, progressDescription, 0) - - -def DefinitionAddIcon(builder, icon): - builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) - - -def DefinitionAddMatcherParameters(builder, matcherParameters): - builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(matcherParameters), 0) - - -def DefinitionStartMatcherParametersVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def DefinitionCreateMatcherParametersVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def DefinitionEnd(builder): - return builder.EndObject() - - -class SemanticVersion(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SemanticVersion() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsSemanticVersion(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Major(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Minor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def Patch(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) - return 0 - - def PrereleaseTags(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def PrereleaseTagsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def PrereleaseTagsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - return o == 0 - - def BuildTags(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return '' - - def BuildTagsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def BuildTagsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - return o == 0 - - -def SemanticVersionStart(builder): - builder.StartObject(5) - - -def SemanticVersionAddMajor(builder, major): - builder.PrependUint64Slot(0, major, 0) - - -def SemanticVersionAddMinor(builder, minor): - builder.PrependUint64Slot(1, minor, 0) - - -def SemanticVersionAddPatch(builder, patch): - builder.PrependUint64Slot(2, patch, 0) - - -def SemanticVersionAddPrereleaseTags(builder, prereleaseTags): - builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(prereleaseTags), 0) - - -def SemanticVersionStartPrereleaseTagsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def SemanticVersionCreatePrereleaseTagsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def SemanticVersionAddBuildTags(builder, buildTags): - builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buildTags), 0) - - -def SemanticVersionStartBuildTagsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def SemanticVersionCreateBuildTagsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def SemanticVersionEnd(builder): - return builder.EndObject() - - -class Definitions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Definitions() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsDefinitions(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Version(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - obj = SemanticVersion() - obj.Init(self._tab.Bytes, x) - return obj - - def Methods(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Definition() - obj.Init(self._tab.Bytes, x) - return obj - - def MethodsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def MethodsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - return o == 0 - - -def DefinitionsStart(builder): - builder.StartObject(2) - - -def DefinitionsAddVersion(builder, version): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(version), 0) - - -def DefinitionsAddMethods(builder, methods): - builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(methods), 0) - - -def DefinitionsStartMethodsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def DefinitionsCreateMethodsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def DefinitionsEnd(builder): - return builder.EndObject() - - -class VersionedDefinitions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAs(cls, buf, offset = 0): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = VersionedDefinitions() - x.Init(buf, n + offset) - return x - - @classmethod - def GetRootAsVersionedDefinitions(cls, buf, offset = 0): - return cls.GetRootAs(buf, offset) - - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - def Definitions(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - obj = Definitions() - obj.Init(self._tab.Bytes, x) - return obj - - def DefinitionsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - def DefinitionsIsNone(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - return o == 0 - - -def VersionedDefinitionsStart(builder): - builder.StartObject(1) - - -def VersionedDefinitionsAddDefinitions(builder, definitions): - builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(definitions), 0) - - -def VersionedDefinitionsStartDefinitionsVector(builder, numElems): - return builder.StartVector(4, numElems, 4) - - -def VersionedDefinitionsCreateDefinitionsVector(builder, data): - return builder.CreateVectorOfTables(data) - - -def VersionedDefinitionsEnd(builder): - return builder.EndObject() diff --git a/campaigns/client/data_model/objective.py b/campaigns/client/data_model/objective.py @@ -1,661 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\data_model\objective.py -import campaigns.client.data_model.flatbuffer.campaigndefinition_generated as fb_campaign -from campaigns.client.data_model.career_paths import PROTO_CAREER_TO_FDS_CAREER -from campaigns.client.data_model.contribution_method import ContributionMethodConfiguration -from datetimeutils import datetime_to_filetime, filetime_to_datetime -from eve.common.script.sys.idCheckers import IsCorporation, IsCharacter, IsFaction, IsAlliance -from eveProto import get_single_value_from_split_precision_message -from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier, STATE_UNSPECIFIED, STATE_ACTIVE, STATE_COMPLETED, STATE_EXPIRED, STATE_CANCELLED, PARTICIPANT_STATE_UNSPECIFIED, PARTICIPANT_STATE_COMMITTED, PARTICIPANT_STATE_RESIGNED, PARTICIPANT_STATE_CONTRIBUTION_COMPLETED -from itertoolsext.Enum import Enum -from uuid import UUID - -class FutureObjective(object): - - def __init__(self, start_datetime, career_path, contribution_method_name, campaign_id = None): - self._start_datetime = start_datetime - self._career_path = career_path - self._contribution_method_name = contribution_method_name - self._campaign_id = campaign_id - - @property - def start_datetime(self): - return self._start_datetime - - @property - def career_path(self): - return self._career_path - - @property - def contribution_method_name(self): - return self._contribution_method_name - - @property - def campaign_id(self): - return self._campaign_id - - @campaign_id.setter - def campaign_id(self, value): - self._campaign_id = value - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __eq__(self, other): - if not isinstance(other, FutureObjective): - return NotImplemented - return self.start_datetime == other.start_datetime and self.career_path == other.career_path and self.contribution_method_name == other.contribution_method_name and self.campaign_id == other.campaign_id - - -class ObjectiveID(object): - - def __init__(self, objective_uuid): - self._objective_uuid = objective_uuid - - @property - def uuid(self): - return self._objective_uuid - - @classmethod - def from_proto(cls, proto): - return ObjectiveID(UUID(bytes=proto.uuid)) - - @classmethod - def from_flatbuffer(cls, uuid_fb): - objective_id_bytes = [ chr(byte) for byte in uuid_fb.Bytes() ] - return ObjectiveID(UUID(bytes=objective_id_bytes)) - - def to_proto(self): - return Identifier(uuid=self._objective_uuid.bytes) - - def __eq__(self, other): - if not isinstance(other, ObjectiveID): - return NotImplemented - return self._objective_uuid == other._objective_uuid - - def __ne__(self, other): - return not self == other - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - def __hash__(self): - return hash(self._objective_uuid) - - -class Objective(object): - - def __init__(self, objective_id, title, subtitle, issuer, presenting_character, content_tags, scheduled_start_datetime, finished_datetime, career_path, target_progress, max_progress_per_participant, contribution_method_configuration, rewards, objective_state, annotations, campaign_id = None): - self._objective_id = objective_id - self._title = title - self._subtitle = subtitle - self._issuer = issuer - self._presenting_character = presenting_character - self._content_tags = content_tags - self._scheduled_start_datetime = scheduled_start_datetime - self._finished_datetime = finished_datetime - self._career_path = career_path - self._target_progress = target_progress - self._max_progress_per_participant = max_progress_per_participant - self._contribution_method_configuration = contribution_method_configuration - self._rewards = rewards - self._objective_state = objective_state - self._annotations = annotations - self._campaign_id = campaign_id - - @property - def id(self): - return self._objective_id - - @property - def title(self): - return self._title - - @property - def subtitle(self): - return self._subtitle - - @property - def issuer(self): - return self._issuer - - @property - def is_corporation_issuer(self): - return IsCorporation(self._issuer) - - @property - def is_character_issuer(self): - return IsCharacter(self._issuer) - - @property - def presenting_character(self): - return self._presenting_character - - @property - def content_tags(self): - return self._content_tags - - @property - def scheduled_start_datetime(self): - return self._scheduled_start_datetime - - @property - def finished_datetime(self): - return self._finished_datetime - - @property - def is_finished(self): - return self._finished_datetime is not None - - @property - def career_path(self): - return self._career_path - - @property - def target_progress(self): - return self._target_progress - - @property - def max_progress_per_participant(self): - return self._max_progress_per_participant - - @property - def contribution_method_configuration(self): - return self._contribution_method_configuration - - @property - def rewards(self): - return self._rewards - - @property - def objective_state(self): - return self._objective_state - - @property - def annotations(self): - return self._annotations - - @property - def campaign_id(self): - return self._campaign_id - - @campaign_id.setter - def campaign_id(self, value): - self._campaign_id = value - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, objective_id, attributes): - issuer = attributes.issuer.character.sequential if attributes.issuer.WhichOneof('issuer') == 'character' else attributes.issuer.corporation.sequential - content_tags = [ content_tag.name for content_tag in attributes.content_tags ] - finished_datetime = None if attributes.WhichOneof('finished') == 'not_finished' else attributes.finish_time.ToDatetime() - annotations = {annotation.key:annotation.value for annotation in attributes.annotations} - return Objective(objective_id=ObjectiveID.from_proto(objective_id), title=attributes.title.sequential, subtitle=attributes.subtitle.sequential, issuer=issuer, presenting_character=attributes.presenting_character.sequential, content_tags=content_tags, scheduled_start_datetime=attributes.scheduled_start_time.ToDatetime(), finished_datetime=finished_datetime, career_path=PROTO_CAREER_TO_FDS_CAREER[attributes.career], target_progress=attributes.target_progress, max_progress_per_participant=attributes.max_progress_per_participant, contribution_method_configuration=ContributionMethodConfiguration.from_proto(attributes.contribution_method_configuration), rewards=Rewards.from_proto(attributes.rewards), objective_state=ObjectiveState.from_proto(attributes.state), annotations=annotations) - - @classmethod - def from_flatbuffer(cls, objective): - objective_id = ObjectiveID.from_flatbuffer(objective.Uuid()) - finished_datetime = None - if objective.FinishedTimeType() != fb_campaign.FinishedTime.NONE: - union_data = objective.FinishedTime() - finished = fb_campaign.Finished() - finished.Init(union_data.Bytes, union_data.Pos) - finished_datetime = filetime_to_datetime(finished.Timestamp()) - annotations = {} - for i in range(objective.AnnotationsLength()): - annotation = objective.Annotations(i) - annotations[annotation.Key().decode('utf-8')] = annotation.Value().decode('utf-8') - - return Objective(objective_id=objective_id, title=objective.Title(), subtitle=objective.Subtitle(), issuer=objective.Issuer(), presenting_character=objective.PresentingCharacter(), content_tags=[ objective.ContentTags(i).decode('utf-8') for i in range(objective.ContentTagsLength()) ], scheduled_start_datetime=filetime_to_datetime(objective.ScheduledStartTime()), finished_datetime=finished_datetime, career_path=objective.Career(), target_progress=objective.TargetProgress(), max_progress_per_participant=objective.MaxProgressPerParticipant(), objective_state=objective.ObjectiveState(), contribution_method_configuration=ContributionMethodConfiguration.from_flatbuffer(objective.ContributionMethodConfig()), rewards=Rewards.from_flatbuffer(objective.Rewards()), annotations=annotations) - - def to_flatbuffer(self, builder): - uuid_bytes = [ ord(byte) for byte in self.id.uuid.bytes ] - content_tag_offsets = [] - for content_tag in self.content_tags: - content_tag_offsets.append(builder.CreateString(content_tag)) - - fb_campaign.ObjectiveStartContentTagsVector(builder, len(content_tag_offsets)) - for content_tag_offset in reversed(content_tag_offsets): - builder.PrependUOffsetTRelative(content_tag_offset) - - content_tags_fb = builder.EndVector() - annotations_list = [] - for key, value in self.annotations.iteritems(): - key_fb = builder.CreateString(key) - value_fb = builder.CreateString(value) - fb_campaign.AnnotationStart(builder) - fb_campaign.AnnotationAddKey(builder, key_fb) - fb_campaign.AnnotationAddValue(builder, value_fb) - annotation_fb = fb_campaign.AnnotationEnd(builder) - annotations_list.append(annotation_fb) - - fb_campaign.ObjectiveStartAnnotationsVector(builder, len(annotations_list)) - for annotation in reversed(annotations_list): - builder.PrependUOffsetTRelative(annotation) - - annotations_fb = builder.EndVector() - if self.finished_datetime is not None: - finished_type = fb_campaign.FinishedTime.FinishedTime - else: - finished_type = fb_campaign.FinishedTime.NONE - finished_time_fb = None - if self.finished_datetime is not None: - fb_campaign.FinishedStart(builder) - fb_campaign.FinishedAddTimestamp(builder, datetime_to_filetime(self.finished_datetime)) - finished_time_fb = fb_campaign.FinishedEnd(builder) - rewards_db = self.rewards.to_flatbuffer(builder) - contribution_method_config_fb = self.contribution_method_configuration.to_flatbuffer(builder) - fb_campaign.ObjectiveStart(builder) - fb_campaign.ObjectiveAddUuid(builder, fb_campaign.CreateUuid(builder, uuid_bytes)) - fb_campaign.ObjectiveAddTitle(builder, self.title) - fb_campaign.ObjectiveAddSubtitle(builder, self.subtitle) - fb_campaign.ObjectiveAddIssuer(builder, self.issuer) - fb_campaign.ObjectiveAddPresentingCharacter(builder, self.presenting_character) - fb_campaign.ObjectiveAddContentTags(builder, content_tags_fb) - fb_campaign.ObjectiveAddScheduledStartTime(builder, datetime_to_filetime(self.scheduled_start_datetime)) - fb_campaign.ObjectiveAddFinishedTimeType(builder, finished_type) - if finished_time_fb is not None: - fb_campaign.ObjectiveAddFinishedTime(builder, finished_time_fb) - fb_campaign.ObjectiveAddCareer(builder, self.career_path) - fb_campaign.ObjectiveAddTargetProgress(builder, self.target_progress) - fb_campaign.ObjectiveAddMaxProgressPerParticipant(builder, self.max_progress_per_participant) - fb_campaign.ObjectiveAddContributionMethodConfig(builder, contribution_method_config_fb) - fb_campaign.ObjectiveAddRewards(builder, rewards_db) - fb_campaign.ObjectiveAddObjectiveState(builder, self.objective_state) - fb_campaign.ObjectiveAddAnnotations(builder, annotations_fb) - return fb_campaign.ObjectiveEnd(builder) - - def __eq__(self, other): - if not isinstance(other, Objective): - return NotImplemented - return self.id == other.id and self.title == other.title and self.subtitle == other.subtitle and self.issuer == other.issuer and self.presenting_character == other.presenting_character and self.content_tags == other.content_tags and self.scheduled_start_datetime == other.scheduled_start_datetime and self.finished_datetime == other.finished_datetime and self.career_path == other.career_path and self.target_progress == other.target_progress and self.max_progress_per_participant == other.max_progress_per_participant and self.contribution_method_configuration == other.contribution_method_configuration and self.rewards == other.rewards and self.objective_state == other.objective_state and self.annotations == other.annotations - - def __ne__(self, other): - return not self.__eq__(other) - - -@Enum - -class ObjectiveState(object): - UNSPECIFIED = 0 - ACTIVE = 1 - COMPLETED = 2 - EXPIRED = 3 - CANCELLED = 4 - - @classmethod - def from_proto(cls, objective_state): - enum_value = _objective_state_proto_to_enum.get(objective_state, None) - if enum_value is None: - raise ValueError('ObjectiveState: Conversion to enum failed with unrecognized value: %s' % objective_state) - return enum_value - - -_objective_state_proto_to_enum = {STATE_UNSPECIFIED: ObjectiveState.UNSPECIFIED, - STATE_ACTIVE: ObjectiveState.ACTIVE, - STATE_COMPLETED: ObjectiveState.COMPLETED, - STATE_EXPIRED: ObjectiveState.EXPIRED, - STATE_CANCELLED: ObjectiveState.CANCELLED} - -class ObjectiveStats(object): - - def __init__(self, objective_id, current_objective_progress, committed_participants, total_participants, total_contributors): - self._objective_id = objective_id - self._current_objective_progress = current_objective_progress - self._committed_participants = committed_participants - self._total_participants = total_participants - self._total_contributors = total_contributors - - @property - def objective_id(self): - return self._objective_id - - @property - def current_objective_progress(self): - return self._current_objective_progress - - @property - def committed_participants(self): - return self._committed_participants - - @property - def total_participants(self): - return self._total_participants - - @property - def total_contributors(self): - return self._total_contributors - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, objective_id, stats): - return ObjectiveStats(objective_id=ObjectiveID.from_proto(objective_id), current_objective_progress=stats.current_objective_progress, committed_participants=stats.committed_participants, total_participants=stats.total_participants, total_contributors=stats.total_contributors) - - def __eq__(self, other): - if not isinstance(other, ObjectiveStats): - return NotImplemented - return (self.objective_id == other.objective_id, - self.current_objective_progress == other.current_objective_progress, - self.committed_participants == other.committed_participants, - self.total_participants == other.total_participants, - self.total_contributors == other.total_contributors) - - def __ne__(self, other): - return not self == other - - -@Enum - -class ParticipantState(object): - UNSPECIFIED = 0 - COMMITTED = 1 - RESIGNED = 2 - CONTRIBUTION_COMPLETED = 3 - - @classmethod - def from_proto(cls, participant_state): - enum_value = _participant_state_proto_to_enum.get(participant_state, None) - if enum_value is None: - raise ValueError('ParticipantState: Conversion to enum failed with unrecognized value: %s' % participant_state) - return enum_value - - -_participant_state_proto_to_enum = {PARTICIPANT_STATE_UNSPECIFIED: ParticipantState.UNSPECIFIED, - PARTICIPANT_STATE_COMMITTED: ParticipantState.COMMITTED, - PARTICIPANT_STATE_RESIGNED: ParticipantState.RESIGNED, - PARTICIPANT_STATE_CONTRIBUTION_COMPLETED: ParticipantState.CONTRIBUTION_COMPLETED} - -class ObjectiveParticipantStats(object): - - def __init__(self, objective_id, participant_state, current_participant_progress): - self._objective_id = objective_id - self._participant_state = participant_state - self._current_participant_progress = current_participant_progress - - @property - def objective_id(self): - return self._objective_id - - @property - def participant_state(self): - return self._participant_state - - @participant_state.setter - def participant_state(self, participant_state): - self._participant_state = participant_state - - @property - def current_participant_progress(self): - return self._current_participant_progress - - @current_participant_progress.setter - def current_participant_progress(self, value): - self._current_participant_progress = value - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, participant_stats): - return ObjectiveParticipantStats(objective_id=ObjectiveID.from_proto(participant_stats.objective), participant_state=ParticipantState.from_proto(participant_stats.stats.state), current_participant_progress=participant_stats.stats.current_participant_progress) - - def __eq__(self, other): - if not isinstance(other, ObjectiveParticipantStats): - return NotImplemented - return self.objective_id == other.objective_id and self.participant_state == other.participant_state and self.current_participant_progress == other.current_participant_progress - - def __ne__(self, other): - return not self == other - - -class Rewards(object): - - def __init__(self, isk_reward, lp_reward, standings_reward): - self._isk_reward = isk_reward - self._lp_reward = lp_reward - self._standings_reward = standings_reward - - @property - def isk_reward(self): - return self._isk_reward - - @property - def lp_reward(self): - return self._lp_reward - - @property - def standings_reward(self): - return self._standings_reward - - @property - def has_isk_reward(self): - return self._isk_reward is not None - - @property - def has_lp_reward(self): - return self._lp_reward is not None - - @property - def has_standings_reward(self): - return self._standings_reward is not None - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, rewards): - isk_reward = None if rewards.WhichOneof('isk') == 'no_isk_reward' else ISKReward.from_proto(rewards.isk_reward) - lp_reward = None if rewards.WhichOneof('lp') == 'no_lp_reward' else LPReward.from_proto(rewards.lp_reward) - standing_reward = None if rewards.WhichOneof('standing') == 'no_standing_reward' else StandingReward.from_proto(rewards.standing_reward) - return Rewards(isk_reward, lp_reward, standing_reward) - - @classmethod - def from_flatbuffer(cls, rewards): - if rewards.IskType() == fb_campaign.IskReward.NONE: - isk_reward = None - else: - union_data = rewards.Isk() - isk_fb = fb_campaign.RewardDetails() - isk_fb.Init(union_data.Bytes, union_data.Pos) - isk_reward = ISKReward(amount_per_interval=isk_fb.AmountPerInterval(), issuer=isk_fb.Issuer(), interval_size=isk_fb.IntervalSize()) - if rewards.LpType() == fb_campaign.LpReward.NONE: - lp_reward = None - else: - union_data = rewards.Lp() - lp_fb = fb_campaign.RewardDetails() - lp_fb.Init(union_data.Bytes, union_data.Pos) - lp_reward = LPReward(amount_per_interval=lp_fb.AmountPerInterval(), issuing_corporation=lp_fb.Issuer(), interval_size=lp_fb.IntervalSize()) - if rewards.StandingType() == fb_campaign.StandingReward.NONE: - standing_reward = None - else: - union_data = rewards.Standing() - standing_fb = fb_campaign.RewardDetails() - standing_fb.Init(union_data.Bytes, union_data.Pos) - standing_reward = StandingReward(gain_percentage_per_interval=standing_fb.AmountPerInterval(), issuer=standing_fb.Issuer(), interval_size=standing_fb.IntervalSize()) - return Rewards(isk_reward=isk_reward, lp_reward=lp_reward, standings_reward=standing_reward) - - def to_flatbuffer(self, builder): - isk_type = fb_campaign.IskReward.NONE if self.isk_reward is None else fb_campaign.IskReward.details - lp_type = fb_campaign.LpReward.NONE if self.lp_reward is None else fb_campaign.LpReward.details - standing_type = fb_campaign.StandingReward.NONE if self.standings_reward is None else fb_campaign.StandingReward.details - isk_fb = None - if self.isk_reward is not None: - fb_campaign.RewardDetailsStart(builder) - fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.isk_reward.amount_per_interval) - fb_campaign.RewardDetailsAddIssuer(builder, self.isk_reward.issuer) - fb_campaign.RewardDetailsAddIntervalSize(builder, self.isk_reward.interval_size) - isk_fb = fb_campaign.RewardDetailsEnd(builder) - lp_fb = None - if self.lp_reward is not None: - fb_campaign.RewardDetailsStart(builder) - fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.lp_reward.amount_per_interval) - fb_campaign.RewardDetailsAddIssuer(builder, self.lp_reward.issuing_corporation) - fb_campaign.RewardDetailsAddIntervalSize(builder, self.lp_reward.interval_size) - lp_fb = fb_campaign.RewardDetailsEnd(builder) - standing_fb = None - if self.standings_reward is not None: - fb_campaign.RewardDetailsStart(builder) - fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.standings_reward.gain_percentage_per_interval) - fb_campaign.RewardDetailsAddIssuer(builder, self.standings_reward.issuer) - fb_campaign.RewardDetailsAddIntervalSize(builder, self.standings_reward.interval_size) - standing_fb = fb_campaign.RewardDetailsEnd(builder) - fb_campaign.RewardsStart(builder) - fb_campaign.RewardsAddIskType(builder, isk_type) - fb_campaign.RewardsAddLpType(builder, lp_type) - fb_campaign.RewardsAddStandingType(builder, standing_type) - if isk_fb is not None: - fb_campaign.RewardsAddIsk(builder, isk_fb) - if lp_fb is not None: - fb_campaign.RewardsAddLp(builder, lp_fb) - if standing_fb is not None: - fb_campaign.RewardsAddStanding(builder, standing_fb) - return fb_campaign.RewardsEnd(builder) - - def __eq__(self, other): - if not isinstance(other, Rewards): - return NotImplemented - return self.isk_reward == other.isk_reward and self.lp_reward == other.lp_reward and self.standings_reward == other.standings_reward - - def __ne__(self, other): - return not self == other - - -class ISKReward(object): - - def __init__(self, amount_per_interval, issuer, interval_size): - self._amount_per_interval = amount_per_interval - self._issuer = issuer - self._interval_size = interval_size - - @property - def amount_per_interval(self): - return self._amount_per_interval - - @property - def issuer(self): - return self._issuer - - @property - def interval_size(self): - return self._interval_size - - @property - def is_corporation_issuer(self): - return IsCorporation(self._issuer) - - @property - def is_character_issuer(self): - return IsCharacter(self._issuer) - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, isk_reward): - issuer = isk_reward.issuer.character.sequential if isk_reward.issuer.WhichOneof('owner_type') == 'character' else isk_reward.issuer.corporation.sequential - return ISKReward(amount_per_interval=get_single_value_from_split_precision_message(isk_reward.amount_per_interval), issuer=issuer, interval_size=isk_reward.progress_interval) - - def __eq__(self, other): - if not isinstance(other, ISKReward): - return NotImplemented - return self.amount_per_interval == other.amount_per_interval and self.issuer == other.issuer and self.interval_size == other.interval_size - - def __ne__(self, other): - return not self == other - - -class LPReward(object): - - def __init__(self, amount_per_interval, issuing_corporation, interval_size): - self._amount_per_interval = amount_per_interval - self._issuing_corporation = issuing_corporation - self._interval_size = interval_size - - @property - def amount_per_interval(self): - return self._amount_per_interval - - @property - def issuing_corporation(self): - return self._issuing_corporation - - @property - def interval_size(self): - return self._interval_size - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, lp_reward): - return LPReward(amount_per_interval=lp_reward.amount_per_interval.amount, issuing_corporation=lp_reward.amount_per_interval.associated_corporation.sequential, interval_size=lp_reward.progress_interval) - - def __eq__(self, other): - if not isinstance(other, LPReward): - return NotImplemented - return self.amount_per_interval == other.amount_per_interval and self.issuing_corporation == other.issuing_corporation and self.interval_size == other.interval_size - - -class StandingReward(object): - - def __init__(self, gain_percentage_per_interval, issuer, interval_size): - self._gain_percentage_per_interval = gain_percentage_per_interval - self._issuer = issuer - self._interval_size = interval_size - - @property - def gain_percentage_per_interval(self): - return self._gain_percentage_per_interval - - @property - def issuer(self): - return self._issuer - - @property - def is_corporation_issuer(self): - return IsCorporation(self._issuer) - - @property - def is_character_issuer(self): - return IsCharacter(self._issuer) - - @property - def is_faction_issuer(self): - return IsFaction(self._issuer) - - @property - def is_alliance_issuer(self): - return IsAlliance(self._issuer) - - @property - def interval_size(self): - return self._interval_size - - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.__dict__) - - @classmethod - def from_proto(cls, standing_reward): - which_one_of = standing_reward.issuer.WhichOneof('source') - if which_one_of == 'character': - issuer = standing_reward.issuer.character.sequential - elif which_one_of == 'corporation': - issuer = standing_reward.issuer.corporation.sequential - elif which_one_of == 'alliance': - issuer = standing_reward.issuer.alliance.sequential - elif which_one_of == 'faction': - issuer = standing_reward.issuer.faction.sequential - else: - raise ValueError('Unrecognized issuer') - return StandingReward(gain_percentage_per_interval=get_single_value_from_split_precision_message(standing_reward.gain_percent_per_interval), issuer=issuer, interval_size=standing_reward.progress_interval) - - def __eq__(self, other): - if not isinstance(other, StandingReward): - return NotImplemented - return self.gain_percentage_per_interval == other.gain_percentage_per_interval and self.issuer == other.issuer and self.interval_size == other.interval_size - - def __ne__(self, other): - return not self == other diff --git a/campaigns/client/errors.py b/campaigns/client/errors.py @@ -31,6 +31,12 @@ class CampaignNotFoundError(CampaignRequestError): return 'CampaignNotFoundError' +class CampaignCommitmentNotRequiredError(CampaignRequestError): + + def __str__(self): + return 'CampaignCommitmentNotRequiredError' + + class ContributionMethodRequestError(RuntimeError): def __str__(self): @@ -49,6 +55,24 @@ class ContributionMethodNotFoundError(CampaignRequestError): return 'ContributionMethodNotFoundError' +class EventMatcherRequestError(RuntimeError): + + def __str__(self): + return 'EventMatcherRequestError' + + +class EventMatcherBadRequestError(EventMatcherRequestError): + + def __str__(self): + return 'EventMatcherBadRequestError' + + +class EventMatcherNotFoundError(EventMatcherRequestError): + + def __str__(self): + return 'EventMatcherNotFoundError' + + class CampaignStatsRequestError(CampaignRequestError): def __str__(self): diff --git a/campaigns/client/feature_flags.py b/campaigns/client/feature_flags.py @@ -1,5 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\feature_flags.py -from campaigns.client.signals import on_campaigns_enabled_changed, on_campaigns_polling_frequency_changed +from campaigns.client.v1.signals import on_campaigns_enabled_changed, on_campaigns_polling_frequency_changed from featuremanagement.client.flag import flag_bool, flag_int campaigns_enabled = flag_bool(key='campaigns_feature_enabled', default_value=True, callback=on_campaigns_enabled_changed) campaigns_polling_frequency = flag_int(key='campaigns_client_live_updates_polling_frequency', default_value=30, callback=on_campaigns_polling_frequency_changed) diff --git a/campaigns/client/listeners/__init__.py b/campaigns/client/listeners/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\listeners\__init__.py -pass diff --git a/campaigns/client/listeners/campaign_listener.py b/campaigns/client/listeners/campaign_listener.py @@ -1,39 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\listeners\campaign_listener.py -import logging -from campaigns.client.data_model.campaign import CampaignVersion, CampaignID -from eveProto.generated.eve_public.campaign.api.notices_pb2 import StartedNotice, CompletedNotice, ExpiredNotice, CurrentVersionNotice -from signals import Signal -logger = logging.getLogger('campaign') - -class CampaignListener(object): - - def __init__(self, public_gateway): - self._public_gateway = public_gateway - self._public_gateway.subscribe_to_notice(StartedNotice, self._on_started_notice) - self._public_gateway.subscribe_to_notice(CompletedNotice, self._on_completed_notice) - self._public_gateway.subscribe_to_notice(ExpiredNotice, self._on_expired_notice) - self._public_gateway.subscribe_to_notice(CurrentVersionNotice, self._on_current_version_notice) - self.on_started = Signal('CampaignListener.on_started') - self.on_completed = Signal('CampaignListener.on_completed') - self.on_expired = Signal('CampaignListener.on_expired') - self.on_current_versions = Signal('CampaignListener.on_current_versions') - - def _on_started_notice(self, payload, _primitive): - campaign_id = CampaignID.from_proto(payload.campaign) - logger.info('on_started_notice campaign: %s - payload: %s', campaign_id, payload) - self.on_started(campaign_id) - - def _on_completed_notice(self, payload, _primitive): - campaign_id = CampaignID.from_proto(payload.campaign) - logger.info('on_completed_notice campaign: %s - payload: %s', campaign_id, payload) - self.on_completed(campaign_id) - - def _on_expired_notice(self, payload, _primitive): - campaign_id = CampaignID.from_proto(payload.campaign) - logger.info('on_expired_notice campaign: %s - payload: %s', campaign_id, payload) - self.on_expired(campaign_id) - - def _on_current_version_notice(self, payload, _primitive): - campaign_versions = {CampaignID.from_proto(campaign.campaign):CampaignVersion.from_proto(campaign.version) for campaign in payload.versions} - logger.info('on_current_version_notice - payload: %s', payload) - self.on_current_versions(campaign_versions) diff --git a/campaigns/client/listeners/objective_listener.py b/campaigns/client/listeners/objective_listener.py @@ -1,18 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\listeners\objective_listener.py -import logging -from campaigns.client.data_model.objective import ObjectiveID -from eveProto.generated.eve_public.campaign.objective.api.notices_pb2 import ContributedNotice -from signals import Signal -logger = logging.getLogger('campaign') - -class ObjectiveListener(object): - - def __init__(self, public_gateway): - self._public_gateway = public_gateway - self._public_gateway.subscribe_to_notice(ContributedNotice, self._on_contributed_notice) - self.on_contributed = Signal('ObjectiveListener.on_contributed') - - def _on_contributed_notice(self, payload, _primitive): - objective_id = ObjectiveID.from_proto(payload.objective) - logger.info('on_contributed_notice objective: %s - payload: %s', objective_id, payload) - self.on_contributed(objective_id, payload.total_participant_progress) diff --git a/campaigns/client/messengers/__init__.py b/campaigns/client/messengers/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\messengers\__init__.py -pass diff --git a/campaigns/client/messengers/campaigns_messenger.py b/campaigns/client/messengers/campaigns_messenger.py @@ -1,256 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\messengers\campaigns_messenger.py -import logging -from campaigns.client.data_model.campaign import CampaignStats, Campaign, UnredeemedReward, CampaignID -from campaigns.client.data_model.objective import ObjectiveParticipantStats, ObjectiveStats, ObjectiveID -from campaigns.client.errors import CampaignRequestError, CampaignNotFoundError, CampaignUnauthorizedError, CampaignBadRequestError, CampaignForbiddenError, CampaignStatsRequestError -from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetLimitsRequest, GetLimitsResponse, GetAllRequest, GetAllResponse, GetParticipantStatsRequest, GetParticipantStatsResponse, GetStatsRequest, GetStatsResponse, GetRequest, GetResponse, GetAllUnredeemedRewardsRequest, GetAllUnredeemedRewardsResponse -from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier -from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import GetStatsRequest as ObjectiveGetStatsRequest, GetStatsResponse as ObjectiveGetStatsResponse, CommitRequest, CommitResponse, ResignRequest, ResignResponse, RedeemRewardsRequest, RedeemRewardsResponse -from eveProto.generated.eve_public.public_pb2 import Page -from six.moves.http_client import OK, UNAUTHORIZED, NOT_FOUND, BAD_REQUEST, NOT_MODIFIED, FORBIDDEN -from stackless_response_router.exceptions import TimeoutException, UnpackException -try: - from typing import List, Dict -except ImportError: - pass - -logger = logging.getLogger('campaigns') -PAGE_SIZE = 1000 - -class CampaignsMessenger(object): - - def __init__(self, public_gateway): - self.public_gateway = public_gateway - - def override_gateway(self, public_gateway): - self.public_gateway = public_gateway - - def get_all_request(self): - request = GetAllRequest() - info_log = 'Request: Campaigns: GetAllRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from GetAllRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code != OK: - raise CampaignRequestError('Received error status code for GetAllRequest: %s' % status_code) - info_log += 'Response: Campaigns: GetAllResponse: {response}'.format(response=response) - logger.info(info_log) - results = [ CampaignID.from_proto(campaign_id) for campaign_id in response.campaigns ] - return results - - def get_limits_request(self): - request = GetLimitsRequest() - info_log = 'Request: Campaigns: GetLimitsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetLimitsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from GetLimitsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code != OK: - raise CampaignRequestError('Received error status code for GetLimitsResponse: %s' % status_code) - info_log += 'Response: Campaigns: GetLimitsResponse: {response}'.format(response=response) - logger.info(info_log) - limit = response.max_active_objectives_per_participant - return limit - - def get_request(self, campaign_id, current_version = None): - campaign_identifier = campaign_id.to_proto() - request = GetRequest(campaign=campaign_identifier) - if current_version is None: - request.no_version = True - else: - request.version.MergeFrom(current_version.to_proto()) - info_log = 'Request: Campaigns: GetRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from GetRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_MODIFIED: - return NOT_MODIFIED - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in GetRequest: %s' % campaign_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in GetRequest: %s' % campaign_id) - if status_code != OK: - raise CampaignRequestError('Received error status code for GetRequest: %s' % status_code) - info_log += 'Response: Campaigns: GetResponse: {response}'.format(response=response) - logger.info(info_log) - campaign = Campaign.from_proto(campaign_identifier, response.attributes, response.available_objectives, response.restricted_objectives) - return campaign - - def get_stats_request(self, campaign_id): - request = GetStatsRequest(campaign=campaign_id.to_proto()) - info_log = 'Request: Campaigns: GetStatsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignStatsRequestError('Failed to receive response from GetStatsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in GetStatsRequest: %s' % campaign_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in GetStatsRequest: %s' % campaign_id) - if status_code != OK: - raise CampaignStatsRequestError('Received error status code for GetStatsRequest: %s' % status_code) - info_log += 'Response: Campaigns: GetStatsResponse: {response}'.format(response=response) - logger.info(info_log) - campaign_stats = CampaignStats.from_proto(request.campaign, response.campaign_stats) - objective_stats = [ ObjectiveStats.from_proto(objective_stats.objective, objective_stats.stats) for objective_stats in response.objective_stats ] - return (campaign_stats, objective_stats) - - def get_participant_stats_request(self, campaign_id): - request = GetParticipantStatsRequest(campaign=campaign_id.to_proto()) - info_log = 'Request: Campaigns: GetParticipantStatsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetParticipantStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from GetParticipantStatsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in GetParticipantStatsRequest: %s' % campaign_id) - if status_code == UNAUTHORIZED: - raise CampaignUnauthorizedError('Could not authorize request in GetParticipantStatsRequest: %s' % campaign_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in GetParticipantStatsRequest: %s' % campaign_id) - if status_code != OK: - raise CampaignRequestError('Received error status code for GetParticipantStatsRequest: %s' % status_code) - info_log += 'Response: Campaigns: GetParticipantStatsResponse: {response}'.format(response=response) - logger.info(info_log) - results = [ ObjectiveParticipantStats.from_proto(participant_stats) for participant_stats in response.participant_stats ] - return results - - def get_all_unredeemed_rewards_request(self, page_token = None): - request = GetAllUnredeemedRewardsRequest(page=Page(size=PAGE_SIZE)) - request.page.token = '' if page_token is None else page_token - info_log = 'Request: Campaigns: GetAllUnredeemedRewardsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllUnredeemedRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from GetAllUnredeemedRewardsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in GetAllUnredeemedRewardsRequest: %s' % page_token) - if status_code == UNAUTHORIZED: - raise CampaignUnauthorizedError('Could not authorize request in GetAllUnredeemedRewardsRequest: %s' % page_token) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in GetAllUnredeemedRewardsRequest: %s' % page_token) - if status_code != OK: - raise CampaignRequestError('Received error status code for GetAllUnredeemedRewardsResponse: %s' % status_code) - info_log += 'Response: Campaigns: GetAllUnredeemedRewardsResponse: {response}'.format(response=response) - logger.info(info_log) - results = [ UnredeemedReward.from_proto(reward) for reward in response.objectives ] - next_page_token = response.next_page.token - return (results, next_page_token) - - def get_objective_stats_request(self, objective_id_list): - request = ObjectiveGetStatsRequest(objective=[ objective_id.to_proto() for objective_id in objective_id_list ]) - info_log = 'Request: Campaigns: ObjectiveGetStatsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ObjectiveGetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from ObjectiveGetStatsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in ObjectiveGetStatsRequest: %s' % objective_id_list) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in ObjectiveGetStatsRequest: %s' % objective_id_list) - if status_code != OK: - raise CampaignRequestError('Received error status code for ObjectiveGetStatsRequest: %s' % status_code) - info_log += 'Response: Campaigns: ObjectiveGetStatsResponse: {response}'.format(response=response) - logger.info(info_log) - results = [ ObjectiveStats.from_proto(objective.objective, objective.stats) for objective in response.objective_stats ] - return results - - def commit_request(self, objective_id): - request = CommitRequest(objective=objective_id.to_proto()) - info_log = 'Request: Campaigns: CommitRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=CommitResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from CommitRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in CommitRequest: %s' % objective_id) - if status_code == UNAUTHORIZED: - raise CampaignUnauthorizedError('Could not authorize request in CommitRequest: %s' % objective_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in CommitRequest: %s' % objective_id) - if status_code == FORBIDDEN: - raise CampaignForbiddenError('Cannot commit in CommitRequest: %s' % objective_id) - if status_code != OK: - raise CampaignRequestError('Received error status code for CommitRequest: %s' % status_code) - info_log += 'Response: Campaigns: CommitResponse: {response}'.format(response=response) - logger.info(info_log) - - def resign_request(self, objective_id): - request = ResignRequest(objective=objective_id.to_proto()) - info_log = 'Request: Campaigns: ResignRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ResignResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from ResignRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in ResignRequest: %s' % objective_id) - if status_code == UNAUTHORIZED: - raise CampaignUnauthorizedError('Could not authorize request in ResignRequest: %s' % objective_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Could bad request in ResignRequest: %s' % objective_id) - if status_code == FORBIDDEN: - raise CampaignForbiddenError('Cannot resign in ResignRequest: %s' % objective_id) - if status_code != OK: - raise CampaignRequestError('Received error status code for ResignRequest: %s' % status_code) - info_log += 'Response: Campaigns: ResignResponse: {response}'.format(response=response) - logger.info(info_log) - - def redeem_rewards_request(self, objective_id): - request = RedeemRewardsRequest(objective=objective_id.to_proto()) - info_log = 'Request: Campaigns: RedeemRewardsRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=RedeemRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise CampaignRequestError('Failed to receive response from RedeemRewardsRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise CampaignNotFoundError('Could not find requested campaign in RedeemRewardsRequest: %s' % objective_id) - if status_code == UNAUTHORIZED: - raise CampaignUnauthorizedError('Could not authorize request in RedeemRewardsRequest: %s' % objective_id) - if status_code == BAD_REQUEST: - raise CampaignBadRequestError('Bad request in RedeemRewardsRequest: %s' % objective_id) - if status_code != OK: - raise CampaignRequestError('Received error status code for RedeemRewardsRequest: %s' % status_code) - info_log += 'Response: Campaigns: RedeemRewardsResponse: {response}'.format(response=response) - logger.info(info_log) diff --git a/campaigns/client/messengers/contribution_methods_messenger.py b/campaigns/client/messengers/contribution_methods_messenger.py @@ -1,39 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\messengers\contribution_methods_messenger.py -import logging -from campaigns.client.data_model.contribution_method import ContributionMethodDefinition -from campaigns.client.errors import ContributionMethodNotFoundError, ContributionMethodBadRequestError, ContributionMethodRequestError -from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllRequest, GetAllResponse -from six.moves.http_client import NOT_FOUND, BAD_REQUEST, OK -from semantic_version import SemanticVersion -from stackless_response_router.exceptions import TimeoutException, UnpackException -logger = logging.getLogger('campaigns') - -class CampaignContributionMethodsMessenger(object): - - def __init__(self, public_gateway): - self.public_gateway = public_gateway - - def override_gateway(self, public_gateway): - self.public_gateway = public_gateway - - def get_all_request(self, semantic_version): - request = GetAllRequest(version=semantic_version.to_eve_public_proto()) - info_log = 'Request: CampaignContributionMethodsMessenger: GetAllRequest: {request}\n'.format(request=request) - try: - response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) - except (TimeoutException, UnpackException) as exc: - info_log += 'ERROR: %s' % exc.__class__.__name__ - logger.info(info_log) - raise ContributionMethodRequestError('Failed to receive response from GetAllRequest: %s' % exc) - - status_code = response_primitive.status_code - if status_code == NOT_FOUND: - raise ContributionMethodNotFoundError('Could not find requested version in GetAllRequest: %s' % semantic_version) - if status_code == BAD_REQUEST: - raise ContributionMethodBadRequestError('Bad request in GetAllRequest: %s' % semantic_version) - if status_code != OK: - raise ContributionMethodRequestError('Received error status code for GetAllResponse: %s' % status_code) - info_log += 'Response: CampaignContributionMethodsMessenger: GetAllResponse: {response}'.format(response=response) - logger.info(info_log) - results = [ ContributionMethodDefinition.from_proto(definition) for definition in response.definitions ] - return results diff --git a/campaigns/client/mock_data/__init__.py b/campaigns/client/mock_data/__init__.py @@ -1,2 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\mock_data\__init__.py -pass diff --git a/campaigns/client/mock_data/mock_campaigns.py b/campaigns/client/mock_data/mock_campaigns.py @@ -1,255 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\mock_data\mock_campaigns.py -import datetime -from campaigns.client.data_model.campaign import CampaignID -from eveProto import split_precision -from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetResponse, GetAllUnredeemedRewardsResponse, GetParticipantStatsResponse -from eveProto.generated.eve_public.campaign.contributionmethod.configuration_pb2 import Configuration, ParameterConfiguration, MatcherParameterConfiguration -from eveProto.generated.eve_public.campaign.contributionmethod.definition.definition_pb2 import Identifier as ContributionMethodIdentifier -from eveProto.generated.eve_public.campaign.campaign_pb2 import Identifier as CampaignIdentifier, Attributes as CampaignAttributes, Issuer as CampaignIssuer, Version, STATE_ACTIVE as CAMPAIGN_STATE_ACTIVE, Stats as CampaignStats -from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier, Attributes as ObjectiveAttributes, Issuer as ObjectiveIssuer, STATE_ACTIVE as OBJECTIVE_STATE_ACTIVE, Rewards, Stats as ObjectiveStats, ParticipantStats, ParticipantState, PARTICIPANT_STATE_COMMITTED -from eveProto.generated.eve_public.career.career_pb2 import CAREER_INDUSTRIALIST -from eveProto.generated.eve_public.character.character_pb2 import Identifier as CharacterIdentifier -from eveProto.generated.eve_public.corporation.corporation_pb2 import Identifier as CorporationIdentifier -from eveProto.generated.eve_public.isk.isk_pb2 import Currency as IskCurrency -from eveProto.generated.eve_public.isk.wallet.wallet_pb2 import Owner -from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier -from eveProto.generated.eve_public.loyaltypoints.loyaltypoints_pb2 import Currency as LpCurrency -from eveProto.generated.eve_public.semanticversion_pb2 import Specification -from eveProto.generated.eve_public.standing.standing_pb2 import GainPercent, Source -from eveProto.generated.eve_public.ui.annotation_pb2 import Annotation -from eveProto.generated.eve_public.ui.contenttag_pb2 import Identifier as ContentTagIdentifier -from eveProto.generated.eve_public.ui.icon_pb2 import Identifier as IconIdentifier -from eveProto.generated.eve_public.ui.image_pb2 import Identifier as ImageIdentifier, Attributes as ImageAttributes -from google.protobuf.timestamp_pb2 import Timestamp -from uuid import UUID -CAMPAIGN_ID2 = CampaignID(UUID('12bf6798-f8d5-4933-ad43-89df6b63d2c6')) -CAMPAIGN_ID3 = CampaignID(UUID('b03d11ba-3b0c-4ff3-9c77-0e3a580575eb')) -CAMPAIGN_ID4 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f35')) -CAMPAIGN_ID5 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f36')) -OBJECTIVE_1_CAMP_2 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f87') -OBJECTIVE_1_CAMP_3 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f88') -OBJECTIVE_1_CAMP_4 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f89') -OBJECTIVE_1_CAMP_5 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f90') -CORP_CALDARI_PROVISIONS = 1000009 -CORP_24TH_IMPERIAL = 1000179 -CORP_BRUTOR_TRIBE = 1000049 -CORP_ALGINTAL_CORE = 1000215 -CORP_CBD = 1000002 -ids_to_strings = {100: 'Amarr Campaign', - 101: u"++Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", - 102: u"Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", - 103: u'In every victory, the light of Amarr shines eternal. It is done.<br>By righteous fire and steadfast faith, the divine order stands unbroken.<br>Your deeds are recorded in glory before God and Empire.', - 104: u'The faithful have faltered.<br>The enemies of Amarr yet draw breath, and the light dims in their shadow.<br>Repent, regroup, and return in greater devotion.', - 105: 'One Fine Amarr Objective', - 106: 'Mine for me peon. - Amarr', - 110: '<b>To:</b> Capsuleers operating under Imperial charter', - 111: 'Faction Briefing', - 112: 'If you deliver success, the Basilica works will complete at the start of the next season, and commerce conducted within the Amarr hub will be rewarded with reduced transactional burdens for a full following season.', - 113: 'Understand this clearly: we are not offering comfort. We are purchasing results. If you fail to meet the campaign threshold, the Basilica project will stall in public view - unfinished scaffolding and a record of wasted effort will remain for all to see. Worse: disorder will spread. Raiders will test Imperial space. Pirates will grow bolder.', - 114: 'Complete the objectives. Secure the lanes. Prove that commerce belongs under order - not chaos.', - 200: 'Minmatar Campaign', - 201: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", - 202: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", - 203: u'Through coordinated strikes, relentless pressure, and unwavering support across New Eden, the Minmatar Campaign has achieved its goal. The chains of the past have been challenged not by words, but by action and the Republic stands stronger for it. ', - 204: u'Capsuleers of the Minmatar Republic, the campaign has come to an end but its goal remains unfulfilled.<br>Despite the courage and sacrifices made across the warzone, the Republic was unable to secure the resources and strategic leverage required to complete the Skarkon Liberation Array. Without these critical means, construction has been halted, and the projects future is now uncertain.', - 205: 'One Fine Minmatar Objective', - 206: 'Mine for me peon. - Minmatar', - 210: "<b>To:</b> Capsuleers answering the Republic's call", - 211: 'Faction Briefing', - 212: 'If you succeed, Arzad II will be renamed Starkman Prime at the start of next season and Arzad and Ezzara systems will return under Republic sovereignty. A Republic station will be established in Arzad, because presence is not a speech, it is infrastructure.<br><br>And in the season that follows, we will commit resources to rebuild what was denied: planetary industry output will surge in selected systems, and convoys will begin moving through Great Wildlands. Additional reconstruction measures may be authorized to accelerate recovery and reward those who supplied it.', - 213: 'If you fail, the Empire will answer in the language it prefers: monuments that erase truth and reprisals that punish defiance. The name will not return, and the counter-narrative will harden into a permanent scar.', - 214: 'Bring the name back. Or watch it be buried again.', - 300: u'Gallente Campaign', - 301: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', - 302: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', - 303: u'Freedom prevails.<br>Through your courage, oppression has been pushed back and the Federation stands stronger.<br>The voices of the people endure. ', - 304: u'Liberty has suffered a setback.<br>Tyranny advances where vigilance failed.<br>The Federation will not forget - nor surrender.', - 305: 'One Fine Gallente Objective', - 306: 'Mine for me peon. - Gallente', - 310: '<b>To:</b> Capsuleers operating under Federal authorization', - 311: 'Faction Briefing', - 312: 'If you succeed, the Federation will permanently remove a portion of our systems from Factional Warfare exposure - our sovereignty remains intact, but the burden of constant defense will be reduced. The immediate season that follows will also see expanded drone swarm activity cluster-wide, alongside sanctioned prototype field trials for drone-adjacent technologies.', - 313: 'If you fail, infestation zones will become a permanent scar. Breaches will intensify next season, including in areas that should never have been threatened - and industry will be forced to adapt under pressure rather than policy.', - 314: 'Contain the drones. Strip them for knowledge. Then let the rest burn.', - 400: u'Caldari Campaign', - 401: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", - 402: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", - 403: u'Objective achieved.<br>State assets secured and opposition neutralized.<br>Your performance meets corporate expectations. ', - 404: u'Objectives incomplete.<br>State interests remain exposed to risk.<br>Correct deficiencies. Return with results.', - 405: 'One Fine Caldari Objective', - 406: 'Mine for me peon. - Caldari', - 410: '<b>To:</b> Capsuleers contracted for State operational objectives', - 411: 'Faction Briefing', - 412: 'If you succeed, a new stargate corridor will be activated at the start of next season, connecting our warzone space directly to Syndicate by building gates in [system A] and [system B]. The region will be refit for activity and rapid movement as soon the next season starts. In addition, the corporations presently flying under the Intaki Syndicate banner will be dissolved into a new alignment: under State authority.', - 413: 'If you fail, the corridor will remain a half-built monument to wasted effort - visible, inert, and contested. And the same Syndicate corporations will be claimed instead by the Federation. Expect the region to destabilize: hostile operations will proliferate, and Serpentis opportunists will exploit the vacuum.', - 414: 'This is a corridor. Build it - or watch someone else own it.'} - -def _get_campaign2(): - response = GetResponse() - start_time = Timestamp() - start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - expiry_time = Timestamp() - expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) - attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=100), subtitle=LocalizationIdentifier(sequential=101), goal_description=LocalizationIdentifier(sequential=102), success_description=LocalizationIdentifier(sequential=103), failure_description=LocalizationIdentifier(sequential=104), icon=IconIdentifier(name='eveicon.amarr_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_amarr.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/amarr_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='amarr'), - Annotation(key='theme_pack', value='amarr_campaign'), - Annotation(key='campaign_set', value='mil_camp_season1'), - Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_amarr.png'), - Annotation(key='ui_idx', value='1'), - Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), - Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), - Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), - Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), - Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), - Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), - Annotation(key='goal_description_header', value='111'), - Annotation(key='goal_description_subheader', value='110'), - Annotation(key='goal_description_success', value='112'), - Annotation(key='goal_description_failure', value='113'), - Annotation(key='goal_description_final_words', value='114')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) - start_date_two = Timestamp() - start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) - restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - units, nanos = split_precision(0.001) - available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=105), subtitle=LocalizationIdentifier(sequential=106), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL))))))] - response.attributes.MergeFrom(attributes) - response.available_objectives.extend(available_objectives) - response.restricted_objectives.extend(restricted_objectives) - return response - - -def _get_campaign3(): - response = GetResponse() - start_time = Timestamp() - start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - expiry_time = Timestamp() - expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) - attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=200), subtitle=LocalizationIdentifier(sequential=201), goal_description=LocalizationIdentifier(sequential=202), success_description=LocalizationIdentifier(sequential=203), failure_description=LocalizationIdentifier(sequential=204), icon=IconIdentifier(name='eveicon.minmatar_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_minmatar.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/minmatar_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='minmatar'), - Annotation(key='theme_pack', value='minmatar_campaign'), - Annotation(key='campaign_set', value='mil_camp_season1'), - Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_minmatar.png'), - Annotation(key='ui_idx', value='4'), - Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), - Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), - Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), - Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), - Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), - Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), - Annotation(key='goal_description_header', value='211'), - Annotation(key='goal_description_subheader', value='210'), - Annotation(key='goal_description_success', value='212'), - Annotation(key='goal_description_failure', value='213'), - Annotation(key='goal_description_final_words', value='214')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) - start_date_two = Timestamp() - start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) - restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - units, nanos = split_precision(0.001) - available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=205), subtitle=LocalizationIdentifier(sequential=206), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE))))))] - response.attributes.MergeFrom(attributes) - response.available_objectives.extend(available_objectives) - response.restricted_objectives.extend(restricted_objectives) - return response - - -def _get_campaign4(): - response = GetResponse() - start_time = Timestamp() - start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - expiry_time = Timestamp() - expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) - attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=300), subtitle=LocalizationIdentifier(sequential=301), goal_description=LocalizationIdentifier(sequential=302), success_description=LocalizationIdentifier(sequential=303), failure_description=LocalizationIdentifier(sequential=303), icon=IconIdentifier(name='eveicon.gallente_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_gallente.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/gallente_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='gallente'), - Annotation(key='theme_pack', value='gallente_campaign'), - Annotation(key='campaign_set', value='mil_camp_season1'), - Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_gallente.png'), - Annotation(key='ui_idx', value='3'), - Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), - Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), - Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), - Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), - Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), - Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), - Annotation(key='goal_description_header', value='311'), - Annotation(key='goal_description_subheader', value='310'), - Annotation(key='goal_description_success', value='312'), - Annotation(key='goal_description_failure', value='313'), - Annotation(key='goal_description_final_words', value='314')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) - start_date_two = Timestamp() - start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) - restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - units, nanos = split_precision(0.001) - available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=305), subtitle=LocalizationIdentifier(sequential=306), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE))))))] - response.attributes.MergeFrom(attributes) - response.available_objectives.extend(available_objectives) - response.restricted_objectives.extend(restricted_objectives) - return response - - -def _get_campaign5(): - response = GetResponse() - start_time = Timestamp() - start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - expiry_time = Timestamp() - expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) - attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=400), subtitle=LocalizationIdentifier(sequential=401), goal_description=LocalizationIdentifier(sequential=402), success_description=LocalizationIdentifier(sequential=403), failure_description=LocalizationIdentifier(sequential=404), icon=IconIdentifier(name='eveicon.caldari_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/caldari_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='caldari'), - Annotation(key='theme_pack', value='caldari_campaign'), - Annotation(key='campaign_set', value='mil_camp_season1'), - Annotation(key='ui_idx', value='2'), - Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_caldari.png'), - Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_caldari.png'), - Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), - Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), - Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), - Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), - Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), - Annotation(key='goal_description_header', value='411'), - Annotation(key='goal_description_subheader', value='410'), - Annotation(key='goal_description_success', value='412'), - Annotation(key='goal_description_failure', value='413'), - Annotation(key='goal_description_final_words', value='414')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) - start_date_two = Timestamp() - start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) - restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] - start_date_one = Timestamp() - start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) - units, nanos = split_precision(0.001) - available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=405), subtitle=LocalizationIdentifier(sequential=406), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_CBD))))))] - response.attributes.MergeFrom(attributes) - response.available_objectives.extend(available_objectives) - response.restricted_objectives.extend(restricted_objectives) - return response - - -campaigns = {CAMPAIGN_ID2: _get_campaign2(), - CAMPAIGN_ID3: _get_campaign3(), - CAMPAIGN_ID4: _get_campaign4(), - CAMPAIGN_ID5: _get_campaign5()} -campaigns_stats = {CAMPAIGN_ID2: CampaignStats(current_campaign_progress=13, total_contributors=11), - CAMPAIGN_ID3: CampaignStats(current_campaign_progress=4567, total_contributors=5), - CAMPAIGN_ID4: CampaignStats(current_campaign_progress=123, total_contributors=25), - CAMPAIGN_ID5: CampaignStats(current_campaign_progress=987, total_contributors=31)} -campaigns_objectives = {CAMPAIGN_ID2: [OBJECTIVE_1_CAMP_2], - CAMPAIGN_ID3: [OBJECTIVE_1_CAMP_3], - CAMPAIGN_ID4: [OBJECTIVE_1_CAMP_4], - CAMPAIGN_ID5: [OBJECTIVE_1_CAMP_5]} -objectives_stats = {OBJECTIVE_1_CAMP_2: ObjectiveStats(current_objective_progress=1298, committed_participants=120, total_participants=126, total_contributors=1200), - OBJECTIVE_1_CAMP_3: ObjectiveStats(current_objective_progress=1397, committed_participants=138, total_participants=1355, total_contributors=1399), - OBJECTIVE_1_CAMP_4: ObjectiveStats(current_objective_progress=1477, committed_participants=14, total_participants=140, total_contributors=145), - OBJECTIVE_1_CAMP_5: ObjectiveStats(current_objective_progress=1500, committed_participants=150, total_participants=155, total_contributors=159)} -participant_objective_stats = {CAMPAIGN_ID2: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))]), - CAMPAIGN_ID3: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=500))]), - CAMPAIGN_ID4: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1300))]), - CAMPAIGN_ID5: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))])} -unredeemed_rewards = GetAllUnredeemedRewardsResponse(objectives=[GetAllUnredeemedRewardsResponse.Objective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), isk_intervals_unredeemed=1000000, lp_intervals_unredeemed=400)], next_page=None) diff --git a/campaigns/client/mock_data/mock_contributionmethods.py b/campaigns/client/mock_data/mock_contributionmethods.py @@ -1,13 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\mock_data\mock_contributionmethods.py -from campaigns.client.data_model.contribution_method import ContributionMethodDefinition, MatcherParameterDefinition -from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllResponse -from eveProto.generated.eve_public.campaign.contributionmethod.definition.definition_pb2 import Identifier, Attributes -from eveProto.generated.eve_public.campaign.contributionmethod.parameter_pb2 import Parameter, MatcherParameter -from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier -from eveProto.generated.eve_public.ui.icon_pb2 import Identifier as IconIdentifier -from semantic_version import SemanticVersion -id_to_strings = {0: 'Location', - 1: 'Location in Universe', - 10: 'Ore Type', - 11: 'Type of Ore'} -versioned_contribution_methods = {SemanticVersion(1, 2, 3, [], []): GetAllResponse(definitions=[GetAllResponse.Definition(definition=Identifier(name='complete_objectives')), GetAllResponse.Definition(definition=Identifier(name='mine_materials'), attributes=Attributes(parameters=[Parameter(matcher=MatcherParameter(key='location', type='location', accepted_value_types=['solarsystem', 'constellation', 'region'], title=LocalizationIdentifier(sequential=0), description=LocalizationIdentifier(sequential=1), icon=IconIdentifier(name='location'))), Parameter(matcher=MatcherParameter(key='ore', type='mineable_ore_type', accepted_value_types=['ore_type', 'ore_group'], title=LocalizationIdentifier(sequential=10), description=LocalizationIdentifier(sequential=11), icon=IconIdentifier(name='mining')))]))])} diff --git a/campaigns/client/mock_data/mock_gateway.py b/campaigns/client/mock_data/mock_gateway.py @@ -1,195 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\mock_data\mock_gateway.py -import random -import uthread2 -from campaigns.client.data_model.campaign import CampaignID -from campaigns.client.mock_data.mock_campaigns import campaigns, participant_objective_stats, campaigns_stats, objectives_stats, unredeemed_rewards, campaigns_objectives -from campaigns.client.mock_data.mock_contributionmethods import versioned_contribution_methods -from campaigns.client.qa.settings import SETTING_REQUEST_DELAY, REQUEST_DELAY_OFF, REQUEST_DELAY_ON_100MS, REQUEST_DELAY_ON_100_200_MS, SETTING_REQUEST_ERROR_RATE, REQUEST_ERROR_RATE_OFF, REQUEST_ERROR_RATE_10, REQUEST_ERROR_RATE_50, REQUEST_ERROR_RATE_80, REQUEST_ERROR_RATE_100, REQUEST_DELAY_ON_1_2_S -from eveProto.generated.eve_public.campaign.campaign_pb2 import Identifier as CampaignIdentifier -from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllRequest as ContributionMethodGetAllRequest -from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetLimitsRequest, GetLimitsResponse, GetAllRequest, GetAllResponse, GetParticipantStatsResponse, GetParticipantStatsRequest, GetStatsResponse, GetStatsRequest, GetAllUnredeemedRewardsRequest, GetRequest -from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import CommitRequest, ResignRequest, RedeemRewardsRequest, GetStatsRequest as ObjectiveGetStatsRequest, GetStatsResponse as ObjectiveGetStatsResponse -from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier -from six.moves.http_client import OK, NOT_FOUND, INTERNAL_SERVER_ERROR, BAD_REQUEST, FORBIDDEN, UNAUTHORIZED -from logging import getLogger -from mock import Mock -from semantic_version import SemanticVersion -from uuid import UUID -logger = getLogger('campaigns') - -class MockCampaignsGateway(object): - - def __init__(self, message_player): - self._message_player = message_player - self._request_delay_min = 0 - self._request_delay_max = 0 - self._request_error_rate = 0 - SETTING_REQUEST_DELAY.on_change.connect(self._on_request_delay_changed) - SETTING_REQUEST_ERROR_RATE.on_change.connect(self._on_request_error_rate_changed) - - def _on_request_error_rate_changed(self, value): - if value == REQUEST_ERROR_RATE_OFF: - self._request_error_rate = 0 - elif value == REQUEST_ERROR_RATE_10: - self._request_error_rate = 0.1 - elif value == REQUEST_ERROR_RATE_50: - self._request_error_rate = 0.5 - elif value == REQUEST_ERROR_RATE_80: - self._request_error_rate = 0.8 - elif value == REQUEST_ERROR_RATE_100: - self._request_error_rate = 1 - else: - raise ValueError('Invalid request error rate value') - logger.info('Mock Gateway: Error Rate set to %s percent', self._request_error_rate * 100) - - def _on_request_delay_changed(self, value): - if value == REQUEST_DELAY_OFF: - self._request_delay_min = 0 - self._request_delay_max = 0 - elif value == REQUEST_DELAY_ON_100MS: - self._request_delay_min = 0 - self._request_delay_max = 0.1 - elif value == REQUEST_DELAY_ON_100_200_MS: - self._request_delay_min = 0.1 - self._request_delay_max = 0.2 - elif value == REQUEST_DELAY_ON_1_2_S: - self._request_delay_min = 1 - self._request_delay_max = 2 - else: - raise ValueError('Invalid request delay value') - logger.info('Mock Gateway: Request Delay set to %s to %s seconds', self._request_delay_min, self._request_delay_max) - - def send_blocking_character_request_and_receive_response(self, request_payload, expected_response_class, timeout_seconds, max_attempts, retry_delay_in_seconds): - delay_secs = random.uniform(self._request_delay_min, self._request_delay_max) - if delay_secs > 0: - uthread2.Sleep(delay_secs) - should_error = False - if random.random() < self._request_error_rate: - should_error = True - if isinstance(request_payload, GetLimitsRequest): - return get_limits_response(should_error) - if isinstance(request_payload, GetAllRequest): - return get_all_response(should_error) - if isinstance(request_payload, GetParticipantStatsRequest): - return get_participant_stats_response(request_payload.campaign, should_error) - if isinstance(request_payload, GetStatsRequest): - return get_stats_response(request_payload.campaign, should_error) - if isinstance(request_payload, GetRequest): - return get_response(request_payload.campaign, request_payload.version, should_error) - if isinstance(request_payload, GetAllUnredeemedRewardsRequest): - return get_unredeemed_rewards_response(request_payload.page, should_error) - if isinstance(request_payload, ObjectiveGetStatsRequest): - return get_objective_stats_response(request_payload.objective, should_error) - if isinstance(request_payload, CommitRequest) or isinstance(request_payload, ResignRequest) or isinstance(request_payload, RedeemRewardsRequest): - if should_error: - return create_error_response([NOT_FOUND, - BAD_REQUEST, - INTERNAL_SERVER_ERROR, - FORBIDDEN, - UNAUTHORIZED]) - return (create_response_primitive(OK), None) - if isinstance(request_payload, ContributionMethodGetAllRequest): - return contribution_method_get_all_response(request_payload.version, should_error) - raise NotImplementedError('Attempted to use MockCampaignsGateway for request that has not been mocked: %s' % request_payload) - - def _notify_of_mock_use(self): - self._message_player('Using mocked data for Campaigns') - logger.info('Using mocked data for Campaigns') - - -def create_error_response(error_list): - error_code = random.choice(error_list) - return (create_response_primitive(error_code), None) - - -def create_response_primitive(status_code): - response_primitive = Mock() - response_primitive.status_code = status_code - return response_primitive - - -def get_limits_response(should_error): - if should_error: - return create_error_response([INTERNAL_SERVER_ERROR]) - response_payload = GetLimitsResponse(max_active_objectives_per_participant=10) - return (create_response_primitive(OK), response_payload) - - -def get_all_response(should_error): - if should_error: - return create_error_response([INTERNAL_SERVER_ERROR]) - response_payload = GetAllResponse() - campaign_ids = [ id.uuid for id in campaigns.iterkeys() ] - for uuid in campaign_ids: - identifier = CampaignIdentifier(uuid=uuid.bytes) - response_payload.campaigns.append(identifier) - - return (create_response_primitive(OK), response_payload) - - -def get_participant_stats_response(campaign_id, should_error): - if should_error: - return create_error_response([NOT_FOUND, - BAD_REQUEST, - INTERNAL_SERVER_ERROR, - UNAUTHORIZED]) - response_payload = participant_objective_stats.get(CampaignID.from_proto(campaign_id), None) - if response_payload is None: - return (create_response_primitive(NOT_FOUND), GetParticipantStatsResponse()) - return (create_response_primitive(OK), response_payload) - - -def get_stats_response(campaign_id, should_error): - if should_error: - return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) - response_payload = GetStatsResponse() - campaign_id = CampaignID.from_proto(campaign_id) - campaign_stats = campaigns_stats.get(campaign_id, None) - if campaign_stats is None: - return (create_response_primitive(NOT_FOUND), response_payload) - response_payload.campaign_stats.MergeFrom(campaign_stats) - campaign_objectives = campaigns_objectives.get(campaign_id, []) - for uuid in campaign_objectives: - objective = objectives_stats[uuid] - response_payload.objective_stats.append(GetStatsResponse.ObjectiveStats(objective=ObjectiveIdentifier(uuid=uuid.bytes), stats=objective)) - - return (create_response_primitive(OK), response_payload) - - -def get_response(campaign_id, version, should_error): - if should_error: - return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) - response_payload = campaigns.get(CampaignID.from_proto(campaign_id), None) - if response_payload is None: - return (create_response_primitive(NOT_FOUND), response_payload) - return (create_response_primitive(OK), response_payload) - - -def get_unredeemed_rewards_response(page, should_error): - if should_error: - return create_error_response([BAD_REQUEST, INTERNAL_SERVER_ERROR, UNAUTHORIZED]) - response_payload = unredeemed_rewards - return (create_response_primitive(OK), response_payload) - - -def get_objective_stats_response(objective_id_list, should_error): - if should_error: - return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) - id_list = [ UUID(bytes=objective_id.uuid) for objective_id in objective_id_list ] - response_payload = ObjectiveGetStatsResponse() - for uuid in id_list: - objective = objectives_stats.get(uuid, None) - if objective is not None: - response_payload.objective_stats.append(ObjectiveGetStatsResponse.ObjectiveStats(objective=ObjectiveIdentifier(uuid=uuid.bytes), stats=objective)) - - return (create_response_primitive(OK), response_payload) - - -def contribution_method_get_all_response(version, should_error): - if should_error: - return create_error_response([BAD_REQUEST, INTERNAL_SERVER_ERROR]) - semantic_version = SemanticVersion.from_proto(version) - response_payload = versioned_contribution_methods.get(semantic_version, None) - if response_payload is None: - return (create_response_primitive(NOT_FOUND), response_payload) - return (create_response_primitive(OK), response_payload) diff --git a/campaigns/client/qa/insider.py b/campaigns/client/qa/insider.py @@ -34,10 +34,10 @@ def OpenCampaignDebugger(): def _invalidate_caches(): - from campaigns.client.api import get_campaigns_repository - get_campaigns_repository().clear_caches() + from campaigns.client.api import get_campaigns_repository_v1 + get_campaigns_repository_v1().clear_caches() def _invalidate_stats_caches(): - from campaigns.client.api import get_campaigns_repository - get_campaigns_repository().clear_stats_caches() + from campaigns.client.api import get_campaigns_repository_v1 + get_campaigns_repository_v1().clear_stats_caches() diff --git a/campaigns/client/repository.py b/campaigns/client/repository.py @@ -1,512 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\repository.py -from datetime import timedelta -import campaigns.client.data_model.flatbuffer.contribution_method_serialization as fb_contributionmethod -import campaigns.client.signals as campaigns_signals -import uthread -import uthread2 -from caching import Memoize -from caching.client.storage.disk_storage import BinaryDiskStorage -from caching.memoize import MemoizeWithLock -from campaigns.client.caches.ttl_cache import TTLCache, NO_CACHED_DATA -from campaigns.client.data_model.campaign import CampaignState -from campaigns.client.data_model.flatbuffer.campaigndefinition_serialization import serialize_campaigns_list_to_flatbuffer, deserialize_flatbuffer_to_campaigns_list -from campaigns.client.data_model.objective import ParticipantState, ObjectiveID -from campaigns.client.errors import CampaignRequestError -from campaigns.client.feature_flags import campaigns_polling_frequency -from campaigns.client.listeners.campaign_listener import CampaignListener -from campaigns.client.listeners.objective_listener import ObjectiveListener -from campaigns.client.messengers.campaigns_messenger import CampaignsMessenger -from campaigns.client.messengers.contribution_methods_messenger import CampaignContributionMethodsMessenger -from campaigns.client.util import get_viewed_objective_ids -from collections import defaultdict -from six.moves.http_client import NOT_MODIFIED -from jobboard.client import ProviderType -from jobboard.client.job_board_signals import on_data_primed -from locks import RWLock -from locks.singleFlight import single_flight -if False: - from typing import Dict -import logging -logger = logging.getLogger('campaigns') -RECONCILE_NOTICE_WAIT_SECONDS = 60 -CAMPAIGNS_TTL_MINS = 15 -STATS_TTL_MINS = 5 -STATS_TTL = timedelta(minutes=STATS_TTL_MINS) -CAMPAIGNS_TTL = timedelta(minutes=CAMPAIGNS_TTL_MINS) -NO_PARTICIPATION_STATS = 'NO_PARTICIPATION_STATS' - -class CampaignsRepository(object): - _campaigns_messenger = None - _contribution_methods_messenger = None - _campaign_listener = None - _objective_listener = None - __notifyevents__ = ['OnCharacterSessionChanged'] - - def __init__(self, public_gateway, service_manager, mock_public_gateway, mock_setting, campaigns_messenger_class, contribution_methods_messenger_class, campaign_listener_class, objective_listener_class, do_data_prime = True): - self._public_gateway = public_gateway - self._service_manager = service_manager - self._mock_public_gateway = mock_public_gateway - self._mock_setting = mock_setting - self._poll_stats_tasklet = None - self._campaigns_messenger = campaigns_messenger_class(public_gateway) - self._contribution_methods_messenger = contribution_methods_messenger_class(public_gateway) - self._campaign_listener = campaign_listener_class(public_gateway) - self._objective_listener = objective_listener_class(public_gateway) - self._campaigns_cache = TTLCache(CAMPAIGNS_TTL) - self._campaigns_cache_disk_storage = BinaryDiskStorage('campaign_definitions') - self._campaign_stats_cache = TTLCache(STATS_TTL) - self._objective_stats_cache = TTLCache(STATS_TTL) - self._participant_stats_cache = TTLCache(CAMPAIGNS_TTL) - self._contribution_methods_cache = {} - self._contribution_methods_disk_storage = BinaryDiskStorage('campaign_versioned_contribution_methods') - if do_data_prime: - self._prime_caches_from_disk() - self._has_reconciled_caches = False - self._reconciliation_lock = RWLock() - self._prime_cache_thread = None - self._update_gateway() - self._service_manager.RegisterNotify(self) - self._connect_signals() - - def __del__(self): - self._service_manager.UnregisterNotify(self) - self._disconnect_signals() - - def OnCharacterSessionChanged(self, oldCharacterID, newCharacterID): - logger.info('OnCharacterSessionChanged') - self._participant_stats_cache.clear() - self.get_all_unredeemed_rewards.clear_memoized() - if self._has_reconciled_caches: - return - if newCharacterID is None: - self._clear_poll_stats_tasklet() - else: - self._start_polling_stats() - uthread2.start_tasklet(self._wait_to_reconcile) - - def _wait_to_reconcile(self): - logger.info('_wait_to_reconcile') - uthread2.Sleep(RECONCILE_NOTICE_WAIT_SECONDS) - if self._has_reconciled_caches: - return - with self._reconciliation_lock: - if self._has_reconciled_caches: - return - self._reconcile_caches_without_version_notice() - - def _reconcile_caches_without_version_notice(self): - logger.info('_reconcile_caches_without_version_notice') - current_campaign_ids = set(self.get_all_campaigns()) - self._reconcile_campaign_definitions(current_campaign_ids) - self._reconcile_contribution_methods() - self._has_reconciled_caches = True - - def _reconcile_campaign_definitions(self, current_ids): - logger.info('_reconcile_campaign_definitions %s', current_ids) - cached_campaign_ids = set(self._campaigns_cache.keys()) - ids_to_remove = cached_campaign_ids - current_ids - for id in ids_to_remove: - self._campaigns_cache.remove(id) - - self._update_campaign_filesystem_storage() - - def _reconcile_contribution_methods(self): - logger.info('_reconcile_contribution_methods') - campaign_semantic_versions = {campaign.version.definition_semantic_verison for campaign in self._campaigns_cache.itervalues_ignore_expiry()} - cached_semantic_versions = set(self._contribution_methods_cache.keys()) - ids_to_remove = cached_semantic_versions - campaign_semantic_versions - for id in ids_to_remove: - self._contribution_methods_cache.pop(id) - - self._update_contribution_methods_disk_cache() - - def _prime_caches_from_disk(self): - logger.info('_prime_caches_from_disk') - campaigns_flatbuffer = self._campaigns_cache_disk_storage.get() - if campaigns_flatbuffer is not None: - campaigns_list = deserialize_flatbuffer_to_campaigns_list(campaigns_flatbuffer) - for campaign in campaigns_list: - self._campaigns_cache.store(campaign.id, campaign) - self._campaigns_cache.expire(campaign.id) - - logger.info('campaigns cache: %s', self._campaigns_cache) - contribution_methods_flatbuffer = self._contribution_methods_disk_storage.get() - if contribution_methods_flatbuffer is not None: - self._contribution_methods_cache = fb_contributionmethod.deserialize_flatbuffer_to_versioned_definitions_dict(contribution_methods_flatbuffer) - logger.info('contribution methods cache: %s', self._contribution_methods_cache) - - @MemoizeWithLock(CAMPAIGNS_TTL_MINS) - def get_all_campaigns(self): - campaign_id_list = self._campaigns_messenger.get_all_request() - return campaign_id_list - - def get_data_for_all_current_campaigns(self): - campaign_id_list = self.get_all_campaigns() - all_data = {} - for campaign_id in campaign_id_list: - campaign_data = self.get_campaign(campaign_id) - if campaign_data.campaign_state == CampaignState.CANCELLED: - continue - all_data[campaign_id] = campaign_data - - return all_data - - @single_flight - def get_campaign(self, campaign_id): - campaign_data = self._campaigns_cache.get(campaign_id) - if campaign_data != NO_CACHED_DATA: - return campaign_data - version = None - expired_campaign_data = self._campaigns_cache.get_ignore_expiry(campaign_id) - if expired_campaign_data != NO_CACHED_DATA: - version = expired_campaign_data.version - result = self._campaigns_messenger.get_request(campaign_id, version) - if result == NOT_MODIFIED: - self._campaigns_cache.reset_expiration(campaign_id) - return expired_campaign_data - self._campaigns_cache.store(result.id, result) - self._update_campaign_filesystem_storage() - if version is not None: - uthread2.start_tasklet(self._emit_on_campaign_updated, campaign_id) - return result - - def _update_campaign_filesystem_storage(self): - campaigns = [ campaign for campaign in self._campaigns_cache.itervalues_ignore_expiry() if campaign != NO_CACHED_DATA ] - data = serialize_campaigns_list_to_flatbuffer(campaigns) - self._campaigns_cache_disk_storage.set(data) - - @single_flight - def get_campaign_stats(self, campaign_id): - campaign_stats = self._campaign_stats_cache.get(campaign_id) - objective_out_of_date = False - objective_stats = [] - if campaign_stats != NO_CACHED_DATA: - campaign = self.get_campaign(campaign_id) - current_objectives = campaign.current_objectives - for objective in current_objectives: - objective_stat = self._objective_stats_cache.get(objective.id) - if objective_stat == NO_CACHED_DATA: - objective_out_of_date = True - break - else: - objective_stats.append(objective_stat) - - if campaign_stats != NO_CACHED_DATA and not objective_out_of_date: - return (campaign_stats, objective_stats) - campaign_stats, objective_stats = self._campaigns_messenger.get_stats_request(campaign_id) - self._campaign_stats_cache.store(campaign_stats.id, campaign_stats) - for objective_stat in objective_stats: - self._objective_stats_cache.store(objective_stat.objective_id, objective_stat) - - return (campaign_stats, objective_stats) - - @single_flight - def get_campaign_participant_stats(self, campaign_id): - new_data_required = False - participant_stats = [] - campaign = self.get_campaign(campaign_id) - current_objectives = campaign.current_objectives - for objective in current_objectives: - participant_stat = self._participant_stats_cache.get(objective.id) - if participant_stat == NO_CACHED_DATA: - new_data_required = True - elif participant_stat != NO_PARTICIPATION_STATS: - participant_stats.append(participant_stat) - - if not new_data_required: - return participant_stats - results = self._campaigns_messenger.get_participant_stats_request(campaign_id) - stat_by_objective_id = {participant_stat.objective_id:participant_stat for participant_stat in results} - for objective in current_objectives: - if objective.id in stat_by_objective_id: - self._participant_stats_cache.store(objective.id, stat_by_objective_id[objective.id]) - else: - self._participant_stats_cache.store(objective.id, NO_PARTICIPATION_STATS) - - return results - - @MemoizeWithLock(STATS_TTL_MINS) - def get_all_unredeemed_rewards(self): - next_page_token = None - rewards_by_objective_id = defaultdict(list) - while True: - result, next_page_token = self._campaigns_messenger.get_all_unredeemed_rewards_request(next_page_token) - for r in result: - rewards_by_objective_id[r.objective_id].append(r) - - if not next_page_token: - break - - return rewards_by_objective_id - - def get_unredeemed_rewards_for_objective(self, objective_id): - return self.get_all_unredeemed_rewards().get(objective_id) - - @Memoize - def get_limits(self): - return self._campaigns_messenger.get_limits_request() - - @single_flight - def get_objective_stats(self, objective_id_list): - expired_ids = [] - cached_objective_stats = [] - for objective_id in objective_id_list: - objective_stat = self._objective_stats_cache.get(objective_id) - if objective_stat == NO_CACHED_DATA: - expired_ids.append(objective_id) - else: - cached_objective_stats.append(objective_stat) - - if len(expired_ids) == 0: - return cached_objective_stats - results_list = self._campaigns_messenger.get_objective_stats_request(expired_ids) - updated_objective_stats = set() - for objective_stat in results_list: - self._objective_stats_cache.store(objective_stat.objective_id, objective_stat) - updated_objective_stats.add(objective_stat.objective_id) - - if updated_objective_stats: - uthread2.start_tasklet(self._emit_on_campaigns_objective_stats_updated, updated_objective_stats) - cached_objective_stats.extend(results_list) - return cached_objective_stats - - def objective_stats_have_valid_cache(self, objective_id): - return self._objective_stats_cache.has_cached_data_for_key(objective_id) - - def objective_participant_stats_have_valid_cache(self, objective_id): - return self._participant_stats_cache.has_cached_data_for_key(objective_id) - - def _emit_on_campaigns_objective_stats_updated(self, updated_objective_stats): - campaigns_signals.on_campaigns_objective_stats_updated(updated_objective_stats) - - def _emit_on_campaign_updated(self, campaign_id): - logger.info('_emit_on_campaign_updated %s', campaign_id) - campaigns_signals.on_campaign_updated(campaign_id) - - @single_flight - def get_contribution_method_definitions(self, semantic_version): - if semantic_version in self._contribution_methods_cache: - return self._contribution_methods_cache[semantic_version] - definitions = self._contribution_methods_messenger.get_all_request(semantic_version) - self._contribution_methods_cache[semantic_version] = definitions - self._update_contribution_methods_disk_cache() - return definitions - - def _update_contribution_methods_disk_cache(self): - data = fb_contributionmethod.serialize_versioned_definitions_to_flatbuffer(self._contribution_methods_cache) - self._contribution_methods_disk_storage.set(data) - - def commit(self, objective_id): - self._campaigns_messenger.commit_request(objective_id) - if objective_id not in self._participant_stats_cache: - logger.warning("Committed to an objective for which we don't have any participant stats") - return - participant_stat = self._participant_stats_cache.get_ignore_expiry(objective_id) - if participant_stat == NO_PARTICIPATION_STATS: - self._participant_stats_cache.remove(objective_id) - else: - participant_stat.participant_state = ParticipantState.COMMITTED - self._participant_stats_cache.reset_expiration(objective_id) - campaigns_signals.on_commited_state_changed(objective_id) - - def resign(self, objective_id): - self._campaigns_messenger.resign_request(objective_id) - if objective_id not in self._participant_stats_cache: - logger.warning("Resigning from an objective for which we don't have any participant stats") - return - participant_stat = self._participant_stats_cache.get_ignore_expiry(objective_id) - if participant_stat == NO_PARTICIPATION_STATS: - self._participant_stats_cache.remove(objective_id) - else: - participant_stat.participant_state = ParticipantState.RESIGNED - self._participant_stats_cache.reset_expiration(objective_id) - campaigns_signals.on_commited_state_changed(objective_id) - - def redeem_rewards(self, objective_id): - try: - self._campaigns_messenger.redeem_rewards_request(objective_id) - self.get_all_unredeemed_rewards.clear_memoized() - except CampaignRequestError as e: - logger.exception('Failed to redeem rewards for objective') - campaigns_signals.on_redeem_reward_failed(objective_id) - else: - campaigns_signals.on_reward_redeemed(objective_id) - - def clear_caches(self): - self.get_all_campaigns.clear_memoized() - self.get_limits.clear_memoized() - self.get_all_unredeemed_rewards.clear_memoized() - self._campaigns_cache.clear_cache() - self._campaigns_cache_disk_storage.clear() - self._campaign_stats_cache.clear_cache() - self._objective_stats_cache.clear_cache() - self._participant_stats_cache.clear_cache() - self._contribution_methods_cache.clear() - self._contribution_methods_disk_storage.clear() - campaigns_signals.on_campaigns_cache_invalidated() - - def clear_stats_caches(self): - self._campaign_stats_cache.clear_cache() - self._objective_stats_cache.clear_cache() - self._participant_stats_cache.clear_cache() - - def clear_campaign_stats_cache(self, campaign_id): - self._campaign_stats_cache.pop(campaign_id, None) - - def _update_gateway(self, *args, **kwargs): - enabled = self._mock_setting.is_enabled() - logger.info('Mocking is enabled: %s', enabled) - if enabled: - self._campaigns_messenger.override_gateway(self._mock_public_gateway) - self._contribution_methods_messenger.override_gateway(self._mock_public_gateway) - else: - self._campaigns_messenger.override_gateway(self._public_gateway) - self._contribution_methods_messenger.override_gateway(self._public_gateway) - - def _on_campaign_started(self, campaign_id): - campaigns_signals.on_campaign_started(campaign_id) - self.get_all_campaigns.clear_memoized() - - def _on_campaign_completed(self, campaign_id): - campaigns_signals.on_campaign_completed(campaign_id) - self.get_all_campaigns.clear_memoized() - - def _on_campaign_expired(self, campaign_id): - campaigns_signals.on_campaign_expired(campaign_id) - self.get_all_campaigns.clear_memoized() - - def _on_campaigns_version(self, versions_dict): - campaigns_signals.on_campaigns_version(versions_dict) - with self._reconciliation_lock: - current_campaign_ids = set(versions_dict.keys()) - self._reconcile_campaign_definitions(current_campaign_ids) - self._reconcile_contribution_methods() - self._reconcile_campaign_versions(versions_dict) - self._has_reconciled_caches = True - - def _reconcile_campaign_versions(self, versions_dict): - logger.info('_reconcile_campaign_versions %s', versions_dict) - for campaign_id, campaign in self._campaigns_cache.iteritems(): - if campaign_id not in versions_dict: - logger.warning('Campaign ID not in version notice, this should have been reconciled already %s', campaign_id) - continue - version = versions_dict[campaign_id] - if version != campaign.version: - self._campaigns_cache.expire(campaign_id) - - def _on_objective_contributed_notice(self, objective_id, total_participant_progress): - if objective_id not in self._participant_stats_cache: - logger.warning('Received contribution notice with no participant stats for objective id %s', objective_id) - return - participant_stats = self._participant_stats_cache.get_ignore_expiry(objective_id) - if participant_stats == NO_PARTICIPATION_STATS: - logger.warning('Got unexpected NO_PARTICIPATION_STATS in cache for objective contribution %s', objective_id) - self._participant_stats_cache.remove(objective_id) - else: - participant_stats.current_participant_progress = total_participant_progress - self._participant_stats_cache.reset_expiration(objective_id) - if objective_id in self._objective_stats_cache: - self._objective_stats_cache.expire(objective_id) - self.get_all_unredeemed_rewards.clear_memoized() - campaigns_signals.on_objective_contributed_notice(objective_id, total_participant_progress) - - def _connect_signals(self): - self._mock_setting.register_to_updates(self._update_gateway) - self._campaign_listener.on_started.connect(self._on_campaign_started) - self._campaign_listener.on_completed.connect(self._on_campaign_completed) - self._campaign_listener.on_expired.connect(self._on_campaign_expired) - self._campaign_listener.on_current_versions.connect(self._on_campaigns_version) - self._objective_listener.on_contributed.connect(self._on_objective_contributed_notice) - campaigns_signals.on_campaigns_polling_frequency_changed.connect(self._on_polling_frequency_changed) - - def _disconnect_signals(self): - self._mock_setting.unregister_from_updates(self._update_gateway) - self._campaign_listener.on_started.disconnect(self._on_campaign_started) - self._campaign_listener.on_completed.disconnect(self._on_campaign_completed) - self._campaign_listener.on_expired.disconnect(self._on_campaign_expired) - self._campaign_listener.on_current_versions.disconnect(self._on_campaigns_version) - self._objective_listener.on_contributed.disconnect(self._on_objective_contributed_notice) - campaigns_signals.on_campaigns_polling_frequency_changed.disconnect(self._on_polling_frequency_changed) - - def get_campaign_objectives(self, campaign_id): - campaign_data = self.get_campaign(campaign_id) - if campaign_data.campaign_state == CampaignState.CANCELLED: - return [] - return campaign_data.current_objectives + campaign_data.future_objectives - - def get_all_campaigns_objectives(self): - all_current_objectives = [] - all_future_objectives = [] - all_campaign_ids = self.get_all_campaigns() - for campaign_id in all_campaign_ids: - campaign_data = self.get_campaign(campaign_id) - if campaign_data.campaign_state == CampaignState.CANCELLED: - continue - current_objectives = campaign_data.current_objectives - for obj in current_objectives: - all_current_objectives.append(obj) - - future_objectives = campaign_data.future_objectives - for obj in future_objectives: - all_future_objectives.append(obj) - - return all_current_objectives + all_future_objectives - - def _on_polling_frequency_changed(self, *args, **kwargs): - self._clear_poll_stats_tasklet() - self._start_polling_stats() - - def _get_polling_interval(self): - return campaigns_polling_frequency() - - def get_viewed_ids(self): - viewed_objective_ids = get_viewed_objective_ids() - return viewed_objective_ids - - def _start_polling_stats(self): - if self._poll_stats_tasklet is None: - self._poll_stats_tasklet = uthread2.start_tasklet(self._poll_stats) - - def _poll_stats(self): - while True: - frequency_sec = self._get_polling_interval() - uthread2.sleep(frequency_sec) - viewed_ids = self.get_viewed_ids() - self._request_batched_stats(viewed_ids) - - def _request_batched_stats(self, project_ids): - try: - self.get_objective_stats(project_ids) - except Exception: - logger.exception('Failed when getting objective stats') - - def _clear_poll_stats_tasklet(self): - if self._poll_stats_tasklet: - self._poll_stats_tasklet.kill() - self._poll_stats_tasklet = None - - def on_frequency_changed(self, *args, **kwargs): - self._clear_poll_stats_tasklet() - self._start_polling_stats() - - def prime_stats_for_campaign(self, campaign_id): - self.get_campaign_stats(campaign_id) - self.get_campaign_participant_stats(campaign_id) - - def prime_all_stats_for_campaign(self, campaign_id): - if campaign_id not in self.get_data_for_all_current_campaigns(): - return - self.prime_all_stats() - - def prime_all_stats(self): - if self._prime_cache_thread and self._prime_cache_thread.is_alive(): - return - self._prime_cache_thread = uthread2.StartTasklet(self._prime_all_stats) - - def _prime_all_stats(self): - all_current_campaigns_by_id = self.get_data_for_all_current_campaigns() - calls = [ (self.get_campaign_stats, (campaign_id,)) for campaign_id in all_current_campaigns_by_id.iterkeys() ] - calls += [ (self.get_campaign_participant_stats, (campaign_id,)) for campaign_id in all_current_campaigns_by_id.iterkeys() ] - if calls: - uthread.parallel(calls) - on_data_primed(ProviderType.CAMPAIGNS) diff --git a/campaigns/client/signals.py b/campaigns/client/signals.py @@ -1,19 +0,0 @@ -#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\signals.py -from __future__ import absolute_import -from signals import Signal -on_available_campaigns_changed = Signal('campaigns.on_available_campaigns_changed') -on_campaigns_enabled_changed = Signal('campaigns.on_campaigns_enabled_changed') -on_campaign_started = Signal('campaigns.on_campaign_started') -on_campaign_completed = Signal('campaigns.on_campaign_completed') -on_campaign_expired = Signal('campaigns.on_campaign_expired') -on_campaigns_version = Signal('campaigns.on_campaigns_version') -on_objective_contributed_notice = Signal('campaigns.on_objective_contributed_notice') -on_reward_redeemed = Signal('campaigns.on_reward_redeemed') -on_redeem_reward_failed = Signal('campaigns.on_redeem_reward_failed') -on_campaigns_polling_frequency_changed = Signal('campaigns.on_campaigns_polling_frequency_changed') -on_campaigns_objective_stats_updated = Signal('campaigns.on_campaigns_objective_stats_updated') -on_campaign_animation_setting_changed = Signal('campaigns.on_campaign_animation_setting_changed') -on_commited_state_changed = Signal('campaigns.on_commited_state_changed') -on_campaign_updated = Signal('campaigns.on_campaign_updated') -on_job_provider_finished_refreshing_campaign = Signal('campaigns.on_job_provider_finished_refreshing_campaign') -on_campaigns_cache_invalidated = Signal('campaigns.on_campaigns_cache_invalidated') diff --git a/campaigns/client/ui_controllers/campaign_controller.py b/campaigns/client/ui_controllers/campaign_controller.py @@ -3,7 +3,7 @@ import datetime import gametime import logging from achievement_system.client.ui.util import get_achievements_targeting_campaign -from campaigns.client.data_model.campaign import CampaignState +from campaigns.client.v1.data_model.campaign import CampaignState from campaigns.client.ui_controllers.campaign_controller_text import CampaignControllerText from campaigns.client.ui_controllers.campaign_controller_texture import CampaignControllerTextures from carbon.common.script.util.format import FmtDate diff --git a/campaigns/client/util.py b/campaigns/client/util.py @@ -1,6 +1,6 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\util.py import uuid -from campaigns.client.data_model.objective import ObjectiveID +from campaigns.client.v1.data_model.objective import ObjectiveID from carbon.common.script.sys.serviceManager import ServiceManager def get_viewed_objective_ids(): diff --git a/campaigns/client/v1/__init__.py b/campaigns/client/v1/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\__init__.py +pass diff --git a/campaigns/client/v1/data_model/__init__.py b/campaigns/client/v1/data_model/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\__init__.py +pass diff --git a/campaigns/client/v1/data_model/campaign.py b/campaigns/client/v1/data_model/campaign.py @@ -0,0 +1,566 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\campaign.py +import campaigns.client.v1.data_model.flatbuffer.campaigndefinition_generated as fb_campaign +from campaigns.client.v1.data_model.career_paths import PROTO_CAREER_TO_FDS_CAREER +from campaigns.client.v1.data_model.contribution_method import ContributionMethodConfiguration +from campaigns.client.v1.data_model.objective import FutureObjective, Objective, ObjectiveID +from datetimeutils import datetime_to_filetime, filetime_to_datetime +from eve.common.script.sys.idCheckers import IsCorporation, IsCharacter, IsFaction +from eveProto.generated.eve_public.campaign.campaign_pb2 import STATE_EXPIRED, STATE_CANCELLED, STATE_UNSPECIFIED, STATE_ACTIVE, STATE_COMPLETED, Identifier, Version +from itertoolsext.Enum import Enum +from semantic_version import SemanticVersion +from uuid import UUID +import logging +logger = logging.getLogger('campaigns') + +def serialize_semantic_version(builder, version): + prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] + build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] + fb_campaign.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) + for prerelease_string in reversed(prerelease_strings): + builder.PrependUOffsetTRelative(prerelease_string) + + prerelease_offset = builder.EndVector() + fb_campaign.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) + for build_string in reversed(build_strings): + builder.PrependUOffsetTRelative(build_string) + + build_offset = builder.EndVector() + fb_campaign.SemanticVersionStart(builder) + fb_campaign.SemanticVersionAddMajor(builder, version.major) + fb_campaign.SemanticVersionAddMinor(builder, version.minor) + fb_campaign.SemanticVersionAddPatch(builder, version.patch) + fb_campaign.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) + fb_campaign.SemanticVersionAddBuildTags(builder, build_offset) + return fb_campaign.SemanticVersionEnd(builder) + + +def deserialize_semantic_version(version_flatbuffer): + major = version_flatbuffer.Major() + minor = version_flatbuffer.Minor() + patch = version_flatbuffer.Patch() + prerelease_tags = [] + for i in range(version_flatbuffer.PrereleaseTagsLength()): + prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) + + build_tags = [] + for i in range(version_flatbuffer.BuildTagsLength()): + build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) + + return SemanticVersion(major, minor, patch, prerelease_tags, build_tags) + + +class CampaignID(object): + + def __init__(self, campaign_uuid): + self._campaign_uuid = campaign_uuid + + @property + def uuid(self): + return self._campaign_uuid + + @classmethod + def from_proto(cls, proto): + return CampaignID(UUID(bytes=proto.uuid)) + + def to_proto(self): + return Identifier(uuid=self._campaign_uuid.bytes) + + def __eq__(self, other): + if not isinstance(other, CampaignID): + return NotImplemented + return self._campaign_uuid == other._campaign_uuid + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __hash__(self): + return hash(self.uuid) + + +class Campaign(object): + + def __init__(self, campaign_id, version, title, subtitle, goal_description, success_description, failure_description, icon, logo, dashboard_background, ao_feature_page, objective_background, issuer, presenting_character, annotations, total_objectives, scheduled_start_datetime, finished_datetime, target_progress, contribution_method_configuration, current_objectives, future_objectives, campaign_state, scheduled_expiry_datetime, definition_name): + self._campaign_id = campaign_id + self._version = version + self._title = title + self._subtitle = subtitle + self._goal_description = goal_description + self._success_description = success_description + self._failure_description = failure_description + self._icon = icon + self._logo = logo + self._dashboard_background = dashboard_background + self._ao_feature_page = ao_feature_page + self._objective_background = objective_background + self._issuer = issuer + self._presenting_character = presenting_character + self._annotations = annotations + self._total_objectives = total_objectives + self._scheduled_start_datetime = scheduled_start_datetime + self._finished_datetime = finished_datetime + self._target_progress = target_progress + self._contribution_method_configuration = contribution_method_configuration + self._current_objectives = current_objectives + self._future_objectives = future_objectives + self._campaign_state = campaign_state + self._scheduled_expiry_datetime = scheduled_expiry_datetime + self._definition_name = definition_name + + @property + def id(self): + return self._campaign_id + + @property + def version(self): + return self._version + + @property + def title(self): + return self._title + + @property + def subtitle(self): + return self._subtitle + + @property + def goal_description(self): + return self._goal_description + + @property + def success_description(self): + return self._success_description + + @property + def failure_description(self): + return self._failure_description + + @property + def icon(self): + return self._icon + + @property + def logo(self): + return self._logo + + @property + def issuer(self): + return self._issuer + + @property + def is_character_issuer(self): + return IsCharacter(self.issuer) + + @property + def is_corporation_issuer(self): + return IsCorporation(self.issuer) + + @property + def is_faction_issuer(self): + return IsFaction(self.issuer) + + @property + def dashboard_background(self): + return self._dashboard_background + + @property + def ao_feature_page(self): + return self._ao_feature_page + + @property + def objective_background(self): + return self._objective_background + + @property + def presenting_character(self): + return self._presenting_character + + @property + def annotations(self): + return self._annotations + + @property + def total_objectives(self): + return self._total_objectives + + @property + def scheduled_start_datetime(self): + return self._scheduled_start_datetime + + @property + def scheduled_expiry_datetime(self): + return self._scheduled_expiry_datetime + + @property + def finished_datetime(self): + return self._finished_datetime + + @property + def is_finished(self): + return self._finished_datetime is not None + + @property + def target_progress(self): + return self._target_progress + + @property + def contribution_method_configuration(self): + return self._contribution_method_configuration + + @property + def current_objectives(self): + return self._current_objectives + + @property + def future_objectives(self): + return self._future_objectives + + @property + def campaign_state(self): + return self._campaign_state + + @property + def definition_name(self): + return self._definition_name + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, campaign_identifier, campaign_attributes, available_objectives, restricted_objectives): + campaign_id = CampaignID.from_proto(campaign_identifier) + future_objectives = [] + for objective in restricted_objectives: + obj = FutureObjective(objective.scheduled_start_time.ToDatetime(), PROTO_CAREER_TO_FDS_CAREER[objective.career], objective.contribution_method.name) + obj.campaign_id = campaign_id + future_objectives.append(obj) + + current_objectives = [] + for available_objective in available_objectives: + obj = Objective.from_proto(available_objective.objective, available_objective.attributes) + obj.campaign_id = campaign_id + current_objectives.append(obj) + + if campaign_attributes.issuer.WhichOneof('issuer') == 'character': + issuer = campaign_attributes.issuer.character.sequential + elif campaign_attributes.issuer.WhichOneof('issuer') == 'corporation': + issuer = campaign_attributes.issuer.corporation.sequential + else: + issuer = campaign_attributes.issuer.faction.sequential + annotations = {annotation.key:annotation.value for annotation in campaign_attributes.annotations} + finished_time = None if campaign_attributes.WhichOneof('finished') == 'not_finished' else campaign_attributes.finish_time.ToDatetime() + logo = ImageDefinition.from_proto(campaign_attributes.logo.image, campaign_attributes.logo.attributes) + return Campaign(campaign_id=campaign_id, future_objectives=future_objectives, current_objectives=current_objectives, title=campaign_attributes.title.sequential, subtitle=campaign_attributes.subtitle.sequential, goal_description=campaign_attributes.goal_description.sequential, success_description=campaign_attributes.success_description.sequential, failure_description=campaign_attributes.failure_description.sequential, icon=campaign_attributes.icon.name, logo=logo, dashboard_background=campaign_attributes.dashboard_background.path, ao_feature_page=campaign_attributes.ao_feature_page.path, objective_background=campaign_attributes.objective_background.path, presenting_character=campaign_attributes.presenting_character.sequential, issuer=issuer, annotations=annotations, total_objectives=campaign_attributes.total_objectives, campaign_state=CampaignState.from_proto(campaign_attributes.state), scheduled_start_datetime=campaign_attributes.scheduled_start_time.ToDatetime(), scheduled_expiry_datetime=campaign_attributes.scheduled_expiry_time.ToDatetime(), finished_datetime=finished_time, target_progress=campaign_attributes.target_progress, contribution_method_configuration=ContributionMethodConfiguration.from_proto(campaign_attributes.contribution_method_configuration), version=CampaignVersion.from_proto(campaign_attributes.version), definition_name=campaign_attributes.definition_name) + + def to_flatbuffer(self, builder): + uuid_bytes = [ ord(byte) for byte in self.id.uuid.bytes ] + definition_version_fb = serialize_semantic_version(builder, self.version.definition_semantic_verison) + definition_name = self.definition_name if self.definition_name is not None else '' + definition_name_fb = builder.CreateString(definition_name) + fb_campaign.CampaignVersionStart(builder) + fb_campaign.CampaignVersionAddDefinitionVersion(builder, definition_version_fb) + fb_campaign.CampaignVersionAddEtag(builder, self.version.etag) + version_fb = fb_campaign.CampaignVersionEnd(builder) + icon_fb = builder.CreateString(self.icon) + dashboard_background_fb = builder.CreateString(self.dashboard_background) + ao_feature_page_fb = builder.CreateString(self.ao_feature_page) + objective_background_fb = builder.CreateString(self.objective_background) + logo_fb = self.logo.to_flatbuffer(builder) + annotations_list = [] + for key, value in self.annotations.iteritems(): + key_fb = builder.CreateString(key) + value_fb = builder.CreateString(value) + fb_campaign.AnnotationStart(builder) + fb_campaign.AnnotationAddKey(builder, key_fb) + fb_campaign.AnnotationAddValue(builder, value_fb) + annotation_fb = fb_campaign.AnnotationEnd(builder) + annotations_list.append(annotation_fb) + + fb_campaign.CampaignStartAnnotationsVector(builder, len(annotations_list)) + for annotation in reversed(annotations_list): + builder.PrependUOffsetTRelative(annotation) + + annotations_fb = builder.EndVector() + if self.finished_datetime is not None: + finished_type = fb_campaign.FinishedTime.FinishedTime + else: + finished_type = fb_campaign.FinishedTime.NONE + finished_time_fb = None + if self.finished_datetime is not None: + fb_campaign.FinishedStart(builder) + fb_campaign.FinishedAddTimestamp(builder, datetime_to_filetime(self.finished_datetime)) + finished_time_fb = fb_campaign.FinishedEnd(builder) + future_objective_offsets = [] + for future_objective in self.future_objectives: + contribution_method_fb = builder.CreateString(future_objective.contribution_method_name) + fb_campaign.FutureObjectiveStart(builder) + fb_campaign.FutureObjectiveAddContributionMethod(builder, contribution_method_fb) + fb_campaign.FutureObjectiveAddScheduledStartTime(builder, datetime_to_filetime(future_objective.start_datetime)) + fb_campaign.FutureObjectiveAddCareer(builder, future_objective.career_path) + future_objective_offsets.append(fb_campaign.FutureObjectiveEnd(builder)) + + fb_campaign.CampaignStartFutureObjectivesVector(builder, len(future_objective_offsets)) + for future_objective in reversed(future_objective_offsets): + builder.PrependUOffsetTRelative(future_objective) + + future_objectives_fb = builder.EndVector() + current_objective_offsets = [] + for current_objective in self.current_objectives: + current_objective_offsets.append(current_objective.to_flatbuffer(builder)) + + fb_campaign.CampaignStartCurrentObjectivesVector(builder, len(current_objective_offsets)) + for current_objective in reversed(current_objective_offsets): + builder.PrependUOffsetTRelative(current_objective) + + current_objectives_fb = builder.EndVector() + contribution_method_fb = self.contribution_method_configuration.to_flatbuffer(builder) + fb_campaign.CampaignStart(builder) + fb_campaign.CampaignAddUuid(builder, fb_campaign.CreateUuid(builder, uuid_bytes)) + fb_campaign.CampaignAddVersion(builder, version_fb) + fb_campaign.CampaignAddTitle(builder, self.title) + fb_campaign.CampaignAddSubtitle(builder, self.subtitle) + fb_campaign.CampaignAddBriefingGoalDescription(builder, self.goal_description) + fb_campaign.CampaignAddBriefingSuccessDescription(builder, self.success_description) + fb_campaign.CampaignAddBriefingFailureDescription(builder, self.failure_description) + fb_campaign.CampaignAddIcon(builder, icon_fb) + fb_campaign.CampaignAddLogo(builder, logo_fb) + fb_campaign.CampaignAddDashboardBackground(builder, dashboard_background_fb) + fb_campaign.CampaignAddAoFeaturePage(builder, ao_feature_page_fb) + fb_campaign.CampaignAddObjectiveBackground(builder, objective_background_fb) + fb_campaign.CampaignAddIssuer(builder, self.issuer) + fb_campaign.CampaignAddPresentingCharacter(builder, self.presenting_character) + fb_campaign.CampaignAddAnnotations(builder, annotations_fb) + fb_campaign.CampaignAddTotalObjectives(builder, self.total_objectives) + fb_campaign.CampaignAddState(builder, self.campaign_state) + fb_campaign.CampaignAddScheduledStartTime(builder, datetime_to_filetime(self.scheduled_start_datetime)) + fb_campaign.CampaignAddScheduledExpiryTime(builder, datetime_to_filetime(self.scheduled_expiry_datetime)) + fb_campaign.CampaignAddFinishedTimeType(builder, finished_type) + if finished_time_fb is not None: + fb_campaign.CampaignAddFinishedTime(builder, finished_time_fb) + fb_campaign.CampaignAddTargetProgress(builder, self.target_progress) + fb_campaign.CampaignAddContributionMethodConfig(builder, contribution_method_fb) + fb_campaign.CampaignAddFutureObjectives(builder, future_objectives_fb) + fb_campaign.CampaignAddCurrentObjectives(builder, current_objectives_fb) + fb_campaign.CampaignAddDefinitionName(builder, definition_name_fb) + return fb_campaign.CampaignEnd(builder) + + @classmethod + def from_flatbuffer(cls, campaign_fb): + campaign_id_bytes = [ chr(byte) for byte in campaign_fb.Uuid().Bytes() ] + campaign_id = CampaignID(UUID(bytes=campaign_id_bytes)) + definition_version = deserialize_semantic_version(campaign_fb.Version().DefinitionVersion()) + definition_name = campaign_fb.DefinitionName() + if definition_name is not None: + definition_name = definition_name.decode('utf-8') + annotations = {} + for i in range(campaign_fb.AnnotationsLength()): + annotation = campaign_fb.Annotations(i) + annotations[annotation.Key().decode('utf-8')] = annotation.Value().decode('utf-8') + + if campaign_fb.FinishedTimeType() == fb_campaign.FinishedTime.NONE: + finished_time = None + else: + union_data = campaign_fb.FinishedTime() + finished_time = fb_campaign.Finished() + finished_time.Init(union_data.Bytes, union_data.Pos) + finished_time = filetime_to_datetime(finished_time.Timestamp()) + future_objectives = [] + for i in range(campaign_fb.FutureObjectivesLength()): + objective = campaign_fb.FutureObjectives(i) + future_objective = FutureObjective(start_datetime=filetime_to_datetime(objective.ScheduledStartTime()), career_path=objective.Career(), contribution_method_name=objective.ContributionMethod().decode('utf-8'), campaign_id=campaign_id) + future_objectives.append(future_objective) + + current_objectives = [] + for i in range(campaign_fb.CurrentObjectivesLength()): + objective = campaign_fb.CurrentObjectives(i) + current_objective = Objective.from_flatbuffer(objective) + current_objective.campaign_id = campaign_id + current_objectives.append(current_objective) + + return Campaign(campaign_id=campaign_id, version=CampaignVersion(definition_semantic_version=definition_version, etag=campaign_fb.Version().Etag()), title=campaign_fb.Title(), subtitle=campaign_fb.Subtitle(), goal_description=campaign_fb.BriefingGoalDescription(), success_description=campaign_fb.BriefingSuccessDescription(), failure_description=campaign_fb.BriefingFailureDescription(), icon=campaign_fb.Icon().decode('utf-8'), logo=ImageDefinition.from_flatbuffer(campaign_fb.Logo()), dashboard_background=campaign_fb.DashboardBackground().decode('utf-8'), ao_feature_page=campaign_fb.AoFeaturePage().decode('utf-8'), objective_background=campaign_fb.ObjectiveBackground().decode('utf-8'), issuer=campaign_fb.Issuer(), presenting_character=campaign_fb.PresentingCharacter(), annotations=annotations, total_objectives=campaign_fb.TotalObjectives(), campaign_state=campaign_fb.State(), scheduled_start_datetime=filetime_to_datetime(campaign_fb.ScheduledStartTime()), scheduled_expiry_datetime=filetime_to_datetime(campaign_fb.ScheduledExpiryTime()), finished_datetime=finished_time, target_progress=campaign_fb.TargetProgress(), contribution_method_configuration=ContributionMethodConfiguration.from_flatbuffer(campaign_fb.ContributionMethodConfig()), future_objectives=future_objectives, current_objectives=current_objectives, definition_name=definition_name) + + def __eq__(self, other): + if not isinstance(other, Campaign): + return False + return self.id == other.id and self.title == other.title and self.subtitle == other.subtitle and self.goal_description == other.goal_description and self.success_description == other.success_description and self.failure_description == other.failure_description and self.icon == other.icon and self.logo == other.logo and self.dashboard_background == other.dashboard_background and self.ao_feature_page == other.ao_feature_page and self.objective_background == other.objective_background and self.presenting_character == other.presenting_character and self.issuer == other.issuer and self.annotations == other.annotations and self.total_objectives == other.total_objectives and self.campaign_state == other.campaign_state and self.scheduled_start_datetime == other.scheduled_start_datetime and self.scheduled_expiry_datetime == other.scheduled_expiry_datetime and self.finished_datetime == other.finished_datetime and self.target_progress == other.target_progress and self.contribution_method_configuration == other.contribution_method_configuration and self.version == other.version and self.future_objectives == other.future_objectives and self.current_objectives == other.current_objectives and self.definition_name == other.definition_name + + def __ne__(self, other): + result = self.__eq__(other) + return not result + + +@Enum + +class CampaignState(object): + UNSPECIFIED = 0 + ACTIVE = 1 + COMPLETED = 2 + EXPIRED = 3 + CANCELLED = 4 + + @classmethod + def from_proto(cls, campaign_state): + enum_value = _campaign_state_proto_to_enum.get(campaign_state, None) + if enum_value is None: + raise ValueError('Campaign State: Conversion to enum failed with unrecognized value: %s' % campaign_state) + return enum_value + + +_campaign_state_proto_to_enum = {STATE_UNSPECIFIED: CampaignState.UNSPECIFIED, + STATE_ACTIVE: CampaignState.ACTIVE, + STATE_COMPLETED: CampaignState.COMPLETED, + STATE_EXPIRED: CampaignState.EXPIRED, + STATE_CANCELLED: CampaignState.CANCELLED} + +class CampaignVersion(object): + + def __init__(self, definition_semantic_version, etag): + self._definition_semantic_version = definition_semantic_version + self._etag = etag + + @property + def definition_semantic_verison(self): + return self._definition_semantic_version + + @property + def etag(self): + return self._etag + + @classmethod + def from_proto(cls, version): + return CampaignVersion(SemanticVersion.from_proto(version.definition_version), version.etag) + + def to_proto(self): + return Version(definition_version=self._definition_semantic_version.to_eve_public_proto(), etag=self._etag) + + def __repr__(self): + return '<CampaignVersion>' + self.__dict__.__repr__() + + def __eq__(self, other): + if not isinstance(other, CampaignVersion): + return NotImplemented + return self.definition_semantic_verison == other.definition_semantic_verison and self.etag == other.etag + + def __ne__(self, other): + return not self.__eq__(other) + + +class CampaignStats(object): + + def __init__(self, campaign_id, current_campaign_progress, total_contributors): + self._campaign_id = campaign_id + self._current_campaign_progress = current_campaign_progress + self._total_contributors = total_contributors + + @property + def id(self): + return self._campaign_id + + @property + def current_campaign_progress(self): + return self._current_campaign_progress + + @property + def total_contributors(self): + return self._total_contributors + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, campaign_id, proto): + return CampaignStats(campaign_id=CampaignID.from_proto(campaign_id), current_campaign_progress=proto.current_campaign_progress, total_contributors=proto.total_contributors) + + def __eq__(self, other): + if not isinstance(other, CampaignStats): + return NotImplemented + return self.id == other.id and self.current_campaign_progress == other.current_campaign_progress and self.total_contributors == other.total_contributors + + def __ne__(self, other): + return not self == other + + +class ImageDefinition(object): + + def __init__(self, path, width, height): + self._path = path + self._width = width + self._height = height + + @property + def path(self): + return self._path + + @property + def display_width(self): + return self._width + + @property + def display_height(self): + return self._height + + @classmethod + def from_proto(cls, identifier, attributes): + return ImageDefinition(path=identifier.path, width=attributes.display_width, height=attributes.display_height) + + @classmethod + def from_flatbuffer(cls, imagedef_fb): + return ImageDefinition(path=imagedef_fb.Path().decode('utf-8'), width=imagedef_fb.Width(), height=imagedef_fb.Height()) + + def to_flatbuffer(self, builder): + path_fb = builder.CreateString(self._path) + fb_campaign.ImageDefinitionStart(builder) + fb_campaign.ImageDefinitionAddPath(builder, path_fb) + fb_campaign.ImageDefinitionAddWidth(builder, self.display_width) + fb_campaign.ImageDefinitionAddHeight(builder, self.display_height) + return fb_campaign.ImageDefinitionEnd(builder) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __eq__(self, other): + if not isinstance(other, ImageDefinition): + return NotImplemented + return self.path == other.path and self.display_width == other.display_width and self.display_height == other.display_height + + def __ne__(self, other): + return not self.__eq__(other) + + +class UnredeemedReward(object): + + def __init__(self, objective_id, isk_intervals, lp_intervals): + self._objective_id = objective_id + self._isk_intervals = isk_intervals + self._lp_intervals = lp_intervals + + @property + def objective_id(self): + return self._objective_id + + @property + def isk_intervals(self): + return self._isk_intervals + + @property + def lp_intervals(self): + return self._lp_intervals + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, reward): + isk_intervals = 0 if reward.WhichOneof('isk') == 'no_isk_unredeemed' else reward.isk_intervals_unredeemed + lp_intervals = 0 if reward.WhichOneof('lp') == 'no_lp_unredeemed' else reward.lp_intervals_unredeemed + return UnredeemedReward(objective_id=ObjectiveID.from_proto(reward.objective), isk_intervals=isk_intervals, lp_intervals=lp_intervals) + + def __eq__(self, other): + if not isinstance(other, UnredeemedReward): + return NotImplemented + return self.objective_id == other.objective_id and self.isk_intervals == other.isk_intervals and self.lp_intervals == other.lp_intervals + + def __ne__(self, other): + return not self.__eq__(other) diff --git a/campaigns/client/v1/data_model/career_paths.py b/campaigns/client/v1/data_model/career_paths.py @@ -0,0 +1,11 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\career_paths.py +import eveProto.generated.eve_public.career.career_pb2 as careerConst +career_path_none = 0 +career_path_explorer = 4 +career_path_enforcer = 6 +career_path_industrialist = 5 +career_path_soldier_of_fortune = 7 +PROTO_CAREER_TO_FDS_CAREER = {careerConst.CAREER_EXPLORATION: career_path_explorer, + careerConst.CAREER_INDUSTRIALIST: career_path_industrialist, + careerConst.CAREER_ENFORCER: career_path_enforcer, + careerConst.CAREER_SOLDIER_OF_FORTUNE: career_path_soldier_of_fortune} diff --git a/campaigns/client/v1/data_model/contribution_method.py b/campaigns/client/v1/data_model/contribution_method.py @@ -0,0 +1,334 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\contribution_method.py +import campaigns.client.v1.data_model.flatbuffer.contributionmethod_generated as fb_contributionmethod +import campaigns.client.v1.data_model.flatbuffer.campaigndefinition_generated as fb_campaigndefinition +from campaigns.client.contributionmethods.job_definitions import JobContributionMethodDefinition, JobContributionMethodConfiguration, JobParameterDefinitionController + +class ContributionMethodDefinition(object): + + def __init__(self, contribution_method, parameter_definitions, title, progress_description, icon): + self._contribution_method = contribution_method + self._parameter_definitions = parameter_definitions + self._title = title + self._progress_description = progress_description + self._icon = icon + + @property + def contribution_method(self): + return self._contribution_method + + @property + def parameter_definitions(self): + return self._parameter_definitions + + @property + def title(self): + return self._title + + @property + def progress_description(self): + return self._progress_description + + @property + def icon(self): + return self._icon + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, definition): + parameters = [] + for definition_parameter in definition.attributes.parameters: + matcher = definition_parameter.matcher + parameter = MatcherParameterDefinition(key=matcher.key, type=matcher.type, accepted_value_types_list=matcher.accepted_value_types[:], title=matcher.title.sequential, description=matcher.description.sequential, icon=matcher.icon.name) + parameters.append(parameter) + + contribution_method_attributes = definition.attributes + return ContributionMethodDefinition(contribution_method=definition.definition.name, parameter_definitions=parameters, title=contribution_method_attributes.title.sequential, progress_description=contribution_method_attributes.progress_description.sequential, icon=contribution_method_attributes.icon.name) + + @classmethod + def from_flatbuffer(cls, definition_fb): + name = definition_fb.Name().decode('utf-8') + title = definition_fb.Title() + progress_description = definition_fb.ProgressDescription() + icon = definition_fb.Icon().decode('utf-8') + parameters = [] + for i in range(definition_fb.MatcherParametersLength()): + parameters.append(MatcherParameterDefinition.from_flatbuffer(definition_fb.MatcherParameters(i))) + + return ContributionMethodDefinition(name, parameters, title, progress_description, icon) + + def to_flatbuffer(self, builder): + name = builder.CreateString(self._contribution_method) + icon = builder.CreateString(self._icon) + parameter_offsets = [ parameter.to_flatbuffer(builder) for parameter in self.parameter_definitions ] + fb_contributionmethod.DefinitionStartMatcherParametersVector(builder, len(parameter_offsets)) + for offset in reversed(parameter_offsets): + builder.PrependUOffsetTRelative(offset) + + parameters_offset = builder.EndVector() + fb_contributionmethod.DefinitionStart(builder) + fb_contributionmethod.DefinitionAddName(builder, name) + fb_contributionmethod.DefinitionAddTitle(builder, self._title) + fb_contributionmethod.DefinitionAddProgressDescription(builder, self._progress_description) + fb_contributionmethod.DefinitionAddIcon(builder, icon) + fb_contributionmethod.DefinitionAddMatcherParameters(builder, parameters_offset) + return fb_contributionmethod.DefinitionEnd(builder) + + def to_job_format(self): + return JobContributionMethodDefinition(self) + + def __eq__(self, other): + if not isinstance(other, ContributionMethodDefinition): + return NotImplemented + return self.contribution_method == other.contribution_method and self._parameter_definitions == other._parameter_definitions and self._title == other._title and self._progress_description == other._progress_description and self._icon == other._icon + + def __ne__(self, other): + return not self.__eq__(other) + + +class MatcherParameterDefinition(object): + + def __init__(self, key, type, accepted_value_types_list, title, description, icon): + self._key = key + self._type = type + self._accepted_value_types_list = accepted_value_types_list + self._title = title + self._description = description + self._icon = icon + + @property + def key(self): + return self._key + + @property + def type(self): + return self._type + + @property + def accepted_value_types_list(self): + return self._accepted_value_types_list + + @property + def title(self): + return self._title + + @property + def description(self): + return self._description + + @property + def icon(self): + return self._icon + + @classmethod + def from_flatbuffer(cls, matcher_parameter_fb): + key = matcher_parameter_fb.Key().decode('utf-8') + type = matcher_parameter_fb.Type().decode('utf-8') + title = matcher_parameter_fb.Title() + description = matcher_parameter_fb.Description() + icon = matcher_parameter_fb.Icon().decode('utf-8') + accepted_value_types_list = [] + for i in range(matcher_parameter_fb.AcceptedValueTypesLength()): + accepted_value_types_list.append(matcher_parameter_fb.AcceptedValueTypes(i).decode('utf-8')) + + return MatcherParameterDefinition(key, type, accepted_value_types_list, title, description, icon) + + def to_flatbuffer(self, builder): + key = builder.CreateString(self._key) + type = builder.CreateString(self._type) + icon = builder.CreateString(self._icon) + accepted_value_types_list = [ builder.CreateString(accepted_value_type) for accepted_value_type in self._accepted_value_types_list ] + fb_contributionmethod.MatcherParameterStartAcceptedValueTypesVector(builder, len(accepted_value_types_list)) + for accepted_value_type in reversed(accepted_value_types_list): + builder.PrependUOffsetTRelative(accepted_value_type) + + avt_list_offset = builder.EndVector() + fb_contributionmethod.MatcherParameterStart(builder) + fb_contributionmethod.MatcherParameterAddKey(builder, key) + fb_contributionmethod.MatcherParameterAddType(builder, type) + fb_contributionmethod.MatcherParameterAddIcon(builder, icon) + fb_contributionmethod.MatcherParameterAddTitle(builder, self.title) + fb_contributionmethod.MatcherParameterAddDescription(builder, self.description) + fb_contributionmethod.MatcherParameterAddAcceptedValueTypes(builder, avt_list_offset) + return fb_contributionmethod.MatcherParameterEnd(builder) + + def to_job_format(self): + return JobParameterDefinitionController(self) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __eq__(self, other): + if not isinstance(other, MatcherParameterDefinition): + return NotImplemented + return self.key == other.key and self.type == other.type and self.accepted_value_types_list == other.accepted_value_types_list and self.title == other.title and self.description == other.description and self.icon == other.icon + + def __ne__(self, other): + return not self.__eq__(other) + + +class ContributionMethodConfiguration(object): + + def __init__(self, contribution_method, parameter_configs): + self._contribution_method = contribution_method + self._parameter_configs = parameter_configs + + @property + def contribution_method(self): + return self._contribution_method + + @property + def parameter_configs(self): + return self._parameter_configs + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, contribution_method_configuration): + parameter_configs = [] + for parameter_config in contribution_method_configuration.parameters: + parameter_values_configs = [] + for parameter_value in parameter_config.matcher.values: + parameter_values_configs.append(MatcherValueEntry(parameter_value.value_type, parameter_value.values)) + + parameter_configs.append(ParameterConfiguration(parameter_config.key, parameter_values_configs)) + + return ContributionMethodConfiguration(contribution_method=contribution_method_configuration.contribution_method.name, parameter_configs=parameter_configs) + + @classmethod + def from_flatbuffer(cls, configuration): + name = configuration.Name().decode('utf-8') + parameters = [] + for params_idx in range(configuration.ParametersLength()): + parameter = configuration.Parameters(params_idx) + matchers = [] + for values_idx in range(parameter.ValuesLength()): + value_type = parameter.Values(values_idx) + type_values = [] + for type_values_idx in range(value_type.ValuesLength()): + type_values.append(value_type.Values(type_values_idx)) + + matcher = MatcherValueEntry(value_type.Type().decode('utf-8'), type_values) + matchers.append(matcher) + + parameter = ParameterConfiguration(key=parameter.Key().decode('utf-8'), values=matchers) + parameters.append(parameter) + + return ContributionMethodConfiguration(contribution_method=name, parameter_configs=parameters) + + def to_flatbuffer(self, builder): + name_fb = builder.CreateString(self.contribution_method) + parameter_offset_list = [] + for parameter_config in self.parameter_configs: + key = builder.CreateString(parameter_config.key) + values_list = [] + for parameter_value in parameter_config.values: + value_type = builder.CreateString(parameter_value.value_type) + value_strings = [] + for value in parameter_value.values: + value_string = builder.CreateString(value) + value_strings.append(value_string) + + fb_campaigndefinition.ValueEntryStartValuesVector(builder, len(value_strings)) + for value_string in reversed(value_strings): + builder.PrependUOffsetTRelative(value_string) + + values_fb = builder.EndVector() + fb_campaigndefinition.ValueEntryStart(builder) + fb_campaigndefinition.ValueEntryAddType(builder, value_type) + fb_campaigndefinition.ValueEntryAddValues(builder, values_fb) + values_list.append(fb_campaigndefinition.ValueEntryEnd(builder)) + + fb_campaigndefinition.MatcherParameterConfigurationStartValuesVector(builder, len(values_list)) + for value_offset in reversed(values_list): + builder.PrependUOffsetTRelative(value_offset) + + values_list_fb = builder.EndVector() + fb_campaigndefinition.MatcherParameterConfigurationStart(builder) + fb_campaigndefinition.MatcherParameterConfigurationAddKey(builder, key) + fb_campaigndefinition.MatcherParameterConfigurationAddValues(builder, values_list_fb) + parameter_offset_list.append(fb_campaigndefinition.MatcherParameterConfigurationEnd(builder)) + + fb_campaigndefinition.ContributionMethodConfigurationStartParametersVector(builder, len(parameter_offset_list)) + for parameter_offset in reversed(parameter_offset_list): + builder.PrependUOffsetTRelative(parameter_offset) + + parameters_fb = builder.EndVector() + fb_campaigndefinition.ContributionMethodConfigurationStart(builder) + fb_campaigndefinition.ContributionMethodConfigurationAddName(builder, name_fb) + fb_campaigndefinition.ContributionMethodConfigurationAddParameters(builder, parameters_fb) + return fb_campaigndefinition.ContributionMethodConfigurationEnd(builder) + + def to_job_format(self): + return JobContributionMethodConfiguration(self) + + def __eq__(self, other): + if not isinstance(other, ContributionMethodConfiguration): + return NotImplemented + return self.contribution_method == other.contribution_method and self._parameter_configs == other._parameter_configs + + def __ne__(self, other): + return not self.__eq__(other) + + +class ParameterConfiguration(object): + + def __init__(self, key, values): + self._key = key + self._values = values + + @property + def key(self): + return self._key + + @property + def values(self): + return self._values + + def get_values(self): + value_list = [] + for value_entry in self._values: + for v in value_entry.values: + value_list.append((value_entry.value_type, int(v))) + + return value_list + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __eq__(self, other): + if not isinstance(other, ParameterConfiguration): + return NotImplemented + return self.key == other.key and self._values == other.values + + def __ne__(self, other): + return not self.__eq__(other) + + +class MissingParameterConfiguration(ParameterConfiguration): + pass + + +class MatcherValueEntry(object): + + def __init__(self, value_type, values): + self._value_type = value_type + self._values = values + + @property + def value_type(self): + return self._value_type + + @property + def values(self): + return self._values + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __eq__(self, other): + if not isinstance(other, MatcherValueEntry): + return NotImplemented + return self.value_type == other.value_type and self.values == other.values diff --git a/campaigns/client/v1/data_model/flatbuffer/__init__.py b/campaigns/client/v1/data_model/flatbuffer/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\flatbuffer\__init__.py +pass diff --git a/campaigns/client/v1/data_model/flatbuffer/campaigndefinition_generated.py b/campaigns/client/v1/data_model/flatbuffer/campaigndefinition_generated.py @@ -0,0 +1,1423 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\flatbuffer\campaigndefinition_generated.py +import flatbuffers +from flatbuffers.compat import import_numpy +np = import_numpy() + +class CampaignState(object): + Unspecified = 0 + Active = 1 + Completed = 2 + Expired = 3 + Cancelled = 4 + + +class ObjectiveState(object): + Unspecified = 0 + Active = 1 + Completed = 2 + Expired = 3 + Cancelled = 4 + + +class FinishedTime(object): + NONE = 0 + FinishedTime = 1 + + +class IskReward(object): + NONE = 0 + details = 1 + + +class LpReward(object): + NONE = 0 + details = 1 + + +class StandingReward(object): + NONE = 0 + details = 1 + + +class UUID(object): + __slots__ = ['_tab'] + + @classmethod + def SizeOf(cls): + return 16 + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Bytes(self, j = None): + if j is None: + return [ self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + i * 1)) for i in range(self.BytesLength()) ] + elif j >= 0 and j < self.BytesLength(): + return self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + j * 1)) + else: + return + + def BytesAsNumpy(self): + return self._tab.GetArrayAsNumpy(flatbuffers.number_types.Uint8Flags, self._tab.Pos + 0, self.BytesLength()) + + def BytesLength(self): + return 16 + + def BytesIsNone(self): + return False + + +def CreateUuid(builder, bytes): + builder.Prep(1, 16) + for _idx0 in range(16, 0, -1): + builder.PrependUint8(bytes[_idx0 - 1]) + + return builder.Offset() + + +class SemanticVersion(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SemanticVersion() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsSemanticVersion(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Major(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Minor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Patch(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def PrereleaseTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def PrereleaseTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def PrereleaseTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + def BuildTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def BuildTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def BuildTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + return o == 0 + + +def SemanticVersionStart(builder): + builder.StartObject(5) + + +def SemanticVersionAddMajor(builder, major): + builder.PrependUint64Slot(0, major, 0) + + +def SemanticVersionAddMinor(builder, minor): + builder.PrependUint64Slot(1, minor, 0) + + +def SemanticVersionAddPatch(builder, patch): + builder.PrependUint64Slot(2, patch, 0) + + +def SemanticVersionAddPrereleaseTags(builder, prereleaseTags): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(prereleaseTags), 0) + + +def SemanticVersionStartPrereleaseTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreatePrereleaseTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionAddBuildTags(builder, buildTags): + builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buildTags), 0) + + +def SemanticVersionStartBuildTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreateBuildTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionEnd(builder): + return builder.EndObject() + + +class CampaignVersion(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CampaignVersion() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsCampaignVersion(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def DefinitionVersion(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = SemanticVersion() + obj.Init(self._tab.Bytes, x) + return obj + + def Etag(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + +def CampaignVersionStart(builder): + builder.StartObject(2) + + +def CampaignVersionAddDefinitionVersion(builder, definitionVersion): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(definitionVersion), 0) + + +def CampaignVersionAddEtag(builder, etag): + builder.PrependUint64Slot(1, etag, 0) + + +def CampaignVersionEnd(builder): + return builder.EndObject() + + +class ImageDefinition(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ImageDefinition() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsImageDefinition(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Path(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Width(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def Height(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + +def ImageDefinitionStart(builder): + builder.StartObject(3) + + +def ImageDefinitionAddPath(builder, path): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(path), 0) + + +def ImageDefinitionAddWidth(builder, width): + builder.PrependUint32Slot(1, width, 0) + + +def ImageDefinitionAddHeight(builder, height): + builder.PrependUint32Slot(2, height, 0) + + +def ImageDefinitionEnd(builder): + return builder.EndObject() + + +class Annotation(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Annotation() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsAnnotation(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def AnnotationStart(builder): + builder.StartObject(2) + + +def AnnotationAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def AnnotationAddValue(builder, value): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) + + +def AnnotationEnd(builder): + return builder.EndObject() + + +class ValueEntry(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ValueEntry() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsValueEntry(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Values(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def ValuesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ValuesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def ValueEntryStart(builder): + builder.StartObject(2) + + +def ValueEntryAddType(builder, type): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(type), 0) + + +def ValueEntryAddValues(builder, values): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(values), 0) + + +def ValueEntryStartValuesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def ValueEntryCreateValuesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def ValueEntryEnd(builder): + return builder.EndObject() + + +class MatcherParameterConfiguration(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatcherParameterConfiguration() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsMatcherParameterConfiguration(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Values(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = ValueEntry() + obj.Init(self._tab.Bytes, x) + return obj + + def ValuesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ValuesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def MatcherParameterConfigurationStart(builder): + builder.StartObject(2) + + +def MatcherParameterConfigurationAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def MatcherParameterConfigurationAddValues(builder, values): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(values), 0) + + +def MatcherParameterConfigurationStartValuesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def MatcherParameterConfigurationCreateValuesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def MatcherParameterConfigurationEnd(builder): + return builder.EndObject() + + +class ContributionMethodConfiguration(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ContributionMethodConfiguration() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsContributionMethodConfiguration(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Parameters(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = MatcherParameterConfiguration() + obj.Init(self._tab.Bytes, x) + return obj + + def ParametersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ParametersIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def ContributionMethodConfigurationStart(builder): + builder.StartObject(2) + + +def ContributionMethodConfigurationAddName(builder, name): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + + +def ContributionMethodConfigurationAddParameters(builder, parameters): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(parameters), 0) + + +def ContributionMethodConfigurationStartParametersVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def ContributionMethodConfigurationCreateParametersVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def ContributionMethodConfigurationEnd(builder): + return builder.EndObject() + + +class Finished(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Finished() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsFinished(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Timestamp(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + +def FinishedStart(builder): + builder.StartObject(1) + + +def FinishedAddTimestamp(builder, timestamp): + builder.PrependUint64Slot(0, timestamp, 0) + + +def FinishedEnd(builder): + return builder.EndObject() + + +class FutureObjective(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FutureObjective() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsFutureObjective(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def ScheduledStartTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Career(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def ContributionMethod(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def FutureObjectiveStart(builder): + builder.StartObject(3) + + +def FutureObjectiveAddScheduledStartTime(builder, scheduledStartTime): + builder.PrependUint64Slot(0, scheduledStartTime, 0) + + +def FutureObjectiveAddCareer(builder, career): + builder.PrependUint32Slot(1, career, 0) + + +def FutureObjectiveAddContributionMethod(builder, contributionMethod): + builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethod), 0) + + +def FutureObjectiveEnd(builder): + return builder.EndObject() + + +class RewardDetails(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RewardDetails() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsRewardDetails(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def AmountPerInterval(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float64Flags, o + self._tab.Pos) + return 0.0 + + def Issuer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def IntervalSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + +def RewardDetailsStart(builder): + builder.StartObject(3) + + +def RewardDetailsAddAmountPerInterval(builder, amountPerInterval): + builder.PrependFloat64Slot(0, amountPerInterval, 0.0) + + +def RewardDetailsAddIssuer(builder, issuer): + builder.PrependUint64Slot(1, issuer, 0) + + +def RewardDetailsAddIntervalSize(builder, intervalSize): + builder.PrependUint64Slot(2, intervalSize, 0) + + +def RewardDetailsEnd(builder): + return builder.EndObject() + + +class Rewards(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Rewards() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsRewards(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def IskType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def Isk(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + def LpType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def Lp(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + def StandingType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def Standing(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + +def RewardsStart(builder): + builder.StartObject(6) + + +def RewardsAddIskType(builder, iskType): + builder.PrependUint8Slot(0, iskType, 0) + + +def RewardsAddIsk(builder, isk): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(isk), 0) + + +def RewardsAddLpType(builder, lpType): + builder.PrependUint8Slot(2, lpType, 0) + + +def RewardsAddLp(builder, lp): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(lp), 0) + + +def RewardsAddStandingType(builder, standingType): + builder.PrependUint8Slot(4, standingType, 0) + + +def RewardsAddStanding(builder, standing): + builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(standing), 0) + + +def RewardsEnd(builder): + return builder.EndObject() + + +class Objective(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Objective() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsObjective(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Uuid(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = o + self._tab.Pos + obj = UUID() + obj.Init(self._tab.Bytes, x) + return obj + + def Title(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Subtitle(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Issuer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def PresentingCharacter(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def ContentTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def ContentTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ContentTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + return o == 0 + + def ScheduledStartTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def FinishedTimeType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def FinishedTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + def Career(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def TargetProgress(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def MaxProgressPerParticipant(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def ContributionMethodConfig(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = ContributionMethodConfiguration() + obj.Init(self._tab.Bytes, x) + return obj + + def Rewards(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = Rewards() + obj.Init(self._tab.Bytes, x) + return obj + + def ObjectiveState(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def Annotations(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Annotation() + obj.Init(self._tab.Bytes, x) + return obj + + def AnnotationsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def AnnotationsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) + return o == 0 + + +def ObjectiveStart(builder): + builder.StartObject(16) + + +def ObjectiveAddUuid(builder, uuid): + builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(uuid), 0) + + +def ObjectiveAddTitle(builder, title): + builder.PrependUint64Slot(1, title, 0) + + +def ObjectiveAddSubtitle(builder, subtitle): + builder.PrependUint64Slot(2, subtitle, 0) + + +def ObjectiveAddIssuer(builder, issuer): + builder.PrependUint64Slot(3, issuer, 0) + + +def ObjectiveAddPresentingCharacter(builder, presentingCharacter): + builder.PrependUint64Slot(4, presentingCharacter, 0) + + +def ObjectiveAddContentTags(builder, contentTags): + builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(contentTags), 0) + + +def ObjectiveStartContentTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def ObjectiveCreateContentTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def ObjectiveAddScheduledStartTime(builder, scheduledStartTime): + builder.PrependUint64Slot(6, scheduledStartTime, 0) + + +def ObjectiveAddFinishedTimeType(builder, finishedTimeType): + builder.PrependUint8Slot(7, finishedTimeType, 0) + + +def ObjectiveAddFinishedTime(builder, finishedTime): + builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(finishedTime), 0) + + +def ObjectiveAddCareer(builder, career): + builder.PrependUint32Slot(9, career, 0) + + +def ObjectiveAddTargetProgress(builder, targetProgress): + builder.PrependUint64Slot(10, targetProgress, 0) + + +def ObjectiveAddMaxProgressPerParticipant(builder, maxProgressPerParticipant): + builder.PrependUint64Slot(11, maxProgressPerParticipant, 0) + + +def ObjectiveAddContributionMethodConfig(builder, contributionMethodConfig): + builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethodConfig), 0) + + +def ObjectiveAddRewards(builder, rewards): + builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(rewards), 0) + + +def ObjectiveAddObjectiveState(builder, objectiveState): + builder.PrependUint32Slot(14, objectiveState, 0) + + +def ObjectiveAddAnnotations(builder, annotations): + builder.PrependUOffsetTRelativeSlot(15, flatbuffers.number_types.UOffsetTFlags.py_type(annotations), 0) + + +def ObjectiveStartAnnotationsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def ObjectiveCreateAnnotationsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def ObjectiveEnd(builder): + return builder.EndObject() + + +class Campaign(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Campaign() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsCampaign(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Uuid(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = o + self._tab.Pos + obj = UUID() + obj.Init(self._tab.Bytes, x) + return obj + + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = CampaignVersion() + obj.Init(self._tab.Bytes, x) + return obj + + def Title(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Subtitle(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def BriefingGoalDescription(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def BriefingSuccessDescription(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def BriefingFailureDescription(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Icon(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Logo(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = ImageDefinition() + obj.Init(self._tab.Bytes, x) + return obj + + def DashboardBackground(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def AoFeaturePage(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def ObjectiveBackground(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Issuer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def PresentingCharacter(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Annotations(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Annotation() + obj.Init(self._tab.Bytes, x) + return obj + + def AnnotationsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def AnnotationsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + return o == 0 + + def TotalObjectives(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def State(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + def ScheduledStartTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(38)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def ScheduledExpiryTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(40)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def FinishedTimeType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def FinishedTime(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(44)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + def TargetProgress(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(46)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def ContributionMethodConfig(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(48)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = ContributionMethodConfiguration() + obj.Init(self._tab.Bytes, x) + return obj + + def FutureObjectives(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = FutureObjective() + obj.Init(self._tab.Bytes, x) + return obj + + def FutureObjectivesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def FutureObjectivesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50)) + return o == 0 + + def CurrentObjectives(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Objective() + obj.Init(self._tab.Bytes, x) + return obj + + def CurrentObjectivesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def CurrentObjectivesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52)) + return o == 0 + + def DefinitionName(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(54)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def CampaignStart(builder): + builder.StartObject(26) + + +def CampaignAddUuid(builder, uuid): + builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(uuid), 0) + + +def CampaignAddVersion(builder, version): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(version), 0) + + +def CampaignAddTitle(builder, title): + builder.PrependUint64Slot(2, title, 0) + + +def CampaignAddSubtitle(builder, subtitle): + builder.PrependUint64Slot(3, subtitle, 0) + + +def CampaignAddBriefingGoalDescription(builder, briefingGoalDescription): + builder.PrependUint64Slot(4, briefingGoalDescription, 0) + + +def CampaignAddBriefingSuccessDescription(builder, briefingSuccessDescription): + builder.PrependUint64Slot(5, briefingSuccessDescription, 0) + + +def CampaignAddBriefingFailureDescription(builder, briefingFailureDescription): + builder.PrependUint64Slot(6, briefingFailureDescription, 0) + + +def CampaignAddIcon(builder, icon): + builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) + + +def CampaignAddLogo(builder, logo): + builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(logo), 0) + + +def CampaignAddDashboardBackground(builder, dashboardBackground): + builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(dashboardBackground), 0) + + +def CampaignAddAoFeaturePage(builder, aoFeaturePage): + builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(aoFeaturePage), 0) + + +def CampaignAddObjectiveBackground(builder, objectiveBackground): + builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(objectiveBackground), 0) + + +def CampaignAddIssuer(builder, issuer): + builder.PrependUint64Slot(12, issuer, 0) + + +def CampaignAddPresentingCharacter(builder, presentingCharacter): + builder.PrependUint64Slot(13, presentingCharacter, 0) + + +def CampaignAddAnnotations(builder, annotations): + builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(annotations), 0) + + +def CampaignStartAnnotationsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def CampaignCreateAnnotationsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def CampaignAddTotalObjectives(builder, totalObjectives): + builder.PrependUint32Slot(15, totalObjectives, 0) + + +def CampaignAddState(builder, state): + builder.PrependUint32Slot(16, state, 0) + + +def CampaignAddScheduledStartTime(builder, scheduledStartTime): + builder.PrependUint64Slot(17, scheduledStartTime, 0) + + +def CampaignAddScheduledExpiryTime(builder, scheduledExpiryTime): + builder.PrependUint64Slot(18, scheduledExpiryTime, 0) + + +def CampaignAddFinishedTimeType(builder, finishedTimeType): + builder.PrependUint8Slot(19, finishedTimeType, 0) + + +def CampaignAddFinishedTime(builder, finishedTime): + builder.PrependUOffsetTRelativeSlot(20, flatbuffers.number_types.UOffsetTFlags.py_type(finishedTime), 0) + + +def CampaignAddTargetProgress(builder, targetProgress): + builder.PrependUint64Slot(21, targetProgress, 0) + + +def CampaignAddContributionMethodConfig(builder, contributionMethodConfig): + builder.PrependUOffsetTRelativeSlot(22, flatbuffers.number_types.UOffsetTFlags.py_type(contributionMethodConfig), 0) + + +def CampaignAddFutureObjectives(builder, futureObjectives): + builder.PrependUOffsetTRelativeSlot(23, flatbuffers.number_types.UOffsetTFlags.py_type(futureObjectives), 0) + + +def CampaignStartFutureObjectivesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def CampaignCreateFutureObjectivesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def CampaignAddCurrentObjectives(builder, currentObjectives): + builder.PrependUOffsetTRelativeSlot(24, flatbuffers.number_types.UOffsetTFlags.py_type(currentObjectives), 0) + + +def CampaignStartCurrentObjectivesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def CampaignCreateCurrentObjectivesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def CampaignAddDefinitionName(builder, definitionName): + builder.PrependUOffsetTRelativeSlot(25, flatbuffers.number_types.UOffsetTFlags.py_type(definitionName), 0) + + +def CampaignEnd(builder): + return builder.EndObject() + + +class CampaignList(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CampaignList() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsCampaignList(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Campaigns(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Campaign() + obj.Init(self._tab.Bytes, x) + return obj + + def CampaignsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def CampaignsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + return o == 0 + + +def CampaignListStart(builder): + builder.StartObject(1) + + +def CampaignListAddCampaigns(builder, campaigns): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(campaigns), 0) + + +def CampaignListStartCampaignsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def CampaignListCreateCampaignsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def CampaignListEnd(builder): + return builder.EndObject() diff --git a/campaigns/client/v1/data_model/flatbuffer/campaigndefinition_serialization.py b/campaigns/client/v1/data_model/flatbuffer/campaigndefinition_serialization.py @@ -0,0 +1,31 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\flatbuffer\campaigndefinition_serialization.py +import campaigns.client.v1.data_model.flatbuffer.campaigndefinition_generated as fb_campaign +from campaigns.client.v1.data_model.campaign import Campaign +from flatbuffers import Builder + +def serialize_campaigns_list_to_flatbuffer(campaign_list): + builder = Builder() + serialized_campaigns = [] + for campaign in campaign_list: + serialized_campaigns.append(campaign.to_flatbuffer(builder)) + + fb_campaign.CampaignListStartCampaignsVector(builder, len(serialized_campaigns)) + for serialized_campaign in reversed(serialized_campaigns): + builder.PrependUOffsetTRelative(serialized_campaign) + + campaigns_fb = builder.EndVector() + fb_campaign.CampaignListStart(builder) + fb_campaign.CampaignListAddCampaigns(builder, campaigns_fb) + campaign_list_fb = fb_campaign.CampaignListEnd(builder) + builder.Finish(campaign_list_fb) + return builder.Output() + + +def deserialize_flatbuffer_to_campaigns_list(flatbuffer_data): + campaign_list = fb_campaign.CampaignList.GetRootAs(flatbuffer_data) + definitions = [] + for i in range(campaign_list.CampaignsLength()): + definition = Campaign.from_flatbuffer(campaign_list.Campaigns(i)) + definitions.append(definition) + + return definitions diff --git a/campaigns/client/v1/data_model/flatbuffer/contribution_method_serialization.py b/campaigns/client/v1/data_model/flatbuffer/contribution_method_serialization.py @@ -0,0 +1,96 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\flatbuffer\contribution_method_serialization.py +import campaigns.client.v1.data_model.flatbuffer.contributionmethod_generated as fb_contributionmethod +from campaigns.client.v1.data_model.contribution_method import ContributionMethodDefinition +from flatbuffers import Builder +from semantic_version import SemanticVersion + +def serialize_versioned_definitions_to_flatbuffer(version_definition_dict): + builder = Builder() + versioned_definitions_list = _serialize_versioned_definitions_list(builder, version_definition_dict) + fb_contributionmethod.VersionedDefinitionsStartDefinitionsVector(builder, len(versioned_definitions_list)) + for versioned_definition in versioned_definitions_list: + builder.PrependUOffsetTRelative(versioned_definition) + + versioned_definitions_offset = builder.EndVector() + fb_contributionmethod.VersionedDefinitionsStart(builder) + fb_contributionmethod.VersionedDefinitionsAddDefinitions(builder, versioned_definitions_offset) + versioned_definitions_fb = fb_contributionmethod.VersionedDefinitionsEnd(builder) + builder.Finish(versioned_definitions_fb) + return builder.Output() + + +def deserialize_flatbuffer_to_versioned_definitions_dict(flatbuffer_data): + versioned_definitions_dict = {} + versioned_definitions = fb_contributionmethod.VersionedDefinitions.GetRootAs(flatbuffer_data) + for i in range(versioned_definitions.DefinitionsLength()): + semantic_version, definitions = _deserialize_version_and_definitions_list(versioned_definitions.Definitions(i)) + versioned_definitions_dict[semantic_version] = definitions + + return versioned_definitions_dict + + +def _serialize_versioned_definitions_list(builder, version_definition_dict): + versioned_definitions = [] + for version, definitions in version_definition_dict.iteritems(): + version_offset = _serialize_semantic_version(builder, version) + definition_offsets = [] + for definition in definitions: + definition_offsets.append(definition.to_flatbuffer(builder)) + + fb_contributionmethod.DefinitionsStartMethodsVector(builder, len(definition_offsets)) + for definition_offset in reversed(definition_offsets): + builder.PrependUOffsetTRelative(definition_offset) + + definitions_offset = builder.EndVector() + fb_contributionmethod.DefinitionsStart(builder) + fb_contributionmethod.DefinitionsAddVersion(builder, version_offset) + fb_contributionmethod.DefinitionsAddMethods(builder, definitions_offset) + versioned_definitions.append(fb_contributionmethod.DefinitionsEnd(builder)) + + return versioned_definitions + + +def _deserialize_version_and_definitions_list(definitions_fb): + semantic_version = _deserialize_semantic_version(definitions_fb.Version()) + methods = [] + for i in range(definitions_fb.MethodsLength()): + methods.append(ContributionMethodDefinition.from_flatbuffer(definitions_fb.Methods(i))) + + return (semantic_version, methods) + + +def _serialize_semantic_version(builder, version): + prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] + build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] + fb_contributionmethod.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) + for prerelease_string in reversed(prerelease_strings): + builder.PrependUOffsetTRelative(prerelease_string) + + prerelease_offset = builder.EndVector() + fb_contributionmethod.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) + for build_string in reversed(build_strings): + builder.PrependUOffsetTRelative(build_string) + + build_offset = builder.EndVector() + fb_contributionmethod.SemanticVersionStart(builder) + fb_contributionmethod.SemanticVersionAddMajor(builder, version.major) + fb_contributionmethod.SemanticVersionAddMinor(builder, version.minor) + fb_contributionmethod.SemanticVersionAddPatch(builder, version.patch) + fb_contributionmethod.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) + fb_contributionmethod.SemanticVersionAddBuildTags(builder, build_offset) + return fb_contributionmethod.SemanticVersionEnd(builder) + + +def _deserialize_semantic_version(version_flatbuffer): + major = version_flatbuffer.Major() + minor = version_flatbuffer.Minor() + patch = version_flatbuffer.Patch() + prerelease_tags = [] + for i in range(version_flatbuffer.PrereleaseTagsLength()): + prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) + + build_tags = [] + for i in range(version_flatbuffer.BuildTagsLength()): + build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) + + return SemanticVersion(major, minor, patch, prerelease_tags, build_tags) diff --git a/campaigns/client/v1/data_model/flatbuffer/contributionmethod_generated.py b/campaigns/client/v1/data_model/flatbuffer/contributionmethod_generated.py @@ -0,0 +1,443 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\flatbuffer\contributionmethod_generated.py +import flatbuffers +from flatbuffers.compat import import_numpy +np = import_numpy() + +class MatcherParameter(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatcherParameter() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsMatcherParameter(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Icon(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def AcceptedValueTypes(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def AcceptedValueTypesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def AcceptedValueTypesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + def Title(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Description(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + +def MatcherParameterStart(builder): + builder.StartObject(6) + + +def MatcherParameterAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def MatcherParameterAddType(builder, type): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(type), 0) + + +def MatcherParameterAddIcon(builder, icon): + builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) + + +def MatcherParameterAddAcceptedValueTypes(builder, acceptedValueTypes): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(acceptedValueTypes), 0) + + +def MatcherParameterStartAcceptedValueTypesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def MatcherParameterCreateAcceptedValueTypesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def MatcherParameterAddTitle(builder, title): + builder.PrependUint64Slot(4, title, 0) + + +def MatcherParameterAddDescription(builder, description): + builder.PrependUint64Slot(5, description, 0) + + +def MatcherParameterEnd(builder): + return builder.EndObject() + + +class Definition(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Definition() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDefinition(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Title(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def ProgressDescription(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Icon(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def MatcherParameters(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = MatcherParameter() + obj.Init(self._tab.Bytes, x) + return obj + + def MatcherParametersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def MatcherParametersIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + return o == 0 + + +def DefinitionStart(builder): + builder.StartObject(5) + + +def DefinitionAddName(builder, name): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + + +def DefinitionAddTitle(builder, title): + builder.PrependUint64Slot(1, title, 0) + + +def DefinitionAddProgressDescription(builder, progressDescription): + builder.PrependUint64Slot(2, progressDescription, 0) + + +def DefinitionAddIcon(builder, icon): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(icon), 0) + + +def DefinitionAddMatcherParameters(builder, matcherParameters): + builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(matcherParameters), 0) + + +def DefinitionStartMatcherParametersVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def DefinitionCreateMatcherParametersVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def DefinitionEnd(builder): + return builder.EndObject() + + +class SemanticVersion(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SemanticVersion() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsSemanticVersion(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Major(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Minor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Patch(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def PrereleaseTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def PrereleaseTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def PrereleaseTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + def BuildTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def BuildTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def BuildTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + return o == 0 + + +def SemanticVersionStart(builder): + builder.StartObject(5) + + +def SemanticVersionAddMajor(builder, major): + builder.PrependUint64Slot(0, major, 0) + + +def SemanticVersionAddMinor(builder, minor): + builder.PrependUint64Slot(1, minor, 0) + + +def SemanticVersionAddPatch(builder, patch): + builder.PrependUint64Slot(2, patch, 0) + + +def SemanticVersionAddPrereleaseTags(builder, prereleaseTags): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(prereleaseTags), 0) + + +def SemanticVersionStartPrereleaseTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreatePrereleaseTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionAddBuildTags(builder, buildTags): + builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buildTags), 0) + + +def SemanticVersionStartBuildTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreateBuildTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionEnd(builder): + return builder.EndObject() + + +class Definitions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Definitions() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDefinitions(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = SemanticVersion() + obj.Init(self._tab.Bytes, x) + return obj + + def Methods(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Definition() + obj.Init(self._tab.Bytes, x) + return obj + + def MethodsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def MethodsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def DefinitionsStart(builder): + builder.StartObject(2) + + +def DefinitionsAddVersion(builder, version): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(version), 0) + + +def DefinitionsAddMethods(builder, methods): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(methods), 0) + + +def DefinitionsStartMethodsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def DefinitionsCreateMethodsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def DefinitionsEnd(builder): + return builder.EndObject() + + +class VersionedDefinitions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = VersionedDefinitions() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsVersionedDefinitions(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Definitions(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Definitions() + obj.Init(self._tab.Bytes, x) + return obj + + def DefinitionsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def DefinitionsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + return o == 0 + + +def VersionedDefinitionsStart(builder): + builder.StartObject(1) + + +def VersionedDefinitionsAddDefinitions(builder, definitions): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(definitions), 0) + + +def VersionedDefinitionsStartDefinitionsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def VersionedDefinitionsCreateDefinitionsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def VersionedDefinitionsEnd(builder): + return builder.EndObject() diff --git a/campaigns/client/v1/data_model/objective.py b/campaigns/client/v1/data_model/objective.py @@ -0,0 +1,661 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\objective.py +import campaigns.client.v1.data_model.flatbuffer.campaigndefinition_generated as fb_campaign +from campaigns.client.v1.data_model.career_paths import PROTO_CAREER_TO_FDS_CAREER +from campaigns.client.v1.data_model.contribution_method import ContributionMethodConfiguration +from datetimeutils import datetime_to_filetime, filetime_to_datetime +from eve.common.script.sys.idCheckers import IsCorporation, IsCharacter, IsFaction, IsAlliance +from eveProto import get_single_value_from_split_precision_message +from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier, STATE_UNSPECIFIED, STATE_ACTIVE, STATE_COMPLETED, STATE_EXPIRED, STATE_CANCELLED, PARTICIPANT_STATE_UNSPECIFIED, PARTICIPANT_STATE_COMMITTED, PARTICIPANT_STATE_RESIGNED, PARTICIPANT_STATE_CONTRIBUTION_COMPLETED +from itertoolsext.Enum import Enum +from uuid import UUID + +class FutureObjective(object): + + def __init__(self, start_datetime, career_path, contribution_method_name, campaign_id = None): + self._start_datetime = start_datetime + self._career_path = career_path + self._contribution_method_name = contribution_method_name + self._campaign_id = campaign_id + + @property + def start_datetime(self): + return self._start_datetime + + @property + def career_path(self): + return self._career_path + + @property + def contribution_method_name(self): + return self._contribution_method_name + + @property + def campaign_id(self): + return self._campaign_id + + @campaign_id.setter + def campaign_id(self, value): + self._campaign_id = value + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __eq__(self, other): + if not isinstance(other, FutureObjective): + return NotImplemented + return self.start_datetime == other.start_datetime and self.career_path == other.career_path and self.contribution_method_name == other.contribution_method_name and self.campaign_id == other.campaign_id + + +class ObjectiveID(object): + + def __init__(self, objective_uuid): + self._objective_uuid = objective_uuid + + @property + def uuid(self): + return self._objective_uuid + + @classmethod + def from_proto(cls, proto): + return ObjectiveID(UUID(bytes=proto.uuid)) + + @classmethod + def from_flatbuffer(cls, uuid_fb): + objective_id_bytes = [ chr(byte) for byte in uuid_fb.Bytes() ] + return ObjectiveID(UUID(bytes=objective_id_bytes)) + + def to_proto(self): + return Identifier(uuid=self._objective_uuid.bytes) + + def __eq__(self, other): + if not isinstance(other, ObjectiveID): + return NotImplemented + return self._objective_uuid == other._objective_uuid + + def __ne__(self, other): + return not self == other + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + def __hash__(self): + return hash(self._objective_uuid) + + +class Objective(object): + + def __init__(self, objective_id, title, subtitle, issuer, presenting_character, content_tags, scheduled_start_datetime, finished_datetime, career_path, target_progress, max_progress_per_participant, contribution_method_configuration, rewards, objective_state, annotations, campaign_id = None): + self._objective_id = objective_id + self._title = title + self._subtitle = subtitle + self._issuer = issuer + self._presenting_character = presenting_character + self._content_tags = content_tags + self._scheduled_start_datetime = scheduled_start_datetime + self._finished_datetime = finished_datetime + self._career_path = career_path + self._target_progress = target_progress + self._max_progress_per_participant = max_progress_per_participant + self._contribution_method_configuration = contribution_method_configuration + self._rewards = rewards + self._objective_state = objective_state + self._annotations = annotations + self._campaign_id = campaign_id + + @property + def id(self): + return self._objective_id + + @property + def title(self): + return self._title + + @property + def subtitle(self): + return self._subtitle + + @property + def issuer(self): + return self._issuer + + @property + def is_corporation_issuer(self): + return IsCorporation(self._issuer) + + @property + def is_character_issuer(self): + return IsCharacter(self._issuer) + + @property + def presenting_character(self): + return self._presenting_character + + @property + def content_tags(self): + return self._content_tags + + @property + def scheduled_start_datetime(self): + return self._scheduled_start_datetime + + @property + def finished_datetime(self): + return self._finished_datetime + + @property + def is_finished(self): + return self._finished_datetime is not None + + @property + def career_path(self): + return self._career_path + + @property + def target_progress(self): + return self._target_progress + + @property + def max_progress_per_participant(self): + return self._max_progress_per_participant + + @property + def contribution_method_configuration(self): + return self._contribution_method_configuration + + @property + def rewards(self): + return self._rewards + + @property + def objective_state(self): + return self._objective_state + + @property + def annotations(self): + return self._annotations + + @property + def campaign_id(self): + return self._campaign_id + + @campaign_id.setter + def campaign_id(self, value): + self._campaign_id = value + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, objective_id, attributes): + issuer = attributes.issuer.character.sequential if attributes.issuer.WhichOneof('issuer') == 'character' else attributes.issuer.corporation.sequential + content_tags = [ content_tag.name for content_tag in attributes.content_tags ] + finished_datetime = None if attributes.WhichOneof('finished') == 'not_finished' else attributes.finish_time.ToDatetime() + annotations = {annotation.key:annotation.value for annotation in attributes.annotations} + return Objective(objective_id=ObjectiveID.from_proto(objective_id), title=attributes.title.sequential, subtitle=attributes.subtitle.sequential, issuer=issuer, presenting_character=attributes.presenting_character.sequential, content_tags=content_tags, scheduled_start_datetime=attributes.scheduled_start_time.ToDatetime(), finished_datetime=finished_datetime, career_path=PROTO_CAREER_TO_FDS_CAREER[attributes.career], target_progress=attributes.target_progress, max_progress_per_participant=attributes.max_progress_per_participant, contribution_method_configuration=ContributionMethodConfiguration.from_proto(attributes.contribution_method_configuration), rewards=Rewards.from_proto(attributes.rewards), objective_state=ObjectiveState.from_proto(attributes.state), annotations=annotations) + + @classmethod + def from_flatbuffer(cls, objective): + objective_id = ObjectiveID.from_flatbuffer(objective.Uuid()) + finished_datetime = None + if objective.FinishedTimeType() != fb_campaign.FinishedTime.NONE: + union_data = objective.FinishedTime() + finished = fb_campaign.Finished() + finished.Init(union_data.Bytes, union_data.Pos) + finished_datetime = filetime_to_datetime(finished.Timestamp()) + annotations = {} + for i in range(objective.AnnotationsLength()): + annotation = objective.Annotations(i) + annotations[annotation.Key().decode('utf-8')] = annotation.Value().decode('utf-8') + + return Objective(objective_id=objective_id, title=objective.Title(), subtitle=objective.Subtitle(), issuer=objective.Issuer(), presenting_character=objective.PresentingCharacter(), content_tags=[ objective.ContentTags(i).decode('utf-8') for i in range(objective.ContentTagsLength()) ], scheduled_start_datetime=filetime_to_datetime(objective.ScheduledStartTime()), finished_datetime=finished_datetime, career_path=objective.Career(), target_progress=objective.TargetProgress(), max_progress_per_participant=objective.MaxProgressPerParticipant(), objective_state=objective.ObjectiveState(), contribution_method_configuration=ContributionMethodConfiguration.from_flatbuffer(objective.ContributionMethodConfig()), rewards=Rewards.from_flatbuffer(objective.Rewards()), annotations=annotations) + + def to_flatbuffer(self, builder): + uuid_bytes = [ ord(byte) for byte in self.id.uuid.bytes ] + content_tag_offsets = [] + for content_tag in self.content_tags: + content_tag_offsets.append(builder.CreateString(content_tag)) + + fb_campaign.ObjectiveStartContentTagsVector(builder, len(content_tag_offsets)) + for content_tag_offset in reversed(content_tag_offsets): + builder.PrependUOffsetTRelative(content_tag_offset) + + content_tags_fb = builder.EndVector() + annotations_list = [] + for key, value in self.annotations.iteritems(): + key_fb = builder.CreateString(key) + value_fb = builder.CreateString(value) + fb_campaign.AnnotationStart(builder) + fb_campaign.AnnotationAddKey(builder, key_fb) + fb_campaign.AnnotationAddValue(builder, value_fb) + annotation_fb = fb_campaign.AnnotationEnd(builder) + annotations_list.append(annotation_fb) + + fb_campaign.ObjectiveStartAnnotationsVector(builder, len(annotations_list)) + for annotation in reversed(annotations_list): + builder.PrependUOffsetTRelative(annotation) + + annotations_fb = builder.EndVector() + if self.finished_datetime is not None: + finished_type = fb_campaign.FinishedTime.FinishedTime + else: + finished_type = fb_campaign.FinishedTime.NONE + finished_time_fb = None + if self.finished_datetime is not None: + fb_campaign.FinishedStart(builder) + fb_campaign.FinishedAddTimestamp(builder, datetime_to_filetime(self.finished_datetime)) + finished_time_fb = fb_campaign.FinishedEnd(builder) + rewards_db = self.rewards.to_flatbuffer(builder) + contribution_method_config_fb = self.contribution_method_configuration.to_flatbuffer(builder) + fb_campaign.ObjectiveStart(builder) + fb_campaign.ObjectiveAddUuid(builder, fb_campaign.CreateUuid(builder, uuid_bytes)) + fb_campaign.ObjectiveAddTitle(builder, self.title) + fb_campaign.ObjectiveAddSubtitle(builder, self.subtitle) + fb_campaign.ObjectiveAddIssuer(builder, self.issuer) + fb_campaign.ObjectiveAddPresentingCharacter(builder, self.presenting_character) + fb_campaign.ObjectiveAddContentTags(builder, content_tags_fb) + fb_campaign.ObjectiveAddScheduledStartTime(builder, datetime_to_filetime(self.scheduled_start_datetime)) + fb_campaign.ObjectiveAddFinishedTimeType(builder, finished_type) + if finished_time_fb is not None: + fb_campaign.ObjectiveAddFinishedTime(builder, finished_time_fb) + fb_campaign.ObjectiveAddCareer(builder, self.career_path) + fb_campaign.ObjectiveAddTargetProgress(builder, self.target_progress) + fb_campaign.ObjectiveAddMaxProgressPerParticipant(builder, self.max_progress_per_participant) + fb_campaign.ObjectiveAddContributionMethodConfig(builder, contribution_method_config_fb) + fb_campaign.ObjectiveAddRewards(builder, rewards_db) + fb_campaign.ObjectiveAddObjectiveState(builder, self.objective_state) + fb_campaign.ObjectiveAddAnnotations(builder, annotations_fb) + return fb_campaign.ObjectiveEnd(builder) + + def __eq__(self, other): + if not isinstance(other, Objective): + return NotImplemented + return self.id == other.id and self.title == other.title and self.subtitle == other.subtitle and self.issuer == other.issuer and self.presenting_character == other.presenting_character and self.content_tags == other.content_tags and self.scheduled_start_datetime == other.scheduled_start_datetime and self.finished_datetime == other.finished_datetime and self.career_path == other.career_path and self.target_progress == other.target_progress and self.max_progress_per_participant == other.max_progress_per_participant and self.contribution_method_configuration == other.contribution_method_configuration and self.rewards == other.rewards and self.objective_state == other.objective_state and self.annotations == other.annotations + + def __ne__(self, other): + return not self.__eq__(other) + + +@Enum + +class ObjectiveState(object): + UNSPECIFIED = 0 + ACTIVE = 1 + COMPLETED = 2 + EXPIRED = 3 + CANCELLED = 4 + + @classmethod + def from_proto(cls, objective_state): + enum_value = _objective_state_proto_to_enum.get(objective_state, None) + if enum_value is None: + raise ValueError('ObjectiveState: Conversion to enum failed with unrecognized value: %s' % objective_state) + return enum_value + + +_objective_state_proto_to_enum = {STATE_UNSPECIFIED: ObjectiveState.UNSPECIFIED, + STATE_ACTIVE: ObjectiveState.ACTIVE, + STATE_COMPLETED: ObjectiveState.COMPLETED, + STATE_EXPIRED: ObjectiveState.EXPIRED, + STATE_CANCELLED: ObjectiveState.CANCELLED} + +class ObjectiveStats(object): + + def __init__(self, objective_id, current_objective_progress, committed_participants, total_participants, total_contributors): + self._objective_id = objective_id + self._current_objective_progress = current_objective_progress + self._committed_participants = committed_participants + self._total_participants = total_participants + self._total_contributors = total_contributors + + @property + def objective_id(self): + return self._objective_id + + @property + def current_objective_progress(self): + return self._current_objective_progress + + @property + def committed_participants(self): + return self._committed_participants + + @property + def total_participants(self): + return self._total_participants + + @property + def total_contributors(self): + return self._total_contributors + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, objective_id, stats): + return ObjectiveStats(objective_id=ObjectiveID.from_proto(objective_id), current_objective_progress=stats.current_objective_progress, committed_participants=stats.committed_participants, total_participants=stats.total_participants, total_contributors=stats.total_contributors) + + def __eq__(self, other): + if not isinstance(other, ObjectiveStats): + return NotImplemented + return (self.objective_id == other.objective_id, + self.current_objective_progress == other.current_objective_progress, + self.committed_participants == other.committed_participants, + self.total_participants == other.total_participants, + self.total_contributors == other.total_contributors) + + def __ne__(self, other): + return not self == other + + +@Enum + +class ParticipantState(object): + UNSPECIFIED = 0 + COMMITTED = 1 + RESIGNED = 2 + CONTRIBUTION_COMPLETED = 3 + + @classmethod + def from_proto(cls, participant_state): + enum_value = _participant_state_proto_to_enum.get(participant_state, None) + if enum_value is None: + raise ValueError('ParticipantState: Conversion to enum failed with unrecognized value: %s' % participant_state) + return enum_value + + +_participant_state_proto_to_enum = {PARTICIPANT_STATE_UNSPECIFIED: ParticipantState.UNSPECIFIED, + PARTICIPANT_STATE_COMMITTED: ParticipantState.COMMITTED, + PARTICIPANT_STATE_RESIGNED: ParticipantState.RESIGNED, + PARTICIPANT_STATE_CONTRIBUTION_COMPLETED: ParticipantState.CONTRIBUTION_COMPLETED} + +class ObjectiveParticipantStats(object): + + def __init__(self, objective_id, participant_state, current_participant_progress): + self._objective_id = objective_id + self._participant_state = participant_state + self._current_participant_progress = current_participant_progress + + @property + def objective_id(self): + return self._objective_id + + @property + def participant_state(self): + return self._participant_state + + @participant_state.setter + def participant_state(self, participant_state): + self._participant_state = participant_state + + @property + def current_participant_progress(self): + return self._current_participant_progress + + @current_participant_progress.setter + def current_participant_progress(self, value): + self._current_participant_progress = value + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, participant_stats): + return ObjectiveParticipantStats(objective_id=ObjectiveID.from_proto(participant_stats.objective), participant_state=ParticipantState.from_proto(participant_stats.stats.state), current_participant_progress=participant_stats.stats.current_participant_progress) + + def __eq__(self, other): + if not isinstance(other, ObjectiveParticipantStats): + return NotImplemented + return self.objective_id == other.objective_id and self.participant_state == other.participant_state and self.current_participant_progress == other.current_participant_progress + + def __ne__(self, other): + return not self == other + + +class Rewards(object): + + def __init__(self, isk_reward, lp_reward, standings_reward): + self._isk_reward = isk_reward + self._lp_reward = lp_reward + self._standings_reward = standings_reward + + @property + def isk_reward(self): + return self._isk_reward + + @property + def lp_reward(self): + return self._lp_reward + + @property + def standings_reward(self): + return self._standings_reward + + @property + def has_isk_reward(self): + return self._isk_reward is not None + + @property + def has_lp_reward(self): + return self._lp_reward is not None + + @property + def has_standings_reward(self): + return self._standings_reward is not None + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, rewards): + isk_reward = None if rewards.WhichOneof('isk') == 'no_isk_reward' else ISKReward.from_proto(rewards.isk_reward) + lp_reward = None if rewards.WhichOneof('lp') == 'no_lp_reward' else LPReward.from_proto(rewards.lp_reward) + standing_reward = None if rewards.WhichOneof('standing') == 'no_standing_reward' else StandingReward.from_proto(rewards.standing_reward) + return Rewards(isk_reward, lp_reward, standing_reward) + + @classmethod + def from_flatbuffer(cls, rewards): + if rewards.IskType() == fb_campaign.IskReward.NONE: + isk_reward = None + else: + union_data = rewards.Isk() + isk_fb = fb_campaign.RewardDetails() + isk_fb.Init(union_data.Bytes, union_data.Pos) + isk_reward = ISKReward(amount_per_interval=isk_fb.AmountPerInterval(), issuer=isk_fb.Issuer(), interval_size=isk_fb.IntervalSize()) + if rewards.LpType() == fb_campaign.LpReward.NONE: + lp_reward = None + else: + union_data = rewards.Lp() + lp_fb = fb_campaign.RewardDetails() + lp_fb.Init(union_data.Bytes, union_data.Pos) + lp_reward = LPReward(amount_per_interval=lp_fb.AmountPerInterval(), issuing_corporation=lp_fb.Issuer(), interval_size=lp_fb.IntervalSize()) + if rewards.StandingType() == fb_campaign.StandingReward.NONE: + standing_reward = None + else: + union_data = rewards.Standing() + standing_fb = fb_campaign.RewardDetails() + standing_fb.Init(union_data.Bytes, union_data.Pos) + standing_reward = StandingReward(gain_percentage_per_interval=standing_fb.AmountPerInterval(), issuer=standing_fb.Issuer(), interval_size=standing_fb.IntervalSize()) + return Rewards(isk_reward=isk_reward, lp_reward=lp_reward, standings_reward=standing_reward) + + def to_flatbuffer(self, builder): + isk_type = fb_campaign.IskReward.NONE if self.isk_reward is None else fb_campaign.IskReward.details + lp_type = fb_campaign.LpReward.NONE if self.lp_reward is None else fb_campaign.LpReward.details + standing_type = fb_campaign.StandingReward.NONE if self.standings_reward is None else fb_campaign.StandingReward.details + isk_fb = None + if self.isk_reward is not None: + fb_campaign.RewardDetailsStart(builder) + fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.isk_reward.amount_per_interval) + fb_campaign.RewardDetailsAddIssuer(builder, self.isk_reward.issuer) + fb_campaign.RewardDetailsAddIntervalSize(builder, self.isk_reward.interval_size) + isk_fb = fb_campaign.RewardDetailsEnd(builder) + lp_fb = None + if self.lp_reward is not None: + fb_campaign.RewardDetailsStart(builder) + fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.lp_reward.amount_per_interval) + fb_campaign.RewardDetailsAddIssuer(builder, self.lp_reward.issuing_corporation) + fb_campaign.RewardDetailsAddIntervalSize(builder, self.lp_reward.interval_size) + lp_fb = fb_campaign.RewardDetailsEnd(builder) + standing_fb = None + if self.standings_reward is not None: + fb_campaign.RewardDetailsStart(builder) + fb_campaign.RewardDetailsAddAmountPerInterval(builder, self.standings_reward.gain_percentage_per_interval) + fb_campaign.RewardDetailsAddIssuer(builder, self.standings_reward.issuer) + fb_campaign.RewardDetailsAddIntervalSize(builder, self.standings_reward.interval_size) + standing_fb = fb_campaign.RewardDetailsEnd(builder) + fb_campaign.RewardsStart(builder) + fb_campaign.RewardsAddIskType(builder, isk_type) + fb_campaign.RewardsAddLpType(builder, lp_type) + fb_campaign.RewardsAddStandingType(builder, standing_type) + if isk_fb is not None: + fb_campaign.RewardsAddIsk(builder, isk_fb) + if lp_fb is not None: + fb_campaign.RewardsAddLp(builder, lp_fb) + if standing_fb is not None: + fb_campaign.RewardsAddStanding(builder, standing_fb) + return fb_campaign.RewardsEnd(builder) + + def __eq__(self, other): + if not isinstance(other, Rewards): + return NotImplemented + return self.isk_reward == other.isk_reward and self.lp_reward == other.lp_reward and self.standings_reward == other.standings_reward + + def __ne__(self, other): + return not self == other + + +class ISKReward(object): + + def __init__(self, amount_per_interval, issuer, interval_size): + self._amount_per_interval = amount_per_interval + self._issuer = issuer + self._interval_size = interval_size + + @property + def amount_per_interval(self): + return self._amount_per_interval + + @property + def issuer(self): + return self._issuer + + @property + def interval_size(self): + return self._interval_size + + @property + def is_corporation_issuer(self): + return IsCorporation(self._issuer) + + @property + def is_character_issuer(self): + return IsCharacter(self._issuer) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, isk_reward): + issuer = isk_reward.issuer.character.sequential if isk_reward.issuer.WhichOneof('owner_type') == 'character' else isk_reward.issuer.corporation.sequential + return ISKReward(amount_per_interval=get_single_value_from_split_precision_message(isk_reward.amount_per_interval), issuer=issuer, interval_size=isk_reward.progress_interval) + + def __eq__(self, other): + if not isinstance(other, ISKReward): + return NotImplemented + return self.amount_per_interval == other.amount_per_interval and self.issuer == other.issuer and self.interval_size == other.interval_size + + def __ne__(self, other): + return not self == other + + +class LPReward(object): + + def __init__(self, amount_per_interval, issuing_corporation, interval_size): + self._amount_per_interval = amount_per_interval + self._issuing_corporation = issuing_corporation + self._interval_size = interval_size + + @property + def amount_per_interval(self): + return self._amount_per_interval + + @property + def issuing_corporation(self): + return self._issuing_corporation + + @property + def interval_size(self): + return self._interval_size + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, lp_reward): + return LPReward(amount_per_interval=lp_reward.amount_per_interval.amount, issuing_corporation=lp_reward.amount_per_interval.associated_corporation.sequential, interval_size=lp_reward.progress_interval) + + def __eq__(self, other): + if not isinstance(other, LPReward): + return NotImplemented + return self.amount_per_interval == other.amount_per_interval and self.issuing_corporation == other.issuing_corporation and self.interval_size == other.interval_size + + +class StandingReward(object): + + def __init__(self, gain_percentage_per_interval, issuer, interval_size): + self._gain_percentage_per_interval = gain_percentage_per_interval + self._issuer = issuer + self._interval_size = interval_size + + @property + def gain_percentage_per_interval(self): + return self._gain_percentage_per_interval + + @property + def issuer(self): + return self._issuer + + @property + def is_corporation_issuer(self): + return IsCorporation(self._issuer) + + @property + def is_character_issuer(self): + return IsCharacter(self._issuer) + + @property + def is_faction_issuer(self): + return IsFaction(self._issuer) + + @property + def is_alliance_issuer(self): + return IsAlliance(self._issuer) + + @property + def interval_size(self): + return self._interval_size + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, standing_reward): + which_one_of = standing_reward.issuer.WhichOneof('source') + if which_one_of == 'character': + issuer = standing_reward.issuer.character.sequential + elif which_one_of == 'corporation': + issuer = standing_reward.issuer.corporation.sequential + elif which_one_of == 'alliance': + issuer = standing_reward.issuer.alliance.sequential + elif which_one_of == 'faction': + issuer = standing_reward.issuer.faction.sequential + else: + raise ValueError('Unrecognized issuer') + return StandingReward(gain_percentage_per_interval=get_single_value_from_split_precision_message(standing_reward.gain_percent_per_interval), issuer=issuer, interval_size=standing_reward.progress_interval) + + def __eq__(self, other): + if not isinstance(other, StandingReward): + return NotImplemented + return self.gain_percentage_per_interval == other.gain_percentage_per_interval and self.issuer == other.issuer and self.interval_size == other.interval_size + + def __ne__(self, other): + return not self == other diff --git a/campaigns/client/v1/listeners/__init__.py b/campaigns/client/v1/listeners/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\listeners\__init__.py +pass diff --git a/campaigns/client/v1/listeners/campaign_listener.py b/campaigns/client/v1/listeners/campaign_listener.py @@ -0,0 +1,39 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\listeners\campaign_listener.py +import logging +from campaigns.client.v1.data_model.campaign import CampaignVersion, CampaignID +from eveProto.generated.eve_public.campaign.api.notices_pb2 import StartedNotice, CompletedNotice, ExpiredNotice, CurrentVersionNotice +from signals import Signal +logger = logging.getLogger('campaign') + +class CampaignListener(object): + + def __init__(self, public_gateway): + self._public_gateway = public_gateway + self._public_gateway.subscribe_to_notice(StartedNotice, self._on_started_notice) + self._public_gateway.subscribe_to_notice(CompletedNotice, self._on_completed_notice) + self._public_gateway.subscribe_to_notice(ExpiredNotice, self._on_expired_notice) + self._public_gateway.subscribe_to_notice(CurrentVersionNotice, self._on_current_version_notice) + self.on_started = Signal('CampaignListener.on_started') + self.on_completed = Signal('CampaignListener.on_completed') + self.on_expired = Signal('CampaignListener.on_expired') + self.on_current_versions = Signal('CampaignListener.on_current_versions') + + def _on_started_notice(self, payload, _primitive): + campaign_id = CampaignID.from_proto(payload.campaign) + logger.info('on_started_notice campaign: %s - payload: %s', campaign_id, payload) + self.on_started(campaign_id) + + def _on_completed_notice(self, payload, _primitive): + campaign_id = CampaignID.from_proto(payload.campaign) + logger.info('on_completed_notice campaign: %s - payload: %s', campaign_id, payload) + self.on_completed(campaign_id) + + def _on_expired_notice(self, payload, _primitive): + campaign_id = CampaignID.from_proto(payload.campaign) + logger.info('on_expired_notice campaign: %s - payload: %s', campaign_id, payload) + self.on_expired(campaign_id) + + def _on_current_version_notice(self, payload, _primitive): + campaign_versions = {CampaignID.from_proto(campaign.campaign):CampaignVersion.from_proto(campaign.version) for campaign in payload.versions} + logger.info('on_current_version_notice - payload: %s', payload) + self.on_current_versions(campaign_versions) diff --git a/campaigns/client/v1/listeners/objective_listener.py b/campaigns/client/v1/listeners/objective_listener.py @@ -0,0 +1,18 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\listeners\objective_listener.py +import logging +from campaigns.client.v1.data_model.objective import ObjectiveID +from eveProto.generated.eve_public.campaign.objective.api.notices_pb2 import ContributedNotice +from signals import Signal +logger = logging.getLogger('campaign') + +class ObjectiveListener(object): + + def __init__(self, public_gateway): + self._public_gateway = public_gateway + self._public_gateway.subscribe_to_notice(ContributedNotice, self._on_contributed_notice) + self.on_contributed = Signal('ObjectiveListener.on_contributed') + + def _on_contributed_notice(self, payload, _primitive): + objective_id = ObjectiveID.from_proto(payload.objective) + logger.info('on_contributed_notice objective: %s - payload: %s', objective_id, payload) + self.on_contributed(objective_id, payload.total_participant_progress) diff --git a/campaigns/client/v1/messengers/__init__.py b/campaigns/client/v1/messengers/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\messengers\__init__.py +pass diff --git a/campaigns/client/v1/messengers/campaigns_messenger.py b/campaigns/client/v1/messengers/campaigns_messenger.py @@ -0,0 +1,255 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\messengers\campaigns_messenger.py +import logging +from campaigns.client.v1.data_model.campaign import CampaignStats, Campaign, UnredeemedReward, CampaignID +from campaigns.client.v1.data_model.objective import ObjectiveParticipantStats, ObjectiveStats +from campaigns.client.errors import CampaignRequestError, CampaignNotFoundError, CampaignUnauthorizedError, CampaignBadRequestError, CampaignForbiddenError, CampaignStatsRequestError +from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetLimitsRequest, GetLimitsResponse, GetAllRequest, GetAllResponse, GetParticipantStatsRequest, GetParticipantStatsResponse, GetStatsRequest, GetStatsResponse, GetRequest, GetResponse, GetAllUnredeemedRewardsRequest, GetAllUnredeemedRewardsResponse +from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import GetStatsRequest as ObjectiveGetStatsRequest, GetStatsResponse as ObjectiveGetStatsResponse, CommitRequest, CommitResponse, ResignRequest, ResignResponse, RedeemRewardsRequest, RedeemRewardsResponse +from eveProto.generated.eve_public.public_pb2 import Page +from six.moves.http_client import OK, UNAUTHORIZED, NOT_FOUND, BAD_REQUEST, NOT_MODIFIED, FORBIDDEN +from stackless_response_router.exceptions import TimeoutException, UnpackException +try: + from typing import List, Dict +except ImportError: + pass + +logger = logging.getLogger('campaigns') +PAGE_SIZE = 1000 + +class CampaignsMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def get_all_request(self): + request = GetAllRequest() + info_log = 'Request: Campaigns: GetAllRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetAllRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code != OK: + raise CampaignRequestError('Received error status code for GetAllRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetAllResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ CampaignID.from_proto(campaign_id) for campaign_id in response.campaigns ] + return results + + def get_limits_request(self): + request = GetLimitsRequest() + info_log = 'Request: Campaigns: GetLimitsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetLimitsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetLimitsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code != OK: + raise CampaignRequestError('Received error status code for GetLimitsResponse: %s' % status_code) + info_log += 'Response: Campaigns: GetLimitsResponse: {response}'.format(response=response) + logger.info(info_log) + limit = response.max_active_objectives_per_participant + return limit + + def get_request(self, campaign_id, current_version = None): + campaign_identifier = campaign_id.to_proto() + request = GetRequest(campaign=campaign_identifier) + if current_version is None: + request.no_version = True + else: + request.version.MergeFrom(current_version.to_proto()) + info_log = 'Request: Campaigns: GetRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_MODIFIED: + return NOT_MODIFIED + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetRequest: %s' % campaign_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in GetRequest: %s' % campaign_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetResponse: {response}'.format(response=response) + logger.info(info_log) + campaign = Campaign.from_proto(campaign_identifier, response.attributes, response.available_objectives, response.restricted_objectives) + return campaign + + def get_stats_request(self, campaign_id): + request = GetStatsRequest(campaign=campaign_id.to_proto()) + info_log = 'Request: Campaigns: GetStatsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignStatsRequestError('Failed to receive response from GetStatsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetStatsRequest: %s' % campaign_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in GetStatsRequest: %s' % campaign_id) + if status_code != OK: + raise CampaignStatsRequestError('Received error status code for GetStatsRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetStatsResponse: {response}'.format(response=response) + logger.info(info_log) + campaign_stats = CampaignStats.from_proto(request.campaign, response.campaign_stats) + objective_stats = [ ObjectiveStats.from_proto(objective_stats.objective, objective_stats.stats) for objective_stats in response.objective_stats ] + return (campaign_stats, objective_stats) + + def get_participant_stats_request(self, campaign_id): + request = GetParticipantStatsRequest(campaign=campaign_id.to_proto()) + info_log = 'Request: Campaigns: GetParticipantStatsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetParticipantStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetParticipantStatsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetParticipantStatsRequest: %s' % campaign_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in GetParticipantStatsRequest: %s' % campaign_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in GetParticipantStatsRequest: %s' % campaign_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetParticipantStatsRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetParticipantStatsResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ ObjectiveParticipantStats.from_proto(participant_stats) for participant_stats in response.participant_stats ] + return results + + def get_all_unredeemed_rewards_request(self, page_token = None): + request = GetAllUnredeemedRewardsRequest(page=Page(size=PAGE_SIZE)) + request.page.token = '' if page_token is None else page_token + info_log = 'Request: Campaigns: GetAllUnredeemedRewardsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllUnredeemedRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetAllUnredeemedRewardsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetAllUnredeemedRewardsRequest: %s' % page_token) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in GetAllUnredeemedRewardsRequest: %s' % page_token) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in GetAllUnredeemedRewardsRequest: %s' % page_token) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetAllUnredeemedRewardsResponse: %s' % status_code) + info_log += 'Response: Campaigns: GetAllUnredeemedRewardsResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ UnredeemedReward.from_proto(reward) for reward in response.objectives ] + next_page_token = response.next_page.token + return (results, next_page_token) + + def get_objective_stats_request(self, objective_id_list): + request = ObjectiveGetStatsRequest(objective=[ objective_id.to_proto() for objective_id in objective_id_list ]) + info_log = 'Request: Campaigns: ObjectiveGetStatsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ObjectiveGetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from ObjectiveGetStatsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in ObjectiveGetStatsRequest: %s' % objective_id_list) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in ObjectiveGetStatsRequest: %s' % objective_id_list) + if status_code != OK: + raise CampaignRequestError('Received error status code for ObjectiveGetStatsRequest: %s' % status_code) + info_log += 'Response: Campaigns: ObjectiveGetStatsResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ ObjectiveStats.from_proto(objective.objective, objective.stats) for objective in response.objective_stats ] + return results + + def commit_request(self, objective_id): + request = CommitRequest(objective=objective_id.to_proto()) + info_log = 'Request: Campaigns: CommitRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=CommitResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from CommitRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in CommitRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in CommitRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in CommitRequest: %s' % objective_id) + if status_code == FORBIDDEN: + raise CampaignForbiddenError('Cannot commit in CommitRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for CommitRequest: %s' % status_code) + info_log += 'Response: Campaigns: CommitResponse: {response}'.format(response=response) + logger.info(info_log) + + def resign_request(self, objective_id): + request = ResignRequest(objective=objective_id.to_proto()) + info_log = 'Request: Campaigns: ResignRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ResignResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from ResignRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in ResignRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in ResignRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Could bad request in ResignRequest: %s' % objective_id) + if status_code == FORBIDDEN: + raise CampaignForbiddenError('Cannot resign in ResignRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for ResignRequest: %s' % status_code) + info_log += 'Response: Campaigns: ResignResponse: {response}'.format(response=response) + logger.info(info_log) + + def redeem_rewards_request(self, objective_id): + request = RedeemRewardsRequest(objective=objective_id.to_proto()) + info_log = 'Request: Campaigns: RedeemRewardsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=RedeemRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from RedeemRewardsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in RedeemRewardsRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in RedeemRewardsRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in RedeemRewardsRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for RedeemRewardsRequest: %s' % status_code) + info_log += 'Response: Campaigns: RedeemRewardsResponse: {response}'.format(response=response) + logger.info(info_log) diff --git a/campaigns/client/v1/messengers/contribution_methods_messenger.py b/campaigns/client/v1/messengers/contribution_methods_messenger.py @@ -0,0 +1,39 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\messengers\contribution_methods_messenger.py +import logging +from campaigns.client.v1.data_model.contribution_method import ContributionMethodDefinition +from campaigns.client.errors import ContributionMethodNotFoundError, ContributionMethodBadRequestError, ContributionMethodRequestError +from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllRequest, GetAllResponse +from six.moves.http_client import NOT_FOUND, BAD_REQUEST, OK +from semantic_version import SemanticVersion +from stackless_response_router.exceptions import TimeoutException, UnpackException +logger = logging.getLogger('campaigns') + +class CampaignContributionMethodsMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def get_all_request(self, semantic_version): + request = GetAllRequest(version=semantic_version.to_eve_public_proto()) + info_log = 'Request: CampaignContributionMethodsMessenger: GetAllRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise ContributionMethodRequestError('Failed to receive response from GetAllRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise ContributionMethodNotFoundError('Could not find requested version in GetAllRequest: %s' % semantic_version) + if status_code == BAD_REQUEST: + raise ContributionMethodBadRequestError('Bad request in GetAllRequest: %s' % semantic_version) + if status_code != OK: + raise ContributionMethodRequestError('Received error status code for GetAllResponse: %s' % status_code) + info_log += 'Response: CampaignContributionMethodsMessenger: GetAllResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ ContributionMethodDefinition.from_proto(definition) for definition in response.definitions ] + return results diff --git a/campaigns/client/v1/mock_data/__init__.py b/campaigns/client/v1/mock_data/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\mock_data\__init__.py +pass diff --git a/campaigns/client/v1/mock_data/mock_campaigns.py b/campaigns/client/v1/mock_data/mock_campaigns.py @@ -0,0 +1,255 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\mock_data\mock_campaigns.py +import datetime +from campaigns.client.v1.data_model.campaign import CampaignID +from eveProto import split_precision +from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetResponse, GetAllUnredeemedRewardsResponse, GetParticipantStatsResponse +from eveProto.generated.eve_public.campaign.contributionmethod.configuration_pb2 import Configuration, ParameterConfiguration, MatcherParameterConfiguration +from eveProto.generated.eve_public.campaign.contributionmethod.definition.definition_pb2 import Identifier as ContributionMethodIdentifier +from eveProto.generated.eve_public.campaign.campaign_pb2 import Attributes as CampaignAttributes, Issuer as CampaignIssuer, Version, STATE_ACTIVE as CAMPAIGN_STATE_ACTIVE, Stats as CampaignStats +from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier, Attributes as ObjectiveAttributes, Issuer as ObjectiveIssuer, STATE_ACTIVE as OBJECTIVE_STATE_ACTIVE, Rewards, Stats as ObjectiveStats, ParticipantStats, PARTICIPANT_STATE_COMMITTED +from eveProto.generated.eve_public.career.career_pb2 import CAREER_INDUSTRIALIST +from eveProto.generated.eve_public.character.character_pb2 import Identifier as CharacterIdentifier +from eveProto.generated.eve_public.corporation.corporation_pb2 import Identifier as CorporationIdentifier +from eveProto.generated.eve_public.isk.isk_pb2 import Currency as IskCurrency +from eveProto.generated.eve_public.isk.wallet.wallet_pb2 import Owner +from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier +from eveProto.generated.eve_public.loyaltypoints.loyaltypoints_pb2 import Currency as LpCurrency +from eveProto.generated.eve_public.semanticversion_pb2 import Specification +from eveProto.generated.eve_public.standing.standing_pb2 import GainPercent, Source +from eveProto.generated.eve_public.ui.annotation_pb2 import Annotation +from eveProto.generated.eve_public.ui.contenttag_pb2 import Identifier as ContentTagIdentifier +from eveProto.generated.eve_public.ui.icon_pb2 import Identifier as IconIdentifier +from eveProto.generated.eve_public.ui.image_pb2 import Identifier as ImageIdentifier, Attributes as ImageAttributes +from google.protobuf.timestamp_pb2 import Timestamp +from uuid import UUID +CAMPAIGN_ID2 = CampaignID(UUID('12bf6798-f8d5-4933-ad43-89df6b63d2c6')) +CAMPAIGN_ID3 = CampaignID(UUID('b03d11ba-3b0c-4ff3-9c77-0e3a580575eb')) +CAMPAIGN_ID4 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f35')) +CAMPAIGN_ID5 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f36')) +OBJECTIVE_1_CAMP_2 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f87') +OBJECTIVE_1_CAMP_3 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f88') +OBJECTIVE_1_CAMP_4 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f89') +OBJECTIVE_1_CAMP_5 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f90') +CORP_CALDARI_PROVISIONS = 1000009 +CORP_24TH_IMPERIAL = 1000179 +CORP_BRUTOR_TRIBE = 1000049 +CORP_ALGINTAL_CORE = 1000215 +CORP_CBD = 1000002 +ids_to_strings = {100: 'Amarr Campaign', + 101: u"++Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", + 102: u"Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", + 103: u'In every victory, the light of Amarr shines eternal. It is done.<br>By righteous fire and steadfast faith, the divine order stands unbroken.<br>Your deeds are recorded in glory before God and Empire.', + 104: u'The faithful have faltered.<br>The enemies of Amarr yet draw breath, and the light dims in their shadow.<br>Repent, regroup, and return in greater devotion.', + 105: 'One Fine Amarr Objective', + 106: 'Mine for me peon. - Amarr', + 110: '<b>To:</b> Capsuleers operating under Imperial charter', + 111: 'Faction Briefing', + 112: 'If you deliver success, the Basilica works will complete at the start of the next season, and commerce conducted within the Amarr hub will be rewarded with reduced transactional burdens for a full following season.', + 113: 'Understand this clearly: we are not offering comfort. We are purchasing results. If you fail to meet the campaign threshold, the Basilica project will stall in public view - unfinished scaffolding and a record of wasted effort will remain for all to see. Worse: disorder will spread. Raiders will test Imperial space. Pirates will grow bolder.', + 114: 'Complete the objectives. Secure the lanes. Prove that commerce belongs under order - not chaos.', + 200: 'Minmatar Campaign', + 201: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", + 202: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", + 203: u'Through coordinated strikes, relentless pressure, and unwavering support across New Eden, the Minmatar Campaign has achieved its goal. The chains of the past have been challenged not by words, but by action and the Republic stands stronger for it. ', + 204: u'Capsuleers of the Minmatar Republic, the campaign has come to an end but its goal remains unfulfilled.<br>Despite the courage and sacrifices made across the warzone, the Republic was unable to secure the resources and strategic leverage required to complete the Skarkon Liberation Array. Without these critical means, construction has been halted, and the projects future is now uncertain.', + 205: 'One Fine Minmatar Objective', + 206: 'Mine for me peon. - Minmatar', + 210: "<b>To:</b> Capsuleers answering the Republic's call", + 211: 'Faction Briefing', + 212: 'If you succeed, Arzad II will be renamed Starkman Prime at the start of next season and Arzad and Ezzara systems will return under Republic sovereignty. A Republic station will be established in Arzad, because presence is not a speech, it is infrastructure.<br><br>And in the season that follows, we will commit resources to rebuild what was denied: planetary industry output will surge in selected systems, and convoys will begin moving through Great Wildlands. Additional reconstruction measures may be authorized to accelerate recovery and reward those who supplied it.', + 213: 'If you fail, the Empire will answer in the language it prefers: monuments that erase truth and reprisals that punish defiance. The name will not return, and the counter-narrative will harden into a permanent scar.', + 214: 'Bring the name back. Or watch it be buried again.', + 300: u'Gallente Campaign', + 301: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', + 302: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', + 303: u'Freedom prevails.<br>Through your courage, oppression has been pushed back and the Federation stands stronger.<br>The voices of the people endure. ', + 304: u'Liberty has suffered a setback.<br>Tyranny advances where vigilance failed.<br>The Federation will not forget - nor surrender.', + 305: 'One Fine Gallente Objective', + 306: 'Mine for me peon. - Gallente', + 310: '<b>To:</b> Capsuleers operating under Federal authorization', + 311: 'Faction Briefing', + 312: 'If you succeed, the Federation will permanently remove a portion of our systems from Factional Warfare exposure - our sovereignty remains intact, but the burden of constant defense will be reduced. The immediate season that follows will also see expanded drone swarm activity cluster-wide, alongside sanctioned prototype field trials for drone-adjacent technologies.', + 313: 'If you fail, infestation zones will become a permanent scar. Breaches will intensify next season, including in areas that should never have been threatened - and industry will be forced to adapt under pressure rather than policy.', + 314: 'Contain the drones. Strip them for knowledge. Then let the rest burn.', + 400: u'Caldari Campaign', + 401: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", + 402: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", + 403: u'Objective achieved.<br>State assets secured and opposition neutralized.<br>Your performance meets corporate expectations. ', + 404: u'Objectives incomplete.<br>State interests remain exposed to risk.<br>Correct deficiencies. Return with results.', + 405: 'One Fine Caldari Objective', + 406: 'Mine for me peon. - Caldari', + 410: '<b>To:</b> Capsuleers contracted for State operational objectives', + 411: 'Faction Briefing', + 412: 'If you succeed, a new stargate corridor will be activated at the start of next season, connecting our warzone space directly to Syndicate by building gates in [system A] and [system B]. The region will be refit for activity and rapid movement as soon the next season starts. In addition, the corporations presently flying under the Intaki Syndicate banner will be dissolved into a new alignment: under State authority.', + 413: 'If you fail, the corridor will remain a half-built monument to wasted effort - visible, inert, and contested. And the same Syndicate corporations will be claimed instead by the Federation. Expect the region to destabilize: hostile operations will proliferate, and Serpentis opportunists will exploit the vacuum.', + 414: 'This is a corridor. Build it - or watch someone else own it.'} + +def _get_campaign2(): + response = GetResponse() + start_time = Timestamp() + start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + expiry_time = Timestamp() + expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) + attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=100), subtitle=LocalizationIdentifier(sequential=101), goal_description=LocalizationIdentifier(sequential=102), success_description=LocalizationIdentifier(sequential=103), failure_description=LocalizationIdentifier(sequential=104), icon=IconIdentifier(name='eveicon.amarr_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_amarr.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/amarr_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='amarr'), + Annotation(key='theme_pack', value='amarr_campaign'), + Annotation(key='campaign_set', value='mil_camp_season1'), + Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_amarr.png'), + Annotation(key='ui_idx', value='1'), + Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), + Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), + Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), + Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), + Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), + Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), + Annotation(key='goal_description_header', value='111'), + Annotation(key='goal_description_subheader', value='110'), + Annotation(key='goal_description_success', value='112'), + Annotation(key='goal_description_failure', value='113'), + Annotation(key='goal_description_final_words', value='114')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) + start_date_two = Timestamp() + start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) + restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + units, nanos = split_precision(0.001) + available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=105), subtitle=LocalizationIdentifier(sequential=106), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL))))))] + response.attributes.MergeFrom(attributes) + response.available_objectives.extend(available_objectives) + response.restricted_objectives.extend(restricted_objectives) + return response + + +def _get_campaign3(): + response = GetResponse() + start_time = Timestamp() + start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + expiry_time = Timestamp() + expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) + attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=200), subtitle=LocalizationIdentifier(sequential=201), goal_description=LocalizationIdentifier(sequential=202), success_description=LocalizationIdentifier(sequential=203), failure_description=LocalizationIdentifier(sequential=204), icon=IconIdentifier(name='eveicon.minmatar_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_minmatar.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/minmatar_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='minmatar'), + Annotation(key='theme_pack', value='minmatar_campaign'), + Annotation(key='campaign_set', value='mil_camp_season1'), + Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_minmatar.png'), + Annotation(key='ui_idx', value='4'), + Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), + Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), + Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), + Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), + Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), + Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), + Annotation(key='goal_description_header', value='211'), + Annotation(key='goal_description_subheader', value='210'), + Annotation(key='goal_description_success', value='212'), + Annotation(key='goal_description_failure', value='213'), + Annotation(key='goal_description_final_words', value='214')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) + start_date_two = Timestamp() + start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) + restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + units, nanos = split_precision(0.001) + available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=205), subtitle=LocalizationIdentifier(sequential=206), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE))))))] + response.attributes.MergeFrom(attributes) + response.available_objectives.extend(available_objectives) + response.restricted_objectives.extend(restricted_objectives) + return response + + +def _get_campaign4(): + response = GetResponse() + start_time = Timestamp() + start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + expiry_time = Timestamp() + expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) + attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=300), subtitle=LocalizationIdentifier(sequential=301), goal_description=LocalizationIdentifier(sequential=302), success_description=LocalizationIdentifier(sequential=303), failure_description=LocalizationIdentifier(sequential=303), icon=IconIdentifier(name='eveicon.gallente_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_gallente.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/gallente_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='gallente'), + Annotation(key='theme_pack', value='gallente_campaign'), + Annotation(key='campaign_set', value='mil_camp_season1'), + Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_gallente.png'), + Annotation(key='ui_idx', value='3'), + Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), + Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), + Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), + Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), + Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), + Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), + Annotation(key='goal_description_header', value='311'), + Annotation(key='goal_description_subheader', value='310'), + Annotation(key='goal_description_success', value='312'), + Annotation(key='goal_description_failure', value='313'), + Annotation(key='goal_description_final_words', value='314')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) + start_date_two = Timestamp() + start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) + restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + units, nanos = split_precision(0.001) + available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=305), subtitle=LocalizationIdentifier(sequential=306), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE))))))] + response.attributes.MergeFrom(attributes) + response.available_objectives.extend(available_objectives) + response.restricted_objectives.extend(restricted_objectives) + return response + + +def _get_campaign5(): + response = GetResponse() + start_time = Timestamp() + start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + expiry_time = Timestamp() + expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) + attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=400), subtitle=LocalizationIdentifier(sequential=401), goal_description=LocalizationIdentifier(sequential=402), success_description=LocalizationIdentifier(sequential=403), failure_description=LocalizationIdentifier(sequential=404), icon=IconIdentifier(name='eveicon.caldari_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/caldari_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='caldari'), + Annotation(key='theme_pack', value='caldari_campaign'), + Annotation(key='campaign_set', value='mil_camp_season1'), + Annotation(key='ui_idx', value='2'), + Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_caldari.png'), + Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_caldari.png'), + Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), + Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), + Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), + Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), + Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), + Annotation(key='goal_description_header', value='411'), + Annotation(key='goal_description_subheader', value='410'), + Annotation(key='goal_description_success', value='412'), + Annotation(key='goal_description_failure', value='413'), + Annotation(key='goal_description_final_words', value='414')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) + start_date_two = Timestamp() + start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) + restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] + start_date_one = Timestamp() + start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) + units, nanos = split_precision(0.001) + available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=405), subtitle=LocalizationIdentifier(sequential=406), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_CBD))))))] + response.attributes.MergeFrom(attributes) + response.available_objectives.extend(available_objectives) + response.restricted_objectives.extend(restricted_objectives) + return response + + +campaigns = {CAMPAIGN_ID2: _get_campaign2(), + CAMPAIGN_ID3: _get_campaign3(), + CAMPAIGN_ID4: _get_campaign4(), + CAMPAIGN_ID5: _get_campaign5()} +campaigns_stats = {CAMPAIGN_ID2: CampaignStats(current_campaign_progress=13, total_contributors=11), + CAMPAIGN_ID3: CampaignStats(current_campaign_progress=4567, total_contributors=5), + CAMPAIGN_ID4: CampaignStats(current_campaign_progress=123, total_contributors=25), + CAMPAIGN_ID5: CampaignStats(current_campaign_progress=987, total_contributors=31)} +campaigns_objectives = {CAMPAIGN_ID2: [OBJECTIVE_1_CAMP_2], + CAMPAIGN_ID3: [OBJECTIVE_1_CAMP_3], + CAMPAIGN_ID4: [OBJECTIVE_1_CAMP_4], + CAMPAIGN_ID5: [OBJECTIVE_1_CAMP_5]} +objectives_stats = {OBJECTIVE_1_CAMP_2: ObjectiveStats(current_objective_progress=1298, committed_participants=120, total_participants=126, total_contributors=1200), + OBJECTIVE_1_CAMP_3: ObjectiveStats(current_objective_progress=1397, committed_participants=138, total_participants=1355, total_contributors=1399), + OBJECTIVE_1_CAMP_4: ObjectiveStats(current_objective_progress=1477, committed_participants=14, total_participants=140, total_contributors=145), + OBJECTIVE_1_CAMP_5: ObjectiveStats(current_objective_progress=1500, committed_participants=150, total_participants=155, total_contributors=159)} +participant_objective_stats = {CAMPAIGN_ID2: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))]), + CAMPAIGN_ID3: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=500))]), + CAMPAIGN_ID4: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1300))]), + CAMPAIGN_ID5: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))])} +unredeemed_rewards = GetAllUnredeemedRewardsResponse(objectives=[GetAllUnredeemedRewardsResponse.Objective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), isk_intervals_unredeemed=1000000, lp_intervals_unredeemed=400)], next_page=None) diff --git a/campaigns/client/v1/mock_data/mock_contributionmethods.py b/campaigns/client/v1/mock_data/mock_contributionmethods.py @@ -0,0 +1,12 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\mock_data\mock_contributionmethods.py +from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllResponse +from eveProto.generated.eve_public.campaign.contributionmethod.definition.definition_pb2 import Identifier, Attributes +from eveProto.generated.eve_public.campaign.contributionmethod.parameter_pb2 import Parameter, MatcherParameter +from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier +from eveProto.generated.eve_public.ui.icon_pb2 import Identifier as IconIdentifier +from semantic_version import SemanticVersion +id_to_strings = {0: 'Location', + 1: 'Location in Universe', + 10: 'Ore Type', + 11: 'Type of Ore'} +versioned_contribution_methods = {SemanticVersion(1, 2, 3, [], []): GetAllResponse(definitions=[GetAllResponse.Definition(definition=Identifier(name='complete_objectives')), GetAllResponse.Definition(definition=Identifier(name='mine_materials'), attributes=Attributes(parameters=[Parameter(matcher=MatcherParameter(key='location', type='location', accepted_value_types=['solarsystem', 'constellation', 'region'], title=LocalizationIdentifier(sequential=0), description=LocalizationIdentifier(sequential=1), icon=IconIdentifier(name='location'))), Parameter(matcher=MatcherParameter(key='ore', type='mineable_ore_type', accepted_value_types=['ore_type', 'ore_group'], title=LocalizationIdentifier(sequential=10), description=LocalizationIdentifier(sequential=11), icon=IconIdentifier(name='mining')))]))])} diff --git a/campaigns/client/v1/mock_data/mock_gateway.py b/campaigns/client/v1/mock_data/mock_gateway.py @@ -0,0 +1,195 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\mock_data\mock_gateway.py +import random +import uthread2 +from campaigns.client.v1.data_model.campaign import CampaignID +from campaigns.client.v1.mock_data.mock_campaigns import campaigns, participant_objective_stats, campaigns_stats, objectives_stats, unredeemed_rewards, campaigns_objectives +from campaigns.client.v1.mock_data.mock_contributionmethods import versioned_contribution_methods +from campaigns.client.qa.settings import SETTING_REQUEST_DELAY, REQUEST_DELAY_OFF, REQUEST_DELAY_ON_100MS, REQUEST_DELAY_ON_100_200_MS, SETTING_REQUEST_ERROR_RATE, REQUEST_ERROR_RATE_OFF, REQUEST_ERROR_RATE_10, REQUEST_ERROR_RATE_50, REQUEST_ERROR_RATE_80, REQUEST_ERROR_RATE_100, REQUEST_DELAY_ON_1_2_S +from eveProto.generated.eve_public.campaign.campaign_pb2 import Identifier as CampaignIdentifier +from eveProto.generated.eve_public.campaign.contributionmethod.definition.api.requests_pb2 import GetAllRequest as ContributionMethodGetAllRequest +from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetLimitsRequest, GetLimitsResponse, GetAllRequest, GetAllResponse, GetParticipantStatsResponse, GetParticipantStatsRequest, GetStatsResponse, GetStatsRequest, GetAllUnredeemedRewardsRequest, GetRequest +from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import CommitRequest, ResignRequest, RedeemRewardsRequest, GetStatsRequest as ObjectiveGetStatsRequest, GetStatsResponse as ObjectiveGetStatsResponse +from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier +from six.moves.http_client import OK, NOT_FOUND, INTERNAL_SERVER_ERROR, BAD_REQUEST, FORBIDDEN, UNAUTHORIZED +from logging import getLogger +from mock import Mock +from semantic_version import SemanticVersion +from uuid import UUID +logger = getLogger('campaigns') + +class MockCampaignsGateway(object): + + def __init__(self, message_player): + self._message_player = message_player + self._request_delay_min = 0 + self._request_delay_max = 0 + self._request_error_rate = 0 + SETTING_REQUEST_DELAY.on_change.connect(self._on_request_delay_changed) + SETTING_REQUEST_ERROR_RATE.on_change.connect(self._on_request_error_rate_changed) + + def _on_request_error_rate_changed(self, value): + if value == REQUEST_ERROR_RATE_OFF: + self._request_error_rate = 0 + elif value == REQUEST_ERROR_RATE_10: + self._request_error_rate = 0.1 + elif value == REQUEST_ERROR_RATE_50: + self._request_error_rate = 0.5 + elif value == REQUEST_ERROR_RATE_80: + self._request_error_rate = 0.8 + elif value == REQUEST_ERROR_RATE_100: + self._request_error_rate = 1 + else: + raise ValueError('Invalid request error rate value') + logger.info('Mock Gateway: Error Rate set to %s percent', self._request_error_rate * 100) + + def _on_request_delay_changed(self, value): + if value == REQUEST_DELAY_OFF: + self._request_delay_min = 0 + self._request_delay_max = 0 + elif value == REQUEST_DELAY_ON_100MS: + self._request_delay_min = 0 + self._request_delay_max = 0.1 + elif value == REQUEST_DELAY_ON_100_200_MS: + self._request_delay_min = 0.1 + self._request_delay_max = 0.2 + elif value == REQUEST_DELAY_ON_1_2_S: + self._request_delay_min = 1 + self._request_delay_max = 2 + else: + raise ValueError('Invalid request delay value') + logger.info('Mock Gateway: Request Delay set to %s to %s seconds', self._request_delay_min, self._request_delay_max) + + def send_blocking_character_request_and_receive_response(self, request_payload, expected_response_class, timeout_seconds, max_attempts, retry_delay_in_seconds): + delay_secs = random.uniform(self._request_delay_min, self._request_delay_max) + if delay_secs > 0: + uthread2.Sleep(delay_secs) + should_error = False + if random.random() < self._request_error_rate: + should_error = True + if isinstance(request_payload, GetLimitsRequest): + return get_limits_response(should_error) + if isinstance(request_payload, GetAllRequest): + return get_all_response(should_error) + if isinstance(request_payload, GetParticipantStatsRequest): + return get_participant_stats_response(request_payload.campaign, should_error) + if isinstance(request_payload, GetStatsRequest): + return get_stats_response(request_payload.campaign, should_error) + if isinstance(request_payload, GetRequest): + return get_response(request_payload.campaign, request_payload.version, should_error) + if isinstance(request_payload, GetAllUnredeemedRewardsRequest): + return get_unredeemed_rewards_response(request_payload.page, should_error) + if isinstance(request_payload, ObjectiveGetStatsRequest): + return get_objective_stats_response(request_payload.objective, should_error) + if isinstance(request_payload, CommitRequest) or isinstance(request_payload, ResignRequest) or isinstance(request_payload, RedeemRewardsRequest): + if should_error: + return create_error_response([NOT_FOUND, + BAD_REQUEST, + INTERNAL_SERVER_ERROR, + FORBIDDEN, + UNAUTHORIZED]) + return (create_response_primitive(OK), None) + if isinstance(request_payload, ContributionMethodGetAllRequest): + return contribution_method_get_all_response(request_payload.version, should_error) + raise NotImplementedError('Attempted to use MockCampaignsGateway for request that has not been mocked: %s' % request_payload) + + def _notify_of_mock_use(self): + self._message_player('Using mocked data for Campaigns') + logger.info('Using mocked data for Campaigns') + + +def create_error_response(error_list): + error_code = random.choice(error_list) + return (create_response_primitive(error_code), None) + + +def create_response_primitive(status_code): + response_primitive = Mock() + response_primitive.status_code = status_code + return response_primitive + + +def get_limits_response(should_error): + if should_error: + return create_error_response([INTERNAL_SERVER_ERROR]) + response_payload = GetLimitsResponse(max_active_objectives_per_participant=10) + return (create_response_primitive(OK), response_payload) + + +def get_all_response(should_error): + if should_error: + return create_error_response([INTERNAL_SERVER_ERROR]) + response_payload = GetAllResponse() + campaign_ids = [ id.uuid for id in campaigns.iterkeys() ] + for uuid in campaign_ids: + identifier = CampaignIdentifier(uuid=uuid.bytes) + response_payload.campaigns.append(identifier) + + return (create_response_primitive(OK), response_payload) + + +def get_participant_stats_response(campaign_id, should_error): + if should_error: + return create_error_response([NOT_FOUND, + BAD_REQUEST, + INTERNAL_SERVER_ERROR, + UNAUTHORIZED]) + response_payload = participant_objective_stats.get(CampaignID.from_proto(campaign_id), None) + if response_payload is None: + return (create_response_primitive(NOT_FOUND), GetParticipantStatsResponse()) + return (create_response_primitive(OK), response_payload) + + +def get_stats_response(campaign_id, should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + response_payload = GetStatsResponse() + campaign_id = CampaignID.from_proto(campaign_id) + campaign_stats = campaigns_stats.get(campaign_id, None) + if campaign_stats is None: + return (create_response_primitive(NOT_FOUND), response_payload) + response_payload.campaign_stats.MergeFrom(campaign_stats) + campaign_objectives = campaigns_objectives.get(campaign_id, []) + for uuid in campaign_objectives: + objective = objectives_stats[uuid] + response_payload.objective_stats.append(GetStatsResponse.ObjectiveStats(objective=ObjectiveIdentifier(uuid=uuid.bytes), stats=objective)) + + return (create_response_primitive(OK), response_payload) + + +def get_response(campaign_id, version, should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + response_payload = campaigns.get(CampaignID.from_proto(campaign_id), None) + if response_payload is None: + return (create_response_primitive(NOT_FOUND), response_payload) + return (create_response_primitive(OK), response_payload) + + +def get_unredeemed_rewards_response(page, should_error): + if should_error: + return create_error_response([BAD_REQUEST, INTERNAL_SERVER_ERROR, UNAUTHORIZED]) + response_payload = unredeemed_rewards + return (create_response_primitive(OK), response_payload) + + +def get_objective_stats_response(objective_id_list, should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + id_list = [ UUID(bytes=objective_id.uuid) for objective_id in objective_id_list ] + response_payload = ObjectiveGetStatsResponse() + for uuid in id_list: + objective = objectives_stats.get(uuid, None) + if objective is not None: + response_payload.objective_stats.append(ObjectiveGetStatsResponse.ObjectiveStats(objective=ObjectiveIdentifier(uuid=uuid.bytes), stats=objective)) + + return (create_response_primitive(OK), response_payload) + + +def contribution_method_get_all_response(version, should_error): + if should_error: + return create_error_response([BAD_REQUEST, INTERNAL_SERVER_ERROR]) + semantic_version = SemanticVersion.from_proto(version) + response_payload = versioned_contribution_methods.get(semantic_version, None) + if response_payload is None: + return (create_response_primitive(NOT_FOUND), response_payload) + return (create_response_primitive(OK), response_payload) diff --git a/campaigns/client/v1/repository.py b/campaigns/client/v1/repository.py @@ -0,0 +1,512 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\repository.py +from datetime import timedelta +import campaigns.client.v1.data_model.flatbuffer.contribution_method_serialization as fb_contributionmethod +import campaigns.client.v1.signals as campaigns_signals +import uthread +import uthread2 +from caching import Memoize +from caching.client.storage.disk_storage import BinaryDiskStorage +from caching.memoize import MemoizeWithLock +from caching.client.ttl_cache import TTLCache, NO_CACHED_DATA +from campaigns.client.v1.data_model.campaign import CampaignState +from campaigns.client.v1.data_model.flatbuffer.campaigndefinition_serialization import serialize_campaigns_list_to_flatbuffer, deserialize_flatbuffer_to_campaigns_list +from campaigns.client.v1.data_model.objective import ParticipantState, ObjectiveID +from campaigns.client.errors import CampaignRequestError +from campaigns.client.feature_flags import campaigns_polling_frequency +from campaigns.client.v1.listeners.campaign_listener import CampaignListener +from campaigns.client.v1.listeners.objective_listener import ObjectiveListener +from campaigns.client.v1.messengers.campaigns_messenger import CampaignsMessenger +from campaigns.client.v1.messengers.contribution_methods_messenger import CampaignContributionMethodsMessenger +from campaigns.client.util import get_viewed_objective_ids +from collections import defaultdict +from six.moves.http_client import NOT_MODIFIED +from jobboard.client import ProviderType +from jobboard.client.job_board_signals import on_data_primed +from locks import RWLock +from locks.singleFlight import single_flight +if False: + from typing import Dict +import logging +logger = logging.getLogger('campaigns') +RECONCILE_NOTICE_WAIT_SECONDS = 60 +CAMPAIGNS_TTL_MINS = 15 +STATS_TTL_MINS = 5 +STATS_TTL = timedelta(minutes=STATS_TTL_MINS) +CAMPAIGNS_TTL = timedelta(minutes=CAMPAIGNS_TTL_MINS) +NO_PARTICIPATION_STATS = 'NO_PARTICIPATION_STATS' + +class CampaignsRepository(object): + _campaigns_messenger = None + _contribution_methods_messenger = None + _campaign_listener = None + _objective_listener = None + __notifyevents__ = ['OnCharacterSessionChanged'] + + def __init__(self, public_gateway, service_manager, mock_public_gateway, mock_setting, campaigns_messenger_class, contribution_methods_messenger_class, campaign_listener_class, objective_listener_class, do_data_prime = True): + self._public_gateway = public_gateway + self._service_manager = service_manager + self._mock_public_gateway = mock_public_gateway + self._mock_setting = mock_setting + self._poll_stats_tasklet = None + self._campaigns_messenger = campaigns_messenger_class(public_gateway) + self._contribution_methods_messenger = contribution_methods_messenger_class(public_gateway) + self._campaign_listener = campaign_listener_class(public_gateway) + self._objective_listener = objective_listener_class(public_gateway) + self._campaigns_cache = TTLCache(CAMPAIGNS_TTL) + self._campaigns_cache_disk_storage = BinaryDiskStorage('campaign_definitions') + self._campaign_stats_cache = TTLCache(STATS_TTL) + self._objective_stats_cache = TTLCache(STATS_TTL) + self._participant_stats_cache = TTLCache(CAMPAIGNS_TTL) + self._contribution_methods_cache = {} + self._contribution_methods_disk_storage = BinaryDiskStorage('campaign_versioned_contribution_methods') + if do_data_prime: + self._prime_caches_from_disk() + self._has_reconciled_caches = False + self._reconciliation_lock = RWLock() + self._prime_cache_thread = None + self._update_gateway() + self._service_manager.RegisterNotify(self) + self._connect_signals() + + def __del__(self): + self._service_manager.UnregisterNotify(self) + self._disconnect_signals() + + def OnCharacterSessionChanged(self, oldCharacterID, newCharacterID): + logger.info('OnCharacterSessionChanged') + self._participant_stats_cache.clear() + self.get_all_unredeemed_rewards.clear_memoized() + if self._has_reconciled_caches: + return + if newCharacterID is None: + self._clear_poll_stats_tasklet() + else: + self._start_polling_stats() + uthread2.start_tasklet(self._wait_to_reconcile) + + def _wait_to_reconcile(self): + logger.info('_wait_to_reconcile') + uthread2.Sleep(RECONCILE_NOTICE_WAIT_SECONDS) + if self._has_reconciled_caches: + return + with self._reconciliation_lock: + if self._has_reconciled_caches: + return + self._reconcile_caches_without_version_notice() + + def _reconcile_caches_without_version_notice(self): + logger.info('_reconcile_caches_without_version_notice') + current_campaign_ids = set(self.get_all_campaigns()) + self._reconcile_campaign_definitions(current_campaign_ids) + self._reconcile_contribution_methods() + self._has_reconciled_caches = True + + def _reconcile_campaign_definitions(self, current_ids): + logger.info('_reconcile_campaign_definitions %s', current_ids) + cached_campaign_ids = set(self._campaigns_cache.keys()) + ids_to_remove = cached_campaign_ids - current_ids + for id in ids_to_remove: + self._campaigns_cache.remove(id) + + self._update_campaign_filesystem_storage() + + def _reconcile_contribution_methods(self): + logger.info('_reconcile_contribution_methods') + campaign_semantic_versions = {campaign.version.definition_semantic_verison for campaign in self._campaigns_cache.itervalues_ignore_expiry()} + cached_semantic_versions = set(self._contribution_methods_cache.keys()) + ids_to_remove = cached_semantic_versions - campaign_semantic_versions + for id in ids_to_remove: + self._contribution_methods_cache.pop(id) + + self._update_contribution_methods_disk_cache() + + def _prime_caches_from_disk(self): + logger.info('_prime_caches_from_disk') + campaigns_flatbuffer = self._campaigns_cache_disk_storage.get() + if campaigns_flatbuffer is not None: + campaigns_list = deserialize_flatbuffer_to_campaigns_list(campaigns_flatbuffer) + for campaign in campaigns_list: + self._campaigns_cache.store(campaign.id, campaign) + self._campaigns_cache.expire(campaign.id) + + logger.info('campaigns cache: %s', self._campaigns_cache) + contribution_methods_flatbuffer = self._contribution_methods_disk_storage.get() + if contribution_methods_flatbuffer is not None: + self._contribution_methods_cache = fb_contributionmethod.deserialize_flatbuffer_to_versioned_definitions_dict(contribution_methods_flatbuffer) + logger.info('contribution methods cache: %s', self._contribution_methods_cache) + + @MemoizeWithLock(CAMPAIGNS_TTL_MINS) + def get_all_campaigns(self): + campaign_id_list = self._campaigns_messenger.get_all_request() + return campaign_id_list + + def get_data_for_all_current_campaigns(self): + campaign_id_list = self.get_all_campaigns() + all_data = {} + for campaign_id in campaign_id_list: + campaign_data = self.get_campaign(campaign_id) + if campaign_data.campaign_state == CampaignState.CANCELLED: + continue + all_data[campaign_id] = campaign_data + + return all_data + + @single_flight + def get_campaign(self, campaign_id): + campaign_data = self._campaigns_cache.get(campaign_id) + if campaign_data != NO_CACHED_DATA: + return campaign_data + version = None + expired_campaign_data = self._campaigns_cache.get_ignore_expiry(campaign_id) + if expired_campaign_data != NO_CACHED_DATA: + version = expired_campaign_data.version + result = self._campaigns_messenger.get_request(campaign_id, version) + if result == NOT_MODIFIED: + self._campaigns_cache.reset_expiration(campaign_id) + return expired_campaign_data + self._campaigns_cache.store(result.id, result) + self._update_campaign_filesystem_storage() + if version is not None: + uthread2.start_tasklet(self._emit_on_campaign_updated, campaign_id) + return result + + def _update_campaign_filesystem_storage(self): + campaigns = [ campaign for campaign in self._campaigns_cache.itervalues_ignore_expiry() if campaign != NO_CACHED_DATA ] + data = serialize_campaigns_list_to_flatbuffer(campaigns) + self._campaigns_cache_disk_storage.set(data) + + @single_flight + def get_campaign_stats(self, campaign_id): + campaign_stats = self._campaign_stats_cache.get(campaign_id) + objective_out_of_date = False + objective_stats = [] + if campaign_stats != NO_CACHED_DATA: + campaign = self.get_campaign(campaign_id) + current_objectives = campaign.current_objectives + for objective in current_objectives: + objective_stat = self._objective_stats_cache.get(objective.id) + if objective_stat == NO_CACHED_DATA: + objective_out_of_date = True + break + else: + objective_stats.append(objective_stat) + + if campaign_stats != NO_CACHED_DATA and not objective_out_of_date: + return (campaign_stats, objective_stats) + campaign_stats, objective_stats = self._campaigns_messenger.get_stats_request(campaign_id) + self._campaign_stats_cache.store(campaign_stats.id, campaign_stats) + for objective_stat in objective_stats: + self._objective_stats_cache.store(objective_stat.objective_id, objective_stat) + + return (campaign_stats, objective_stats) + + @single_flight + def get_campaign_participant_stats(self, campaign_id): + new_data_required = False + participant_stats = [] + campaign = self.get_campaign(campaign_id) + current_objectives = campaign.current_objectives + for objective in current_objectives: + participant_stat = self._participant_stats_cache.get(objective.id) + if participant_stat == NO_CACHED_DATA: + new_data_required = True + elif participant_stat != NO_PARTICIPATION_STATS: + participant_stats.append(participant_stat) + + if not new_data_required: + return participant_stats + results = self._campaigns_messenger.get_participant_stats_request(campaign_id) + stat_by_objective_id = {participant_stat.objective_id:participant_stat for participant_stat in results} + for objective in current_objectives: + if objective.id in stat_by_objective_id: + self._participant_stats_cache.store(objective.id, stat_by_objective_id[objective.id]) + else: + self._participant_stats_cache.store(objective.id, NO_PARTICIPATION_STATS) + + return results + + @MemoizeWithLock(STATS_TTL_MINS) + def get_all_unredeemed_rewards(self): + next_page_token = None + rewards_by_objective_id = defaultdict(list) + while True: + result, next_page_token = self._campaigns_messenger.get_all_unredeemed_rewards_request(next_page_token) + for r in result: + rewards_by_objective_id[r.objective_id].append(r) + + if not next_page_token: + break + + return rewards_by_objective_id + + def get_unredeemed_rewards_for_objective(self, objective_id): + return self.get_all_unredeemed_rewards().get(objective_id) + + @Memoize + def get_limits(self): + return self._campaigns_messenger.get_limits_request() + + @single_flight + def get_objective_stats(self, objective_id_list): + expired_ids = [] + cached_objective_stats = [] + for objective_id in objective_id_list: + objective_stat = self._objective_stats_cache.get(objective_id) + if objective_stat == NO_CACHED_DATA: + expired_ids.append(objective_id) + else: + cached_objective_stats.append(objective_stat) + + if len(expired_ids) == 0: + return cached_objective_stats + results_list = self._campaigns_messenger.get_objective_stats_request(expired_ids) + updated_objective_stats = set() + for objective_stat in results_list: + self._objective_stats_cache.store(objective_stat.objective_id, objective_stat) + updated_objective_stats.add(objective_stat.objective_id) + + if updated_objective_stats: + uthread2.start_tasklet(self._emit_on_campaigns_objective_stats_updated, updated_objective_stats) + cached_objective_stats.extend(results_list) + return cached_objective_stats + + def objective_stats_have_valid_cache(self, objective_id): + return self._objective_stats_cache.has_cached_data_for_key(objective_id) + + def objective_participant_stats_have_valid_cache(self, objective_id): + return self._participant_stats_cache.has_cached_data_for_key(objective_id) + + def _emit_on_campaigns_objective_stats_updated(self, updated_objective_stats): + campaigns_signals.on_campaigns_objective_stats_updated(updated_objective_stats) + + def _emit_on_campaign_updated(self, campaign_id): + logger.info('_emit_on_campaign_updated %s', campaign_id) + campaigns_signals.on_campaign_updated(campaign_id) + + @single_flight + def get_contribution_method_definitions(self, semantic_version): + if semantic_version in self._contribution_methods_cache: + return self._contribution_methods_cache[semantic_version] + definitions = self._contribution_methods_messenger.get_all_request(semantic_version) + self._contribution_methods_cache[semantic_version] = definitions + self._update_contribution_methods_disk_cache() + return definitions + + def _update_contribution_methods_disk_cache(self): + data = fb_contributionmethod.serialize_versioned_definitions_to_flatbuffer(self._contribution_methods_cache) + self._contribution_methods_disk_storage.set(data) + + def commit(self, objective_id): + self._campaigns_messenger.commit_request(objective_id) + if objective_id not in self._participant_stats_cache: + logger.warning("Committed to an objective for which we don't have any participant stats") + return + participant_stat = self._participant_stats_cache.get_ignore_expiry(objective_id) + if participant_stat == NO_PARTICIPATION_STATS: + self._participant_stats_cache.remove(objective_id) + else: + participant_stat.participant_state = ParticipantState.COMMITTED + self._participant_stats_cache.reset_expiration(objective_id) + campaigns_signals.on_commited_state_changed(objective_id) + + def resign(self, objective_id): + self._campaigns_messenger.resign_request(objective_id) + if objective_id not in self._participant_stats_cache: + logger.warning("Resigning from an objective for which we don't have any participant stats") + return + participant_stat = self._participant_stats_cache.get_ignore_expiry(objective_id) + if participant_stat == NO_PARTICIPATION_STATS: + self._participant_stats_cache.remove(objective_id) + else: + participant_stat.participant_state = ParticipantState.RESIGNED + self._participant_stats_cache.reset_expiration(objective_id) + campaigns_signals.on_commited_state_changed(objective_id) + + def redeem_rewards(self, objective_id): + try: + self._campaigns_messenger.redeem_rewards_request(objective_id) + self.get_all_unredeemed_rewards.clear_memoized() + except CampaignRequestError as e: + logger.exception('Failed to redeem rewards for objective') + campaigns_signals.on_redeem_reward_failed(objective_id) + else: + campaigns_signals.on_reward_redeemed(objective_id) + + def clear_caches(self): + self.get_all_campaigns.clear_memoized() + self.get_limits.clear_memoized() + self.get_all_unredeemed_rewards.clear_memoized() + self._campaigns_cache.clear_cache() + self._campaigns_cache_disk_storage.clear() + self._campaign_stats_cache.clear_cache() + self._objective_stats_cache.clear_cache() + self._participant_stats_cache.clear_cache() + self._contribution_methods_cache.clear() + self._contribution_methods_disk_storage.clear() + campaigns_signals.on_campaigns_cache_invalidated() + + def clear_stats_caches(self): + self._campaign_stats_cache.clear_cache() + self._objective_stats_cache.clear_cache() + self._participant_stats_cache.clear_cache() + + def clear_campaign_stats_cache(self, campaign_id): + self._campaign_stats_cache.pop(campaign_id, None) + + def _update_gateway(self, *args, **kwargs): + enabled = self._mock_setting.is_enabled() + logger.info('Mocking is enabled: %s', enabled) + if enabled: + self._campaigns_messenger.override_gateway(self._mock_public_gateway) + self._contribution_methods_messenger.override_gateway(self._mock_public_gateway) + else: + self._campaigns_messenger.override_gateway(self._public_gateway) + self._contribution_methods_messenger.override_gateway(self._public_gateway) + + def _on_campaign_started(self, campaign_id): + campaigns_signals.on_campaign_started(campaign_id) + self.get_all_campaigns.clear_memoized() + + def _on_campaign_completed(self, campaign_id): + campaigns_signals.on_campaign_completed(campaign_id) + self.get_all_campaigns.clear_memoized() + + def _on_campaign_expired(self, campaign_id): + campaigns_signals.on_campaign_expired(campaign_id) + self.get_all_campaigns.clear_memoized() + + def _on_campaigns_version(self, versions_dict): + campaigns_signals.on_campaigns_version(versions_dict) + with self._reconciliation_lock: + current_campaign_ids = set(versions_dict.keys()) + self._reconcile_campaign_definitions(current_campaign_ids) + self._reconcile_contribution_methods() + self._reconcile_campaign_versions(versions_dict) + self._has_reconciled_caches = True + + def _reconcile_campaign_versions(self, versions_dict): + logger.info('_reconcile_campaign_versions %s', versions_dict) + for campaign_id, campaign in self._campaigns_cache.iteritems(): + if campaign_id not in versions_dict: + logger.warning('Campaign ID not in version notice, this should have been reconciled already %s', campaign_id) + continue + version = versions_dict[campaign_id] + if version != campaign.version: + self._campaigns_cache.expire(campaign_id) + + def _on_objective_contributed_notice(self, objective_id, total_participant_progress): + if objective_id not in self._participant_stats_cache: + logger.warning('Received contribution notice with no participant stats for objective id %s', objective_id) + return + participant_stats = self._participant_stats_cache.get_ignore_expiry(objective_id) + if participant_stats == NO_PARTICIPATION_STATS: + logger.warning('Got unexpected NO_PARTICIPATION_STATS in cache for objective contribution %s', objective_id) + self._participant_stats_cache.remove(objective_id) + else: + participant_stats.current_participant_progress = total_participant_progress + self._participant_stats_cache.reset_expiration(objective_id) + if objective_id in self._objective_stats_cache: + self._objective_stats_cache.expire(objective_id) + self.get_all_unredeemed_rewards.clear_memoized() + campaigns_signals.on_objective_contributed_notice(objective_id, total_participant_progress) + + def _connect_signals(self): + self._mock_setting.register_to_updates(self._update_gateway) + self._campaign_listener.on_started.connect(self._on_campaign_started) + self._campaign_listener.on_completed.connect(self._on_campaign_completed) + self._campaign_listener.on_expired.connect(self._on_campaign_expired) + self._campaign_listener.on_current_versions.connect(self._on_campaigns_version) + self._objective_listener.on_contributed.connect(self._on_objective_contributed_notice) + campaigns_signals.on_campaigns_polling_frequency_changed.connect(self._on_polling_frequency_changed) + + def _disconnect_signals(self): + self._mock_setting.unregister_from_updates(self._update_gateway) + self._campaign_listener.on_started.disconnect(self._on_campaign_started) + self._campaign_listener.on_completed.disconnect(self._on_campaign_completed) + self._campaign_listener.on_expired.disconnect(self._on_campaign_expired) + self._campaign_listener.on_current_versions.disconnect(self._on_campaigns_version) + self._objective_listener.on_contributed.disconnect(self._on_objective_contributed_notice) + campaigns_signals.on_campaigns_polling_frequency_changed.disconnect(self._on_polling_frequency_changed) + + def get_campaign_objectives(self, campaign_id): + campaign_data = self.get_campaign(campaign_id) + if campaign_data.campaign_state == CampaignState.CANCELLED: + return [] + return campaign_data.current_objectives + campaign_data.future_objectives + + def get_all_campaigns_objectives(self): + all_current_objectives = [] + all_future_objectives = [] + all_campaign_ids = self.get_all_campaigns() + for campaign_id in all_campaign_ids: + campaign_data = self.get_campaign(campaign_id) + if campaign_data.campaign_state == CampaignState.CANCELLED: + continue + current_objectives = campaign_data.current_objectives + for obj in current_objectives: + all_current_objectives.append(obj) + + future_objectives = campaign_data.future_objectives + for obj in future_objectives: + all_future_objectives.append(obj) + + return all_current_objectives + all_future_objectives + + def _on_polling_frequency_changed(self, *args, **kwargs): + self._clear_poll_stats_tasklet() + self._start_polling_stats() + + def _get_polling_interval(self): + return campaigns_polling_frequency() + + def get_viewed_ids(self): + viewed_objective_ids = get_viewed_objective_ids() + return viewed_objective_ids + + def _start_polling_stats(self): + if self._poll_stats_tasklet is None: + self._poll_stats_tasklet = uthread2.start_tasklet(self._poll_stats) + + def _poll_stats(self): + while True: + frequency_sec = self._get_polling_interval() + uthread2.sleep(frequency_sec) + viewed_ids = self.get_viewed_ids() + self._request_batched_stats(viewed_ids) + + def _request_batched_stats(self, project_ids): + try: + self.get_objective_stats(project_ids) + except Exception: + logger.exception('Failed when getting objective stats') + + def _clear_poll_stats_tasklet(self): + if self._poll_stats_tasklet: + self._poll_stats_tasklet.kill() + self._poll_stats_tasklet = None + + def on_frequency_changed(self, *args, **kwargs): + self._clear_poll_stats_tasklet() + self._start_polling_stats() + + def prime_stats_for_campaign(self, campaign_id): + self.get_campaign_stats(campaign_id) + self.get_campaign_participant_stats(campaign_id) + + def prime_all_stats_for_campaign(self, campaign_id): + if campaign_id not in self.get_data_for_all_current_campaigns(): + return + self.prime_all_stats() + + def prime_all_stats(self): + if self._prime_cache_thread and self._prime_cache_thread.is_alive(): + return + self._prime_cache_thread = uthread2.StartTasklet(self._prime_all_stats) + + def _prime_all_stats(self): + all_current_campaigns_by_id = self.get_data_for_all_current_campaigns() + calls = [ (self.get_campaign_stats, (campaign_id,)) for campaign_id in all_current_campaigns_by_id.iterkeys() ] + calls += [ (self.get_campaign_participant_stats, (campaign_id,)) for campaign_id in all_current_campaigns_by_id.iterkeys() ] + if calls: + uthread.parallel(calls) + on_data_primed(ProviderType.CAMPAIGNS) diff --git a/campaigns/client/v1/signals.py b/campaigns/client/v1/signals.py @@ -0,0 +1,19 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\signals.py +from __future__ import absolute_import +from signals import Signal +on_available_campaigns_changed = Signal('campaigns.on_available_campaigns_changed') +on_campaigns_enabled_changed = Signal('campaigns.on_campaigns_enabled_changed') +on_campaign_started = Signal('campaigns.on_campaign_started') +on_campaign_completed = Signal('campaigns.on_campaign_completed') +on_campaign_expired = Signal('campaigns.on_campaign_expired') +on_campaigns_version = Signal('campaigns.on_campaigns_version') +on_objective_contributed_notice = Signal('campaigns.on_objective_contributed_notice') +on_reward_redeemed = Signal('campaigns.on_reward_redeemed') +on_redeem_reward_failed = Signal('campaigns.on_redeem_reward_failed') +on_campaigns_polling_frequency_changed = Signal('campaigns.on_campaigns_polling_frequency_changed') +on_campaigns_objective_stats_updated = Signal('campaigns.on_campaigns_objective_stats_updated') +on_campaign_animation_setting_changed = Signal('campaigns.on_campaign_animation_setting_changed') +on_commited_state_changed = Signal('campaigns.on_commited_state_changed') +on_campaign_updated = Signal('campaigns.on_campaign_updated') +on_job_provider_finished_refreshing_campaign = Signal('campaigns.on_job_provider_finished_refreshing_campaign') +on_campaigns_cache_invalidated = Signal('campaigns.on_campaigns_cache_invalidated') diff --git a/campaigns/client/v2/__init__.py b/campaigns/client/v2/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\__init__.py +pass diff --git a/campaigns/client/v2/data_model/__init__.py b/campaigns/client/v2/data_model/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\__init__.py +pass diff --git a/campaigns/client/v2/data_model/campaign.py b/campaigns/client/v2/data_model/campaign.py @@ -0,0 +1,238 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\campaign.py +from __future__ import absolute_import, division, print_function +from campaigns.client.v2.data_model.campaign_version import CampaignVersion +from campaigns.client.v2.data_model.lifecycle import LifecycleState, LifecycleTriggers, LifecycleSideEffects +from campaigns.client.v2.data_model.objective import ObjectiveID, UpcomingObjective +from campaigns.client.v2.data_model.participation import ParticipationConfiguration +from campaigns.client.v2.data_model.track import TrackDefinition, TrackID +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign.campaign_pb2 import Identifier, Namespace +from uuid import UUID + +class CampaignNamespace(object): + + def __init__(self, name): + self._name = name + + @property + def name(self): + return self._name + + @classmethod + def from_proto(cls, proto): + return cls(proto.namespace) + + def to_proto(self): + return Namespace(namespace=self._name) + + def __eq__(self, other): + if not isinstance(other, CampaignNamespace): + raise NotImplementedError + return self._name == other._name + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._name) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class CampaignID(object): + + def __init__(self, campaign_uuid): + self._campaign_uuid = campaign_uuid + + @property + def uuid(self): + return self._campaign_uuid + + @classmethod + def from_proto(cls, proto): + return cls(UUID(bytes=proto.uuid)) + + def to_proto(self): + return Identifier(uuid=self._campaign_uuid.bytes) + + def __eq__(self, other): + if not isinstance(other, CampaignID): + raise NotImplementedError + return self._campaign_uuid == other._campaign_uuid + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._campaign_uuid) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class UpcomingCampaign(object): + + def __init__(self, namespace, definition_name, ui_definition, scheduled_start_datetime): + self._namespace = namespace + self._definition_name = definition_name + self._ui_definition = ui_definition + self._scheduled_start_datetime = scheduled_start_datetime + + @classmethod + def from_proto(cls, namespace, proto): + return cls(namespace=namespace, definition_name=proto.definition_name, ui_definition=UIDefinition.from_proto(proto.ui), scheduled_start_datetime=proto.scheduled_start_time.ToDatetime()) + + @property + def namespace(self): + return self._namespace + + @property + def definition_name(self): + return self._definition_name + + @property + def ui_definition(self): + return self._ui_definition + + @property + def scheduled_start_datetime(self): + return self._scheduled_start_datetime + + def __eq__(self, other): + if not isinstance(other, UpcomingCampaign): + raise NotImplementedError + return self._namespace == other._namespace and self._definition_name == other._definition_name and self._ui_definition == other._ui_definition and self._scheduled_start_datetime == other._scheduled_start_datetime + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class CampaignStatus(object): + + def __init__(self, campaign_id, lifecycle_state, total_contributors): + self._campaign_id = campaign_id + self._lifecycle_state = lifecycle_state + self._total_contributors = total_contributors + + @property + def campaign_id(self): + return self._campaign_id + + @property + def lifecycle_state(self): + return self._lifecycle_state + + @property + def total_contributors(self): + return self._total_contributors + + @classmethod + def from_proto(cls, campaign_id, lifecycle_state, stats): + return CampaignStatus(campaign_id, lifecycle_state, stats.total_contributors) + + @classmethod + def from_status_proto(cls, campaign_id, response): + lifecycle_state = LifecycleState.from_campaign_proto(response.state) if response.HasField('state') else None + return cls.from_proto(campaign_id, lifecycle_state, response.stats) + + @classmethod + def from_get_proto(cls, campaign_id, response): + attributes = response.attributes + lifecycle_state = LifecycleState.from_campaign_proto(attributes.lifecycle_state) if attributes.HasField('lifecycle_state') else None + return cls.from_proto(campaign_id, lifecycle_state, response.stats) + + def __eq__(self, other): + if not isinstance(other, CampaignStatus): + raise NotImplementedError + return self.campaign_id == other.campaign_id and self.lifecycle_state == other.lifecycle_state and self.total_contributors == other.total_contributors + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class CampaignDefinition(object): + + def __init__(self, campaign_id, version, scheduled_start_datetime, definition_name, namespace, ui_definition, participation, lifecycle_triggers, lifecycle_side_effects, tracks, objective_ids, upcoming_objectives): + self._campaign_id = campaign_id + self._version = version + self._scheduled_start_datetime = scheduled_start_datetime + self._definition_name = definition_name + self._namespace = namespace + self._ui_definition = ui_definition + self._participation = participation + self._lifecycle_triggers = lifecycle_triggers + self._lifecycle_side_effects = lifecycle_side_effects + self._tracks = tracks + self._objective_ids = objective_ids + self._upcoming_objectives = upcoming_objectives + + @property + def campaign_id(self): + return self._campaign_id + + @property + def version(self): + return self._version + + @property + def scheduled_start_datetime(self): + return self._scheduled_start_datetime + + @property + def definition_name(self): + return self._definition_name + + @property + def namespace(self): + return self._namespace + + @property + def ui_definition(self): + return self._ui_definition + + @property + def participation(self): + return self._participation + + @property + def lifecycle_triggers(self): + return self._lifecycle_triggers + + @property + def lifecycle_side_effects(self): + return self._lifecycle_side_effects + + @property + def tracks(self): + return self._tracks + + @property + def objective_ids(self): + return self._objective_ids + + @property + def upcoming_objectives(self): + return self._upcoming_objectives + + @classmethod + def from_proto(cls, campaign_id, response): + attributes = response.attributes + return CampaignDefinition(campaign_id=campaign_id, version=CampaignVersion.from_proto(attributes.version) if attributes.HasField('version') else None, scheduled_start_datetime=attributes.scheduled_start_time.ToDatetime() if attributes.HasField('scheduled_start_time') else None, definition_name=attributes.definition_name, namespace=CampaignNamespace.from_proto(attributes.namespace), ui_definition=UIDefinition.from_proto(attributes.ui), participation=ParticipationConfiguration.from_proto(attributes.participation) if attributes.HasField('participation') else None, lifecycle_triggers=LifecycleTriggers.from_proto(attributes.lifecycle_triggers), lifecycle_side_effects=LifecycleSideEffects.from_proto(attributes.lifecycle_side_effects), tracks=[ TrackDefinition.from_proto(TrackID.from_proto(track.id), track.attributes) for track in response.tracks ], objective_ids=[ ObjectiveID.from_proto(objective) for objective in response.objectives ], upcoming_objectives=[ UpcomingObjective.from_proto(upcoming) for upcoming in response.upcoming_objectives ]) + + def __eq__(self, other): + if not isinstance(other, CampaignDefinition): + raise NotImplementedError + return self.campaign_id == other.campaign_id and self.version == other.version and self.scheduled_start_datetime == other.scheduled_start_datetime and self.definition_name == other.definition_name and self.namespace == other.namespace and self.ui_definition == other.ui_definition and self.participation == other.participation and self.lifecycle_triggers == other.lifecycle_triggers and self.lifecycle_side_effects == other.lifecycle_side_effects and self.tracks == other.tracks and self.objective_ids == other.objective_ids and self.upcoming_objectives == other.upcoming_objectives + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/campaign_parameters.py b/campaigns/client/v2/data_model/campaign_parameters.py @@ -0,0 +1,326 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\campaign_parameters.py +import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign.parameter.parameter_pb2 import Definition + +class ParameterDefinition(object): + + def __init__(self, key, ui_definition, parameter): + self._key = key + self._ui_definition = ui_definition + self._parameter = parameter + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def parameter(self): + return self._parameter + + @classmethod + def from_proto(cls, definition): + key = definition.key + ui_definition = UIDefinition.from_proto(definition.ui) + parameter_class = definition.WhichOneof('class') + if parameter_class == 'single_value': + parameter = SingleValueParameterDefinition(definition.single_value.value_type) + elif parameter_class == 'set': + parameter = SetParameterDefinition(definition.set.value_type) + elif parameter_class == 'multi_value_type_set': + values = [ value for value in definition.multi_value_type_set.accepted_value_types ] + parameter = MultiValueTypeParameterDefinition(values) + else: + raise NotImplementedError + return ParameterDefinition(key, ui_definition, parameter) + + def to_flatbuffer(self, builder): + key_offset = builder.CreateString(self.key) + ui_definition_offset = self.ui_definition.to_flatbuffer(builder) + if isinstance(self.parameter, SingleValueParameterDefinition): + value_offset = builder.CreateString(self.parameter.value_type) + definitions_fb.ParameterStartValuesVector(builder, 1) + builder.PrependUOffsetTRelative(value_offset) + values_offset = builder.EndVector() + values_type = definitions_fb.ParameterType.SingleValue + elif isinstance(self.parameter, MultiValueTypeParameterDefinition): + value_offsets = [ builder.CreateString(value_type) for value_type in self.parameter.value_types ] + definitions_fb.ParameterStartValuesVector(builder, len(value_offsets)) + for value_offset in reversed(value_offsets): + builder.PrependUOffsetTRelative(value_offset) + + values_offset = builder.EndVector() + values_type = definitions_fb.ParameterType.MultiValue + elif isinstance(self.parameter, SetParameterDefinition): + value_offset = builder.CreateString(self.parameter.value_type) + definitions_fb.ParameterStartValuesVector(builder, 1) + builder.PrependUOffsetTRelative(value_offset) + values_offset = builder.EndVector() + values_type = definitions_fb.ParameterType.Set + else: + raise NotImplementedError + definitions_fb.ParameterStart(builder) + definitions_fb.ParameterAddKey(builder, key_offset) + definitions_fb.ParameterAddUi(builder, ui_definition_offset) + definitions_fb.ParameterAddType(builder, values_type) + definitions_fb.ParameterAddValues(builder, values_offset) + return definitions_fb.ParameterEnd(builder) + + @classmethod + def from_flatbuffer(cls, parameter_fb): + key = parameter_fb.Key() + ui = UIDefinition.from_flatbuffer(parameter_fb.Ui()) + parameter_type = parameter_fb.Type() + if parameter_type == definitions_fb.ParameterType.SingleValue: + value = parameter_fb.Values(0) + parameter = SingleValueParameterDefinition(value.decode('utf-8')) + elif parameter_type == definitions_fb.ParameterType.Set: + value = parameter_fb.Values(0) + parameter = SetParameterDefinition(value.decode('utf-8')) + elif parameter_type == definitions_fb.ParameterType.MultiValue: + values = [] + for index in range(parameter_fb.ValuesLength()): + value = parameter_fb.Values(index) + values.append(value.decode('utf-8')) + + parameter = MultiValueTypeParameterDefinition(values) + else: + raise ValueError('Unsupported parameter type') + return ParameterDefinition(key, ui, parameter) + + def __eq__(self, other): + if not isinstance(other, ParameterDefinition): + raise NotImplementedError + return self.key == other.key and self.ui_definition == other.ui_definition and self.parameter == other.parameter + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class SingleValueParameterDefinition(object): + + def __init__(self, value_type): + self._value_type = value_type + + @property + def value_type(self): + return self._value_type + + def __eq__(self, other): + if not isinstance(other, SingleValueParameterDefinition): + raise NotImplementedError + return self.value_type == other.value_type + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class SetParameterDefinition(object): + + def __init__(self, value_type): + self._value_type = value_type + + @property + def value_type(self): + return self._value_type + + def __eq__(self, other): + if not isinstance(other, SetParameterDefinition): + raise NotImplementedError + return self.value_type == other.value_type + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class MultiValueTypeParameterDefinition(object): + + def __init__(self, value_types): + self._value_types = value_types + + @property + def value_types(self): + return self._value_types + + def __eq__(self, other): + if not isinstance(other, MultiValueTypeParameterDefinition): + raise NotImplementedError + return self.value_types == other.value_types + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ParameterConfiguration(object): + + def __init__(self, key, parameter): + self._key = key + self._parameter = parameter + + @property + def key(self): + return self._key + + @property + def parameter(self): + return self._parameter + + @classmethod + def from_proto(cls, configuration): + parameter_class = configuration.WhichOneof('class') + if parameter_class == 'single_value': + parameter = SingleValueParameterConfiguration.from_proto(configuration.single_value) + elif parameter_class == 'set_value': + parameter = SetParameterConfiguration.from_proto(configuration.set_value) + elif parameter_class == 'multi_value_type_set_value': + parameter = MultiValueTypeParameterConfiguration.from_proto(configuration.multi_value_type_set_value) + else: + raise NotImplementedError('Unknown parameter configuration class: %s' % parameter_class) + return ParameterConfiguration(configuration.key, parameter) + + def __eq__(self, other): + if not isinstance(other, ParameterConfiguration): + raise NotImplementedError + return self.key == other.key and self.parameter == other.parameter + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ParameterValue(object): + + def __init__(self, literal = None, wildcard = False): + self._literal = literal + self._wildcard = wildcard + + @property + def literal(self): + return self._literal + + @property + def wildcard(self): + return self._wildcard + + @classmethod + def from_proto(cls, value): + value_class = value.WhichOneof('value') + if value_class == 'literal': + return ParameterValue(literal=value.literal) + if value_class == 'wildcard': + return ParameterValue(wildcard=value.wildcard) + raise NotImplementedError('Unknown parameter value class: %s' % value_class) + + def __eq__(self, other): + if not isinstance(other, ParameterValue): + raise NotImplementedError + return self.literal == other.literal and self.wildcard == other.wildcard + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class SingleValueParameterConfiguration(object): + + def __init__(self, value_type, value): + self._value_type = value_type + self._value = value + + @property + def value_type(self): + return self._value_type + + @property + def value(self): + return self._value + + @classmethod + def from_proto(cls, single_value): + return SingleValueParameterConfiguration(single_value.value_type, ParameterValue.from_proto(single_value.value)) + + def __eq__(self, other): + if not isinstance(other, SingleValueParameterConfiguration): + raise NotImplementedError + return self.value_type == other.value_type and self.value == other.value + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class SetParameterConfiguration(object): + + def __init__(self, value_type, values): + self._value_type = value_type + self._values = values + + @property + def value_type(self): + return self._value_type + + @property + def values(self): + return self._values + + @classmethod + def from_proto(cls, set_value): + return SetParameterConfiguration(set_value.value_type, [ ParameterValue.from_proto(value) for value in set_value.values ]) + + def __eq__(self, other): + if not isinstance(other, SetParameterConfiguration): + raise NotImplementedError + return self.value_type == other.value_type and self.values == other.values + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class MultiValueTypeParameterConfiguration(object): + + def __init__(self, value_sets): + self._value_sets = value_sets + + @property + def value_sets(self): + return self._value_sets + + @classmethod + def from_proto(cls, multi_value_type_set_value): + return MultiValueTypeParameterConfiguration([ SetParameterConfiguration.from_proto(value_set) for value_set in multi_value_type_set_value.values ]) + + def __eq__(self, other): + if not isinstance(other, MultiValueTypeParameterConfiguration): + raise NotImplementedError + return self.value_sets == other.value_sets + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/campaign_version.py b/campaigns/client/v2/data_model/campaign_version.py @@ -0,0 +1,44 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\campaign_version.py +from __future__ import absolute_import, division, print_function +from eveProto.generated.eve_public.campaign.campaign_pb2 import Version +from semantic_version import SemanticVersion + +class CampaignVersion(object): + + def __init__(self, definition_semantic_version, etag, definition_schema_major_version): + self._definition_semantic_version = definition_semantic_version + self._etag = etag + self._definition_schema_major_version = definition_schema_major_version + + @property + def definition_semantic_version(self): + return self._definition_semantic_version + + @property + def etag(self): + return self._etag + + @property + def definition_schema_major_version(self): + return self._definition_schema_major_version + + @classmethod + def from_proto(cls, version): + return CampaignVersion(SemanticVersion.from_proto(version.definition_version), version.etag, version.definition_schema_major_version) + + def to_proto(self): + return Version(definition_version=self._definition_semantic_version.to_eve_public_proto(), etag=self._etag, definition_schema_major_version=self._definition_schema_major_version) + + def __eq__(self, other): + if not isinstance(other, CampaignVersion): + raise NotImplementedError + return self.definition_semantic_version == other.definition_semantic_version and self.etag == other.etag and self.definition_schema_major_version == other.definition_schema_major_version + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self._etag, self._definition_schema_major_version)) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/event_matcher_definition.py b/campaigns/client/v2/data_model/event_matcher_definition.py @@ -0,0 +1,66 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\event_matcher_definition.py +from __future__ import absolute_import, division, print_function +import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb +from campaigns.client.v2.data_model.campaign_parameters import ParameterDefinition +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign.trigger.eventmatch.definition.api.requests_pb2 import GetAllResponse +from flatbuffers.vector_utils import write_vector_of_offsets + +class EventMatcherDefinition(object): + + def __init__(self, event_matcher_name, ui_definition, parameters): + self._name = event_matcher_name + self._ui_definition = ui_definition + self._parameters = parameters + + @property + def name(self): + return self._name + + @property + def ui_definition(self): + return self._ui_definition + + @property + def parameters(self): + return self._parameters + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, definition): + name = definition.definition.name + ui_definition = UIDefinition.from_proto(definition.attributes.ui) + parameters = [ ParameterDefinition.from_proto(parameter) for parameter in definition.attributes.parameters ] + return EventMatcherDefinition(name, ui_definition, parameters) + + def to_flatbuffer(self, builder): + name_offset = builder.CreateString(self.name) + ui_definition_offset = self.ui_definition.to_flatbuffer(builder) + parameter_offsets = [ parameter.to_flatbuffer(builder) for parameter in self.parameters ] + parameter_offset = write_vector_of_offsets(builder, definitions_fb.DefinitionStartParametersVector, parameter_offsets) + definitions_fb.DefinitionStart(builder) + definitions_fb.DefinitionAddName(builder, name_offset) + definitions_fb.DefinitionAddUi(builder, ui_definition_offset) + definitions_fb.DefinitionAddParameters(builder, parameter_offset) + return definitions_fb.DefinitionsEnd(builder) + + @classmethod + def from_flatbuffer(cls, definition_fb): + name = definition_fb.Name().decode('utf-8') + ui = UIDefinition.from_flatbuffer(definition_fb.Ui()) + parameters = [] + for index in range(definition_fb.ParametersLength()): + parameter = definition_fb.Parameters(index) + parameters.append(ParameterDefinition.from_flatbuffer(parameter)) + + return EventMatcherDefinition(name, ui, parameters) + + def __eq__(self, other): + if not isinstance(other, EventMatcherDefinition): + raise NotImplementedError + return self.name == other.name and self.ui_definition == other.ui_definition and self.parameters == other.parameters + + def __ne__(self, other): + return not self.__eq__(other) diff --git a/campaigns/client/v2/data_model/flatbuffer/__init__.py b/campaigns/client/v2/data_model/flatbuffer/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\flatbuffer\__init__.py +pass diff --git a/campaigns/client/v2/data_model/flatbuffer/event_matcher_definitions_generated.py b/campaigns/client/v2/data_model/flatbuffer/event_matcher_definitions_generated.py @@ -0,0 +1,1072 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\flatbuffer\event_matcher_definitions_generated.py +import flatbuffers +from flatbuffers.compat import import_numpy +np = import_numpy() + +class FormattedMessageParameterValue(object): + NONE = 0 + String = 1 + UInt = 2 + Int = 3 + Double = 4 + Timestamp = 5 + Duration = 6 + + +class ParameterType(object): + SingleValue = 0 + Set = 1 + MultiValue = 2 + + +class StringParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = StringParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsStringParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def StringParameterValueStart(builder): + builder.StartObject(1) + + +def StringParameterValueAddValue(builder, value): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) + + +def StringParameterValueEnd(builder): + return builder.EndObject() + + +class UIntParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UIntParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsUIntParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + +def UIntParameterValueStart(builder): + builder.StartObject(1) + + +def UIntParameterValueAddValue(builder, value): + builder.PrependUint64Slot(0, value, 0) + + +def UIntParameterValueEnd(builder): + return builder.EndObject() + + +class IntParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = IntParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsIntParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + +def IntParameterValueStart(builder): + builder.StartObject(1) + + +def IntParameterValueAddValue(builder, value): + builder.PrependInt32Slot(0, value, 0) + + +def IntParameterValueEnd(builder): + return builder.EndObject() + + +class DoubleParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DoubleParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDoubleParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float64Flags, o + self._tab.Pos) + return 0.0 + + +def DoubleParameterValueStart(builder): + builder.StartObject(1) + + +def DoubleParameterValueAddValue(builder, value): + builder.PrependFloat64Slot(0, value, 0.0) + + +def DoubleParameterValueEnd(builder): + return builder.EndObject() + + +class TimestampParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TimestampParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsTimestampParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Seconds(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos) + return 0 + + def Nanos(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos) + return 0 + + +def TimestampParameterValueStart(builder): + builder.StartObject(2) + + +def TimestampParameterValueAddSeconds(builder, seconds): + builder.PrependInt64Slot(0, seconds, 0) + + +def TimestampParameterValueAddNanos(builder, nanos): + builder.PrependInt64Slot(1, nanos, 0) + + +def TimestampParameterValueEnd(builder): + return builder.EndObject() + + +class DurationParameterValue(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DurationParameterValue() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDurationParameterValue(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Seconds(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos) + return 0 + + def Nanos(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos) + return 0 + + +def DurationParameterValueStart(builder): + builder.StartObject(2) + + +def DurationParameterValueAddSeconds(builder, seconds): + builder.PrependInt64Slot(0, seconds, 0) + + +def DurationParameterValueAddNanos(builder, nanos): + builder.PrependInt64Slot(1, nanos, 0) + + +def DurationParameterValueEnd(builder): + return builder.EndObject() + + +class FormattedMessageParameter(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FormattedMessageParameter() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsFormattedMessageParameter(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def ValueType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + + +def FormattedMessageParameterStart(builder): + builder.StartObject(3) + + +def FormattedMessageParameterAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def FormattedMessageParameterAddValueType(builder, valueType): + builder.PrependUint8Slot(1, valueType, 0) + + +def FormattedMessageParameterAddValue(builder, value): + builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) + + +def FormattedMessageParameterEnd(builder): + return builder.EndObject() + + +class FormattedMessage(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FormattedMessage() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsFormattedMessage(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Id(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Parameters(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = FormattedMessageParameter() + obj.Init(self._tab.Bytes, x) + return obj + + def ParametersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ParametersIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def FormattedMessageStart(builder): + builder.StartObject(2) + + +def FormattedMessageAddId(builder, id): + builder.PrependUint64Slot(0, id, 0) + + +def FormattedMessageAddParameters(builder, parameters): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(parameters), 0) + + +def FormattedMessageStartParametersVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def FormattedMessageCreateParametersVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def FormattedMessageEnd(builder): + return builder.EndObject() + + +class Text(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Text() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsText(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Message(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = FormattedMessage() + obj.Init(self._tab.Bytes, x) + return obj + + +def TextStart(builder): + builder.StartObject(2) + + +def TextAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def TextAddMessage(builder, message): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(message), 0) + + +def TextEnd(builder): + return builder.EndObject() + + +class Resource(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Resource() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsResource(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Path(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def ResourceStart(builder): + builder.StartObject(2) + + +def ResourceAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def ResourceAddPath(builder, path): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(path), 0) + + +def ResourceEnd(builder): + return builder.EndObject() + + +class Annotation(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Annotation() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsAnnotation(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + +def AnnotationStart(builder): + builder.StartObject(2) + + +def AnnotationAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def AnnotationAddValue(builder, value): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) + + +def AnnotationEnd(builder): + return builder.EndObject() + + +class UIDefinition(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UIDefinition() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsUIDefinition(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Texts(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Text() + obj.Init(self._tab.Bytes, x) + return obj + + def TextsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def TextsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + return o == 0 + + def Resources(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Resource() + obj.Init(self._tab.Bytes, x) + return obj + + def ResourcesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ResourcesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + def Annotations(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Annotation() + obj.Init(self._tab.Bytes, x) + return obj + + def AnnotationsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def AnnotationsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + return o == 0 + + def Tags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def TagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def TagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + +def UIDefinitionStart(builder): + builder.StartObject(4) + + +def UIDefinitionAddTexts(builder, texts): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(texts), 0) + + +def UIDefinitionStartTextsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def UIDefinitionCreateTextsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def UIDefinitionAddResources(builder, resources): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(resources), 0) + + +def UIDefinitionStartResourcesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def UIDefinitionCreateResourcesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def UIDefinitionAddAnnotations(builder, annotations): + builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(annotations), 0) + + +def UIDefinitionStartAnnotationsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def UIDefinitionCreateAnnotationsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def UIDefinitionAddTags(builder, tags): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(tags), 0) + + +def UIDefinitionStartTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def UIDefinitionCreateTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def UIDefinitionEnd(builder): + return builder.EndObject() + + +class Parameter(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Parameter() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsParameter(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Ui(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = UIDefinition() + obj.Init(self._tab.Bytes, x) + return obj + + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + def Values(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def ValuesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ValuesIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + +def ParameterStart(builder): + builder.StartObject(4) + + +def ParameterAddKey(builder, key): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) + + +def ParameterAddUi(builder, ui): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(ui), 0) + + +def ParameterAddType(builder, type): + builder.PrependInt8Slot(2, type, 0) + + +def ParameterAddValues(builder, values): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(values), 0) + + +def ParameterStartValuesVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def ParameterCreateValuesVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def ParameterEnd(builder): + return builder.EndObject() + + +class Definition(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Definition() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDefinition(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + + def Ui(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = UIDefinition() + obj.Init(self._tab.Bytes, x) + return obj + + def Parameters(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Parameter() + obj.Init(self._tab.Bytes, x) + return obj + + def ParametersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def ParametersIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + return o == 0 + + +def DefinitionStart(builder): + builder.StartObject(3) + + +def DefinitionAddName(builder, name): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + + +def DefinitionAddUi(builder, ui): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(ui), 0) + + +def DefinitionAddParameters(builder, parameters): + builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(parameters), 0) + + +def DefinitionStartParametersVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def DefinitionCreateParametersVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def DefinitionEnd(builder): + return builder.EndObject() + + +class SemanticVersion(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SemanticVersion() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsSemanticVersion(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Major(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Minor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def Patch(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + def PrereleaseTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def PrereleaseTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def PrereleaseTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + return o == 0 + + def BuildTags(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return '' + + def BuildTagsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def BuildTagsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + return o == 0 + + +def SemanticVersionStart(builder): + builder.StartObject(5) + + +def SemanticVersionAddMajor(builder, major): + builder.PrependUint64Slot(0, major, 0) + + +def SemanticVersionAddMinor(builder, minor): + builder.PrependUint64Slot(1, minor, 0) + + +def SemanticVersionAddPatch(builder, patch): + builder.PrependUint64Slot(2, patch, 0) + + +def SemanticVersionAddPrereleaseTags(builder, prereleaseTags): + builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(prereleaseTags), 0) + + +def SemanticVersionStartPrereleaseTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreatePrereleaseTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionAddBuildTags(builder, buildTags): + builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buildTags), 0) + + +def SemanticVersionStartBuildTagsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def SemanticVersionCreateBuildTagsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def SemanticVersionEnd(builder): + return builder.EndObject() + + +class Definitions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Definitions() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsDefinitions(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + obj = SemanticVersion() + obj.Init(self._tab.Bytes, x) + return obj + + def Methods(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Definition() + obj.Init(self._tab.Bytes, x) + return obj + + def MethodsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def MethodsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + return o == 0 + + +def DefinitionsStart(builder): + builder.StartObject(2) + + +def DefinitionsAddVersion(builder, version): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(version), 0) + + +def DefinitionsAddMethods(builder, methods): + builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(methods), 0) + + +def DefinitionsStartMethodsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def DefinitionsCreateMethodsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def DefinitionsEnd(builder): + return builder.EndObject() + + +class VersionedDefinitions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAs(cls, buf, offset = 0): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = VersionedDefinitions() + x.Init(buf, n + offset) + return x + + @classmethod + def GetRootAsVersionedDefinitions(cls, buf, offset = 0): + return cls.GetRootAs(buf, offset) + + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + def Definitions(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + obj = Definitions() + obj.Init(self._tab.Bytes, x) + return obj + + def DefinitionsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + def DefinitionsIsNone(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + return o == 0 + + +def VersionedDefinitionsStart(builder): + builder.StartObject(1) + + +def VersionedDefinitionsAddDefinitions(builder, definitions): + builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(definitions), 0) + + +def VersionedDefinitionsStartDefinitionsVector(builder, numElems): + return builder.StartVector(4, numElems, 4) + + +def VersionedDefinitionsCreateDefinitionsVector(builder, data): + return builder.CreateVectorOfTables(data) + + +def VersionedDefinitionsEnd(builder): + return builder.EndObject() diff --git a/campaigns/client/v2/data_model/flatbuffer/event_matcher_definitions_serialization.py b/campaigns/client/v2/data_model/flatbuffer/event_matcher_definitions_serialization.py @@ -0,0 +1,90 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\flatbuffer\event_matcher_definitions_serialization.py +import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb +from campaigns.client.v2.data_model.event_matcher_definition import EventMatcherDefinition +from flatbuffers import Builder +from flatbuffers.vector_utils import write_vector_of_offsets +from semantic_version import SemanticVersion + +def serialize_versioned_definitions_to_flatbuffer(version_definition_dict): + builder = Builder() + versioned_definition_offsets = _serialize_versioned_definitions_to_list(builder, version_definition_dict) + versioned_definitions_offset = write_vector_of_offsets(builder, definitions_fb.VersionedDefinitionsStartDefinitionsVector, versioned_definition_offsets) + definitions_fb.VersionedDefinitionsStart(builder) + definitions_fb.VersionedDefinitionsAddDefinitions(builder, versioned_definitions_offset) + versioned_definitions_fb = definitions_fb.VersionedDefinitionsEnd(builder) + builder.Finish(versioned_definitions_fb) + return builder.Output() + + +def _serialize_versioned_definitions_to_list(builder, version_definition_dict): + offsets = [] + for version, definitions in version_definition_dict.items(): + version_offset = _serialize_semantic_version(builder, version) + definition_offsets = [] + for definition in definitions: + definition_offsets.append(definition.to_flatbuffer(builder)) + + definitions_offset = write_vector_of_offsets(builder, definitions_fb.DefinitionsStartMethodsVector, definition_offsets) + definitions_fb.DefinitionsStart(builder) + definitions_fb.DefinitionsAddVersion(builder, version_offset) + definitions_fb.DefinitionsAddMethods(builder, definitions_offset) + offsets.append(definitions_fb.DefinitionsEnd(builder)) + + return offsets + + +def _deserialize_version_and_definitions_list(versioned_definitions_fb): + version = _deserialize_semantic_version(versioned_definitions_fb.Version()) + definitions = [] + for index in range(versioned_definitions_fb.MethodsLength()): + definition = versioned_definitions_fb.Methods(index) + definitions.append(EventMatcherDefinition.from_flatbuffer(definition)) + + return (version, definitions) + + +def deserialize_flatbuffer_to_versioned_definitions_dict(flatbuffer_data): + versioned_definitions_dict = {} + versioned_definitions = definitions_fb.VersionedDefinitions.GetRootAs(flatbuffer_data) + for i in range(versioned_definitions.DefinitionsLength()): + semantic_version, definitions = _deserialize_version_and_definitions_list(versioned_definitions.Definitions(i)) + versioned_definitions_dict[semantic_version] = definitions + + return versioned_definitions_dict + + +def _serialize_semantic_version(builder, version): + prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] + build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] + definitions_fb.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) + for prerelease_string in reversed(prerelease_strings): + builder.PrependUOffsetTRelative(prerelease_string) + + prerelease_offset = builder.EndVector() + definitions_fb.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) + for build_string in reversed(build_strings): + builder.PrependUOffsetTRelative(build_string) + + build_offset = builder.EndVector() + definitions_fb.SemanticVersionStart(builder) + definitions_fb.SemanticVersionAddMajor(builder, version.major) + definitions_fb.SemanticVersionAddMinor(builder, version.minor) + definitions_fb.SemanticVersionAddPatch(builder, version.patch) + definitions_fb.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) + definitions_fb.SemanticVersionAddBuildTags(builder, build_offset) + return definitions_fb.SemanticVersionEnd(builder) + + +def _deserialize_semantic_version(version_flatbuffer): + major = version_flatbuffer.Major() + minor = version_flatbuffer.Minor() + patch = version_flatbuffer.Patch() + prerelease_tags = [] + for i in range(version_flatbuffer.PrereleaseTagsLength()): + prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) + + build_tags = [] + for i in range(version_flatbuffer.BuildTagsLength()): + build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) + + return SemanticVersion(major, minor, patch, prerelease_tags, build_tags) diff --git a/campaigns/client/v2/data_model/lifecycle.py b/campaigns/client/v2/data_model/lifecycle.py @@ -0,0 +1,239 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\lifecycle.py +from campaigns.client.v2.data_model.side_effect import SideEffectGroup +from campaigns.client.v2.data_model.trigger import lifecycle_trigger_from_proto +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign import campaign_pb2 +from eveProto.generated.eve_public.campaign.objective import objective_pb2 +from eveProto.generated.eve_public.campaign.track import track_pb2 + +class LifecycleStateType(object): + UNSPECIFIED = 'unspecified' + STARTED = 'started' + ACTIVE = 'active' + COMPLETED = 'completed' + FAILED = 'failed' + EXPIRED = 'expired' + CANCELLED = 'cancelled' + TARGET_REACHED = 'target_reached' + STOPPED = 'stopped' + + +CAMPAIGN_STATE_BY_PROTO = {campaign_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED, + campaign_pb2.STATE_STARTED: LifecycleStateType.STARTED, + campaign_pb2.STATE_ACTIVE: LifecycleStateType.ACTIVE, + campaign_pb2.STATE_COMPLETED: LifecycleStateType.COMPLETED, + campaign_pb2.STATE_FAILED: LifecycleStateType.FAILED, + campaign_pb2.STATE_EXPIRED: LifecycleStateType.EXPIRED, + campaign_pb2.STATE_CANCELLED: LifecycleStateType.CANCELLED} +OBJECTIVE_STATE_BY_PROTO = {objective_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED, + objective_pb2.STATE_STARTED: LifecycleStateType.STARTED, + objective_pb2.STATE_ACTIVE: LifecycleStateType.ACTIVE, + objective_pb2.STATE_COMPLETED: LifecycleStateType.COMPLETED, + objective_pb2.STATE_FAILED: LifecycleStateType.FAILED, + objective_pb2.STATE_EXPIRED: LifecycleStateType.EXPIRED, + objective_pb2.STATE_CANCELLED: LifecycleStateType.CANCELLED} +TRACK_STATE_BY_PROTO = {track_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED, + track_pb2.STATE_STARTED: LifecycleStateType.STARTED, + track_pb2.STATE_TARGET_REACHED: LifecycleStateType.TARGET_REACHED, + track_pb2.STATE_STOPPED: LifecycleStateType.STOPPED} + +class TriggeredByCause(object): + UNSPECIFIED = 'unspecified' + SCHEDULED = 'scheduled' + LIFECYCLE_TRIGGER = 'lifecycle_trigger' + ADMINISTRATIVE_ACTION = 'administrative_action' + PARENT_STATE = 'parent_state' + TARGET_PROGRESS_REACHED = 'target_progress_reached' + + +_CAUSE_BY_ONEOF = {'unspecified': TriggeredByCause.UNSPECIFIED, + 'scheduled': TriggeredByCause.SCHEDULED, + 'lifecycle_trigger': TriggeredByCause.LIFECYCLE_TRIGGER, + 'administrative_action': TriggeredByCause.ADMINISTRATIVE_ACTION, + 'parent_state': TriggeredByCause.PARENT_STATE, + 'target_progress_reached': TriggeredByCause.TARGET_PROGRESS_REACHED} +TRIGGER_PHASE_START = 'start' +TRIGGER_PHASE_COMPLETE = 'complete' +TRIGGER_PHASE_FAIL = 'fail' +TRIGGER_PHASE_STOP = 'stop' +SIDE_EFFECT_PHASE_ON_STARTED = 'on_started' +SIDE_EFFECT_PHASE_ON_COMPLETED = 'on_completed' +SIDE_EFFECT_PHASE_ON_FAILED = 'on_failed' +SIDE_EFFECT_PHASE_ON_CANCELLED = 'on_cancelled' +SIDE_EFFECT_PHASE_ON_STOPPED = 'on_stopped' + +class TriggeredBy(object): + + def __init__(self, cause, lifecycle_trigger_key): + self._cause = cause + self._lifecycle_trigger_key = lifecycle_trigger_key + + @property + def cause(self): + return self._cause + + @property + def lifecycle_trigger_key(self): + return self._lifecycle_trigger_key + + @classmethod + def from_proto(cls, triggered_by): + cause_class = triggered_by.WhichOneof('cause') + if cause_class is not None and cause_class not in _CAUSE_BY_ONEOF: + raise NotImplementedError('Unknown lifecycle state cause: %s' % cause_class) + key = triggered_by.lifecycle_trigger.key if cause_class == 'lifecycle_trigger' else None + return TriggeredBy(_CAUSE_BY_ONEOF.get(cause_class, TriggeredByCause.UNSPECIFIED), key) + + def __eq__(self, other): + if not isinstance(other, TriggeredBy): + raise NotImplementedError + return self.cause == other.cause and self.lifecycle_trigger_key == other.lifecycle_trigger_key + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class LifecycleState(object): + + def __init__(self, state, transition_datetime, triggered_by): + self._state = state + self._transition_datetime = transition_datetime + self._triggered_by = triggered_by + + @property + def state(self): + return self._state + + @property + def transition_datetime(self): + return self._transition_datetime + + @property + def triggered_by(self): + return self._triggered_by + + @classmethod + def from_proto(cls, lifecycle_state, state_by_proto): + if lifecycle_state.state not in state_by_proto: + raise NotImplementedError('Unknown lifecycle state: %s' % lifecycle_state.state) + transition_datetime = None + if lifecycle_state.HasField('transition_time'): + transition_datetime = lifecycle_state.transition_time.ToDatetime() + return LifecycleState(state_by_proto[lifecycle_state.state], transition_datetime, TriggeredBy.from_proto(lifecycle_state.triggered_by)) + + @classmethod + def from_campaign_proto(cls, lifecycle_state): + return cls.from_proto(lifecycle_state, CAMPAIGN_STATE_BY_PROTO) + + @classmethod + def from_objective_proto(cls, lifecycle_state): + return cls.from_proto(lifecycle_state, OBJECTIVE_STATE_BY_PROTO) + + @classmethod + def from_track_proto(cls, lifecycle_state): + return cls.from_proto(lifecycle_state, TRACK_STATE_BY_PROTO) + + def __eq__(self, other): + if not isinstance(other, LifecycleState): + raise NotImplementedError + return self.state == other.state and self.transition_datetime == other.transition_datetime and self.triggered_by == other.triggered_by + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class LifecycleTriggerEntry(object): + + def __init__(self, key, trigger, ui_definition): + self._key = key + self._trigger = trigger + self._ui_definition = ui_definition + + @property + def key(self): + return self._key + + @property + def trigger(self): + return self._trigger + + @property + def ui_definition(self): + return self._ui_definition + + @classmethod + def from_proto(cls, entry): + return LifecycleTriggerEntry(entry.key, lifecycle_trigger_from_proto(entry.trigger), UIDefinition.from_proto(entry.ui)) + + def __eq__(self, other): + if not isinstance(other, LifecycleTriggerEntry): + raise NotImplementedError + return self.key == other.key and self.trigger == other.trigger and self.ui_definition == other.ui_definition + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class LifecycleTriggers(object): + + def __init__(self, entries_by_phase): + self._entries_by_phase = entries_by_phase + + @property + def entries_by_phase(self): + return self._entries_by_phase + + def get(self, phase): + return self._entries_by_phase.get(phase, []) + + @classmethod + def from_proto(cls, lifecycle_triggers): + return LifecycleTriggers({field.name:[ LifecycleTriggerEntry.from_proto(entry) for entry in getattr(lifecycle_triggers, field.name) ] for field in lifecycle_triggers.DESCRIPTOR.fields}) + + def __eq__(self, other): + if not isinstance(other, LifecycleTriggers): + raise NotImplementedError + return self.entries_by_phase == other.entries_by_phase + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class LifecycleSideEffects(object): + + def __init__(self, groups_by_phase): + self._groups_by_phase = groups_by_phase + + @property + def groups_by_phase(self): + return self._groups_by_phase + + def get(self, phase): + return self._groups_by_phase.get(phase) + + @classmethod + def from_proto(cls, lifecycle_side_effects): + return LifecycleSideEffects({field.name:SideEffectGroup.from_proto(getattr(lifecycle_side_effects, field.name)) for field in lifecycle_side_effects.DESCRIPTOR.fields if lifecycle_side_effects.HasField(field.name)}) + + def __eq__(self, other): + if not isinstance(other, LifecycleSideEffects): + raise NotImplementedError + return self.groups_by_phase == other.groups_by_phase + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/objective.py b/campaigns/client/v2/data_model/objective.py @@ -0,0 +1,304 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\objective.py +from __future__ import absolute_import, division, print_function +from campaigns.client.v2.data_model.campaign_version import CampaignVersion +from campaigns.client.v2.data_model.campaign_parameters import ParameterDefinition, ParameterConfiguration +from campaigns.client.v2.data_model.lifecycle import LifecycleState, LifecycleTriggers, LifecycleSideEffects +from campaigns.client.v2.data_model.participation import ParticipationConfiguration +from campaigns.client.v2.data_model.track import TrackDefinition, TrackID +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign.objective import objective_pb2 +from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier +from uuid import UUID + +class CommitmentState(object): + UNSPECIFIED = 'unspecified' + COMMITTED = 'committed' + RESIGNED = 'resigned' + + +COMMITMENT_STATE_BY_PROTO = {objective_pb2.COMMITMENT_STATE_UNSPECIFIED: CommitmentState.UNSPECIFIED, + objective_pb2.COMMITMENT_STATE_COMMITTED: CommitmentState.COMMITTED, + objective_pb2.COMMITMENT_STATE_RESIGNED: CommitmentState.RESIGNED} + +class ObjectiveID(object): + + def __init__(self, objective_uuid): + self._objective_uuid = objective_uuid + + @property + def uuid(self): + return self._objective_uuid + + @classmethod + def from_proto(cls, proto): + return cls(UUID(bytes=proto.uuid)) + + def to_proto(self): + return Identifier(uuid=self._objective_uuid.bytes) + + def __eq__(self, other): + if not isinstance(other, ObjectiveID): + raise NotImplementedError + return self._objective_uuid == other._objective_uuid + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._objective_uuid) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class UpcomingObjective(object): + + def __init__(self, key, ui_definition, lifecycle_triggers): + self._key = key + self._ui_definition = ui_definition + self._lifecycle_triggers = lifecycle_triggers + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def lifecycle_triggers(self): + return self._lifecycle_triggers + + @classmethod + def from_proto(cls, upcoming): + return UpcomingObjective(upcoming.key, UIDefinition.from_proto(upcoming.ui), LifecycleTriggers.from_proto(upcoming.lifecycle_triggers)) + + def __eq__(self, other): + if not isinstance(other, UpcomingObjective): + raise NotImplementedError + return self.key == other.key and self.ui_definition == other.ui_definition and self.lifecycle_triggers == other.lifecycle_triggers + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ObjectiveParameter(object): + + def __init__(self, definition, configuration): + self._definition = definition + self._configuration = configuration + + @property + def definition(self): + return self._definition + + @property + def configuration(self): + return self._configuration + + @classmethod + def from_proto(cls, parameter): + definition = None + if parameter.HasField('definition'): + definition = ParameterDefinition.from_proto(parameter.definition) + configuration = None + if parameter.HasField('configuration'): + configuration = ParameterConfiguration.from_proto(parameter.configuration) + return ObjectiveParameter(definition, configuration) + + def __eq__(self, other): + if not isinstance(other, ObjectiveParameter): + raise NotImplementedError + return self.definition == other.definition and self.configuration == other.configuration + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ObjectiveDefinition(object): + + def __init__(self, objective_id, key, ui_definition, participation, parameters, lifecycle_triggers, lifecycle_side_effects, tracks, campaign_version): + self._objective_id = objective_id + self._key = key + self._ui_definition = ui_definition + self._participation = participation + self._parameters = parameters + self._lifecycle_triggers = lifecycle_triggers + self._lifecycle_side_effects = lifecycle_side_effects + self._tracks = tracks + self._campaign_version = campaign_version + + @property + def objective_id(self): + return self._objective_id + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def participation(self): + return self._participation + + @property + def parameters(self): + return self._parameters + + @property + def lifecycle_triggers(self): + return self._lifecycle_triggers + + @property + def lifecycle_side_effects(self): + return self._lifecycle_side_effects + + @property + def tracks(self): + return self._tracks + + @property + def campaign_version(self): + return self._campaign_version + + @classmethod + def from_proto(cls, objective_id, response): + attributes = response.attributes + return ObjectiveDefinition(objective_id=objective_id, key=attributes.key, ui_definition=UIDefinition.from_proto(attributes.ui), participation=ParticipationConfiguration.from_proto(attributes.participation) if attributes.HasField('participation') else None, parameters=[ ObjectiveParameter.from_proto(parameter) for parameter in attributes.parameters ], lifecycle_triggers=LifecycleTriggers.from_proto(attributes.lifecycle_triggers), lifecycle_side_effects=LifecycleSideEffects.from_proto(attributes.lifecycle_side_effects), tracks=[ TrackDefinition.from_proto(TrackID.from_proto(track.id), track.attributes) for track in response.tracks ], campaign_version=CampaignVersion.from_proto(response.version) if response.HasField('version') else None) + + def __eq__(self, other): + if not isinstance(other, ObjectiveDefinition): + raise NotImplementedError + return self.objective_id == other.objective_id and self.key == other.key and self.ui_definition == other.ui_definition and self.participation == other.participation and self.parameters == other.parameters and self.lifecycle_triggers == other.lifecycle_triggers and self.lifecycle_side_effects == other.lifecycle_side_effects and self.tracks == other.tracks and self.campaign_version == other.campaign_version + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class CommitmentStats(object): + + def __init__(self, committed_participants, total_participants): + self._committed_participants = committed_participants + self._total_participants = total_participants + + @property + def committed_participants(self): + return self._committed_participants + + @property + def total_participants(self): + return self._total_participants + + @classmethod + def from_proto(cls, commitment_stats): + return CommitmentStats(commitment_stats.committed_participants, commitment_stats.total_participants) + + def __eq__(self, other): + if not isinstance(other, CommitmentStats): + raise NotImplementedError + return self.committed_participants == other.committed_participants and self.total_participants == other.total_participants + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ObjectiveStatus(object): + + def __init__(self, objective_id, lifecycle_state, total_contributors, commitment_stats): + self._objective_id = objective_id + self._lifecycle_state = lifecycle_state + self._total_contributors = total_contributors + self._commitment_stats = commitment_stats + + @property + def objective_id(self): + return self._objective_id + + @property + def lifecycle_state(self): + return self._lifecycle_state + + @property + def total_contributors(self): + return self._total_contributors + + @property + def commitment_stats(self): + return self._commitment_stats + + @classmethod + def from_proto(cls, objective_id, lifecycle_state, stats): + commitment = stats.WhichOneof('commitment') + if commitment == 'commitment_stats': + commitment_stats = CommitmentStats.from_proto(stats.commitment_stats) + elif commitment == 'no_commitment': + commitment_stats = None + else: + raise NotImplementedError('Unknown objective commitment stats: %s' % commitment) + return ObjectiveStatus(objective_id, lifecycle_state, stats.total_contributors, commitment_stats) + + @classmethod + def from_status_proto(cls, objective_id, response): + lifecycle_state = LifecycleState.from_objective_proto(response.state) if response.HasField('state') else None + return cls.from_proto(objective_id, lifecycle_state, response.stats) + + def __eq__(self, other): + if not isinstance(other, ObjectiveStatus): + raise NotImplementedError + return self.objective_id == other.objective_id and self.lifecycle_state == other.lifecycle_state and self.total_contributors == other.total_contributors and self.commitment_stats == other.commitment_stats + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ObjectiveParticipantStats(object): + + def __init__(self, commitment_state): + self._commitment_state = commitment_state + + @property + def commitment_state(self): + return self._commitment_state + + @classmethod + def from_proto(cls, response): + commitment = response.WhichOneof('commitment') + if commitment == 'commitment_state': + if response.commitment_state not in COMMITMENT_STATE_BY_PROTO: + raise NotImplementedError('Unknown commitment state: %s' % response.commitment_state) + commitment_state = COMMITMENT_STATE_BY_PROTO[response.commitment_state] + elif commitment == 'no_commitment': + commitment_state = None + else: + raise NotImplementedError('Unknown objective participant commitment: %s' % commitment) + return ObjectiveParticipantStats(commitment_state) + + def __eq__(self, other): + if not isinstance(other, ObjectiveParticipantStats): + raise NotImplementedError + return self.commitment_state == other.commitment_state + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/participation.py b/campaigns/client/v2/data_model/participation.py @@ -0,0 +1,110 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\participation.py + + +class ParticipationConfiguration(object): + + def __init__(self, commitment_required, eligibility): + self._commitment_required = commitment_required + self._eligibility = eligibility + + @property + def commitment_required(self): + return self._commitment_required + + @property + def eligibility(self): + return self._eligibility + + @classmethod + def from_proto(cls, configuration): + eligibility_class = configuration.WhichOneof('eligibility') + if eligibility_class == 'eligibility_all': + eligibility = AllEligibility() + elif eligibility_class == 'eligibility_filter': + eligibility = FilteredEligibility.from_proto(configuration.eligibility_filter) + else: + raise NotImplementedError('Unknown participation eligibility: %s' % eligibility_class) + return ParticipationConfiguration(configuration.commitment_required, eligibility) + + def __eq__(self, other): + if not isinstance(other, ParticipationConfiguration): + raise NotImplementedError + return self.commitment_required == other.commitment_required and self.eligibility == other.eligibility + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class AllEligibility(object): + + def __eq__(self, other): + if not isinstance(other, AllEligibility): + raise NotImplementedError + return True + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s>' % self.__class__.__name__ + + +class FilteredEligibility(object): + + def __init__(self, selectors): + self._selectors = selectors + + @property + def selectors(self): + return self._selectors + + @classmethod + def from_proto(cls, eligibility_filter): + selectors = [] + for selector in eligibility_filter.selectors: + selector_class = selector.WhichOneof('selector') + if selector_class == 'faction_enlistment': + selectors.append(FactionEnlistmentSelector.from_proto(selector.faction_enlistment)) + else: + raise NotImplementedError('Unknown participation eligibility selector: %s' % selector_class) + + return FilteredEligibility(selectors) + + def __eq__(self, other): + if not isinstance(other, FilteredEligibility): + raise NotImplementedError + return self.selectors == other.selectors + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class FactionEnlistmentSelector(object): + + def __init__(self, faction_ids): + self._faction_ids = faction_ids + + @property + def faction_ids(self): + return self._faction_ids + + @classmethod + def from_proto(cls, faction_enlistment): + return FactionEnlistmentSelector([ faction.sequential for faction in faction_enlistment.factions ]) + + def __eq__(self, other): + if not isinstance(other, FactionEnlistmentSelector): + raise NotImplementedError + return self.faction_ids == other.faction_ids + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/side_effect.py b/campaigns/client/v2/data_model/side_effect.py @@ -0,0 +1,61 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\side_effect.py +from campaigns.client.v2.data_model.ui_definition import UIDefinition + +class SideEffect(object): + + def __init__(self, key, ui_definition): + self._key = key + self._ui_definition = ui_definition + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @classmethod + def from_proto(cls, configuration): + return SideEffect(configuration.key, UIDefinition.from_proto(configuration.ui)) + + def __eq__(self, other): + if not isinstance(other, SideEffect): + raise NotImplementedError + return self.key == other.key and self.ui_definition == other.ui_definition + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class SideEffectGroup(object): + + def __init__(self, side_effects, ui_definition): + self._side_effects = side_effects + self._ui_definition = ui_definition + + @property + def side_effects(self): + return self._side_effects + + @property + def ui_definition(self): + return self._ui_definition + + @classmethod + def from_proto(cls, group): + return SideEffectGroup([ SideEffect.from_proto(side_effect) for side_effect in group.side_effects ], UIDefinition.from_proto(group.ui)) + + def __eq__(self, other): + if not isinstance(other, SideEffectGroup): + raise NotImplementedError + return self.side_effects == other.side_effects and self.ui_definition == other.ui_definition + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/track.py b/campaigns/client/v2/data_model/track.py @@ -0,0 +1,284 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\track.py +from campaigns.client.v2.data_model.lifecycle import LifecycleState, LifecycleTriggers, LifecycleSideEffects +from campaigns.client.v2.data_model.side_effect import SideEffect +from campaigns.client.v2.data_model.track_contribution import contribution_from_proto +from campaigns.client.v2.data_model.track_reward import ParticipantContributionTrack +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto.generated.eve_public.campaign.track.track_pb2 import Identifier +from uuid import UUID + +class TrackID(object): + + def __init__(self, track_uuid): + self._track_uuid = track_uuid + + @property + def uuid(self): + return self._track_uuid + + @classmethod + def from_proto(cls, proto): + return cls(UUID(bytes=proto.uuid)) + + def to_proto(self): + return Identifier(uuid=self._track_uuid.bytes) + + def __eq__(self, other): + if not isinstance(other, TrackID): + raise NotImplementedError + return self._track_uuid == other._track_uuid + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self._track_uuid) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackThreshold(object): + + def __init__(self, key, value, ui_definition, side_effects): + self._key = key + self._value = value + self._ui_definition = ui_definition + self._side_effects = side_effects + + @property + def key(self): + return self._key + + @property + def value(self): + return self._value + + @property + def ui_definition(self): + return self._ui_definition + + @property + def side_effects(self): + return self._side_effects + + @classmethod + def from_proto(cls, threshold): + return TrackThreshold(key=threshold.key, value=threshold.value, ui_definition=UIDefinition.from_proto(threshold.ui), side_effects=[ SideEffect.from_proto(side_effect) for side_effect in threshold.side_effects ]) + + def __eq__(self, other): + if not isinstance(other, TrackThreshold): + raise NotImplementedError + return self.key == other.key and self.value == other.value and self.ui_definition == other.ui_definition and self.side_effects == other.side_effects + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackDefinition(object): + + def __init__(self, track_id, key, ui_definition, target_progress, participant_contribution_track, thresholds, contributions, lifecycle_triggers, lifecycle_side_effects): + self._track_id = track_id + self._key = key + self._ui_definition = ui_definition + self._target_progress = target_progress + self._participant_contribution_track = participant_contribution_track + self._thresholds = thresholds + self._contributions = contributions + self._lifecycle_triggers = lifecycle_triggers + self._lifecycle_side_effects = lifecycle_side_effects + + @property + def track_id(self): + return self._track_id + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def target_progress(self): + return self._target_progress + + @property + def participant_contribution_track(self): + return self._participant_contribution_track + + @property + def thresholds(self): + return self._thresholds + + @property + def contributions(self): + return self._contributions + + @property + def lifecycle_triggers(self): + return self._lifecycle_triggers + + @property + def lifecycle_side_effects(self): + return self._lifecycle_side_effects + + @classmethod + def from_proto(cls, track_id, attributes): + target_progress_type = attributes.WhichOneof('target_progress') + if target_progress_type == 'target_progress_value': + target_progress = attributes.target_progress_value + elif target_progress_type == 'no_target_progress': + target_progress = None + else: + raise NotImplementedError('Unknown track target progress: %s' % target_progress_type) + participant_contribution_type = attributes.WhichOneof('participant_contribution') + if participant_contribution_type == 'participant_contribution_track': + participant_contribution_track = ParticipantContributionTrack.from_proto(attributes.participant_contribution_track) + elif participant_contribution_type == 'no_participant_contribution_track': + participant_contribution_track = None + else: + raise NotImplementedError('Unknown track participant contribution: %s' % participant_contribution_type) + return TrackDefinition(track_id=track_id, key=attributes.key, ui_definition=UIDefinition.from_proto(attributes.ui), target_progress=target_progress, participant_contribution_track=participant_contribution_track, thresholds=[ TrackThreshold.from_proto(threshold) for threshold in attributes.thresholds ], contributions=[ contribution_from_proto(contribution) for contribution in attributes.contributions ], lifecycle_triggers=LifecycleTriggers.from_proto(attributes.lifecycle_triggers), lifecycle_side_effects=LifecycleSideEffects.from_proto(attributes.lifecycle_side_effects)) + + def __eq__(self, other): + if not isinstance(other, TrackDefinition): + raise NotImplementedError + return self.track_id == other.track_id and self.key == other.key and self.ui_definition == other.ui_definition and self.target_progress == other.target_progress and self.participant_contribution_track == other.participant_contribution_track and self.thresholds == other.thresholds and self.contributions == other.contributions and self.lifecycle_triggers == other.lifecycle_triggers and self.lifecycle_side_effects == other.lifecycle_side_effects + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TickingContributionStatus(object): + + def __init__(self, key, stopped, next_tick_datetime): + self._key = key + self._stopped = stopped + self._next_tick_datetime = next_tick_datetime + + @property + def key(self): + return self._key + + @property + def stopped(self): + return self._stopped + + @property + def next_tick_datetime(self): + return self._next_tick_datetime + + @classmethod + def from_proto(cls, ticking_contribution): + schedule = ticking_contribution.WhichOneof('schedule') + if schedule == 'next_tick': + return TickingContributionStatus(ticking_contribution.key, False, ticking_contribution.next_tick.ToDatetime()) + if schedule == 'stopped': + return TickingContributionStatus(ticking_contribution.key, True, None) + raise NotImplementedError('Unknown ticking contribution schedule: %s' % schedule) + + def __eq__(self, other): + if not isinstance(other, TickingContributionStatus): + raise NotImplementedError + return self.key == other.key and self.stopped == other.stopped and self.next_tick_datetime == other.next_tick_datetime + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackStatus(object): + + def __init__(self, track_id, lifecycle_state, current_progress, ticking_contributions): + self._track_id = track_id + self._lifecycle_state = lifecycle_state + self._current_progress = current_progress + self._ticking_contributions = ticking_contributions + + @property + def track_id(self): + return self._track_id + + @property + def lifecycle_state(self): + return self._lifecycle_state + + @property + def current_progress(self): + return self._current_progress + + @property + def ticking_contributions(self): + return self._ticking_contributions + + @classmethod + def from_proto(cls, track_id, lifecycle_state, stats): + return TrackStatus(track_id=track_id, lifecycle_state=lifecycle_state, current_progress=stats.current_progress, ticking_contributions=[ TickingContributionStatus.from_proto(ticking) for ticking in stats.ticking_contributions ]) + + @classmethod + def from_status_proto(cls, track): + lifecycle_state = LifecycleState.from_track_proto(track.state) if track.HasField('state') else None + return cls.from_proto(TrackID.from_proto(track.id), lifecycle_state, track.stats) + + @classmethod + def from_get_proto(cls, track): + attributes = track.attributes + lifecycle_state = LifecycleState.from_track_proto(attributes.lifecycle_state) if attributes.HasField('lifecycle_state') else None + return cls.from_proto(TrackID.from_proto(track.id), lifecycle_state, track.stats) + + def __eq__(self, other): + if not isinstance(other, TrackStatus): + raise NotImplementedError + return self.track_id == other.track_id and self.lifecycle_state == other.lifecycle_state and self.current_progress == other.current_progress and self.ticking_contributions == other.ticking_contributions + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackParticipantStats(object): + + def __init__(self, current_participant_contribution, max_participant_contribution_reached): + self._current_participant_contribution = current_participant_contribution + self._max_participant_contribution_reached = max_participant_contribution_reached + + @property + def current_participant_contribution(self): + return self._current_participant_contribution + + @property + def max_participant_contribution_reached(self): + return self._max_participant_contribution_reached + + @classmethod + def from_proto(cls, participant_stats): + status = participant_stats.WhichOneof('status') + if status == 'participant_track': + participant_track = participant_stats.participant_track + return TrackParticipantStats(participant_track.current_participant_contribution, participant_track.max_participant_contribution_reached) + if status == 'no_participant_track': + return None + raise NotImplementedError('Unknown track participant stats status: %s' % status) + + def __eq__(self, other): + if not isinstance(other, TrackParticipantStats): + raise NotImplementedError + return self.current_participant_contribution == other.current_participant_contribution and self.max_participant_contribution_reached == other.max_participant_contribution_reached + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/track_contribution.py b/campaigns/client/v2/data_model/track_contribution.py @@ -0,0 +1,179 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\track_contribution.py +from campaigns.client.v2.data_model.trigger import EventMatchTrigger, ObjectiveCompletedTrigger, ObjectiveFailedTrigger +from campaigns.client.v2.data_model.ui_definition import UIDefinition + +class TrackContribution(object): + + def __eq__(self, other): + if type(other) is not type(self): + return NotImplemented + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + result = self.__eq__(other) + if result is NotImplemented: + return result + return not result + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class EventMatchContribution(TrackContribution): + + def __init__(self, trigger, fixed_progress_value, attributed_to_participant): + self._trigger = trigger + self._fixed_progress_value = fixed_progress_value + self._attributed_to_participant = attributed_to_participant + + @property + def trigger(self): + return self._trigger + + @property + def fixed_progress_value(self): + return self._fixed_progress_value + + @property + def is_event_dependent(self): + return self._fixed_progress_value is None + + @property + def attributed_to_participant(self): + return self._attributed_to_participant + + @classmethod + def from_proto(cls, event_match): + progress_value = event_match.WhichOneof('progress_value') + if progress_value == 'fixed_value': + fixed_progress_value = event_match.fixed_value + elif progress_value == 'event_dependent': + fixed_progress_value = None + else: + raise NotImplementedError('Unknown event match progress value: %s' % progress_value) + return EventMatchContribution(trigger=EventMatchTrigger.from_proto(event_match.configuration), fixed_progress_value=fixed_progress_value, attributed_to_participant=event_match.attributed_to_participant) + + +class ObjectiveOutcomeContribution(TrackContribution): + _trigger_class = None + + def __init__(self, trigger, progress_value): + self._trigger = trigger + self._progress_value = progress_value + + @property + def trigger(self): + return self._trigger + + @property + def progress_value(self): + return self._progress_value + + @classmethod + def from_proto(cls, contribution): + return cls(cls._trigger_class.from_proto(contribution.configuration), contribution.progress_value) + + +class ObjectiveCompletedContribution(ObjectiveOutcomeContribution): + _trigger_class = ObjectiveCompletedTrigger + + +class ObjectiveFailedContribution(ObjectiveOutcomeContribution): + _trigger_class = ObjectiveFailedTrigger + + +class TickingContribution(TrackContribution): + + def __init__(self, key, ui_definition, interval, evaluations): + self._key = key + self._ui_definition = ui_definition + self._interval = interval + self._evaluations = evaluations + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def interval(self): + return self._interval + + @property + def evaluations(self): + return self._evaluations + + @classmethod + def from_proto(cls, ticking_contribution): + interval = None + if ticking_contribution.HasField('interval'): + interval = ticking_contribution.interval.ToTimedelta() + return TickingContribution(key=ticking_contribution.key, ui_definition=UIDefinition.from_proto(ticking_contribution.ui), interval=interval, evaluations=[ ticking_evaluation_from_proto(evaluation) for evaluation in ticking_contribution.evaluations ]) + + +class TickingEvaluation(object): + + def __init__(self, key, ui_definition, value): + self._key = key + self._ui_definition = ui_definition + self._value = value + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def value(self): + return self._value + + def __eq__(self, other): + if type(other) is not type(self): + return NotImplemented + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + result = self.__eq__(other) + if result is NotImplemented: + return result + return not result + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ConstantTickingEvaluation(TickingEvaluation): + pass + + +class PerUnitTickingEvaluation(TickingEvaluation): + pass + + +def ticking_evaluation_from_proto(evaluation): + evaluation_type = evaluation.WhichOneof('evaluation') + ui_definition = UIDefinition.from_proto(evaluation.ui) + if evaluation_type == 'constant': + return ConstantTickingEvaluation(evaluation.key, ui_definition, evaluation.constant) + if evaluation_type == 'per_unit_value': + return PerUnitTickingEvaluation(evaluation.key, ui_definition, evaluation.per_unit_value) + raise NotImplementedError('Unknown ticking evaluation type: %s' % evaluation_type) + + +_CONTRIBUTION_CLASS_BY_TYPE = {'event_match': EventMatchContribution, + 'ticking_contribution': TickingContribution, + 'objective_completed': ObjectiveCompletedContribution, + 'objective_failed': ObjectiveFailedContribution} + +def contribution_from_proto(contribution): + contribution_type = contribution.WhichOneof('contribution_type') + contribution_class = _CONTRIBUTION_CLASS_BY_TYPE.get(contribution_type) + if contribution_class is None: + raise NotImplementedError('Unknown track contribution type: %s' % contribution_type) + return contribution_class.from_proto(getattr(contribution, contribution_type)) diff --git a/campaigns/client/v2/data_model/track_prediction.py b/campaigns/client/v2/data_model/track_prediction.py @@ -0,0 +1,82 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\track_prediction.py + + +class TickingContributionPrediction(object): + + def __init__(self, key, value, evaluations): + self._key = key + self._value = value + self._evaluations = evaluations + + @property + def key(self): + return self._key + + @property + def value(self): + return self._value + + @property + def evaluations(self): + return self._evaluations + + @classmethod + def from_proto(cls, contribution): + return TickingContributionPrediction(key=contribution.key, value=contribution.value, evaluations=[ evaluation_prediction_from_proto(evaluation) for evaluation in contribution.evaluations ]) + + def __eq__(self, other): + if not isinstance(other, TickingContributionPrediction): + raise NotImplementedError + return self.key == other.key and self.value == other.value and self.evaluations == other.evaluations + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class EvaluationPrediction(object): + + def __init__(self, key, value): + self._key = key + self._value = value + + @property + def key(self): + return self._key + + @property + def value(self): + return self._value + + def __eq__(self, other): + if type(other) is not type(self): + return NotImplemented + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + result = self.__eq__(other) + if result is NotImplemented: + return result + return not result + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ConstantEvaluationPrediction(EvaluationPrediction): + pass + + +class PerUnitEvaluationPrediction(EvaluationPrediction): + pass + + +def evaluation_prediction_from_proto(evaluation): + evaluation_type = evaluation.WhichOneof('evaluation') + if evaluation_type == 'constant': + return ConstantEvaluationPrediction(evaluation.key, evaluation.constant) + if evaluation_type == 'units_count': + return PerUnitEvaluationPrediction(evaluation.key, evaluation.units_count) + raise NotImplementedError('Unknown ticking evaluation prediction type: %s' % evaluation_type) diff --git a/campaigns/client/v2/data_model/track_reward.py b/campaigns/client/v2/data_model/track_reward.py @@ -0,0 +1,253 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\track_reward.py +from campaigns.client.v2.data_model.ui_definition import UIDefinition +from eveProto import get_single_value_from_split_precision_message +ISSUER_TYPE_CHARACTER = 'character' +ISSUER_TYPE_CORPORATION = 'corporation' +ISSUER_TYPE_ALLIANCE = 'alliance' +ISSUER_TYPE_FACTION = 'faction' +_ISK_ISSUER_TYPES = (ISSUER_TYPE_CHARACTER, ISSUER_TYPE_CORPORATION) +_STANDING_ISSUER_TYPES = (ISSUER_TYPE_CHARACTER, + ISSUER_TYPE_CORPORATION, + ISSUER_TYPE_ALLIANCE, + ISSUER_TYPE_FACTION) + +def _issuer_from_proto(issuer, oneof_name, allowed_types): + issuer_type = issuer.WhichOneof(oneof_name) + if issuer_type not in allowed_types: + raise NotImplementedError('Unknown reward issuer type: %s' % issuer_type) + return (issuer_type, getattr(issuer, issuer_type).sequential) + + +def _unredeemed_intervals(track_rewards, oneof_name): + unredeemed = track_rewards.WhichOneof(oneof_name) + if unredeemed == '%s_intervals_unredeemed' % oneof_name: + return getattr(track_rewards, unredeemed) + if unredeemed == 'no_%s_unredeemed' % oneof_name: + return 0 + raise NotImplementedError('Unknown unredeemed %s rewards: %s' % (oneof_name, unredeemed)) + + +class ParticipantContributionTrack(object): + + def __init__(self, ui_definition, max_total_progress, rewards): + self._ui_definition = ui_definition + self._max_total_progress = max_total_progress + self._rewards = rewards + + @property + def ui_definition(self): + return self._ui_definition + + @property + def max_total_progress(self): + return self._max_total_progress + + @property + def rewards(self): + return self._rewards + + @classmethod + def from_proto(cls, participant_contribution_track): + contribution_limit = participant_contribution_track.WhichOneof('contribution_limit') + if contribution_limit == 'max_total_progress': + max_total_progress = participant_contribution_track.max_total_progress + elif contribution_limit == 'no_contribution_limit': + max_total_progress = None + else: + raise NotImplementedError('Unknown participant contribution limit: %s' % contribution_limit) + return ParticipantContributionTrack(ui_definition=UIDefinition.from_proto(participant_contribution_track.ui), max_total_progress=max_total_progress, rewards=[ TrackReward.from_proto(reward) for reward in participant_contribution_track.rewards ]) + + def __eq__(self, other): + if not isinstance(other, ParticipantContributionTrack): + raise NotImplementedError + return self.ui_definition == other.ui_definition and self.max_total_progress == other.max_total_progress and self.rewards == other.rewards + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackReward(object): + + def __init__(self, key, ui_definition, progress_interval, reward): + self._key = key + self._ui_definition = ui_definition + self._progress_interval = progress_interval + self._reward = reward + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + @property + def progress_interval(self): + return self._progress_interval + + @property + def reward(self): + return self._reward + + @classmethod + def from_proto(cls, reward): + reward_type = reward.WhichOneof('reward_type') + if reward_type == 'isk_reward': + reward_details = IskTrackReward.from_proto(reward.isk_reward) + elif reward_type == 'lp_reward': + reward_details = LpTrackReward.from_proto(reward.lp_reward) + elif reward_type == 'standing_reward': + reward_details = StandingTrackReward.from_proto(reward.standing_reward) + else: + raise NotImplementedError('Unknown track reward type: %s' % reward_type) + return TrackReward(reward.key, UIDefinition.from_proto(reward.ui), reward.progress_interval, reward_details) + + def __eq__(self, other): + if not isinstance(other, TrackReward): + raise NotImplementedError + return self.key == other.key and self.ui_definition == other.ui_definition and self.progress_interval == other.progress_interval and self.reward == other.reward + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class IskTrackReward(object): + + def __init__(self, amount_per_interval, issuer_type, issuer_id): + self._amount_per_interval = amount_per_interval + self._issuer_type = issuer_type + self._issuer_id = issuer_id + + @property + def amount_per_interval(self): + return self._amount_per_interval + + @property + def issuer_type(self): + return self._issuer_type + + @property + def issuer_id(self): + return self._issuer_id + + @classmethod + def from_proto(cls, isk_reward): + issuer_type, issuer_id = _issuer_from_proto(isk_reward.issuer, 'owner_type', _ISK_ISSUER_TYPES) + return IskTrackReward(amount_per_interval=get_single_value_from_split_precision_message(isk_reward.amount_per_interval), issuer_type=issuer_type, issuer_id=issuer_id) + + def __eq__(self, other): + if not isinstance(other, IskTrackReward): + raise NotImplementedError + return self.amount_per_interval == other.amount_per_interval and self.issuer_type == other.issuer_type and self.issuer_id == other.issuer_id + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class LpTrackReward(object): + + def __init__(self, amount_per_interval, issuing_corporation_id): + self._amount_per_interval = amount_per_interval + self._issuing_corporation_id = issuing_corporation_id + + @property + def amount_per_interval(self): + return self._amount_per_interval + + @property + def issuing_corporation_id(self): + return self._issuing_corporation_id + + @classmethod + def from_proto(cls, lp_reward): + return LpTrackReward(amount_per_interval=lp_reward.amount_per_interval.amount, issuing_corporation_id=lp_reward.amount_per_interval.associated_corporation.sequential) + + def __eq__(self, other): + if not isinstance(other, LpTrackReward): + raise NotImplementedError + return self.amount_per_interval == other.amount_per_interval and self.issuing_corporation_id == other.issuing_corporation_id + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class StandingTrackReward(object): + + def __init__(self, gain_percent_per_interval, issuer_type, issuer_id): + self._gain_percent_per_interval = gain_percent_per_interval + self._issuer_type = issuer_type + self._issuer_id = issuer_id + + @property + def gain_percent_per_interval(self): + return self._gain_percent_per_interval + + @property + def issuer_type(self): + return self._issuer_type + + @property + def issuer_id(self): + return self._issuer_id + + @classmethod + def from_proto(cls, standing_reward): + issuer_type, issuer_id = _issuer_from_proto(standing_reward.issuer, 'source', _STANDING_ISSUER_TYPES) + return StandingTrackReward(gain_percent_per_interval=get_single_value_from_split_precision_message(standing_reward.gain_percent_per_interval), issuer_type=issuer_type, issuer_id=issuer_id) + + def __eq__(self, other): + if not isinstance(other, StandingTrackReward): + raise NotImplementedError + return self.gain_percent_per_interval == other.gain_percent_per_interval and self.issuer_type == other.issuer_type and self.issuer_id == other.issuer_id + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TrackUnredeemedRewards(object): + + def __init__(self, isk_intervals, lp_intervals): + self._isk_intervals = isk_intervals + self._lp_intervals = lp_intervals + + @property + def isk_intervals(self): + return self._isk_intervals + + @property + def lp_intervals(self): + return self._lp_intervals + + def combined_with(self, other): + return TrackUnredeemedRewards(self.isk_intervals + other.isk_intervals, self.lp_intervals + other.lp_intervals) + + @classmethod + def from_proto(cls, track_rewards): + return TrackUnredeemedRewards(_unredeemed_intervals(track_rewards, 'isk'), _unredeemed_intervals(track_rewards, 'lp')) + + def __eq__(self, other): + if not isinstance(other, TrackUnredeemedRewards): + raise NotImplementedError + return self.isk_intervals == other.isk_intervals and self.lp_intervals == other.lp_intervals + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/campaigns/client/v2/data_model/trigger.py b/campaigns/client/v2/data_model/trigger.py @@ -0,0 +1,177 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\trigger.py +from campaigns.client.v2.data_model.campaign_parameters import ParameterConfiguration +from campaigns.client.v2.data_model.ui_definition import UIDefinition + +class MaxFires(object): + + def __init__(self, unlimited, count): + self._unlimited = unlimited + self._count = count + + @property + def unlimited(self): + return self._unlimited + + @property + def count(self): + return self._count + + @classmethod + def from_proto(cls, max_fires): + setting = max_fires.WhichOneof('setting') + if setting == 'max_fires': + return MaxFires(unlimited=False, count=max_fires.max_fires) + return MaxFires(unlimited=setting == 'unlimited', count=None) + + def __eq__(self, other): + if not isinstance(other, MaxFires): + raise NotImplementedError + return self.unlimited == other.unlimited and self.count == other.count + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class TriggerConfiguration(object): + + def __init__(self, key, ui_definition): + self._key = key + self._ui_definition = ui_definition + + @property + def key(self): + return self._key + + @property + def ui_definition(self): + return self._ui_definition + + def __eq__(self, other): + if type(other) is not type(self): + return NotImplemented + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + result = self.__eq__(other) + if result is NotImplemented: + return result + return not result + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + +class ImmediateTrigger(TriggerConfiguration): + + @classmethod + def from_proto(cls, configuration): + return ImmediateTrigger(configuration.key, UIDefinition.from_proto(configuration.ui)) + + +class RelativeScheduleTrigger(TriggerConfiguration): + + def __init__(self, key, ui_definition, trigger_datetime): + super(RelativeScheduleTrigger, self).__init__(key, ui_definition) + self._trigger_datetime = trigger_datetime + + @property + def trigger_datetime(self): + return self._trigger_datetime + + @classmethod + def from_proto(cls, configuration): + trigger_datetime = None + if configuration.HasField('trigger_time'): + trigger_datetime = configuration.trigger_time.ToDatetime() + return RelativeScheduleTrigger(configuration.key, UIDefinition.from_proto(configuration.ui), trigger_datetime) + + +class EventMatchTrigger(TriggerConfiguration): + + def __init__(self, key, ui_definition, max_fires, event_matcher_name, parameters): + super(EventMatchTrigger, self).__init__(key, ui_definition) + self._max_fires = max_fires + self._event_matcher_name = event_matcher_name + self._parameters = parameters + + @property + def max_fires(self): + return self._max_fires + + @property + def event_matcher_name(self): + return self._event_matcher_name + + @property + def parameters(self): + return self._parameters + + @classmethod + def from_proto(cls, configuration): + return EventMatchTrigger(key=configuration.key, ui_definition=UIDefinition.from_proto(configuration.ui), max_fires=MaxFires.from_proto(configuration.max_fires), event_matcher_name=configuration.event_match_method.name, parameters=[ ParameterConfiguration.from_proto(parameter) for parameter in configuration.parameters ]) + + +class TrackTargetProgressReachedTrigger(TriggerConfiguration): + + def __init__(self, key, ui_definition, max_fires, track_keys): + super(TrackTargetProgressReachedTrigger, self).__init__(key, ui_definition) + self._max_fires = max_fires + self._track_keys = track_keys + + @property + def max_fires(self): + return self._max_fires + + @property + def track_keys(self): + return self._track_keys + + @classmethod + def from_proto(cls, configuration): + return TrackTargetProgressReachedTrigger(configuration.key, UIDefinition.from_proto(configuration.ui), MaxFires.from_proto(configuration.max_fires), list(configuration.track_keys)) + + +class ObjectiveOutcomeTrigger(TriggerConfiguration): + + def __init__(self, key, ui_definition, max_fires, objective_keys): + super(ObjectiveOutcomeTrigger, self).__init__(key, ui_definition) + self._max_fires = max_fires + self._objective_keys = objective_keys + + @property + def max_fires(self): + return self._max_fires + + @property + def objective_keys(self): + return self._objective_keys + + @classmethod + def from_proto(cls, configuration): + return cls(configuration.key, UIDefinition.from_proto(configuration.ui), MaxFires.from_proto(configuration.max_fires), list(configuration.objective_keys)) + + +class ObjectiveCompletedTrigger(ObjectiveOutcomeTrigger): + pass + + +class ObjectiveFailedTrigger(ObjectiveOutcomeTrigger): + pass + + +_TRIGGER_CLASS_BY_TYPE = {'immediate': ImmediateTrigger, + 'event_match': EventMatchTrigger, + 'relative_schedule': RelativeScheduleTrigger, + 'track_target_progress_reached': TrackTargetProgressReachedTrigger, + 'objective_completed': ObjectiveCompletedTrigger, + 'objective_failed': ObjectiveFailedTrigger} + +def lifecycle_trigger_from_proto(lifecycle_trigger): + trigger_type = lifecycle_trigger.WhichOneof('trigger_type') + trigger_class = _TRIGGER_CLASS_BY_TYPE.get(trigger_type) + if trigger_class is None: + raise NotImplementedError('Unknown lifecycle trigger type: %s' % trigger_type) + return trigger_class.from_proto(getattr(lifecycle_trigger, trigger_type)) diff --git a/campaigns/client/v2/data_model/ui_definition.py b/campaigns/client/v2/data_model/ui_definition.py @@ -0,0 +1,331 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\ui_definition.py +from __future__ import absolute_import, division, print_function +import calendar +import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb +from datetime import datetime +from datetime import timedelta +from flatbuffers.vector_utils import write_vector_of_offsets +from google.protobuf.internal.well_known_types import Timestamp +from localization.client.cerberus_formatted_message import CerberusFormattedMessage +from eveProto.generated.eve_public.campaign.ui.ui_pb2 import Definition +try: + from typing import Dict, List +except ImportError: + pass + +_NANOS_PER_MICROSECOND = 1000 +_EPOCH_DATETIME = datetime.utcfromtimestamp(0) + +class UIDefinition(object): + + def __init__(self, texts, resources, annotations, tags): + self._texts = texts + self._resources = resources + self._annotations = annotations + self._tags = tags + + @property + def texts(self): + return self._texts + + @property + def resources(self): + return self._resources + + @property + def annotations(self): + return self._annotations + + @property + def tags(self): + return self._tags + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, definition): + texts = [ Text.from_proto(text) for text in definition.texts ] + resources = [ Resource.from_proto(resource) for resource in definition.resources ] + annotations = {annotation.key:annotation.value for annotation in definition.annotations} + tags = [ tag.name for tag in definition.content_tags ] + return UIDefinition(texts, resources, annotations, tags) + + def __eq__(self, other): + if not isinstance(other, UIDefinition): + raise NotImplementedError + return self.texts == other.texts and self.resources == other.resources and self.annotations == other.annotations and self.tags == other.tags + + def __ne__(self, other): + return not self.__eq__(other) + + def _annotation_to_flatbuffer(self, builder, key, value): + key_offset = builder.CreateString(key) + value_ofset = builder.CreateString(value) + definitions_fb.AnnotationStart(builder) + definitions_fb.AnnotationAddKey(builder, key_offset) + definitions_fb.AnnotationAddValue(builder, value_ofset) + return definitions_fb.AnnotationEnd(builder) + + def to_flatbuffer(self, builder): + text_offsets = [ text.to_flatbuffer(builder) for text in self.texts ] + resources_offsets = [ resource.to_flatbuffer(builder) for resource in self.resources ] + annotations_offsets = [ self._annotation_to_flatbuffer(builder, key, value) for key, value in self.annotations.items() ] + tags_offsets = [ builder.CreateString(tag) for tag in self.tags ] + text_offset = write_vector_of_offsets(builder, definitions_fb.UIDefinitionStartTextsVector, text_offsets) + resources_offset = write_vector_of_offsets(builder, definitions_fb.UIDefinitionStartResourcesVector, resources_offsets) + annotations_offset = write_vector_of_offsets(builder, definitions_fb.UIDefinitionStartAnnotationsVector, annotations_offsets) + tags_offset = write_vector_of_offsets(builder, definitions_fb.UIDefinitionStartTagsVector, tags_offsets) + definitions_fb.UIDefinitionStart(builder) + definitions_fb.UIDefinitionAddTexts(builder, text_offset) + definitions_fb.UIDefinitionAddResources(builder, resources_offset) + definitions_fb.UIDefinitionAddAnnotations(builder, annotations_offset) + definitions_fb.UIDefinitionAddTags(builder, tags_offset) + return definitions_fb.UIDefinitionEnd(builder) + + @classmethod + def from_flatbuffer(cls, ui_definition_fb): + texts = [] + for index in range(ui_definition_fb.TextsLength()): + text = ui_definition_fb.Texts(index) + texts.append(Text.from_flatbuffer(text)) + + resources = [] + for index in range(ui_definition_fb.ResourcesLength()): + resource = ui_definition_fb.Resources(index) + resources.append(Resource.from_flatbuffer(resource)) + + annotations = {} + for index in range(ui_definition_fb.AnnotationsLength()): + annotation = ui_definition_fb.Annotations(index) + annotations[annotation.Key()] = annotation.Value() + + tags = [] + for index in range(ui_definition_fb.TagsLength()): + tag = ui_definition_fb.Tags(index) + tags.append(tag.decode('utf-8')) + + return UIDefinition(texts, resources, annotations, tags) + + +def _RoundTowardZero(value, divider): + result = value // divider + remainder = value % divider + if result < 0 and remainder > 0: + return result + 1 + else: + return result + + +def _message_from_flatbuffer(formatted_message_fb): + id = formatted_message_fb.Id() + parameters = {} + for index in range(formatted_message_fb.ParametersLength()): + parameter = formatted_message_fb.Parameters(index) + key, value = _parameter_from_flatbuffer(parameter) + parameters[key] = value + + return CerberusFormattedMessage(id, parameters) + + +def _parameter_from_flatbuffer(formatted_message_parameter_fb): + key = formatted_message_parameter_fb.Key().decode('utf-8') + value_type = formatted_message_parameter_fb.ValueType() + if value_type == definitions_fb.FormattedMessageParameterValue.String: + generic_value = formatted_message_parameter_fb.Value() + string_value = definitions_fb.StringParameterValue() + string_value.Init(generic_value.Bytes, generic_value.Pos) + value = string_value.Value().decode('utf-8') + elif value_type == definitions_fb.FormattedMessageParameterValue.Double: + generic_value = formatted_message_parameter_fb.Value() + double_value = definitions_fb.DoubleParameterValue() + double_value.Init(generic_value.Bytes, generic_value.Pos) + value = double_value.Value() + elif value_type == definitions_fb.FormattedMessageParameterValue.Int: + generic_value = formatted_message_parameter_fb.Value() + int_value = definitions_fb.IntParameterValue() + int_value.Init(generic_value.Bytes, generic_value.Pos) + value = int_value.Value() + elif value_type == definitions_fb.FormattedMessageParameterValue.UInt: + generic_value = formatted_message_parameter_fb.Value() + uint_value = definitions_fb.UIntParameterValue() + uint_value.Init(generic_value.Bytes, generic_value.Pos) + value = uint_value.Value() + elif value_type == definitions_fb.FormattedMessageParameterValue.Timestamp: + generic_value = formatted_message_parameter_fb.Value() + timestamp_value = definitions_fb.TimestampParameterValue() + timestamp_value.Init(generic_value.Bytes, generic_value.Pos) + timestamp_seconds = timestamp_value.Seconds() + timestamp_nanos = timestamp_value.Nanos() + value = _convert_seconds_and_nanos_to_datetime(timestamp_seconds, timestamp_nanos) + elif value_type == definitions_fb.FormattedMessageParameterValue.Duration: + generic_value = formatted_message_parameter_fb.Value() + duration_value = definitions_fb.DurationParameterValue() + duration_value.Init(generic_value.Bytes, generic_value.Pos) + timestamp_seconds = duration_value.Seconds() + timestamp_nanos = duration_value.Nanos() + value = _convert_seconds_and_nanos_to_timedelta(timestamp_seconds, timestamp_nanos) + else: + raise ValueError('Unsupported FormattedMessageParameterValue') + return (key, value) + + +def _convert_seconds_and_nanos_to_datetime(seconds, nanos): + return _EPOCH_DATETIME + timedelta(seconds=seconds, microseconds=_RoundTowardZero(nanos, _NANOS_PER_MICROSECOND)) + + +def _convert_seconds_and_nanos_to_timedelta(seconds, nanos): + return timedelta(seconds=seconds, microseconds=_RoundTowardZero(nanos, _NANOS_PER_MICROSECOND)) + + +class Text(object): + + def __init__(self, key, message): + self._key = key + self._message = message + + @property + def key(self): + return self._key + + @property + def message(self): + return self._message + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, definition): + key = definition.key + message = CerberusFormattedMessage.from_proto(definition.message) + return Text(key, message) + + def to_flatbuffer(self, builder): + key_offset = builder.CreateString(self.key) + message_offset = self._message_to_flatbuffer(builder) + definitions_fb.TextStart(builder) + definitions_fb.TextAddKey(builder, key_offset) + definitions_fb.TextAddMessage(builder, message_offset) + return definitions_fb.TextEnd(builder) + + @classmethod + def from_flatbuffer(cls, text_fb): + key = text_fb.Key().decode('utf-8') + message = _message_from_flatbuffer(text_fb.Message()) + return Text(key, message) + + def _message_to_flatbuffer(self, builder): + message = self.message + parameter_offsets = [ self._parameter_to_flatbuffer(builder, key, parameter) for key, parameter in message.parameters.items() ] + parameters_offset = write_vector_of_offsets(builder, definitions_fb.FormattedMessageStartParametersVector, parameter_offsets) + definitions_fb.FormattedMessageStart(builder) + definitions_fb.FormattedMessageAddId(builder, message.identifier) + definitions_fb.FormattedMessageAddParameters(builder, parameters_offset) + return definitions_fb.FormattedMessageEnd(builder) + + def _parameter_to_flatbuffer(self, builder, key, parameter): + if isinstance(parameter, str): + string_offset = builder.CreateString(parameter) + definitions_fb.StringParameterValueStart(builder) + definitions_fb.StringParameterValueAddValue(builder, string_offset) + parameter_offset = definitions_fb.StringParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.String + elif isinstance(parameter, int): + if parameter < 0: + definitions_fb.IntParameterValueStart(builder) + definitions_fb.IntParameterValueAddValue(builder, parameter) + parameter_offset = definitions_fb.IntParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.Int + else: + definitions_fb.UIntParameterValueStart(builder) + definitions_fb.UIntParameterValueAddValue(builder, parameter) + parameter_offset = definitions_fb.UIntParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.UInt + elif isinstance(parameter, float): + definitions_fb.DoubleParameterValueStart(builder) + definitions_fb.DoubleParameterValueAddValue(builder, parameter) + parameter_offset = definitions_fb.DoubleParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.Double + elif isinstance(parameter, datetime): + seconds, nanos = self._convert_datetime_to_seconds_and_nanos(parameter) + definitions_fb.TimestampParameterValueStart(builder) + definitions_fb.TimestampParameterValueAddSeconds(builder, seconds) + definitions_fb.TimestampParameterValueAddNanos(builder, nanos) + parameter_offset = definitions_fb.TimestampParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.Timestamp + elif isinstance(parameter, timedelta): + second = int(parameter.total_seconds()) + nanos = 0 + definitions_fb.DurationParameterValueStart(builder) + definitions_fb.DurationParameterValueAddSeconds(builder, second) + definitions_fb.DurationParameterValueAddNanos(builder, nanos) + parameter_offset = definitions_fb.DurationParameterValueEnd(builder) + parameter_type = definitions_fb.FormattedMessageParameterValue.Duration + else: + raise NotImplementedError + key_offset = builder.CreateString(key) + definitions_fb.FormattedMessageParameterStart(builder) + definitions_fb.FormattedMessageParameterAddKey(builder, key_offset) + definitions_fb.FormattedMessageParameterAddValue(builder, parameter_offset) + definitions_fb.FormattedMessageParameterAddValueType(builder, parameter_type) + return definitions_fb.FormattedMessageParameterEnd(builder) + + def _convert_datetime_to_seconds_and_nanos(self, dt): + seconds = calendar.timegm(dt.utctimetuple()) + nanos = dt.microsecond * _NANOS_PER_MICROSECOND + return (seconds, nanos) + + def __eq__(self, other): + if not isinstance(other, Text): + raise NotImplementedError + return self.key == other.key and self.message == other.message + + def __ne__(self, other): + return not self.__eq__(other) + + +class Resource(object): + + def __init__(self, key, path): + self._key = key + self._path = path + + @property + def key(self): + return self._key + + @property + def path(self): + return self._path + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) + + @classmethod + def from_proto(cls, definition): + key = definition.key + path = definition.client_resource_path + return Resource(key, path) + + def to_flatbuffer(self, builder): + key_offset = builder.CreateString(self.key) + path_offset = builder.CreateString(self.path) + definitions_fb.ResourceStart(builder) + definitions_fb.ResourceAddKey(builder, key_offset) + definitions_fb.ResourceAddPath(builder, path_offset) + return definitions_fb.ResourceEnd(builder) + + @classmethod + def from_flatbuffer(cls, resource_fb): + key = resource_fb.Key() + path = resource_fb.Path() + return Resource(key, path) + + def __eq__(self, other): + if not isinstance(other, Resource): + raise NotImplementedError + return self.key == other.key and self.path == other.path + + def __ne__(self, other): + return not self.__eq__(other) diff --git a/campaigns/client/v2/listeners/__init__.py b/campaigns/client/v2/listeners/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\listeners\__init__.py +pass diff --git a/campaigns/client/v2/listeners/track_listener.py b/campaigns/client/v2/listeners/track_listener.py @@ -0,0 +1,18 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\listeners\track_listener.py +import logging +from campaigns.client.v2.data_model.track import TrackID +from eveProto.generated.eve_public.campaign.track.api.notices_pb2 import ContributedNotice +from signals import Signal +logger = logging.getLogger('campaigns_v2') + +class TrackListener(object): + + def __init__(self, public_gateway): + self._public_gateway = public_gateway + self._public_gateway.subscribe_to_notice(ContributedNotice, self._on_contributed_notice) + self.on_contributed = Signal('TrackListener.on_contributed') + + def _on_contributed_notice(self, payload, _primitive): + track_id = TrackID.from_proto(payload.track) + logger.info('on_contributed_notice track: %s - payload: %s', track_id, payload) + self.on_contributed(track_id, payload.total_participant_progress) diff --git a/campaigns/client/v2/messengers/__init__.py b/campaigns/client/v2/messengers/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\__init__.py +pass diff --git a/campaigns/client/v2/messengers/campaigns_messenger.py b/campaigns/client/v2/messengers/campaigns_messenger.py @@ -0,0 +1,188 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\campaigns_messenger.py +from __future__ import absolute_import, division, print_function +import logging +from campaigns.client.errors import CampaignRequestError, CampaignBadRequestError, CampaignNotFoundError, CampaignUnauthorizedError, CampaignForbiddenError, CampaignCommitmentNotRequiredError +from campaigns.client.v2.data_model.campaign import CampaignDefinition, CampaignID, CampaignStatus, UpcomingCampaign +from campaigns.client.v2.data_model.track import TrackID, TrackStatus +from campaigns.client.v2.data_model.track_reward import TrackUnredeemedRewards +from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetAllForNamespaceRequest, GetAllForNamespaceResponse, GetLimitsRequest, GetLimitsResponse, GetRequest, GetResponse, GetStatusRequest, GetStatusResponse, GetAllUnredeemedParticipantRewardsRequest, GetAllUnredeemedParticipantRewardsResponse +from eveProto.generated.eve_public.public_pb2 import Page +from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import CommitRequest, CommitResponse, ResignRequest, ResignResponse +from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, UNAUTHORIZED, FORBIDDEN, NOT_ACCEPTABLE, NOT_MODIFIED +from stackless_response_router.exceptions import TimeoutException, UnpackException +logger = logging.getLogger('campaigns_v2') +PAGE_SIZE = 1000 + +class CampaignsMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def get_all_for_namespace_request(self, namespace): + request = GetAllForNamespaceRequest(namespace=namespace.to_proto()) + info_log = 'Request: Campaigns: GetAllForNamespaceRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllForNamespaceResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetAllForNamespaceRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Namespace not found in GetAllForNamespaceRequest: %s' % namespace) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetAllForNamespaceRequest: %s' % namespace) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetAllForNamespaceResponse: %s' % status_code) + info_log += 'Response: Campaigns: GetAllForNamespaceResponse: {response}'.format(response=response) + logger.info(info_log) + campaign_ids = [ CampaignID.from_proto(identifier) for identifier in response.campaigns ] + upcoming = [ UpcomingCampaign.from_proto(namespace, upcoming) for upcoming in response.upcoming_campaigns ] + return (campaign_ids, upcoming) + + def get_limits_request(self): + request = GetLimitsRequest() + info_log = 'Request: Campaigns: GetLimitsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetLimitsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetLimitsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code != OK: + raise CampaignRequestError('Received error status code for GetLimitsResponse: %s' % status_code) + info_log += 'Response: Campaigns: GetLimitsResponse: {response}'.format(response=response) + logger.info(info_log) + return response.max_active_objectives_per_participant + + def commit_request(self, objective_id): + request = CommitRequest(objective=objective_id.to_proto()) + info_log = 'Request: Campaigns: CommitRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=CommitResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from CommitRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested objective in CommitRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in CommitRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in CommitRequest: %s' % objective_id) + if status_code == FORBIDDEN: + raise CampaignForbiddenError('Cannot commit in CommitRequest: %s' % objective_id) + if status_code == NOT_ACCEPTABLE: + raise CampaignCommitmentNotRequiredError('Objective does not require commitment in CommitRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for CommitRequest: %s' % status_code) + info_log += 'Response: Campaigns: CommitResponse: {response}'.format(response=response) + logger.info(info_log) + + def resign_request(self, objective_id): + request = ResignRequest(objective=objective_id.to_proto()) + info_log = 'Request: Campaigns: ResignRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ResignResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from ResignRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested objective in ResignRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in ResignRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in ResignRequest: %s' % objective_id) + if status_code == FORBIDDEN: + raise CampaignForbiddenError('Cannot resign in ResignRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for ResignRequest: %s' % status_code) + info_log += 'Response: Campaigns: ResignResponse: {response}'.format(response=response) + logger.info(info_log) + + def get_request(self, campaign_id, current_version = None): + request = GetRequest(campaign=campaign_id.to_proto()) + if current_version is None: + request.no_version = True + else: + request.version.MergeFrom(current_version.to_proto()) + info_log = 'Request: Campaigns: GetRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_MODIFIED: + logger.info(info_log + 'Response: Campaigns: GetResponse: NOT_MODIFIED') + return NOT_MODIFIED + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetRequest: %s' % campaign_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetRequest: %s' % campaign_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetResponse: {response}'.format(response=response) + logger.info(info_log) + campaign_definition = CampaignDefinition.from_proto(campaign_id, response) + campaign_status = None + if response.HasField('stats'): + campaign_status = CampaignStatus.from_get_proto(campaign_id, response) + track_statuses = [ TrackStatus.from_get_proto(track) for track in response.tracks if track.HasField('stats') ] + return (campaign_definition, campaign_status, track_statuses) + + def get_status_request(self, campaign_id): + request = GetStatusRequest(campaign=campaign_id.to_proto()) + info_log = 'Request: Campaigns: GetStatusRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatusResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetStatusRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested campaign in GetStatusRequest: %s' % campaign_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetStatusRequest: %s' % campaign_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetStatusRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetStatusResponse: {response}'.format(response=response) + logger.info(info_log) + return (CampaignStatus.from_status_proto(campaign_id, response), [ TrackStatus.from_status_proto(track) for track in response.tracks ]) + + def get_all_unredeemed_participant_rewards_request(self, namespace, page_token = None): + request = GetAllUnredeemedParticipantRewardsRequest(namespace=namespace.to_proto(), page=Page(size=PAGE_SIZE, token=page_token or '')) + info_log = 'Request: Campaigns: GetAllUnredeemedParticipantRewardsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllUnredeemedParticipantRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetAllUnredeemedParticipantRewardsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetAllUnredeemedParticipantRewardsRequest: %s' % namespace) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Unauthorized in GetAllUnredeemedParticipantRewardsRequest: %s' % namespace) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetAllUnredeemedParticipantRewardsRequest: %s' % status_code) + info_log += 'Response: Campaigns: GetAllUnredeemedParticipantRewardsResponse: {response}'.format(response=response) + logger.info(info_log) + unredeemed_rewards = [ (TrackID.from_proto(track_rewards.track), TrackUnredeemedRewards.from_proto(track_rewards)) for track_rewards in response.tracks ] + return (unredeemed_rewards, response.next_page.token) diff --git a/campaigns/client/v2/messengers/event_matcher_messenger.py b/campaigns/client/v2/messengers/event_matcher_messenger.py @@ -0,0 +1,40 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\event_matcher_messenger.py +from __future__ import absolute_import, division, print_function +import logging +from campaigns.client.errors import EventMatcherRequestError, EventMatcherNotFoundError, EventMatcherBadRequestError +from campaigns.client.v2.data_model.event_matcher_definition import EventMatcherDefinition +from eveProto.generated.eve_public.campaign.trigger.eventmatch.definition.api.requests_pb2 import GetAllRequest, GetAllResponse +from six.moves.http_client import NOT_FOUND, BAD_REQUEST, OK +from semantic_version import SemanticVersion +from stackless_response_router.exceptions import TimeoutException, UnpackException +logger = logging.getLogger('campaigns_v2') + +class CampaignEventMatcherMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def get_all_request(self, semantic_version): + request = GetAllRequest(version=semantic_version.to_eve_public_proto()) + info_log = 'Request: CampaignEventMatcherMessenger: GetAllRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise EventMatcherRequestError('Failed to receive response from GetAllRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise EventMatcherNotFoundError('Could not find requested version in GetAllRequest: %s' % semantic_version) + if status_code == BAD_REQUEST: + raise EventMatcherBadRequestError('Bad request in GetAllRequest: %s' % semantic_version) + if status_code != OK: + raise EventMatcherRequestError('Received error status code for GetAllResponse: %s' % status_code) + info_log += 'Response: CampaignContributionMethodsMessenger: GetAllResponse: {response}'.format(response=response) + logger.info(info_log) + results = [ EventMatcherDefinition.from_proto(definition) for definition in response.definitions ] + return results diff --git a/campaigns/client/v2/messengers/objective_messenger.py b/campaigns/client/v2/messengers/objective_messenger.py @@ -0,0 +1,91 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\objective_messenger.py +from __future__ import absolute_import, division, print_function +import logging +from campaigns.client.errors import CampaignRequestError, CampaignBadRequestError, CampaignNotFoundError, CampaignUnauthorizedError +from campaigns.client.v2.data_model.objective import ObjectiveDefinition, ObjectiveStatus, ObjectiveParticipantStats +from campaigns.client.v2.data_model.track import TrackID, TrackStatus, TrackParticipantStats +from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import GetRequest, GetResponse, GetStatusRequest, GetStatusResponse, GetParticipantStatusRequest, GetParticipantStatusResponse +from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, NOT_MODIFIED, UNAUTHORIZED +from stackless_response_router.exceptions import TimeoutException, UnpackException +logger = logging.getLogger('campaigns_v2') + +class ObjectiveMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def get_request(self, objective_id, current_version = None): + request = GetRequest(objective=objective_id.to_proto()) + if current_version is None: + request.no_version = True + else: + request.version.MergeFrom(current_version.to_proto()) + info_log = 'Request: Objectives: GetRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from objective GetRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_MODIFIED: + logger.info(info_log + 'Response: Objectives: GetResponse: NOT_MODIFIED') + return NOT_MODIFIED + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested objective in GetRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in objective GetRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for objective GetRequest: %s' % status_code) + info_log += 'Response: Objectives: GetResponse: {response}'.format(response=response) + logger.info(info_log) + return ObjectiveDefinition.from_proto(objective_id, response) + + def get_status_request(self, objective_id): + request = GetStatusRequest(objective=objective_id.to_proto()) + info_log = 'Request: Objectives: GetStatusRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatusResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from objective GetStatusRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested objective in GetStatusRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in objective GetStatusRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for objective GetStatusRequest: %s' % status_code) + info_log += 'Response: Objectives: GetStatusResponse: {response}'.format(response=response) + logger.info(info_log) + return (ObjectiveStatus.from_status_proto(objective_id, response), [ TrackStatus.from_status_proto(track) for track in response.tracks ]) + + def get_participant_status_request(self, objective_id): + request = GetParticipantStatusRequest(objective=objective_id.to_proto()) + info_log = 'Request: Objectives: GetParticipantStatusRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetParticipantStatusResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetParticipantStatusRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested objective in GetParticipantStatusRequest: %s' % objective_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetParticipantStatusRequest: %s' % objective_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Unauthorized in GetParticipantStatusRequest: %s' % objective_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetParticipantStatusRequest: %s' % status_code) + info_log += 'Response: Objectives: GetParticipantStatusResponse: {response}'.format(response=response) + logger.info(info_log) + track_participant_stats = {TrackID.from_proto(track.id):TrackParticipantStats.from_proto(track.stats) for track in response.tracks} + return (ObjectiveParticipantStats.from_proto(response), track_participant_stats) diff --git a/campaigns/client/v2/messengers/track_messenger.py b/campaigns/client/v2/messengers/track_messenger.py @@ -0,0 +1,59 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\track_messenger.py +import logging +from campaigns.client.errors import CampaignRequestError, CampaignBadRequestError, CampaignNotFoundError, CampaignUnauthorizedError +from campaigns.client.v2.data_model.track_prediction import TickingContributionPrediction +from eveProto.generated.eve_public.campaign.track.api.requests_pb2 import RedeemParticipantRewardsRequest, RedeemParticipantRewardsResponse, GetTickingContributionsPredictionRequest, GetTickingContributionsPredictionResponse +from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, UNAUTHORIZED +from stackless_response_router.exceptions import TimeoutException, UnpackException +logger = logging.getLogger('campaigns_v2') + +class TrackMessenger(object): + + def __init__(self, public_gateway): + self.public_gateway = public_gateway + + def override_gateway(self, public_gateway): + self.public_gateway = public_gateway + + def redeem_participant_rewards_request(self, track_id): + request = RedeemParticipantRewardsRequest(track=track_id.to_proto()) + info_log = 'Request: Tracks: RedeemParticipantRewardsRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=RedeemParticipantRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from RedeemParticipantRewardsRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested track in RedeemParticipantRewardsRequest: %s' % track_id) + if status_code == UNAUTHORIZED: + raise CampaignUnauthorizedError('Could not authorize request in RedeemParticipantRewardsRequest: %s' % track_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in RedeemParticipantRewardsRequest: %s' % track_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for RedeemParticipantRewardsRequest: %s' % status_code) + info_log += 'Response: Tracks: RedeemParticipantRewardsResponse: {response}'.format(response=response) + logger.info(info_log) + + def get_ticking_contributions_prediction_request(self, track_id): + request = GetTickingContributionsPredictionRequest(track=track_id.to_proto()) + info_log = 'Request: Tracks: GetTickingContributionsPredictionRequest: {request}\n'.format(request=request) + try: + response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetTickingContributionsPredictionResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) + except (TimeoutException, UnpackException) as exc: + info_log += 'ERROR: %s' % exc.__class__.__name__ + logger.info(info_log) + raise CampaignRequestError('Failed to receive response from GetTickingContributionsPredictionRequest: %s' % exc) + + status_code = response_primitive.status_code + if status_code == NOT_FOUND: + raise CampaignNotFoundError('Could not find requested track in GetTickingContributionsPredictionRequest: %s' % track_id) + if status_code == BAD_REQUEST: + raise CampaignBadRequestError('Bad request in GetTickingContributionsPredictionRequest: %s' % track_id) + if status_code != OK: + raise CampaignRequestError('Received error status code for GetTickingContributionsPredictionResponse: %s' % status_code) + info_log += 'Response: Tracks: GetTickingContributionsPredictionResponse: {response}'.format(response=response) + logger.info(info_log) + return [ TickingContributionPrediction.from_proto(contribution) for contribution in response.contributions ] diff --git a/campaigns/client/v2/mock_data/__init__.py b/campaigns/client/v2/mock_data/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\mock_data\__init__.py +pass diff --git a/campaigns/client/v2/mock_data/mock_event_matcher_definitions.py b/campaigns/client/v2/mock_data/mock_event_matcher_definitions.py @@ -0,0 +1,12 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\mock_data\mock_event_matcher_definitions.py +from eveProto.generated.eve_public.campaign.parameter.parameter_pb2 import Definition as ParameterDefinitionProto +from eveProto.generated.eve_public.campaign.trigger.eventmatch.definition.api.requests_pb2 import GetAllResponse +from eveProto.generated.eve_public.campaign.trigger.eventmatch.definition.definition_pb2 import Identifier as DefinitionIdentifier, Attributes +from eveProto.generated.eve_public.campaign.ui.ui_pb2 import Definition as UIDefinitionProto +from eveProto.generated.eve_public.localization.message_pb2 import Identifier as MessageIdentifier +from eveProto.generated.eve_public.localization.cerberus.cerberus_pb2 import FormattedMessage, Parameter +from eveProto.generated.eve_public.ui.annotation_pb2 import Annotation +from eveProto.generated.eve_public.ui.contenttag_pb2 import Identifier as TagIdentifier +MOCK_LOC_ID = 12345 +MOCK_UI_DEFINITION = UIDefinitionProto(texts=[UIDefinitionProto.Text(key='key', message=FormattedMessage(identifier=MessageIdentifier(sequential=MOCK_LOC_ID), parameters=[Parameter(key='parameter', integer=5)]))], resources=[UIDefinitionProto.Resource(key='resource', client_resource_path='path')], annotations=[Annotation(key='key', value='value')], content_tags=[TagIdentifier(name='1'), TagIdentifier(name='2'), TagIdentifier(name='3')]) +MOCK_DEFINITIONS = GetAllResponse(definitions=[GetAllResponse.Definition(definition=DefinitionIdentifier(name='HackThePlanet'), attributes=Attributes(ui=MOCK_UI_DEFINITION, parameters=[ParameterDefinitionProto(key='parameter1', ui=MOCK_UI_DEFINITION, single_value=ParameterDefinitionProto.SingleValueParameter(value_type='value')), ParameterDefinitionProto(key='parameter2', ui=MOCK_UI_DEFINITION, set=ParameterDefinitionProto.SetParameter(value_type='value')), ParameterDefinitionProto(key='parameter3', ui=MOCK_UI_DEFINITION, multi_value_type_set=ParameterDefinitionProto.MultiValueTypeSetParameter(accepted_value_types=['value1', 'value2']))])), GetAllResponse.Definition(definition=DefinitionIdentifier(name='HackAnotherPlanet'), attributes=Attributes(ui=MOCK_UI_DEFINITION, parameters=[ParameterDefinitionProto(key='parameter1', ui=MOCK_UI_DEFINITION, single_value=ParameterDefinitionProto.SingleValueParameter(value_type='value')), ParameterDefinitionProto(key='parameter2', ui=MOCK_UI_DEFINITION, set=ParameterDefinitionProto.SetParameter(value_type='value')), ParameterDefinitionProto(key='parameter3', ui=MOCK_UI_DEFINITION, multi_value_type_set=ParameterDefinitionProto.MultiValueTypeSetParameter(accepted_value_types=['value1', 'value2']))]))]) diff --git a/campaigns/client/v2/mock_data/mock_gateway.py b/campaigns/client/v2/mock_data/mock_gateway.py @@ -0,0 +1,238 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\mock_data\mock_gateway.py +from __future__ import absolute_import, division, print_function +import random +import uthread2 +import uuid +from datetime import datetime, timedelta +from campaigns.client.qa.settings import SETTING_REQUEST_DELAY, REQUEST_DELAY_OFF, REQUEST_DELAY_ON_100MS, REQUEST_DELAY_ON_100_200_MS, SETTING_REQUEST_ERROR_RATE, REQUEST_ERROR_RATE_OFF, REQUEST_ERROR_RATE_10, REQUEST_ERROR_RATE_50, REQUEST_ERROR_RATE_80, REQUEST_ERROR_RATE_100, REQUEST_DELAY_ON_1_2_S +from campaigns.client.v2.mock_data.mock_event_matcher_definitions import MOCK_DEFINITIONS +from eveProto.generated.eve_public.campaign import campaign_pb2 +from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetAllForNamespaceRequest, GetAllForNamespaceResponse, GetLimitsRequest, GetLimitsResponse, GetRequest, GetResponse, GetStatusRequest, GetStatusResponse, GetAllUnredeemedParticipantRewardsRequest, GetAllUnredeemedParticipantRewardsResponse +from eveProto.generated.eve_public.public_pb2 import NextPage +from eveProto.generated.eve_public.campaign.objective import objective_pb2 +from eveProto.generated.eve_public.campaign.participation.participation_pb2 import Configuration as ParticipationProto +from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import CommitRequest, ResignRequest, GetRequest as ObjectiveGetRequest, GetResponse as ObjectiveGetResponse, GetStatusRequest as ObjectiveGetStatusRequest, GetStatusResponse as ObjectiveGetStatusResponse, GetParticipantStatusRequest, GetParticipantStatusResponse +from eveProto.generated.eve_public.campaign.campaign_pb2 import Identifier +from eveProto.generated.eve_public.campaign.track import track_pb2 +from eveProto.generated.eve_public.campaign.track.api.requests_pb2 import RedeemParticipantRewardsRequest, GetTickingContributionsPredictionRequest, GetTickingContributionsPredictionResponse +from eveProto.generated.eve_public.campaign.trigger.eventmatch.definition.api.requests_pb2 import GetAllRequest +from eveProto.generated.eve_public.campaign.ui.ui_pb2 import Definition as UIDefinitionProto +from eveProto.generated.eve_public.semanticversion_pb2 import Specification +from google.protobuf.timestamp_pb2 import Timestamp +from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, INTERNAL_SERVER_ERROR, FORBIDDEN, UNAUTHORIZED, NOT_ACCEPTABLE, NOT_MODIFIED +from mock import Mock +from logging import getLogger +logger = getLogger('campaigns_v2') +MOCK_NAMESPACE = 'mock_namespace' +MOCK_CAMPAIGN_DEFINITION_NAME = 'MockCampaign' +MOCK_CAMPAIGN_ETAG = 1 +MOCK_OBJECTIVE_UUIDS = [uuid.UUID('3d9c1f0a-6b2e-4c8d-9f1a-2b3c4d5e6f70'), uuid.UUID('8e7d6c5b-4a39-4281-9f0e-1d2c3b4a5968')] +MOCK_TRACK_UUID = uuid.UUID('5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d') +MOCK_OBJECTIVE_TRACK_UUID = uuid.UUID('9f8e7d6c-5b4a-4392-8a1b-0c9d8e7f6a5b') +MOCK_CAMPAIGN_UUIDS = [uuid.UUID('0b5b9f3e-3f4c-4d1e-9a61-1f0c7a2d9e01'), uuid.UUID('7c1a2b3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d')] +MOCK_UPCOMING_DEFINITION_NAME = 'MockUpcomingCampaign' +MOCK_MAX_ACTIVE_OBJECTIVES = 10 +MOCK_TICKING_CONTRIBUTION_KEY = 'mock_ticking_contribution' + +class MockCampaignsGateway(object): + + def __init__(self, message_player): + self._message_player = message_player + self._request_delay_min = 0 + self._request_delay_max = 0 + self._request_error_rate = 0 + SETTING_REQUEST_DELAY.on_change.connect(self._on_request_delay_changed) + SETTING_REQUEST_ERROR_RATE.on_change.connect(self._on_request_error_rate_changed) + + def _on_request_error_rate_changed(self, value): + if value == REQUEST_ERROR_RATE_OFF: + self._request_error_rate = 0 + elif value == REQUEST_ERROR_RATE_10: + self._request_error_rate = 0.1 + elif value == REQUEST_ERROR_RATE_50: + self._request_error_rate = 0.5 + elif value == REQUEST_ERROR_RATE_80: + self._request_error_rate = 0.8 + elif value == REQUEST_ERROR_RATE_100: + self._request_error_rate = 1 + else: + raise ValueError('Invalid request error rate value') + logger.info('Mock Gateway: Error Rate set to %s percent', self._request_error_rate * 100) + + def _on_request_delay_changed(self, value): + if value == REQUEST_DELAY_OFF: + self._request_delay_min = 0 + self._request_delay_max = 0 + elif value == REQUEST_DELAY_ON_100MS: + self._request_delay_min = 0 + self._request_delay_max = 0.1 + elif value == REQUEST_DELAY_ON_100_200_MS: + self._request_delay_min = 0.1 + self._request_delay_max = 0.2 + elif value == REQUEST_DELAY_ON_1_2_S: + self._request_delay_min = 1 + self._request_delay_max = 2 + else: + raise ValueError('Invalid request delay value') + logger.info('Mock Gateway: Request Delay set to %s to %s seconds', self._request_delay_min, self._request_delay_max) + + def send_blocking_character_request_and_receive_response(self, request_payload, expected_response_class, timeout_seconds, max_attempts, retry_delay_in_seconds): + delay_secs = random.uniform(self._request_delay_min, self._request_delay_max) + if delay_secs > 0: + uthread2.Sleep(delay_secs) + should_error = False + if random.random() < self._request_error_rate: + should_error = True + if isinstance(request_payload, GetAllForNamespaceRequest): + return get_all_for_namespace_response(should_error) + if isinstance(request_payload, GetLimitsRequest): + return get_limits_response(should_error) + if isinstance(request_payload, (CommitRequest, ResignRequest)): + if should_error: + return create_error_response([NOT_FOUND, + BAD_REQUEST, + INTERNAL_SERVER_ERROR, + FORBIDDEN, + UNAUTHORIZED, + NOT_ACCEPTABLE]) + return (create_response_primitive(OK), None) + if isinstance(request_payload, RedeemParticipantRewardsRequest): + if should_error: + return create_error_response([NOT_FOUND, + BAD_REQUEST, + INTERNAL_SERVER_ERROR, + UNAUTHORIZED]) + return (create_response_primitive(OK), None) + if isinstance(request_payload, GetTickingContributionsPredictionRequest): + return get_ticking_contributions_prediction_response(should_error) + if isinstance(request_payload, GetAllRequest): + return get_all_event_matcher_definitions_request(should_error) + if isinstance(request_payload, ObjectiveGetRequest): + return get_objective_response(request_payload, should_error) + if isinstance(request_payload, GetRequest): + return get_campaign_response(request_payload, should_error) + if isinstance(request_payload, GetStatusRequest): + return get_campaign_status_response(should_error) + if isinstance(request_payload, ObjectiveGetStatusRequest): + return get_objective_status_response(should_error) + if isinstance(request_payload, GetParticipantStatusRequest): + return get_objective_participant_status_response(should_error) + if isinstance(request_payload, GetAllUnredeemedParticipantRewardsRequest): + return get_all_unredeemed_participant_rewards_response(should_error) + raise NotImplementedError('Attempted to use MockCampaignsGateway for request that has not been mocked: %s' % request_payload) + + def _notify_of_mock_use(self): + self._message_player('Using mocked data for Campaigns') + logger.info('Using mocked data for Campaigns') + + +def create_error_response(error_list): + error_code = random.choice(error_list) + return (create_response_primitive(error_code), None) + + +def create_response_primitive(status_code): + response_primitive = Mock() + response_primitive.status_code = status_code + return response_primitive + + +def get_all_for_namespace_response(should_error): + if should_error: + return create_error_response([BAD_REQUEST, NOT_FOUND, INTERNAL_SERVER_ERROR]) + scheduled_start_time = Timestamp() + scheduled_start_time.FromDatetime(datetime.utcnow() + timedelta(days=1)) + response_payload = GetAllForNamespaceResponse(campaigns=[ Identifier(uuid=campaign_uuid.bytes) for campaign_uuid in MOCK_CAMPAIGN_UUIDS ], upcoming_campaigns=[GetAllForNamespaceResponse.Upcoming(definition_name=MOCK_UPCOMING_DEFINITION_NAME, ui=UIDefinitionProto(), scheduled_start_time=scheduled_start_time)]) + return (create_response_primitive(OK), response_payload) + + +def get_limits_response(should_error): + if should_error: + return create_error_response([INTERNAL_SERVER_ERROR]) + response_payload = GetLimitsResponse(max_active_objectives_per_participant=MOCK_MAX_ACTIVE_OBJECTIVES) + return (create_response_primitive(OK), response_payload) + + +def get_ticking_contributions_prediction_response(should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + contribution_type = GetTickingContributionsPredictionResponse.Contribution + evaluations = [contribution_type.Evaluation(key='base', constant=3), contribution_type.Evaluation(key='per_system', units_count=5)] + contributions = [contribution_type(key=MOCK_TICKING_CONTRIBUTION_KEY, value=13, evaluations=evaluations)] + response_payload = GetTickingContributionsPredictionResponse(contributions=contributions) + return (create_response_primitive(OK), response_payload) + + +def _is_current_mock_version(request): + return request.WhichOneof('current_version') == 'version' and request.version.etag == MOCK_CAMPAIGN_ETAG + + +def _mock_campaign_version(): + return campaign_pb2.Version(definition_version=Specification(major=1), etag=MOCK_CAMPAIGN_ETAG, definition_schema_major_version=1) + + +def _mock_track_attributes(key): + return track_pb2.Attributes(key=key, ui=UIDefinitionProto(), target_progress_value=1000, no_participant_contribution_track=True) + + +def get_campaign_response(request, should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + if _is_current_mock_version(request): + return (create_response_primitive(NOT_MODIFIED), None) + scheduled_start_time = Timestamp() + scheduled_start_time.FromDatetime(datetime.utcnow() - timedelta(days=1)) + response_payload = GetResponse(attributes=campaign_pb2.Attributes(version=_mock_campaign_version(), scheduled_start_time=scheduled_start_time, definition_name=MOCK_CAMPAIGN_DEFINITION_NAME, namespace=campaign_pb2.Namespace(namespace=MOCK_NAMESPACE), ui=UIDefinitionProto(), participation=ParticipationProto(eligibility_all=True), lifecycle_state=campaign_pb2.LifecycleState(state=campaign_pb2.STATE_ACTIVE)), stats=campaign_pb2.Stats(total_contributors=42), tracks=[GetResponse.Track(id=track_pb2.Identifier(uuid=MOCK_TRACK_UUID.bytes), attributes=_mock_track_attributes('main'), stats=track_pb2.Stats(current_progress=250))], objectives=[ objective_pb2.Identifier(uuid=objective_uuid.bytes) for objective_uuid in MOCK_OBJECTIVE_UUIDS ], upcoming_objectives=[objective_pb2.Upcoming(key='mock_upcoming_objective', ui=UIDefinitionProto())]) + return (create_response_primitive(OK), response_payload) + + +def get_objective_response(request, should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + if _is_current_mock_version(request): + return (create_response_primitive(NOT_MODIFIED), None) + response_payload = ObjectiveGetResponse(attributes=objective_pb2.Attributes(key='mock_objective', ui=UIDefinitionProto(), participation=ParticipationProto(commitment_required=True, eligibility_all=True), lifecycle_state=objective_pb2.LifecycleState(state=objective_pb2.STATE_ACTIVE)), tracks=[ObjectiveGetResponse.Track(id=track_pb2.Identifier(uuid=MOCK_OBJECTIVE_TRACK_UUID.bytes), attributes=_mock_track_attributes('objective_main'))], version=_mock_campaign_version()) + return (create_response_primitive(OK), response_payload) + + +def get_all_event_matcher_definitions_request(should_error): + if should_error: + return create_error_response([BAD_REQUEST, NOT_FOUND, INTERNAL_SERVER_ERROR]) + response_payload = MOCK_DEFINITIONS + return (create_response_primitive(OK), response_payload) + + +def _mock_track_status(track_status_class, track_uuid, current_progress): + return track_status_class(id=track_pb2.Identifier(uuid=track_uuid.bytes), state=track_pb2.LifecycleState(state=track_pb2.STATE_STARTED), stats=track_pb2.Stats(current_progress=current_progress)) + + +def get_campaign_status_response(should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + response_payload = GetStatusResponse(state=campaign_pb2.LifecycleState(state=campaign_pb2.STATE_STARTED), stats=campaign_pb2.Stats(total_contributors=42), tracks=[_mock_track_status(GetStatusResponse.Track, MOCK_TRACK_UUID, 250)]) + return (create_response_primitive(OK), response_payload) + + +def get_objective_status_response(should_error): + if should_error: + return create_error_response([NOT_FOUND, BAD_REQUEST, INTERNAL_SERVER_ERROR]) + response_payload = ObjectiveGetStatusResponse(state=objective_pb2.LifecycleState(state=objective_pb2.STATE_STARTED), stats=objective_pb2.Stats(total_contributors=12, commitment_stats=objective_pb2.Stats.CommitmentStats(committed_participants=8, total_participants=10)), tracks=[_mock_track_status(ObjectiveGetStatusResponse.Track, MOCK_OBJECTIVE_TRACK_UUID, 400)]) + return (create_response_primitive(OK), response_payload) + + +def get_objective_participant_status_response(should_error): + if should_error: + return create_error_response([NOT_FOUND, + BAD_REQUEST, + UNAUTHORIZED, + INTERNAL_SERVER_ERROR]) + response_payload = GetParticipantStatusResponse(commitment_state=objective_pb2.COMMITMENT_STATE_COMMITTED, tracks=[GetParticipantStatusResponse.Track(id=track_pb2.Identifier(uuid=MOCK_OBJECTIVE_TRACK_UUID.bytes), stats=track_pb2.ParticipantStats(participant_track=track_pb2.ParticipantStats.ParticipantTrack(current_participant_contribution=120, max_participant_contribution_reached=False)))]) + return (create_response_primitive(OK), response_payload) + + +def get_all_unredeemed_participant_rewards_response(should_error): + if should_error: + return create_error_response([BAD_REQUEST, UNAUTHORIZED, INTERNAL_SERVER_ERROR]) + track_rewards = GetAllUnredeemedParticipantRewardsResponse.TrackUnredeemedRewards + response_payload = GetAllUnredeemedParticipantRewardsResponse(tracks=[track_rewards(track=track_pb2.Identifier(uuid=MOCK_TRACK_UUID.bytes), isk_intervals_unredeemed=2, lp_intervals_unredeemed=1), track_rewards(track=track_pb2.Identifier(uuid=MOCK_OBJECTIVE_TRACK_UUID.bytes), no_isk_unredeemed=True, lp_intervals_unredeemed=3)], next_page=NextPage()) + return (create_response_primitive(OK), response_payload) diff --git a/campaigns/client/v2/repository.py b/campaigns/client/v2/repository.py @@ -0,0 +1,284 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\repository.py +from __future__ import absolute_import, division, print_function +from caching.client.ttl_cache import TTLCache, NO_CACHED_DATA +from caching.client.storage.disk_storage import BinaryDiskStorage +from caching.memoize import Memoize, MemoizeWithLock +from campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_serialization import serialize_versioned_definitions_to_flatbuffer, deserialize_flatbuffer_to_versioned_definitions_dict +from campaigns.client.v2.data_model.objective import ObjectiveParticipantStats, CommitmentState +from campaigns.client.v2.data_model.track import TrackParticipantStats +from campaigns.client.v2.listeners.track_listener import TrackListener +from campaigns.client.v2.messengers.campaigns_messenger import CampaignsMessenger +from campaigns.client.v2.messengers.objective_messenger import ObjectiveMessenger +from campaigns.client.v2.messengers.track_messenger import TrackMessenger +import campaigns.client.v2.signals as campaigns_signals +from datetime import timedelta +from six.moves.http_client import NOT_MODIFIED +from locks.singleFlight import single_flight +import logging +logger = logging.getLogger('campaigns_v2') +CAMPAIGNS_TTL_MINS = 15 +CAMPAIGNS_TTL = timedelta(minutes=CAMPAIGNS_TTL_MINS) +STATUS_TTL_MINS = 5 +STATUS_TTL = timedelta(minutes=STATUS_TTL_MINS) + +def _is_same_version(version, other_version): + if version is None or other_version is None: + return version is other_version + return version == other_version + + +class CampaignsRepository(object): + _campaigns_messenger = None + _objective_messenger = None + _track_messenger = None + _track_listener = None + __notifyevents__ = ['OnCharacterSessionChanged'] + + def __init__(self, public_gateway, service_manager, mock_public_gateway, mock_setting, campaigns_messenger_class, objective_messenger_class, track_messenger_class, track_listener_class, event_matcher_messenger_class, do_prime = True): + self._public_gateway = public_gateway + self._service_manager = service_manager + self._mock_public_gateway = mock_public_gateway + self._mock_setting = mock_setting + self._campaigns_messenger = campaigns_messenger_class(public_gateway) + self._objective_messenger = objective_messenger_class(public_gateway) + self._track_messenger = track_messenger_class(public_gateway) + self._track_listener = track_listener_class(public_gateway) + self._campaign_definitions_cache = TTLCache(CAMPAIGNS_TTL) + self._objective_definitions_cache = TTLCache(CAMPAIGNS_TTL) + self._campaign_status_cache = TTLCache(STATUS_TTL) + self._track_status_cache = TTLCache(STATUS_TTL) + self._objective_status_cache = TTLCache(STATUS_TTL) + self._objective_participant_stats_cache = TTLCache(CAMPAIGNS_TTL) + self._track_participant_stats_cache = TTLCache(CAMPAIGNS_TTL) + self._event_matcher_messenger = event_matcher_messenger_class(public_gateway) + self._event_matcher_cache = {} + self._event_matcher_disk_storage = BinaryDiskStorage('campaign_event_matcher_definitions') + self._update_gateway() + self._service_manager.RegisterNotify(self) + self._connect_signals() + if do_prime: + self._prime_caches_from_disk() + + def __del__(self): + self._service_manager.UnregisterNotify(self) + self._disconnect_signals() + + def OnCharacterSessionChanged(self, oldCharacterID, newCharacterID): + logger.info('OnCharacterSessionChanged') + self.clear_caches() + + @MemoizeWithLock(CAMPAIGNS_TTL_MINS) + def get_all_for_namespace(self, namespace): + return self._campaigns_messenger.get_all_for_namespace_request(namespace) + + @MemoizeWithLock(STATUS_TTL_MINS) + def get_all_unredeemed_participant_rewards(self, namespace): + unredeemed_rewards = {} + page_token = None + while True: + page, page_token = self._campaigns_messenger.get_all_unredeemed_participant_rewards_request(namespace, page_token) + for track_id, track_rewards in page: + if track_id in unredeemed_rewards: + track_rewards = unredeemed_rewards[track_id].combined_with(track_rewards) + unredeemed_rewards[track_id] = track_rewards + + if not page_token: + return unredeemed_rewards + + def get_track_unredeemed_rewards(self, namespace, track_id): + return self.get_all_unredeemed_participant_rewards(namespace).get(track_id) + + def clear_caches(self): + self.get_all_for_namespace.clear_memoized() + self.get_limits.clear_memoized() + self._campaign_definitions_cache.clear_cache() + self._objective_definitions_cache.clear_cache() + self._campaign_status_cache.clear_cache() + self._objective_status_cache.clear_cache() + self._track_status_cache.clear_cache() + self._objective_participant_stats_cache.clear_cache() + self._track_participant_stats_cache.clear_cache() + self.get_all_unredeemed_participant_rewards.clear_memoized() + + def _update_gateway(self, *args, **kwargs): + enabled = self._mock_setting.is_enabled() + logger.info('Mocking is enabled: %s', enabled) + gateway = self._mock_public_gateway if enabled else self._public_gateway + for messenger in (self._campaigns_messenger, + self._objective_messenger, + self._track_messenger, + self._event_matcher_messenger): + messenger.override_gateway(gateway) + + self.clear_caches() + + def _connect_signals(self): + self._mock_setting.register_to_updates(self._update_gateway) + self._track_listener.on_contributed.connect(self._on_track_contributed) + + def _disconnect_signals(self): + self._mock_setting.unregister_from_updates(self._update_gateway) + self._track_listener.on_contributed.disconnect(self._on_track_contributed) + + def _prime_caches_from_disk(self): + logger.info('_prime_caches_from_disk') + event_matcher_definitions_flatbuffer = self._event_matcher_disk_storage.get() + if event_matcher_definitions_flatbuffer is not None: + self._event_matcher_cache = deserialize_flatbuffer_to_versioned_definitions_dict(event_matcher_definitions_flatbuffer) + logger.info('event matcher cache: %s', self._event_matcher_cache) + + def _on_track_contributed(self, track_id, total_participant_progress): + if track_id in self._track_status_cache: + self._track_status_cache.expire(track_id) + track_participant_stats = self._track_participant_stats_cache.get_ignore_expiry(track_id) + if track_participant_stats is not NO_CACHED_DATA and track_participant_stats is not None: + self._track_participant_stats_cache.store(track_id, TrackParticipantStats(total_participant_progress, track_participant_stats.max_participant_contribution_reached)) + self.get_all_unredeemed_participant_rewards.clear_memoized() + campaigns_signals.on_track_contributed(track_id, total_participant_progress) + + @Memoize + def get_limits(self): + return self._campaigns_messenger.get_limits_request() + + def commit(self, objective_id): + self._campaigns_messenger.commit_request(objective_id) + self._objective_participant_stats_cache.store(objective_id, ObjectiveParticipantStats(CommitmentState.COMMITTED)) + campaigns_signals.on_committed_state_changed(objective_id) + + def resign(self, objective_id): + self._campaigns_messenger.resign_request(objective_id) + self._objective_participant_stats_cache.store(objective_id, ObjectiveParticipantStats(CommitmentState.RESIGNED)) + campaigns_signals.on_committed_state_changed(objective_id) + + def redeem_participant_rewards(self, track_id): + self._track_messenger.redeem_participant_rewards_request(track_id) + self.get_all_unredeemed_participant_rewards.clear_memoized() + campaigns_signals.on_track_participant_rewards_redeemed(track_id) + + def get_ticking_contributions_prediction(self, track_id): + return self._track_messenger.get_ticking_contributions_prediction_request(track_id) + + @single_flight + def get_campaign_definition(self, campaign_id): + definition = self._campaign_definitions_cache.get(campaign_id) + if definition is not NO_CACHED_DATA: + return definition + expired_definition = self._campaign_definitions_cache.get_ignore_expiry(campaign_id) + known_version = None if expired_definition is NO_CACHED_DATA else expired_definition.version + result = self._campaigns_messenger.get_request(campaign_id, known_version) + if result is NOT_MODIFIED: + self._campaign_definitions_cache.reset_expiration(campaign_id) + return expired_definition + definition, campaign_status, track_statuses = result + self._campaign_definitions_cache.store(campaign_id, definition) + if campaign_status is not None: + self._campaign_status_cache.store(campaign_id, campaign_status) + self._store_track_statuses(track_statuses) + if known_version is not None: + self._expire_objective_definitions(definition.objective_ids) + campaigns_signals.on_campaign_updated(campaign_id) + return definition + + def _store_track_statuses(self, track_statuses): + for track_status in track_statuses: + self._track_status_cache.store(track_status.track_id, track_status) + + def _get_cached_track_statuses(self, track_ids): + track_statuses = [ self._track_status_cache.get(track_id) for track_id in track_ids ] + if any((track_status is NO_CACHED_DATA for track_status in track_statuses)): + return None + return track_statuses + + @single_flight + def get_campaign_status(self, campaign_id): + campaign_status = self._campaign_status_cache.get(campaign_id) + if campaign_status is not NO_CACHED_DATA: + track_ids = [ track.track_id for track in self.get_campaign_definition(campaign_id).tracks ] + track_statuses = self._get_cached_track_statuses(track_ids) + if track_statuses is not None: + return (campaign_status, track_statuses) + campaign_status, track_statuses = self._campaigns_messenger.get_status_request(campaign_id) + self._campaign_status_cache.store(campaign_id, campaign_status) + self._store_track_statuses(track_statuses) + return (campaign_status, track_statuses) + + @single_flight + def get_objective_status(self, objective_id, campaign_id): + objective_status = self._objective_status_cache.get(objective_id) + if objective_status is not NO_CACHED_DATA: + definition = self.get_objective_definition(objective_id, campaign_id) + track_statuses = self._get_cached_track_statuses([ track.track_id for track in definition.tracks ]) + if track_statuses is not None: + return (objective_status, track_statuses) + objective_status, track_statuses = self._objective_messenger.get_status_request(objective_id) + self._objective_status_cache.store(objective_id, objective_status) + self._store_track_statuses(track_statuses) + return (objective_status, track_statuses) + + def _get_cached_track_participant_stats(self, track_ids): + track_participant_stats = {track_id:self._track_participant_stats_cache.get(track_id) for track_id in track_ids} + if any((stats is NO_CACHED_DATA for stats in track_participant_stats.values())): + return None + return track_participant_stats + + @single_flight + def get_objective_participant_stats(self, objective_id, campaign_id): + objective_participant_stats = self._objective_participant_stats_cache.get(objective_id) + if objective_participant_stats is not NO_CACHED_DATA: + definition = self.get_objective_definition(objective_id, campaign_id) + track_participant_stats = self._get_cached_track_participant_stats([ track.track_id for track in definition.tracks ]) + if track_participant_stats is not None: + return (objective_participant_stats, track_participant_stats) + objective_participant_stats, track_participant_stats = self._objective_messenger.get_participant_status_request(objective_id) + self._objective_participant_stats_cache.store(objective_id, objective_participant_stats) + for track_id, stats in track_participant_stats.items(): + self._track_participant_stats_cache.store(track_id, stats) + + return (objective_participant_stats, track_participant_stats) + + @single_flight + def get_objective_definition(self, objective_id, campaign_id): + definition = self._objective_definitions_cache.get(objective_id) + if definition is not NO_CACHED_DATA and not self._differs_from_cached_campaign(definition, campaign_id): + return definition + expired_definition = self._objective_definitions_cache.get_ignore_expiry(objective_id) + known_version = None if expired_definition is NO_CACHED_DATA else expired_definition.campaign_version + result = self._objective_messenger.get_request(objective_id, known_version) + if result is NOT_MODIFIED: + self._objective_definitions_cache.reset_expiration(objective_id) + self._expire_stale_campaign_definition(campaign_id, known_version) + return expired_definition + self._objective_definitions_cache.store(objective_id, result) + self._expire_stale_campaign_definition(campaign_id, result.campaign_version) + if expired_definition is not NO_CACHED_DATA: + campaigns_signals.on_objective_updated(objective_id) + return result + + def _expire_stale_campaign_definition(self, campaign_id, current_version): + cached_campaign = self._campaign_definitions_cache.get(campaign_id) + if cached_campaign is not NO_CACHED_DATA and not _is_same_version(cached_campaign.version, current_version): + self._campaign_definitions_cache.expire(campaign_id) + + def _differs_from_cached_campaign(self, definition, campaign_id): + cached_campaign = self._campaign_definitions_cache.get(campaign_id) + if cached_campaign is NO_CACHED_DATA or cached_campaign.version is None or definition.campaign_version is None: + return False + return cached_campaign.version != definition.campaign_version + + @single_flight + def get_event_matcher_definitions(self, semantic_version): + if semantic_version in self._event_matcher_cache: + return self._event_matcher_cache[semantic_version] + definitions = self._event_matcher_messenger.get_all_request(semantic_version) + self._event_matcher_cache[semantic_version] = definitions + self._update_event_matcher_disk_cache() + return definitions + + def _update_event_matcher_disk_cache(self): + data = serialize_versioned_definitions_to_flatbuffer(self._event_matcher_cache) + self._event_matcher_disk_storage.set(data) + + def _expire_objective_definitions(self, objective_ids): + for objective_id in objective_ids: + if objective_id in self._objective_definitions_cache: + self._objective_definitions_cache.expire(objective_id) diff --git a/campaigns/client/v2/signals.py b/campaigns/client/v2/signals.py @@ -0,0 +1,8 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\signals.py +from __future__ import absolute_import, division, print_function +from signals import Signal +on_committed_state_changed = Signal('campaigns_v2.on_committed_state_changed') +on_track_contributed = Signal('campaigns_v2.on_track_contributed') +on_track_participant_rewards_redeemed = Signal('campaigns_v2.on_track_participant_rewards_redeemed') +on_campaign_updated = Signal('campaigns_v2.on_campaign_updated') +on_objective_updated = Signal('campaigns_v2.on_objective_updated') diff --git a/campaigns/client/v2/triggers/__init__.py b/campaigns/client/v2/triggers/__init__.py @@ -0,0 +1,2 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\triggers\__init__.py +pass diff --git a/carbon/common/lib/whitelist.py b/carbon/common/lib/whitelist.py @@ -7,7 +7,7 @@ whitelist += '\n foo.SlimItem\n\n eve.common.script.util.slimItem. if boot.role == 'server': whitelist += '\n agent.StandardMissionDetails\n agent.HeraldryMissionDetails\n agent.ResearchMissionDetails\n agent.StorylineMissionDetails\n agent.EpicArcMissionDetails\n agent.OfferDetails\n agent.LoyaltyPoints\n agent.Agent\n agent.Credits\n agent.Item\n agent.Entity\n agent.Objective\n agent.FetchObjective\n agent.EncounterObjective\n agent.DungeonObjective\n agent.TransportObjective\n agent.AgentObjective\n agent.Reward\n agent.TimeBonusReward\n agent.MissionReferral\n agent.Location\n agent.ItemDeclarationError\n agent.ItemResolutionFailure\n agent.TransferItemFailure\n\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.StandardMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.HeraldryMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.ResearchMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.StorylineMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.EpicArcMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.OfferDetails\n eve.server.script.mgt.npc.agents.items.LoyaltyPoints\n eve.server.script.mgt.npc.agents.items.Agent\n eve.server.script.mgt.npc.agents.items.Credits\n eve.server.script.mgt.npc.agents.items.Item\n eve.server.script.mgt.npc.agents.items.Entity\n eve.server.script.mgt.npc.agents.items.Objective\n eve.server.script.mgt.npc.agents.items.FetchObjective\n eve.server.script.mgt.npc.agents.items.EncounterObjective\n eve.server.script.mgt.npc.agents.items.DungeonObjective\n eve.server.script.mgt.npc.agents.items.TransportObjective\n eve.server.script.mgt.npc.agents.items.AgentObjective\n eve.server.script.mgt.npc.agents.items.Reward\n eve.server.script.mgt.npc.agents.items.TimeBonusReward\n eve.server.script.mgt.npc.agents.items.MissionReferral\n eve.server.script.mgt.npc.agents.items.Location\n eve.server.script.mgt.npc.agents.exceptions.ItemDeclarationError\n eve.server.script.mgt.npc.agents.exceptions.ItemResolutionFailure\n eve.server.script.mgt.npc.agents.exceptions.TransferItemFailure\n\n sys.A\n sys.AgentString\n sys.AgentUnicode\n\n eve.common.script.sys.strangeStrings.A\n eve.common.script.sys.strangeStrings.AgentString\n eve.common.script.sys.strangeStrings.AgentUnicode\n\n scriber.hermes.Notification\n scriber.hermes.ReadStatus\n\n externalQueue.actions.ExternalActionException\n npcs.server.rewards.rewards.GroupRewardData\n npcs.server.rewards.rewards.DisqualificationData\n\n operations.common.const.RewardToken\n operations.common.const.SkillRewardToken \n\n raffles.server.PendingRaffle\n \n skills.server.exceptions.SkillBundleInjectionFailed\n skills.server.exceptions.MultiSkillBundleInjectForbidden\n \n evefitting.errors.FittingDoesNotExistError\n evefitting.errors.FittingIsNotValid\n \n externalQueue.utils.FilterGenerator\n \n behaviors.blackboards.scopes.Scope\n \n voidspace.server.content_manager.PlayerLocationInfo\n ballpark.gridallocationmanager.SolarSystemFullException\n ballpark.gridallocationmanager.GridAlreadyAllocatedError\n \n storylines.server.airnpe.AirNpeStartData\n \n nodegraph.server.atoms.atom_service.AtomNotFoundError\n nodegraph.server.atoms.atom_service.AtomRemoteMethodNotSupportedError \n \n shipcaster.launcherData.LauncherData\n \n lpOffers.exceptions.InsufficientBalanceError\n lpOffers.exceptions.MissingCorpRoleError\n lpOffers.exceptions.WrongCorporationMembershipError\n\n pirateinsurgency.server.campaignServerSnapshot.CampaignServerSnapshot\n \n assetholding.server.inventory.exceptions.HoldItemsFailed\n assetholding.server.inventory.exceptions.SpawnItemsFailed\n\n sovereignty.hub.server.errors.ItemCannotBeAddedToSovHubError\n sovereignty.skyhook.server.errors.CannotActivateError\n sovereignty.skyhook.server.errors.CannotAccessReagentsError\n \n spacecomponents.server.components.mercenaryDen.MercenaryDenNotFound\n spacecomponents.server.components.mercenaryDen.ValidateStartRequestFailed\n \n sovereignty.radius_dungeon_distribution.server.radius_dungeon_distribution_solarsystem.RadiusDungeonDistributionInstance\n evedungeons.server.scan_data.ScanData\n ' if boot.role == 'client': - whitelist += '\n playerprogression.assetnetworthnotifier.AssetNetWorthProgression\n playerprogression.contractprogressionnotifier.ContractProgression\n playerprogression.marketprogressionnotifier.MarketProgression\n\n raffles.common.const.BlueprintType\n campaigns.client.data_model.campaign.CampaignID\n ' + whitelist += '\n playerprogression.assetnetworthnotifier.AssetNetWorthProgression\n playerprogression.contractprogressionnotifier.ContractProgression\n playerprogression.marketprogressionnotifier.MarketProgression\n\n raffles.common.const.BlueprintType\n campaigns.client.v1.data_model.campaign.CampaignID\n campaigns.client.v2.data_model.campaign.CampaignID\n ' def InitWhitelist(): wl = whitelist diff --git a/eve/client/script/parklife/gameui.py b/eve/client/script/parklife/gameui.py @@ -24,7 +24,7 @@ from achievement_system.client.api import repository as achievement_system_repos from achievement_system.client.ui.fanfare.controller import AchievementFanfareUIController from cosmetics.client.character.title.api import repository as character_titles_repository from auraguidance.client.api import initialize_aura_guidance_repository -from campaigns.client.api import initialize_campaigns_repository +from campaigns.client.api import initialize_campaigns_repository_v1, initialize_campaigns_repository_v2 from carbon.common.lib import const, serverInfo from carbon.common.script.sys.service import Service, SERVICE_RUNNING, SERVICE_START_PENDING, ROLEMASK_ELEVATEDPLAYER from carbonui import uiconst @@ -675,7 +675,8 @@ class GameUI(Service): plex_repository.initialize_repository(self.publicGatewaySvc) setup_singleton(self.publicGatewaySvc, GetVolume, get_cargo_volume_available, extract_infomorphs_to_ship, ShouldMockSetting()) initialize_aura_guidance_repository(self.publicGatewaySvc) - initialize_campaigns_repository(self.publicGatewaySvc, sm, message_player) + initialize_campaigns_repository_v1(self.publicGatewaySvc, sm, message_player) + initialize_campaigns_repository_v2(self.publicGatewaySvc, sm, message_player) def RegisterBlueResources(self): from carbon.client.script.graphics.resourceConstructors.gradients import Gradient, GradientRadial, Gradient2D diff --git a/eve/client/script/ui/shared/agencyNew/contentGroups/contentGroupConst.py b/eve/client/script/ui/shared/agencyNew/contentGroups/contentGroupConst.py @@ -114,7 +114,8 @@ contentGroupNameByID = {contentGroupHome: 'UI/Agency/ContentGroups/ContentGroupH contentGroupPhasedFields: 'UI/Agency/ContentGroups/PhasedFields', contentGroupFactionalWarfareGuide: 'UI/Agency/ContentGroups/ContentGroupFactionalWarfareGuide', contentGroupTheatersOfWar: 'UI/Agency/ContentGroups/TheatersOfWar', - contentGroupCampaigns: 'UI/Agency/ContentGroups/Campaigns'} + contentGroupCampaigns: 'UI/Agency/ContentGroups/Campaigns', + contentGroupSeasons: 'UI/Agency/ContentGroups/SeasonalEvent'} def get_content_group_name(content_group_id): extended_content_group_name = contentGroupNameByID.get(content_group_id, '') diff --git a/eve/client/script/ui/shared/mapView/filters/mapFilterPhasedSites.py b/eve/client/script/ui/shared/mapView/filters/mapFilterPhasedSites.py @@ -1,6 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\mapView\filters\mapFilterPhasedSites.py import eveicon -import log from carbonui.util.color import Color from eve.client.script.ui import eveColor from eve.client.script.ui.shared.mapView.filters.baseMapFilter import BaseMapFilter @@ -36,11 +35,11 @@ class MapFilterPhasedSites(BaseMapFilter): if all_tags_by_system_id is None: ui_message.message_player(GetByLabel('UI/Common/NoDataAvailable')) return {} - tagged_system_ids = [ system_id for system_id, tags in all_tags_by_system_id.iteritems() if idCheckers.IsSolarSystem(system_id) and FILTER_TAG in tags ] - for system_id in self._GetValidSolarSystemIDs(tagged_system_ids): - ret[system_id] = {'texture_path': MARKER_ICON, - 'color': MARKER_COLOR, - 'icon_size': 32} + for system_id, tags in all_tags_by_system_id.items(): + if idCheckers.IsSolarSystem(system_id) and FILTER_TAG in tags: + ret[system_id] = {'texture_path': MARKER_ICON, + 'color': MARKER_COLOR, + 'icon_size': 32} return ret @@ -62,28 +61,20 @@ class MapFilterPhasedSites(BaseMapFilter): def _GetMarkerHint(self, solarSystemID): return GetByLabel('UI/Map/PhasedFieldPinTooltip') - def UpdateData(self): - self.ClearCache() - super(MapFilterPhasedSites, self).UpdateData() - - def _GetValidSolarSystemIDs(self, tagged_system_ids): - if not tagged_system_ids: - return [] - try: - return sm.RemoteSvc('dungeonInstanceCacheMgr').GetValidPhasedFieldSolarSystems(tagged_system_ids) - except Exception: - log.LogException('Failed to validate phased field map tags, falling back to the tag data') - return tagged_system_ids - def GetMarkers(self): - if not self.dataBySolarSystemID: + data = self.consumer.get_all() + if not data: return None ret = [] - for system_id in self.dataBySolarSystemID: - ret.append({'solarSystemID': system_id, - 'markerClass': MarkerPhasedSite, - 'value': self.GetAmountForSolarSystem(system_id), - 'hint': self._GetMarkerHint(system_id), - 'texturePath': MARKER_ICON}) + for system_id, tags in data.items(): + if not idCheckers.IsSolarSystem(system_id): + continue + if FILTER_TAG in tags: + marker = {'solarSystemID': system_id, + 'markerClass': MarkerPhasedSite, + 'value': self.GetAmountForSolarSystem(system_id), + 'hint': self._GetMarkerHint(system_id), + 'texturePath': MARKER_ICON} + ret.append(marker) return ret diff --git a/eve/client/script/ui/shared/pointerTool/helpPointerSvc.py b/eve/client/script/ui/shared/pointerTool/helpPointerSvc.py @@ -204,7 +204,7 @@ class HelpPointerSvc(Service): for eachChild in groupChildren: contentGroupID = eachChild.contentGroupID namePath = contentGroupNameByID.get(contentGroupID, None) - if namePath: + if namePath and eachChild.IsVisible(): pointerObject = GetPointerObjectForAgencyCard(eachChild) pointerDict[pointerObject.uiElementName] = pointerObject self._add_agency_card_children(pointerDict, eachChild.children, level=level + 1) diff --git a/eve/client/script/ui/shared/theatersOfWar/campaigns/panel_controller.py b/eve/client/script/ui/shared/theatersOfWar/campaigns/panel_controller.py @@ -1,9 +1,9 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\campaigns\panel_controller.py import logging -from campaigns.client.api import get_campaigns_repository -from campaigns.client.data_model.campaign import CampaignID +from campaigns.client.api import get_campaigns_repository_v1 +from campaigns.client.v1.data_model.campaign import CampaignID from campaigns.client.errors import CampaignRequestError -from campaigns.client.signals import on_campaign_completed, on_objective_contributed_notice +from campaigns.client.v1.signals import on_objective_contributed_notice from carbon.common.script.util.mathCommon import FloatCloseEnough from clientsettings.setting import CharSettingNumeric, CharSettingUUID from campaigns.client.ui_controllers.campaign_controller import CampaignController @@ -19,7 +19,7 @@ logger = logging.getLogger(__name__) class CampaignPanelController(object): def __init__(self): - self._repository = get_campaigns_repository() + self._repository = get_campaigns_repository_v1() self._campaigns_by_id = None selected_campaign_uuid = selected_campaign_id_setting.get() self._selected_campaign_id = CampaignID(selected_campaign_uuid) if selected_campaign_uuid else None diff --git a/eve/client/script/ui/shared/theatersOfWar/campaigns/panels/overview_job_provider_panel.py b/eve/client/script/ui/shared/theatersOfWar/campaigns/panels/overview_job_provider_panel.py @@ -2,7 +2,7 @@ import eveicon import logging from caching import Memoize -from campaigns.client.signals import on_commited_state_changed, on_job_provider_finished_refreshing_campaign +from campaigns.client.v1.signals import on_commited_state_changed, on_job_provider_finished_refreshing_campaign from carbonui import Align, const as uiconst from carbonui.button.menu import MenuButtonIcon from carbonui.control.contextMenu.menuData import MenuData diff --git a/eve/client/script/ui/shared/theatersOfWar/campaigns/panels/overview_panel.py b/eve/client/script/ui/shared/theatersOfWar/campaigns/panels/overview_panel.py @@ -5,7 +5,7 @@ import uthread2 from achievement_system.client.api.signal import on_achievement_progressed from campaigns.client.errors import CampaignRequestError from campaigns.client.settings import campaign_animate_background -from campaigns.client.signals import on_campaign_completed +from campaigns.client.v1.signals import on_campaign_completed from carbonui import Align, PickState, TextColor from carbonui.primitives.container import Container from carbonui.primitives.containerAutoSize import ContainerAutoSize diff --git a/eve/client/script/ui/shared/theatersOfWar/landingPage/campaign_cont.py b/eve/client/script/ui/shared/theatersOfWar/landingPage/campaign_cont.py @@ -1,14 +1,14 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\landingPage\campaign_cont.py import logging from campaigns.client.errors import CampaignStatsRequestError -from campaigns.client.signals import on_campaign_completed +from campaigns.client.v1.signals import on_campaign_completed from carbonui import Align, PickState from carbonui.primitives.container import Container from carbonui.primitives.containerAutoSize import ContainerAutoSize from carbonui.primitives.layoutGrid import LayoutGrid from carbonui.primitives.sprite import Sprite from eve.client.script.ui.control.loadingContainer import LoadingContainer -from eve.client.script.ui.shared.theatersOfWar.campaigns.campaign_progress import CampaignProgress, BaseProgress +from eve.client.script.ui.shared.theatersOfWar.campaigns.campaign_progress import CampaignProgress from eve.client.script.ui.shared.theatersOfWar.landingPage.landingPageWidgets import WidgetContWithContent from eveexceptions import ExceptionEater from localization import GetByLabel diff --git a/eve/devtools/script/campaignDebugger.py b/eve/devtools/script/campaignDebugger.py @@ -1,7 +1,6 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\devtools\script\campaignDebugger.py import blue import uthread2 -from campaigns.client.data_model.campaign import CampaignState from carbon.common.script.util.commonutils import StripTags from carbonui import Align from carbonui.control.combo import Combo @@ -29,8 +28,8 @@ class CampaignDebugger(Window): uthread2.StartTasklet(self.load_campaigns) def load_campaigns(self): - from campaigns.client.api import get_campaigns_repository - repository = get_campaigns_repository() + from campaigns.client.api import get_campaigns_repository_v1 + repository = get_campaigns_repository_v1() current_campaigns_by_id = repository.get_data_for_all_current_campaigns() options = [] for campaign_id, c in current_campaigns_by_id.iteritems(): diff --git a/eveProto/generated/eve/payment/api_pb2.py b/eveProto/generated/eve/payment/api_pb2.py @@ -9,16 +9,18 @@ from eveProto.generated.eve.fulfillment.offer import offer_pb2 as eve_dot_fulfil from eveProto.generated.eve.payment.customer import customer_pb2 as eve_dot_payment_dot_customer_dot_customer__pb2 from eveProto.generated.eve.payment.merchant import merchant_pb2 as eve_dot_payment_dot_merchant_dot_merchant__pb2 from eveProto.generated.eve.payment import payment_pb2 as eve_dot_payment_dot_payment__pb2 +from eveProto.generated.eve.payment.purchase import purchase_pb2 as eve_dot_payment_dot_purchase_dot_purchase__pb2 from eveProto.generated.eve.store.offer import offer_pb2 as eve_dot_store_dot_offer_dot_offer__pb2 from eveProto.generated.eve.store.targetaudience.offer import offer_pb2 as eve_dot_store_dot_targetaudience_dot_offer_dot_offer__pb2 from eveProto.generated.eve.user import user_pb2 as eve_dot_user_dot_user__pb2 from eveProto.generated.eve.vendors.ingenico import ingenico_pb2 as eve_dot_vendors_dot_ingenico_dot_ingenico__pb2 from eveProto.generated.eve.vendors.ingenico import wxdatarecord_pb2 as eve_dot_vendors_dot_ingenico_dot_wxdatarecord__pb2 -DESCRIPTOR = _descriptor.FileDescriptor(name='eve/payment/api.proto', package='eve.payment.api', syntax='proto3', serialized_options='Z:github.com/ccpgames/eve-proto-go/generated/eve/payment/api', create_key=_descriptor._internal_create_key, serialized_pb='\n\x15eve/payment/api.proto\x12\x0feve.payment.api\x1a\reve/eve.proto\x1a!eve/fulfillment/offer/offer.proto\x1a#eve/payment/customer/customer.proto\x1a#eve/payment/merchant/merchant.proto\x1a\x19eve/payment/payment.proto\x1a\x1beve/store/offer/offer.proto\x1a*eve/store/targetaudience/offer/offer.proto\x1a\x13eve/user/user.proto\x1a#eve/vendors/ingenico/ingenico.proto\x1a\'eve/vendors/ingenico/wxdatarecord.proto"\xd4\x05\n\nAuthorized\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x02 \x01(\x0b2\x17.eve.payment.Attributes\x12"\n\x04user\x18\x03 \x01(\x0b2\x14.eve.user.Identifier\x122\n\x08customer\x18\x04 \x01(\x0b2 .eve.payment.customer.Identifier\x12=\n\x13customer_attributes\x18\x05 \x01(\x0b2 .eve.payment.customer.Attributes\x124\n\x05offer\x18\x06 \x01(\x0b2!.eve.fulfillment.offer.IdentifierB\x02\x18\x01\x122\n\x08merchant\x18\x07 \x01(\x0b2 .eve.payment.merchant.Identifier\x12;\n\x15payment_status_update\x18\x08 \x01(\x0b2\x1c.eve.vendors.ingenico.Update\x124\n\x0bstore_offer\x18\t \x01(\x0b2\x1b.eve.store.offer.IdentifierB\x02\x18\x01\x12\x16\n\x0eoffer_quantity\x18\n \x01(\r\x120\n\tvgs_offer\x18\x0b \x01(\x0b2\x1b.eve.store.offer.IdentifierH\x00\x12M\n\x17targeted_audience_offer\x18\x0c \x01(\x0b2*.eve.store.targetaudience.offer.IdentifierH\x00\x12\x15\n\x0bnot_present\x18\r \x01(\x08H\x01\x12\x16\n\x0cpartner_code\x18\x0e \x01(\tH\x01B\x15\n\x13offer_specificationB\x14\n\x12partner_code_usage"\xb3\x02\n\tCompleted\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xb2\x02\n\x08Refunded\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xb6\x02\n\x0cChargebacked\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xd0\x02\n\x08Adjusted\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier\x122\n\x08merchant\x18\x02 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x03 \x01(\x0b2 .eve.payment.customer.Identifier\x12\x17\n\x0famount_in_cents\x18\x04 \x01(\x03\x12\x10\n\x08currency\x18\x05 \x01(\t\x12=\n\x06record\x18\x06 \x01(\x0b2-.eve.vendors.ingenico.wxdatarecord.Identifier\x12H\n\x11record_attributes\x18\x07 \x01(\x0b2-.eve.vendors.ingenico.wxdatarecord.Attributes"S\n\x14GetAllForUserRequest\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12\x17\n\x04page\x18\x02 \x01(\x0b2\t.eve.Page"d\n\x15GetAllForUserResponse\x12)\n\x08payments\x18\x01 \x03(\x0b2\x17.eve.payment.Identifier\x12 \n\tnext_page\x18\x02 \x01(\x0b2\r.eve.NextPage"6\n\nGetRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier"\xb5\x02\n\x0bGetResponse\x12+\n\nattributes\x18\x01 \x01(\x0b2\x17.eve.payment.Attributes\x12\x13\n\x0bdescription\x18\x02 \x01(\t\x124\n\x0bstore_offer\x18\x03 \x01(\x0b2\x1b.eve.store.offer.IdentifierB\x02\x18\x01\x12\x16\n\x0eoffer_quantity\x18\x04 \x01(\r\x120\n\tvgs_offer\x18\x05 \x01(\x0b2\x1b.eve.store.offer.IdentifierH\x00\x12M\n\x17targeted_audience_offer\x18\x06 \x01(\x0b2*.eve.store.targetaudience.offer.IdentifierH\x00B\x15\n\x13offer_specification"=\n\x11GetDetailsRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier";\n\x12GetDetailsResponse\x12%\n\x07details\x18\x01 \x01(\x0b2\x14.eve.payment.Details"9\n\rRefundRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier"\x10\n\x0eRefundResponseB<Z:github.com/ccpgames/eve-proto-go/generated/eve/payment/apib\x06proto3', dependencies=[eve_dot_eve__pb2.DESCRIPTOR, +DESCRIPTOR = _descriptor.FileDescriptor(name='eve/payment/api.proto', package='eve.payment.api', syntax='proto3', serialized_options='Z:github.com/ccpgames/eve-proto-go/generated/eve/payment/api', create_key=_descriptor._internal_create_key, serialized_pb='\n\x15eve/payment/api.proto\x12\x0feve.payment.api\x1a\reve/eve.proto\x1a!eve/fulfillment/offer/offer.proto\x1a#eve/payment/customer/customer.proto\x1a#eve/payment/merchant/merchant.proto\x1a\x19eve/payment/payment.proto\x1a#eve/payment/purchase/purchase.proto\x1a\x1beve/store/offer/offer.proto\x1a*eve/store/targetaudience/offer/offer.proto\x1a\x13eve/user/user.proto\x1a#eve/vendors/ingenico/ingenico.proto\x1a\'eve/vendors/ingenico/wxdatarecord.proto"\xd4\x05\n\nAuthorized\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x02 \x01(\x0b2\x17.eve.payment.Attributes\x12"\n\x04user\x18\x03 \x01(\x0b2\x14.eve.user.Identifier\x122\n\x08customer\x18\x04 \x01(\x0b2 .eve.payment.customer.Identifier\x12=\n\x13customer_attributes\x18\x05 \x01(\x0b2 .eve.payment.customer.Attributes\x124\n\x05offer\x18\x06 \x01(\x0b2!.eve.fulfillment.offer.IdentifierB\x02\x18\x01\x122\n\x08merchant\x18\x07 \x01(\x0b2 .eve.payment.merchant.Identifier\x12;\n\x15payment_status_update\x18\x08 \x01(\x0b2\x1c.eve.vendors.ingenico.Update\x124\n\x0bstore_offer\x18\t \x01(\x0b2\x1b.eve.store.offer.IdentifierB\x02\x18\x01\x12\x16\n\x0eoffer_quantity\x18\n \x01(\r\x120\n\tvgs_offer\x18\x0b \x01(\x0b2\x1b.eve.store.offer.IdentifierH\x00\x12M\n\x17targeted_audience_offer\x18\x0c \x01(\x0b2*.eve.store.targetaudience.offer.IdentifierH\x00\x12\x15\n\x0bnot_present\x18\r \x01(\x08H\x01\x12\x16\n\x0cpartner_code\x18\x0e \x01(\tH\x01B\x15\n\x13offer_specificationB\x14\n\x12partner_code_usage"\xb3\x02\n\tCompleted\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xb2\x02\n\x08Refunded\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xb6\x02\n\x0cChargebacked\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12(\n\x07payment\x18\x02 \x01(\x0b2\x17.eve.payment.Identifier\x123\n\x12payment_attributes\x18\x03 \x01(\x0b2\x17.eve.payment.Attributes\x122\n\x08merchant\x18\x04 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x05 \x01(\x0b2 .eve.payment.customer.Identifier\x12;\n\x15payment_status_update\x18\x06 \x01(\x0b2\x1c.eve.vendors.ingenico.Update"\xd0\x02\n\x08Adjusted\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier\x122\n\x08merchant\x18\x02 \x01(\x0b2 .eve.payment.merchant.Identifier\x122\n\x08customer\x18\x03 \x01(\x0b2 .eve.payment.customer.Identifier\x12\x17\n\x0famount_in_cents\x18\x04 \x01(\x03\x12\x10\n\x08currency\x18\x05 \x01(\t\x12=\n\x06record\x18\x06 \x01(\x0b2-.eve.vendors.ingenico.wxdatarecord.Identifier\x12H\n\x11record_attributes\x18\x07 \x01(\x0b2-.eve.vendors.ingenico.wxdatarecord.Attributes"S\n\x14GetAllForUserRequest\x12"\n\x04user\x18\x01 \x01(\x0b2\x14.eve.user.Identifier\x12\x17\n\x04page\x18\x02 \x01(\x0b2\t.eve.Page"d\n\x15GetAllForUserResponse\x12)\n\x08payments\x18\x01 \x03(\x0b2\x17.eve.payment.Identifier\x12 \n\tnext_page\x18\x02 \x01(\x0b2\r.eve.NextPage"6\n\nGetRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier"\xdf\x02\n\x0bGetResponse\x12+\n\nattributes\x18\x01 \x01(\x0b2\x17.eve.payment.Attributes\x12\x13\n\x0bdescription\x18\x02 \x01(\t\x124\n\x0bstore_offer\x18\x03 \x01(\x0b2\x1b.eve.store.offer.IdentifierB\x02\x18\x01\x12\x16\n\x0eoffer_quantity\x18\x04 \x01(\r\x120\n\tvgs_offer\x18\x05 \x01(\x0b2\x1b.eve.store.offer.IdentifierH\x00\x12M\n\x17targeted_audience_offer\x18\x06 \x01(\x0b2*.eve.store.targetaudience.offer.IdentifierH\x00\x12(\n\x04cost\x18\x07 \x01(\x0b2\x1a.eve.payment.purchase.CostB\x15\n\x13offer_specification"=\n\x11GetDetailsRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier";\n\x12GetDetailsResponse\x12%\n\x07details\x18\x01 \x01(\x0b2\x14.eve.payment.Details"9\n\rRefundRequest\x12(\n\x07payment\x18\x01 \x01(\x0b2\x17.eve.payment.Identifier"\x10\n\x0eRefundResponseB<Z:github.com/ccpgames/eve-proto-go/generated/eve/payment/apib\x06proto3', dependencies=[eve_dot_eve__pb2.DESCRIPTOR, eve_dot_fulfillment_dot_offer_dot_offer__pb2.DESCRIPTOR, eve_dot_payment_dot_customer_dot_customer__pb2.DESCRIPTOR, eve_dot_payment_dot_merchant_dot_merchant__pb2.DESCRIPTOR, eve_dot_payment_dot_payment__pb2.DESCRIPTOR, + eve_dot_payment_dot_purchase_dot_purchase__pb2.DESCRIPTOR, eve_dot_store_dot_offer_dot_offer__pb2.DESCRIPTOR, eve_dot_store_dot_targetaudience_dot_offer_dot_offer__pb2.DESCRIPTOR, eve_dot_user_dot_user__pb2.DESCRIPTOR, @@ -37,45 +39,46 @@ _AUTHORIZED = _descriptor.Descriptor(name='Authorized', full_name='eve.payment.a _descriptor.FieldDescriptor(name='vgs_offer', full_name='eve.payment.api.Authorized.vgs_offer', index=10, number=11, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='targeted_audience_offer', full_name='eve.payment.api.Authorized.targeted_audience_offer', index=11, number=12, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='not_present', full_name='eve.payment.api.Authorized.not_present', index=12, number=13, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='partner_code', full_name='eve.payment.api.Authorized.partner_code', index=13, number=14, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='offer_specification', full_name='eve.payment.api.Authorized.offer_specification', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), _descriptor.OneofDescriptor(name='partner_code_usage', full_name='eve.payment.api.Authorized.partner_code_usage', index=1, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=366, serialized_end=1090) + _descriptor.FieldDescriptor(name='partner_code', full_name='eve.payment.api.Authorized.partner_code', index=13, number=14, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='offer_specification', full_name='eve.payment.api.Authorized.offer_specification', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), _descriptor.OneofDescriptor(name='partner_code_usage', full_name='eve.payment.api.Authorized.partner_code_usage', index=1, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=403, serialized_end=1127) _COMPLETED = _descriptor.Descriptor(name='Completed', full_name='eve.payment.api.Completed', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='user', full_name='eve.payment.api.Completed.user', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.Completed.payment', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment_attributes', full_name='eve.payment.api.Completed.payment_attributes', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='merchant', full_name='eve.payment.api.Completed.merchant', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='customer', full_name='eve.payment.api.Completed.customer', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Completed.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1093, serialized_end=1400) + _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Completed.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1130, serialized_end=1437) _REFUNDED = _descriptor.Descriptor(name='Refunded', full_name='eve.payment.api.Refunded', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='user', full_name='eve.payment.api.Refunded.user', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.Refunded.payment', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment_attributes', full_name='eve.payment.api.Refunded.payment_attributes', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='merchant', full_name='eve.payment.api.Refunded.merchant', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='customer', full_name='eve.payment.api.Refunded.customer', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Refunded.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1403, serialized_end=1709) + _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Refunded.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1440, serialized_end=1746) _CHARGEBACKED = _descriptor.Descriptor(name='Chargebacked', full_name='eve.payment.api.Chargebacked', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='user', full_name='eve.payment.api.Chargebacked.user', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.Chargebacked.payment', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='payment_attributes', full_name='eve.payment.api.Chargebacked.payment_attributes', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='merchant', full_name='eve.payment.api.Chargebacked.merchant', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='customer', full_name='eve.payment.api.Chargebacked.customer', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Chargebacked.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1712, serialized_end=2022) + _descriptor.FieldDescriptor(name='payment_status_update', full_name='eve.payment.api.Chargebacked.payment_status_update', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1749, serialized_end=2059) _ADJUSTED = _descriptor.Descriptor(name='Adjusted', full_name='eve.payment.api.Adjusted', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.Adjusted.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='merchant', full_name='eve.payment.api.Adjusted.merchant', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='customer', full_name='eve.payment.api.Adjusted.customer', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='amount_in_cents', full_name='eve.payment.api.Adjusted.amount_in_cents', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='currency', full_name='eve.payment.api.Adjusted.currency', index=4, number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='record', full_name='eve.payment.api.Adjusted.record', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='record_attributes', full_name='eve.payment.api.Adjusted.record_attributes', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2025, serialized_end=2361) -_GETALLFORUSERREQUEST = _descriptor.Descriptor(name='GetAllForUserRequest', full_name='eve.payment.api.GetAllForUserRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='user', full_name='eve.payment.api.GetAllForUserRequest.user', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='page', full_name='eve.payment.api.GetAllForUserRequest.page', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2363, serialized_end=2446) -_GETALLFORUSERRESPONSE = _descriptor.Descriptor(name='GetAllForUserResponse', full_name='eve.payment.api.GetAllForUserResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payments', full_name='eve.payment.api.GetAllForUserResponse.payments', index=0, number=1, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='next_page', full_name='eve.payment.api.GetAllForUserResponse.next_page', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2448, serialized_end=2548) -_GETREQUEST = _descriptor.Descriptor(name='GetRequest', full_name='eve.payment.api.GetRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.GetRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2550, serialized_end=2604) + _descriptor.FieldDescriptor(name='record_attributes', full_name='eve.payment.api.Adjusted.record_attributes', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2062, serialized_end=2398) +_GETALLFORUSERREQUEST = _descriptor.Descriptor(name='GetAllForUserRequest', full_name='eve.payment.api.GetAllForUserRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='user', full_name='eve.payment.api.GetAllForUserRequest.user', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='page', full_name='eve.payment.api.GetAllForUserRequest.page', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2400, serialized_end=2483) +_GETALLFORUSERRESPONSE = _descriptor.Descriptor(name='GetAllForUserResponse', full_name='eve.payment.api.GetAllForUserResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payments', full_name='eve.payment.api.GetAllForUserResponse.payments', index=0, number=1, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='next_page', full_name='eve.payment.api.GetAllForUserResponse.next_page', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2485, serialized_end=2585) +_GETREQUEST = _descriptor.Descriptor(name='GetRequest', full_name='eve.payment.api.GetRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.GetRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2587, serialized_end=2641) _GETRESPONSE = _descriptor.Descriptor(name='GetResponse', full_name='eve.payment.api.GetResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='attributes', full_name='eve.payment.api.GetResponse.attributes', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='description', full_name='eve.payment.api.GetResponse.description', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='store_offer', full_name='eve.payment.api.GetResponse.store_offer', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options='\x18\x01', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='offer_quantity', full_name='eve.payment.api.GetResponse.offer_quantity', index=3, number=4, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='vgs_offer', full_name='eve.payment.api.GetResponse.vgs_offer', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='targeted_audience_offer', full_name='eve.payment.api.GetResponse.targeted_audience_offer', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='offer_specification', full_name='eve.payment.api.GetResponse.offer_specification', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=2607, serialized_end=2916) -_GETDETAILSREQUEST = _descriptor.Descriptor(name='GetDetailsRequest', full_name='eve.payment.api.GetDetailsRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.GetDetailsRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2918, serialized_end=2979) -_GETDETAILSRESPONSE = _descriptor.Descriptor(name='GetDetailsResponse', full_name='eve.payment.api.GetDetailsResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='details', full_name='eve.payment.api.GetDetailsResponse.details', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2981, serialized_end=3040) -_REFUNDREQUEST = _descriptor.Descriptor(name='RefundRequest', full_name='eve.payment.api.RefundRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.RefundRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=3042, serialized_end=3099) -_REFUNDRESPONSE = _descriptor.Descriptor(name='RefundResponse', full_name='eve.payment.api.RefundResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=3101, serialized_end=3117) + _descriptor.FieldDescriptor(name='targeted_audience_offer', full_name='eve.payment.api.GetResponse.targeted_audience_offer', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor(name='cost', full_name='eve.payment.api.GetResponse.cost', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='offer_specification', full_name='eve.payment.api.GetResponse.offer_specification', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=2644, serialized_end=2995) +_GETDETAILSREQUEST = _descriptor.Descriptor(name='GetDetailsRequest', full_name='eve.payment.api.GetDetailsRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.GetDetailsRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=2997, serialized_end=3058) +_GETDETAILSRESPONSE = _descriptor.Descriptor(name='GetDetailsResponse', full_name='eve.payment.api.GetDetailsResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='details', full_name='eve.payment.api.GetDetailsResponse.details', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=3060, serialized_end=3119) +_REFUNDREQUEST = _descriptor.Descriptor(name='RefundRequest', full_name='eve.payment.api.RefundRequest', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='payment', full_name='eve.payment.api.RefundRequest.payment', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=3121, serialized_end=3178) +_REFUNDRESPONSE = _descriptor.Descriptor(name='RefundResponse', full_name='eve.payment.api.RefundResponse', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=3180, serialized_end=3196) _AUTHORIZED.fields_by_name['payment'].message_type = eve_dot_payment_dot_payment__pb2._IDENTIFIER _AUTHORIZED.fields_by_name['payment_attributes'].message_type = eve_dot_payment_dot_payment__pb2._ATTRIBUTES _AUTHORIZED.fields_by_name['user'].message_type = eve_dot_user_dot_user__pb2._IDENTIFIER @@ -127,6 +130,7 @@ _GETRESPONSE.fields_by_name['attributes'].message_type = eve_dot_payment_dot_pay _GETRESPONSE.fields_by_name['store_offer'].message_type = eve_dot_store_dot_offer_dot_offer__pb2._IDENTIFIER _GETRESPONSE.fields_by_name['vgs_offer'].message_type = eve_dot_store_dot_offer_dot_offer__pb2._IDENTIFIER _GETRESPONSE.fields_by_name['targeted_audience_offer'].message_type = eve_dot_store_dot_targetaudience_dot_offer_dot_offer__pb2._IDENTIFIER +_GETRESPONSE.fields_by_name['cost'].message_type = eve_dot_payment_dot_purchase_dot_purchase__pb2._COST _GETRESPONSE.oneofs_by_name['offer_specification'].fields.append(_GETRESPONSE.fields_by_name['vgs_offer']) _GETRESPONSE.fields_by_name['vgs_offer'].containing_oneof = _GETRESPONSE.oneofs_by_name['offer_specification'] _GETRESPONSE.oneofs_by_name['offer_specification'].fields.append(_GETRESPONSE.fields_by_name['targeted_audience_offer']) diff --git a/eveProto/generated/eve/payment/payment_pb2.py b/eveProto/generated/eve/payment/payment_pb2.py @@ -8,7 +8,7 @@ _sym_db = _symbol_database.Default() from eveProto.generated.eve.payment.merchant import merchant_pb2 as eve_dot_payment_dot_merchant_dot_merchant__pb2 from eveProto.generated.eve.vendors.ingenico.api import ingenico_pb2 as eve_dot_vendors_dot_ingenico_dot_api_dot_ingenico__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor.FileDescriptor(name='eve/payment/payment.proto', package='eve.payment', syntax='proto3', serialized_options='Z6github.com/ccpgames/eve-proto-go/generated/eve/payment', create_key=_descriptor._internal_create_key, serialized_pb='\n\x19eve/payment/payment.proto\x12\x0beve.payment\x1a#eve/payment/merchant/merchant.proto\x1a\'eve/vendors/ingenico/api/ingenico.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\\\n\nIdentifier\x12\x19\n\x11payment_reference\x18\x01 \x01(\t\x123\n\x10payment_provider\x18\x02 \x01(\x0e2\x15.eve.payment.ProviderB\x02\x18\x01"\xc7\x02\n\nAttributes\x12\x17\n\x0famount_in_cents\x18\x01 \x01(\x03\x12\x10\n\x08currency\x18\x02 \x01(\t\x12+\n\x0epayment_method\x18\x03 \x01(\x0e2\x13.eve.payment.Method\x125\n\x11payment_timestamp\x18\x04 \x01(\x0b2\x1a.google.protobuf.Timestamp\x12\x1a\n\x10unknown_tax_rate\x18\x05 \x01(\x08H\x00\x12(\n\x08tax_rate\x18\x06 \x01(\x0b2\x14.eve.payment.TaxRateH\x00\x12#\n\x06status\x18\x07 \x01(\x0e2\x13.eve.payment.Status\x12/\n\x10payment_provider\x18\x08 \x01(\x0e2\x15.eve.payment.ProviderB\x0e\n\x0chas_tax_rate"\\\n\x07TaxRate\x12\x17\n\x0famount_in_cents\x18\x01 \x01(\x03\x12!\n\x19percentage_of_total_value\x18\x02 \x01(\x01\x12\x15\n\rtaxable_cents\x18\x03 \x01(\x03"\xed\x01\n\x07Details\x122\n\x08merchant\x18\x01 \x01(\x0b2 .eve.payment.merchant.Identifier\x12\x11\n\trecurring\x18\x02 \x01(\x08\x12\x11\n\tsensitive\x18\x03 \x01(\x08\x12\x13\n\x0bdescription\x18\x04 \x01(\t\x12*\n\nfraud_risk\x18\x05 \x01(\x0e2\x16.eve.payment.FraudRisk\x12\x0f\n\x07user_ip\x18\x06 \x01(\t\x126\n\x08ingenico\x18\x07 \x01(\x0b2$.eve.vendors.ingenico.api.Attributes"@\n\x05Money\x12\x15\n\rcurrency_code\x18\x01 \x01(\t\x12\r\n\x05units\x18\x02 \x01(\x03\x12\r\n\x05nanos\x18\x03 \x01(\x05:\x02\x18\x01*\x9c\x04\n\x06Method\x12\x12\n\x0ePM_UNSPECIFIED\x10\x00\x12\x12\n\x0ePM_CREDIT_CARD\x10\x01\x12\x11\n\rPM_DEBIT_CARD\x10\x02\x12\x13\n\x0fPM_STEAM_WALLET\x10\x03\x12\r\n\tPM_PAYPAL\x10\x04\x12\x13\n\x0fPM_DIRECT_DEBIT\x10\x05\x12\x10\n\x0cPM_WEB_MONEY\x10\x06\x12\x12\n\x0ePM_PAYSAFECARD\x10\x07\x12\r\n\tPM_YANDEX\x10\x08\x12\r\n\tPM_SOFORT\x10\t\x12\x0c\n\x08PM_IDEAL\x10\n\x12\x0c\n\x08PM_TOKEN\x10\x0b\x12\r\n\tPM_ALIPAY\x10e\x12\x10\n\x0cPM_ALIPAY_QR\x10f\x12\r\n\tPM_WECHAT\x10g\x12\x13\n\x0fPM_WEIXINPAY_QR\x10h\x12\x0c\n\x07PM_GIFT\x10\xc9\x01\x12\x17\n\x12PM_CODE_REDEMPTION\x10\xca\x01\x12\x18\n\x13PM_IN_GAME_CURRENCY\x10\xcb\x01\x12\x19\n\x14PM_RECRUITMENT_AWARD\x10\xcc\x01\x12\x16\n\x11PM_MEET_AND_GREET\x10\xcd\x01\x12\x15\n\x10PM_SURVEY_REWARD\x10\xce\x01\x12\r\n\x08PM_STEAM\x10\xad\x02\x12\x0e\n\tPM_AMAZON\x10\xae\x02\x12\x0c\n\x07PM_SONY\x10\xaf\x02\x12\x0e\n\tPM_OCULUS\x10\xb0\x02\x12\x0e\n\tPM_TWITCH\x10\xb1\x02\x12\x11\n\x0cPM_EPICSTORE\x10\xb2\x02\x12\x0e\n\tPM_REWARD\x10\xb3\x02*\xff\x01\n\x08Provider\x12\x12\n\x0ePP_UNSPECIFIED\x10\x00\x12\x0f\n\x0bPP_INGENICO\x10\x01\x12\x0c\n\x08PP_STEAM\x10\x02\x12\r\n\tPP_AMAZON\x10\x03\x12\n\n\x06PP_CCP\x10\x0b\x12\x12\n\x0ePP_UNUSED_SONY\x10\x04\x12\x14\n\x10PP_UNUSED_OCULUS\x10\x05\x12\x15\n\x11PP_UNUSED_NETEASE\x10\x06\x12\x17\n\x13PP_UNUSED_BRAINTREE\x10\x07\x12\x14\n\x10PP_UNUSED_TWITCH\x10\x08\x12\x1c\n\x18PP_UNUSED_MEET_AND_GREET\x10\t\x12\x17\n\x13PP_UNUSED_EPICSTORE\x10\n*U\n\tFraudRisk\x12\x12\n\x0ePF_UNSPECIFIED\x10\x00\x12\x0e\n\nPF_NO_RISK\x10\x01\x12\x12\n\x0ePF_MEDIUM_RISK\x10\x02\x12\x10\n\x0cPF_HIGH_RISK\x10\x03*\x83\x04\n\x06Status\x12\x12\n\x0ePS_UNSPECIFIED\x10\x00\x12\n\n\x06PS_NEW\x10\x01\x12\x10\n\x0cPS_VALIDATED\x10\x02\x12\x0e\n\nPS_STARTED\x10\x03\x12\r\n\tPS_FAILED\x10\x04\x12\x0c\n\x08PS_ERROR\x10\x05\x12\x16\n\x12PS_PENDING_PAYMENT\x10\x06\x12\x0b\n\x07PS_PAID\x10\x07\x12\x15\n\x11PS_PENDING_REFUND\x10\x08\x12\x0f\n\x0bPS_REFUNDED\x10\t\x12\x1c\n\x18PS_PENDING_AND_ACTIVATED\x10\n\x12\x17\n\x13PS_REVERSED_PAYMENT\x10\x0b\x12\x18\n\x14PS_CANCELLED_PAYMENT\x10\x0c\x12\x11\n\rPS_CHARGEBACK\x10\r\x12\x19\n\x15PS_PENDING_CHARGEBACK\x10\x0e\x12\x18\n\x14PS_CONNECTION_FAILED\x10\x0f\x12\x1c\n\x18PS_PENDING_AUTHORIZATION\x10\x10\x12\x15\n\x11PS_PAID_COMPLETED\x10\x11\x12\x1c\n\x18PS_PAID_PENDING_DELIVERY\x10\x12\x12\x16\n\x12PS_CANCELED_REFUND\x10\x13\x12\x10\n\x0cPS_TIMED_OUT\x10\x14\x12\x16\n\x12PS_REJECTED_REFUND\x10\x15\x12\x1f\n\x1bPS_PAID_WITHOUT_FULFILLMENT\x10\x16B8Z6github.com/ccpgames/eve-proto-go/generated/eve/paymentb\x06proto3', dependencies=[eve_dot_payment_dot_merchant_dot_merchant__pb2.DESCRIPTOR, eve_dot_vendors_dot_ingenico_dot_api_dot_ingenico__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR]) +DESCRIPTOR = _descriptor.FileDescriptor(name='eve/payment/payment.proto', package='eve.payment', syntax='proto3', serialized_options='Z6github.com/ccpgames/eve-proto-go/generated/eve/payment', create_key=_descriptor._internal_create_key, serialized_pb='\n\x19eve/payment/payment.proto\x12\x0beve.payment\x1a#eve/payment/merchant/merchant.proto\x1a\'eve/vendors/ingenico/api/ingenico.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\\\n\nIdentifier\x12\x19\n\x11payment_reference\x18\x01 \x01(\t\x123\n\x10payment_provider\x18\x02 \x01(\x0e2\x15.eve.payment.ProviderB\x02\x18\x01"\xf7\x02\n\nAttributes\x12\x17\n\x0famount_in_cents\x18\x01 \x01(\x03\x12\x10\n\x08currency\x18\x02 \x01(\t\x12+\n\x0epayment_method\x18\x03 \x01(\x0e2\x13.eve.payment.Method\x125\n\x11payment_timestamp\x18\x04 \x01(\x0b2\x1a.google.protobuf.Timestamp\x12\x1a\n\x10unknown_tax_rate\x18\x05 \x01(\x08H\x00\x12(\n\x08tax_rate\x18\x06 \x01(\x0b2\x14.eve.payment.TaxRateH\x00\x12#\n\x06status\x18\x07 \x01(\x0e2\x13.eve.payment.Status\x12/\n\x10payment_provider\x18\x08 \x01(\x0e2\x15.eve.payment.Provider\x12\x12\n\x08purchase\x18\t \x01(\x08H\x01\x12\x10\n\x06rebill\x18\n \x01(\x08H\x01B\x0e\n\x0chas_tax_rateB\x08\n\x06reason"\\\n\x07TaxRate\x12\x17\n\x0famount_in_cents\x18\x01 \x01(\x03\x12!\n\x19percentage_of_total_value\x18\x02 \x01(\x01\x12\x15\n\rtaxable_cents\x18\x03 \x01(\x03"\xed\x01\n\x07Details\x122\n\x08merchant\x18\x01 \x01(\x0b2 .eve.payment.merchant.Identifier\x12\x11\n\trecurring\x18\x02 \x01(\x08\x12\x11\n\tsensitive\x18\x03 \x01(\x08\x12\x13\n\x0bdescription\x18\x04 \x01(\t\x12*\n\nfraud_risk\x18\x05 \x01(\x0e2\x16.eve.payment.FraudRisk\x12\x0f\n\x07user_ip\x18\x06 \x01(\t\x126\n\x08ingenico\x18\x07 \x01(\x0b2$.eve.vendors.ingenico.api.Attributes"@\n\x05Money\x12\x15\n\rcurrency_code\x18\x01 \x01(\t\x12\r\n\x05units\x18\x02 \x01(\x03\x12\r\n\x05nanos\x18\x03 \x01(\x05:\x02\x18\x01*\x9c\x04\n\x06Method\x12\x12\n\x0ePM_UNSPECIFIED\x10\x00\x12\x12\n\x0ePM_CREDIT_CARD\x10\x01\x12\x11\n\rPM_DEBIT_CARD\x10\x02\x12\x13\n\x0fPM_STEAM_WALLET\x10\x03\x12\r\n\tPM_PAYPAL\x10\x04\x12\x13\n\x0fPM_DIRECT_DEBIT\x10\x05\x12\x10\n\x0cPM_WEB_MONEY\x10\x06\x12\x12\n\x0ePM_PAYSAFECARD\x10\x07\x12\r\n\tPM_YANDEX\x10\x08\x12\r\n\tPM_SOFORT\x10\t\x12\x0c\n\x08PM_IDEAL\x10\n\x12\x0c\n\x08PM_TOKEN\x10\x0b\x12\r\n\tPM_ALIPAY\x10e\x12\x10\n\x0cPM_ALIPAY_QR\x10f\x12\r\n\tPM_WECHAT\x10g\x12\x13\n\x0fPM_WEIXINPAY_QR\x10h\x12\x0c\n\x07PM_GIFT\x10\xc9\x01\x12\x17\n\x12PM_CODE_REDEMPTION\x10\xca\x01\x12\x18\n\x13PM_IN_GAME_CURRENCY\x10\xcb\x01\x12\x19\n\x14PM_RECRUITMENT_AWARD\x10\xcc\x01\x12\x16\n\x11PM_MEET_AND_GREET\x10\xcd\x01\x12\x15\n\x10PM_SURVEY_REWARD\x10\xce\x01\x12\r\n\x08PM_STEAM\x10\xad\x02\x12\x0e\n\tPM_AMAZON\x10\xae\x02\x12\x0c\n\x07PM_SONY\x10\xaf\x02\x12\x0e\n\tPM_OCULUS\x10\xb0\x02\x12\x0e\n\tPM_TWITCH\x10\xb1\x02\x12\x11\n\x0cPM_EPICSTORE\x10\xb2\x02\x12\x0e\n\tPM_REWARD\x10\xb3\x02*\xff\x01\n\x08Provider\x12\x12\n\x0ePP_UNSPECIFIED\x10\x00\x12\x0f\n\x0bPP_INGENICO\x10\x01\x12\x0c\n\x08PP_STEAM\x10\x02\x12\r\n\tPP_AMAZON\x10\x03\x12\n\n\x06PP_CCP\x10\x0b\x12\x12\n\x0ePP_UNUSED_SONY\x10\x04\x12\x14\n\x10PP_UNUSED_OCULUS\x10\x05\x12\x15\n\x11PP_UNUSED_NETEASE\x10\x06\x12\x17\n\x13PP_UNUSED_BRAINTREE\x10\x07\x12\x14\n\x10PP_UNUSED_TWITCH\x10\x08\x12\x1c\n\x18PP_UNUSED_MEET_AND_GREET\x10\t\x12\x17\n\x13PP_UNUSED_EPICSTORE\x10\n*U\n\tFraudRisk\x12\x12\n\x0ePF_UNSPECIFIED\x10\x00\x12\x0e\n\nPF_NO_RISK\x10\x01\x12\x12\n\x0ePF_MEDIUM_RISK\x10\x02\x12\x10\n\x0cPF_HIGH_RISK\x10\x03*\x83\x04\n\x06Status\x12\x12\n\x0ePS_UNSPECIFIED\x10\x00\x12\n\n\x06PS_NEW\x10\x01\x12\x10\n\x0cPS_VALIDATED\x10\x02\x12\x0e\n\nPS_STARTED\x10\x03\x12\r\n\tPS_FAILED\x10\x04\x12\x0c\n\x08PS_ERROR\x10\x05\x12\x16\n\x12PS_PENDING_PAYMENT\x10\x06\x12\x0b\n\x07PS_PAID\x10\x07\x12\x15\n\x11PS_PENDING_REFUND\x10\x08\x12\x0f\n\x0bPS_REFUNDED\x10\t\x12\x1c\n\x18PS_PENDING_AND_ACTIVATED\x10\n\x12\x17\n\x13PS_REVERSED_PAYMENT\x10\x0b\x12\x18\n\x14PS_CANCELLED_PAYMENT\x10\x0c\x12\x11\n\rPS_CHARGEBACK\x10\r\x12\x19\n\x15PS_PENDING_CHARGEBACK\x10\x0e\x12\x18\n\x14PS_CONNECTION_FAILED\x10\x0f\x12\x1c\n\x18PS_PENDING_AUTHORIZATION\x10\x10\x12\x15\n\x11PS_PAID_COMPLETED\x10\x11\x12\x1c\n\x18PS_PAID_PENDING_DELIVERY\x10\x12\x12\x16\n\x12PS_CANCELED_REFUND\x10\x13\x12\x10\n\x0cPS_TIMED_OUT\x10\x14\x12\x16\n\x12PS_REJECTED_REFUND\x10\x15\x12\x1f\n\x1bPS_PAID_WITHOUT_FULFILLMENT\x10\x16B8Z6github.com/ccpgames/eve-proto-go/generated/eve/paymentb\x06proto3', dependencies=[eve_dot_payment_dot_merchant_dot_merchant__pb2.DESCRIPTOR, eve_dot_vendors_dot_ingenico_dot_api_dot_ingenico__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR]) _METHOD = _descriptor.EnumDescriptor(name='Method', full_name='eve.payment.Method', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[_descriptor.EnumValueDescriptor(name='PM_UNSPECIFIED', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PM_CREDIT_CARD', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PM_DEBIT_CARD', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), @@ -37,7 +37,7 @@ _METHOD = _descriptor.EnumDescriptor(name='Method', full_name='eve.payment.Metho _descriptor.EnumValueDescriptor(name='PM_OCULUS', index=25, number=304, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PM_TWITCH', index=26, number=305, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PM_EPICSTORE', index=27, number=306, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor(name='PM_REWARD', index=28, number=307, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=978, serialized_end=1518) + _descriptor.EnumValueDescriptor(name='PM_REWARD', index=28, number=307, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1026, serialized_end=1566) _sym_db.RegisterEnumDescriptor(_METHOD) Method = enum_type_wrapper.EnumTypeWrapper(_METHOD) _PROVIDER = _descriptor.EnumDescriptor(name='Provider', full_name='eve.payment.Provider', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[_descriptor.EnumValueDescriptor(name='PP_UNSPECIFIED', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), @@ -51,13 +51,13 @@ _PROVIDER = _descriptor.EnumDescriptor(name='Provider', full_name='eve.payment.P _descriptor.EnumValueDescriptor(name='PP_UNUSED_BRAINTREE', index=8, number=7, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PP_UNUSED_TWITCH', index=9, number=8, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PP_UNUSED_MEET_AND_GREET', index=10, number=9, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor(name='PP_UNUSED_EPICSTORE', index=11, number=10, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1521, serialized_end=1776) + _descriptor.EnumValueDescriptor(name='PP_UNUSED_EPICSTORE', index=11, number=10, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1569, serialized_end=1824) _sym_db.RegisterEnumDescriptor(_PROVIDER) Provider = enum_type_wrapper.EnumTypeWrapper(_PROVIDER) _FRAUDRISK = _descriptor.EnumDescriptor(name='FraudRisk', full_name='eve.payment.FraudRisk', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[_descriptor.EnumValueDescriptor(name='PF_UNSPECIFIED', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PF_NO_RISK', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PF_MEDIUM_RISK', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor(name='PF_HIGH_RISK', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1778, serialized_end=1863) + _descriptor.EnumValueDescriptor(name='PF_HIGH_RISK', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1826, serialized_end=1911) _sym_db.RegisterEnumDescriptor(_FRAUDRISK) FraudRisk = enum_type_wrapper.EnumTypeWrapper(_FRAUDRISK) _STATUS = _descriptor.EnumDescriptor(name='Status', full_name='eve.payment.Status', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[_descriptor.EnumValueDescriptor(name='PS_UNSPECIFIED', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), @@ -82,7 +82,7 @@ _STATUS = _descriptor.EnumDescriptor(name='Status', full_name='eve.payment.Statu _descriptor.EnumValueDescriptor(name='PS_CANCELED_REFUND', index=19, number=19, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PS_TIMED_OUT', index=20, number=20, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor(name='PS_REJECTED_REFUND', index=21, number=21, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor(name='PS_PAID_WITHOUT_FULFILLMENT', index=22, number=22, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1866, serialized_end=2381) + _descriptor.EnumValueDescriptor(name='PS_PAID_WITHOUT_FULFILLMENT', index=22, number=22, serialized_options=None, type=None, create_key=_descriptor._internal_create_key)], containing_type=None, serialized_options=None, serialized_start=1914, serialized_end=2429) _sym_db.RegisterEnumDescriptor(_STATUS) Status = enum_type_wrapper.EnumTypeWrapper(_STATUS) PM_UNSPECIFIED = 0 @@ -161,16 +161,18 @@ _ATTRIBUTES = _descriptor.Descriptor(name='Attributes', full_name='eve.payment.A _descriptor.FieldDescriptor(name='unknown_tax_rate', full_name='eve.payment.Attributes.unknown_tax_rate', index=4, number=5, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='tax_rate', full_name='eve.payment.Attributes.tax_rate', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='status', full_name='eve.payment.Attributes.status', index=6, number=7, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='payment_provider', full_name='eve.payment.Attributes.payment_provider', index=7, number=8, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='has_tax_rate', full_name='eve.payment.Attributes.has_tax_rate', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=248, serialized_end=575) -_TAXRATE = _descriptor.Descriptor(name='TaxRate', full_name='eve.payment.TaxRate', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='amount_in_cents', full_name='eve.payment.TaxRate.amount_in_cents', index=0, number=1, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='percentage_of_total_value', full_name='eve.payment.TaxRate.percentage_of_total_value', index=1, number=2, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='taxable_cents', full_name='eve.payment.TaxRate.taxable_cents', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=577, serialized_end=669) + _descriptor.FieldDescriptor(name='payment_provider', full_name='eve.payment.Attributes.payment_provider', index=7, number=8, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor(name='purchase', full_name='eve.payment.Attributes.purchase', index=8, number=9, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor(name='rebill', full_name='eve.payment.Attributes.rebill', index=9, number=10, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='has_tax_rate', full_name='eve.payment.Attributes.has_tax_rate', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), _descriptor.OneofDescriptor(name='reason', full_name='eve.payment.Attributes.reason', index=1, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=248, serialized_end=623) +_TAXRATE = _descriptor.Descriptor(name='TaxRate', full_name='eve.payment.TaxRate', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='amount_in_cents', full_name='eve.payment.TaxRate.amount_in_cents', index=0, number=1, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='percentage_of_total_value', full_name='eve.payment.TaxRate.percentage_of_total_value', index=1, number=2, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='taxable_cents', full_name='eve.payment.TaxRate.taxable_cents', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=625, serialized_end=717) _DETAILS = _descriptor.Descriptor(name='Details', full_name='eve.payment.Details', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='merchant', full_name='eve.payment.Details.merchant', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='recurring', full_name='eve.payment.Details.recurring', index=1, number=2, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='sensitive', full_name='eve.payment.Details.sensitive', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='description', full_name='eve.payment.Details.description', index=3, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='fraud_risk', full_name='eve.payment.Details.fraud_risk', index=4, number=5, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='user_ip', full_name='eve.payment.Details.user_ip', index=5, number=6, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='ingenico', full_name='eve.payment.Details.ingenico', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=672, serialized_end=909) -_MONEY = _descriptor.Descriptor(name='Money', full_name='eve.payment.Money', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='currency_code', full_name='eve.payment.Money.currency_code', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='units', full_name='eve.payment.Money.units', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='nanos', full_name='eve.payment.Money.nanos', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=911, serialized_end=975) + _descriptor.FieldDescriptor(name='ingenico', full_name='eve.payment.Details.ingenico', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=720, serialized_end=957) +_MONEY = _descriptor.Descriptor(name='Money', full_name='eve.payment.Money', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='currency_code', full_name='eve.payment.Money.currency_code', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='units', full_name='eve.payment.Money.units', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='nanos', full_name='eve.payment.Money.nanos', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=959, serialized_end=1023) _IDENTIFIER.fields_by_name['payment_provider'].enum_type = _PROVIDER _ATTRIBUTES.fields_by_name['payment_method'].enum_type = _METHOD _ATTRIBUTES.fields_by_name['payment_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP @@ -181,6 +183,10 @@ _ATTRIBUTES.oneofs_by_name['has_tax_rate'].fields.append(_ATTRIBUTES.fields_by_n _ATTRIBUTES.fields_by_name['unknown_tax_rate'].containing_oneof = _ATTRIBUTES.oneofs_by_name['has_tax_rate'] _ATTRIBUTES.oneofs_by_name['has_tax_rate'].fields.append(_ATTRIBUTES.fields_by_name['tax_rate']) _ATTRIBUTES.fields_by_name['tax_rate'].containing_oneof = _ATTRIBUTES.oneofs_by_name['has_tax_rate'] +_ATTRIBUTES.oneofs_by_name['reason'].fields.append(_ATTRIBUTES.fields_by_name['purchase']) +_ATTRIBUTES.fields_by_name['purchase'].containing_oneof = _ATTRIBUTES.oneofs_by_name['reason'] +_ATTRIBUTES.oneofs_by_name['reason'].fields.append(_ATTRIBUTES.fields_by_name['rebill']) +_ATTRIBUTES.fields_by_name['rebill'].containing_oneof = _ATTRIBUTES.oneofs_by_name['reason'] _DETAILS.fields_by_name['merchant'].message_type = eve_dot_payment_dot_merchant_dot_merchant__pb2._IDENTIFIER _DETAILS.fields_by_name['fraud_risk'].enum_type = _FRAUDRISK _DETAILS.fields_by_name['ingenico'].message_type = eve_dot_vendors_dot_ingenico_dot_api_dot_ingenico__pb2._ATTRIBUTES diff --git a/eveProto/generated/eve/store/offer/offer_pb2.py b/eveProto/generated/eve/store/offer/offer_pb2.py @@ -10,20 +10,20 @@ from eveProto.generated.eve.store import store_pb2 as eve_dot_store_dot_store__p from eveProto.generated.eve.ui import annotation_pb2 as eve_dot_ui_dot_annotation__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor.FileDescriptor(name='eve/store/offer/offer.proto', package='eve.store.offer', syntax='proto3', serialized_options='Z:github.com/ccpgames/eve-proto-go/generated/eve/store/offer', create_key=_descriptor._internal_create_key, serialized_pb='\n\x1beve/store/offer/offer.proto\x12\x0feve.store.offer\x1a!eve/store/category/category.proto\x1a\x1feve/store/product/product.proto\x1a\x15eve/store/store.proto\x1a\x17eve/ui/annotation.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"!\n\nIdentifier\x12\x13\n\x0bstore_offer\x18\x01 \x01(\t"\x8b\n\n\nAttributes\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04tags\x18\x03 \x03(\t\x12C\n\x15deprecated_categories\x18\x04 \x03(\x0b2$.eve.store.offer.Attributes.Category\x12\x17\n\x0fsingle_purchase\x18\x05 \x01(\x08\x12\x10\n\x08targeted\x18\x06 \x01(\x08\x12\x14\n\nno_enddate\x18\x07 \x01(\x08H\x00\x12.\n\x08end_date\x18\x08 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00\x12\x1b\n\rnot_recurring\x18\t \x01(\x08B\x02\x18\x01H\x01\x12>\n\trecurring\x18\n \x01(\x0b2%.eve.store.offer.Attributes.RecurringB\x02\x18\x01H\x01\x12*\n\x0eui_annotations\x18\x0b \x03(\x0b2\x12.eve.ui.Annotation\x12\x16\n\x0ccan_purchase\x18\x0c \x01(\x08H\x02\x12!\n\x17purchase_limited_reason\x18\r \x01(\tH\x02\x12\x11\n\tsensitive\x18\x0e \x01(\x08\x12%\n\x0boffer_price\x18\x0f \x01(\x0b2\x10.eve.store.Price\x12$\n\nbase_price\x18\x10 \x01(\x0b2\x10.eve.store.Price\x122\n\ncategories\x18\x11 \x03(\x0b2\x1e.eve.store.category.Identifier\x125\n\x08products\x18\x12 \x03(\x0b2#.eve.store.offer.Attributes.Product\x12\x15\n\x0bno_schedule\x18\x13 \x01(\x08H\x03\x128\n\x08schedule\x18\x14 \x01(\x0b2$.eve.store.offer.Attributes.ScheduleH\x03\x1a}\n\x08Category\x120\n\x08category\x18\x01 \x01(\x0b2\x1e.eve.store.category.Identifier\x12;\n\x13category_attributes\x18\x02 \x01(\x0b2\x1e.eve.store.category.Attributes:\x02\x18\x01\x1ab\n\tRecurring\x129\n\x16billing_cycle_duration\x18\x01 \x01(\x0b2\x19.google.protobuf.Duration:\x02\x18\x01J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\x1a\xcd\x01\n\x08Schedule\x129\n\x16billing_cycle_duration\x18\x01 \x01(\x0b2\x19.google.protobuf.Duration\x124\n\x0fscheduled_offer\x18\x02 \x01(\x0b2\x1b.eve.store.offer.Identifier\x12\'\n\rbilling_price\x18\x03 \x01(\x0b2\x10.eve.store.Price\x12\'\n\rmonthly_price\x18\x04 \x01(\x0b2\x10.eve.store.Price\x1aK\n\x07Product\x12.\n\x07product\x18\x01 \x01(\x0b2\x1d.eve.store.product.Identifier\x12\x10\n\x08quantity\x18\x02 \x01(\x05B\r\n\x0bhas_enddateB\x0f\n\rhas_recurringB\x15\n\x13purchase_limitationB\x0e\n\x0chas_scheduleJ\x04\x08\x02\x10\x03B<Z:github.com/ccpgames/eve-proto-go/generated/eve/store/offerb\x06proto3', dependencies=[eve_dot_store_dot_category_dot_category__pb2.DESCRIPTOR, +DESCRIPTOR = _descriptor.FileDescriptor(name='eve/store/offer/offer.proto', package='eve.store.offer', syntax='proto3', serialized_options='Z:github.com/ccpgames/eve-proto-go/generated/eve/store/offer', create_key=_descriptor._internal_create_key, serialized_pb='\n\x1beve/store/offer/offer.proto\x12\x0feve.store.offer\x1a!eve/store/category/category.proto\x1a\x1feve/store/product/product.proto\x1a\x15eve/store/store.proto\x1a\x17eve/ui/annotation.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto"!\n\nIdentifier\x12\x13\n\x0bstore_offer\x18\x01 \x01(\t"\xb0\n\n\nAttributes\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04tags\x18\x03 \x03(\t\x12C\n\x15deprecated_categories\x18\x04 \x03(\x0b2$.eve.store.offer.Attributes.Category\x12\x17\n\x0fsingle_purchase\x18\x05 \x01(\x08\x12\x10\n\x08targeted\x18\x06 \x01(\x08\x12\x14\n\nno_enddate\x18\x07 \x01(\x08H\x00\x12.\n\x08end_date\x18\x08 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00\x12\x1b\n\rnot_recurring\x18\t \x01(\x08B\x02\x18\x01H\x01\x12>\n\trecurring\x18\n \x01(\x0b2%.eve.store.offer.Attributes.RecurringB\x02\x18\x01H\x01\x12*\n\x0eui_annotations\x18\x0b \x03(\x0b2\x12.eve.ui.Annotation\x12\x16\n\x0ccan_purchase\x18\x0c \x01(\x08H\x02\x12!\n\x17purchase_limited_reason\x18\r \x01(\tH\x02\x12\x11\n\tsensitive\x18\x0e \x01(\x08\x12%\n\x0boffer_price\x18\x0f \x01(\x0b2\x10.eve.store.Price\x12$\n\nbase_price\x18\x10 \x01(\x0b2\x10.eve.store.Price\x122\n\ncategories\x18\x11 \x03(\x0b2\x1e.eve.store.category.Identifier\x125\n\x08products\x18\x12 \x03(\x0b2#.eve.store.offer.Attributes.Product\x12\x15\n\x0bno_schedule\x18\x13 \x01(\x08H\x03\x128\n\x08schedule\x18\x14 \x01(\x0b2$.eve.store.offer.Attributes.ScheduleH\x03\x12#\n\x07catalog\x18\x15 \x01(\x0e2\x12.eve.store.Catalog\x1a}\n\x08Category\x120\n\x08category\x18\x01 \x01(\x0b2\x1e.eve.store.category.Identifier\x12;\n\x13category_attributes\x18\x02 \x01(\x0b2\x1e.eve.store.category.Attributes:\x02\x18\x01\x1ab\n\tRecurring\x129\n\x16billing_cycle_duration\x18\x01 \x01(\x0b2\x19.google.protobuf.Duration:\x02\x18\x01J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\x1a\xcd\x01\n\x08Schedule\x129\n\x16billing_cycle_duration\x18\x01 \x01(\x0b2\x19.google.protobuf.Duration\x124\n\x0fscheduled_offer\x18\x02 \x01(\x0b2\x1b.eve.store.offer.Identifier\x12\'\n\rbilling_price\x18\x03 \x01(\x0b2\x10.eve.store.Price\x12\'\n\rmonthly_price\x18\x04 \x01(\x0b2\x10.eve.store.Price\x1aK\n\x07Product\x12.\n\x07product\x18\x01 \x01(\x0b2\x1d.eve.store.product.Identifier\x12\x10\n\x08quantity\x18\x02 \x01(\x05B\r\n\x0bhas_enddateB\x0f\n\rhas_recurringB\x15\n\x13purchase_limitationB\x0e\n\x0chas_scheduleJ\x04\x08\x02\x10\x03B<Z:github.com/ccpgames/eve-proto-go/generated/eve/store/offerb\x06proto3', dependencies=[eve_dot_store_dot_category_dot_category__pb2.DESCRIPTOR, eve_dot_store_dot_product_dot_product__pb2.DESCRIPTOR, eve_dot_store_dot_store__pb2.DESCRIPTOR, eve_dot_ui_dot_annotation__pb2.DESCRIPTOR, google_dot_protobuf_dot_duration__pb2.DESCRIPTOR, google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR]) _IDENTIFIER = _descriptor.Descriptor(name='Identifier', full_name='eve.store.offer.Identifier', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='store_offer', full_name='eve.store.offer.Identifier.store_offer', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=229, serialized_end=262) -_ATTRIBUTES_CATEGORY = _descriptor.Descriptor(name='Category', full_name='eve.store.offer.Attributes.Category', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='category', full_name='eve.store.offer.Attributes.Category.category', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='category_attributes', full_name='eve.store.offer.Attributes.Category.category_attributes', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=969, serialized_end=1094) -_ATTRIBUTES_RECURRING = _descriptor.Descriptor(name='Recurring', full_name='eve.store.offer.Attributes.Recurring', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='billing_cycle_duration', full_name='eve.store.offer.Attributes.Recurring.billing_cycle_duration', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1096, serialized_end=1194) +_ATTRIBUTES_CATEGORY = _descriptor.Descriptor(name='Category', full_name='eve.store.offer.Attributes.Category', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='category', full_name='eve.store.offer.Attributes.Category.category', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='category_attributes', full_name='eve.store.offer.Attributes.Category.category_attributes', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1006, serialized_end=1131) +_ATTRIBUTES_RECURRING = _descriptor.Descriptor(name='Recurring', full_name='eve.store.offer.Attributes.Recurring', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='billing_cycle_duration', full_name='eve.store.offer.Attributes.Recurring.billing_cycle_duration', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options='\x18\x01', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1133, serialized_end=1231) _ATTRIBUTES_SCHEDULE = _descriptor.Descriptor(name='Schedule', full_name='eve.store.offer.Attributes.Schedule', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='billing_cycle_duration', full_name='eve.store.offer.Attributes.Schedule.billing_cycle_duration', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='scheduled_offer', full_name='eve.store.offer.Attributes.Schedule.scheduled_offer', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='billing_price', full_name='eve.store.offer.Attributes.Schedule.billing_price', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='monthly_price', full_name='eve.store.offer.Attributes.Schedule.monthly_price', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1197, serialized_end=1402) -_ATTRIBUTES_PRODUCT = _descriptor.Descriptor(name='Product', full_name='eve.store.offer.Attributes.Product', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='product', full_name='eve.store.offer.Attributes.Product.product', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='quantity', full_name='eve.store.offer.Attributes.Product.quantity', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1404, serialized_end=1479) + _descriptor.FieldDescriptor(name='monthly_price', full_name='eve.store.offer.Attributes.Schedule.monthly_price', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1234, serialized_end=1439) +_ATTRIBUTES_PRODUCT = _descriptor.Descriptor(name='Product', full_name='eve.store.offer.Attributes.Product', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='product', full_name='eve.store.offer.Attributes.Product.product', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='quantity', full_name='eve.store.offer.Attributes.Product.quantity', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[], serialized_start=1441, serialized_end=1516) _ATTRIBUTES = _descriptor.Descriptor(name='Attributes', full_name='eve.store.offer.Attributes', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[_descriptor.FieldDescriptor(name='name', full_name='eve.store.offer.Attributes.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=''.decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='tags', full_name='eve.store.offer.Attributes.tags', index=1, number=3, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='deprecated_categories', full_name='eve.store.offer.Attributes.deprecated_categories', index=2, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), @@ -42,13 +42,14 @@ _ATTRIBUTES = _descriptor.Descriptor(name='Attributes', full_name='eve.store.off _descriptor.FieldDescriptor(name='categories', full_name='eve.store.offer.Attributes.categories', index=15, number=17, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='products', full_name='eve.store.offer.Attributes.products', index=16, number=18, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor(name='no_schedule', full_name='eve.store.offer.Attributes.no_schedule', index=17, number=19, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor(name='schedule', full_name='eve.store.offer.Attributes.schedule', index=18, number=20, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[_ATTRIBUTES_CATEGORY, + _descriptor.FieldDescriptor(name='schedule', full_name='eve.store.offer.Attributes.schedule', index=18, number=20, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor(name='catalog', full_name='eve.store.offer.Attributes.catalog', index=19, number=21, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)], extensions=[], nested_types=[_ATTRIBUTES_CATEGORY, _ATTRIBUTES_RECURRING, _ATTRIBUTES_SCHEDULE, _ATTRIBUTES_PRODUCT], enum_types=[], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[_descriptor.OneofDescriptor(name='has_enddate', full_name='eve.store.offer.Attributes.has_enddate', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), _descriptor.OneofDescriptor(name='has_recurring', full_name='eve.store.offer.Attributes.has_recurring', index=1, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), _descriptor.OneofDescriptor(name='purchase_limitation', full_name='eve.store.offer.Attributes.purchase_limitation', index=2, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), - _descriptor.OneofDescriptor(name='has_schedule', full_name='eve.store.offer.Attributes.has_schedule', index=3, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=265, serialized_end=1556) + _descriptor.OneofDescriptor(name='has_schedule', full_name='eve.store.offer.Attributes.has_schedule', index=3, containing_type=None, create_key=_descriptor._internal_create_key, fields=[])], serialized_start=265, serialized_end=1593) _ATTRIBUTES_CATEGORY.fields_by_name['category'].message_type = eve_dot_store_dot_category_dot_category__pb2._IDENTIFIER _ATTRIBUTES_CATEGORY.fields_by_name['category_attributes'].message_type = eve_dot_store_dot_category_dot_category__pb2._ATTRIBUTES _ATTRIBUTES_CATEGORY.containing_type = _ATTRIBUTES @@ -70,6 +71,7 @@ _ATTRIBUTES.fields_by_name['base_price'].message_type = eve_dot_store_dot_store_ _ATTRIBUTES.fields_by_name['categories'].message_type = eve_dot_store_dot_category_dot_category__pb2._IDENTIFIER _ATTRIBUTES.fields_by_name['products'].message_type = _ATTRIBUTES_PRODUCT _ATTRIBUTES.fields_by_name['schedule'].message_type = _ATTRIBUTES_SCHEDULE +_ATTRIBUTES.fields_by_name['catalog'].enum_type = eve_dot_store_dot_store__pb2._CATALOG _ATTRIBUTES.oneofs_by_name['has_enddate'].fields.append(_ATTRIBUTES.fields_by_name['no_enddate']) _ATTRIBUTES.fields_by_name['no_enddate'].containing_oneof = _ATTRIBUTES.oneofs_by_name['has_enddate'] _ATTRIBUTES.oneofs_by_name['has_enddate'].fields.append(_ATTRIBUTES.fields_by_name['end_date']) diff --git a/flatbuffers/vector_utils.py b/flatbuffers/vector_utils.py @@ -0,0 +1,12 @@ +#Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\flatbuffers\vector_utils.py +try: + from typing import Callable, List +except ImportError: + pass + +def write_vector_of_offsets(builder, start_func, offsets): + start_func(builder, len(offsets)) + for offset in reversed(offsets): + builder.PrependUOffsetTRelative(offset) + + return builder.EndVector() diff --git a/jobboard/client/features/campaigns/home_page_section.py b/jobboard/client/features/campaigns/home_page_section.py @@ -146,8 +146,8 @@ class CampaignSectionController(object): @property def repository(self): if self._repository is None: - from campaigns.client.api import get_campaigns_repository - self._repository = get_campaigns_repository() + from campaigns.client.api import get_campaigns_repository_v1 + self._repository = get_campaigns_repository_v1() return self._repository @property diff --git a/jobboard/client/features/campaigns/issuer_card_icon.py b/jobboard/client/features/campaigns/issuer_card_icon.py @@ -1,5 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\issuer_card_icon.py -from campaigns.client.mock_data.mock_campaigns import CORP_CALDARI_PROVISIONS, CORP_24TH_IMPERIAL, CORP_BRUTOR_TRIBE, CORP_ALGINTAL_CORE, CORP_CBD +from campaigns.client.v1.mock_data.mock_campaigns import CORP_CALDARI_PROVISIONS, CORP_24TH_IMPERIAL, CORP_BRUTOR_TRIBE, CORP_ALGINTAL_CORE, CORP_CBD card_icon_path_by_issuer_id = {CORP_CALDARI_PROVISIONS: 'res:/ui/texture/corps/3_128_3.png', CORP_24TH_IMPERIAL: 'res:/ui/texture/corps/47_128_1.png', CORP_BRUTOR_TRIBE: 'res:/ui/texture/corps/20_128_2.png', diff --git a/jobboard/client/features/campaigns/job.py b/jobboard/client/features/campaigns/job.py @@ -1,5 +1,4 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\job.py -import blue import caching import eveformat import eveicon @@ -7,12 +6,12 @@ import gametime import mathext import uthread2 from brennivin.itertoolsext import Bundle -from campaigns.client.data_model.contribution_method import MissingParameterConfiguration -from campaigns.client.data_model.objective import FutureObjective, ObjectiveState +from campaigns.client.v1.data_model.contribution_method import MissingParameterConfiguration +from campaigns.client.v1.data_model.objective import FutureObjective, ObjectiveState from campaigns.client.errors import ObjectiveStateError, ParticipantStateError, CampaignForbiddenError, CampaignRequestError from campaigns.client.parameter_types.const import ParameterType from campaigns.client.parameter_types.parameter_controller import get_parameter_class -from campaigns.client.signals import on_objective_contributed_notice, on_campaigns_objective_stats_updated, on_commited_state_changed +from campaigns.client.v1.signals import on_objective_contributed_notice, on_campaigns_objective_stats_updated, on_commited_state_changed from campaigns.client.ui_controllers.campaign_controller import CampaignController from campaigns.client.validation import check_can_commit, check_can_resign from carbon.common.script.util.format import FmtDate @@ -65,8 +64,8 @@ class BaseCampaignJob(BaseJob): @property def repository(self): if self._repository is None: - from campaigns.client.api import get_campaigns_repository - self._repository = get_campaigns_repository() + from campaigns.client.api import get_campaigns_repository_v1 + self._repository = get_campaigns_repository_v1() return self._repository @property @@ -74,7 +73,7 @@ class BaseCampaignJob(BaseJob): if self._campaign_controller is None: campaign = self.repository.get_campaign(self.campaign_id) controller = CampaignController(campaign, self.repository) - from campaigns.client.api import get_campaigns_repository + from campaigns.client.api import get_campaigns_repository_v1 self._campaign_controller = controller return self._campaign_controller diff --git a/jobboard/client/features/campaigns/job_dynamic_data.py b/jobboard/client/features/campaigns/job_dynamic_data.py @@ -1,6 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\job_dynamic_data.py -from campaigns.client.data_model.objective import ParticipantState -from signals import Signal +from campaigns.client.v1.data_model.objective import ParticipantState UNDEFINED = -1 class DynamicCampaignJobData(object): diff --git a/jobboard/client/features/campaigns/list_entry.py b/jobboard/client/features/campaigns/list_entry.py @@ -1,5 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\list_entry.py -import campaigns.client.signals as campaigns_signals +import campaigns.client.v1.signals as campaigns_signals import eveicon import localization from carbonui import Align, TextColor, ButtonStyle diff --git a/jobboard/client/features/campaigns/provider.py b/jobboard/client/features/campaigns/provider.py @@ -1,10 +1,10 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\provider.py import uthread2 -from campaigns.client import signals as campaign_signals -from campaigns.client.api import get_campaigns_repository -from campaigns.client.data_model.objective import FutureObjective +from campaigns.client.v1 import signals as campaign_signals +from campaigns.client.api import get_campaigns_repository_v1 +from campaigns.client.v1.data_model.objective import FutureObjective from campaigns.client.feature_flags import campaigns_enabled -from campaigns.client.signals import on_job_provider_finished_refreshing_campaign +from campaigns.client.v1.signals import on_job_provider_finished_refreshing_campaign from jobboard.client import job_board_signals from jobboard.client.features.campaigns.feature_page import CampaignsFeaturePage from jobboard.client.features.campaigns.job import CampaignJob, FutureCampaignJob @@ -22,7 +22,7 @@ class CampaignJobProvider(JobProvider): def __init__(self, *args, **kwargs): super(CampaignJobProvider, self).__init__(*args, **kwargs) - self._repository = get_campaigns_repository() + self._repository = get_campaigns_repository_v1() def _get_all_content(self): ret = self._repository.get_all_campaigns_objectives() diff --git a/jobboard/client/features/campaigns/provider_section.py b/jobboard/client/features/campaigns/provider_section.py @@ -1,5 +1,5 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\provider_section.py -from campaigns.client.api import get_campaigns_repository +from campaigns.client.api import get_campaigns_repository_v1 from carbonui import Align from carbonui.text.styles import TextHeader from jobboard.client.ui.jobProviderSection import JobProviderSection @@ -21,6 +21,6 @@ class CampaignJobProviderSection(JobProviderSection): def prime_job_data(self, jobs): for job in jobs: if job.campaign_id == self._campaign_id: - repository = get_campaigns_repository() + repository = get_campaigns_repository_v1() repository.prime_stats_for_campaign(self._campaign_id) return diff --git a/jobboard/client/features/campaigns/qa_tools.py b/jobboard/client/features/campaigns/qa_tools.py @@ -1,6 +1,6 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\qa_tools.py import blue -from campaigns.client.data_model.objective import ObjectiveID +from campaigns.client.v1.data_model.objective import ObjectiveID from carbon.common.script.sys.serviceConst import ROLE_GML, ROLE_WORLDMOD from carbon.common.script.sys.serviceManager import ServiceManager from carbonui.control.contextMenu.menuData import MenuData diff --git a/jobboard/client/features/campaigns/recommended_card_section.py b/jobboard/client/features/campaigns/recommended_card_section.py @@ -1,7 +1,7 @@ #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\recommended_card_section.py import eveui import uthread2 -from campaigns.client.signals import on_job_provider_finished_refreshing_campaign +from campaigns.client.v1.signals import on_job_provider_finished_refreshing_campaign from campaigns.client.validation import can_commit from carbonui import Align from carbonui.primitives.container import Container diff --git a/localization/client/cerberus_formatted_message.py b/localization/client/cerberus_formatted_message.py @@ -107,3 +107,6 @@ class CerberusFormattedMessage(object): params_str += 'Key: %s, Value: %s\n' % (k, v) return ('id: %s, ' % self.identifier + params_str).encode('utf-8') + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, self.__dict__) diff --git a/multiprocessing/pool.pyc b/multiprocessing/pool.pyc Binary files differ. diff --git a/whitelist.py b/whitelist.py @@ -7,7 +7,7 @@ whitelist += '\n foo.SlimItem\n\n eve.common.script.util.slimItem. if boot.role == 'server': whitelist += '\n agent.StandardMissionDetails\n agent.HeraldryMissionDetails\n agent.ResearchMissionDetails\n agent.StorylineMissionDetails\n agent.EpicArcMissionDetails\n agent.OfferDetails\n agent.LoyaltyPoints\n agent.Agent\n agent.Credits\n agent.Item\n agent.Entity\n agent.Objective\n agent.FetchObjective\n agent.EncounterObjective\n agent.DungeonObjective\n agent.TransportObjective\n agent.AgentObjective\n agent.Reward\n agent.TimeBonusReward\n agent.MissionReferral\n agent.Location\n agent.ItemDeclarationError\n agent.ItemResolutionFailure\n agent.TransferItemFailure\n\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.StandardMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.HeraldryMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.ResearchMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.StorylineMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.EpicArcMissionDetails\n eve.server.script.mgt.npc.agents.services.standardMissionDetails.OfferDetails\n eve.server.script.mgt.npc.agents.items.LoyaltyPoints\n eve.server.script.mgt.npc.agents.items.Agent\n eve.server.script.mgt.npc.agents.items.Credits\n eve.server.script.mgt.npc.agents.items.Item\n eve.server.script.mgt.npc.agents.items.Entity\n eve.server.script.mgt.npc.agents.items.Objective\n eve.server.script.mgt.npc.agents.items.FetchObjective\n eve.server.script.mgt.npc.agents.items.EncounterObjective\n eve.server.script.mgt.npc.agents.items.DungeonObjective\n eve.server.script.mgt.npc.agents.items.TransportObjective\n eve.server.script.mgt.npc.agents.items.AgentObjective\n eve.server.script.mgt.npc.agents.items.Reward\n eve.server.script.mgt.npc.agents.items.TimeBonusReward\n eve.server.script.mgt.npc.agents.items.MissionReferral\n eve.server.script.mgt.npc.agents.items.Location\n eve.server.script.mgt.npc.agents.exceptions.ItemDeclarationError\n eve.server.script.mgt.npc.agents.exceptions.ItemResolutionFailure\n eve.server.script.mgt.npc.agents.exceptions.TransferItemFailure\n\n sys.A\n sys.AgentString\n sys.AgentUnicode\n\n eve.common.script.sys.strangeStrings.A\n eve.common.script.sys.strangeStrings.AgentString\n eve.common.script.sys.strangeStrings.AgentUnicode\n\n scriber.hermes.Notification\n scriber.hermes.ReadStatus\n\n externalQueue.actions.ExternalActionException\n npcs.server.rewards.rewards.GroupRewardData\n npcs.server.rewards.rewards.DisqualificationData\n\n operations.common.const.RewardToken\n operations.common.const.SkillRewardToken \n\n raffles.server.PendingRaffle\n \n skills.server.exceptions.SkillBundleInjectionFailed\n skills.server.exceptions.MultiSkillBundleInjectForbidden\n \n evefitting.errors.FittingDoesNotExistError\n evefitting.errors.FittingIsNotValid\n \n externalQueue.utils.FilterGenerator\n \n behaviors.blackboards.scopes.Scope\n \n voidspace.server.content_manager.PlayerLocationInfo\n ballpark.gridallocationmanager.SolarSystemFullException\n ballpark.gridallocationmanager.GridAlreadyAllocatedError\n \n storylines.server.airnpe.AirNpeStartData\n \n nodegraph.server.atoms.atom_service.AtomNotFoundError\n nodegraph.server.atoms.atom_service.AtomRemoteMethodNotSupportedError \n \n shipcaster.launcherData.LauncherData\n \n lpOffers.exceptions.InsufficientBalanceError\n lpOffers.exceptions.MissingCorpRoleError\n lpOffers.exceptions.WrongCorporationMembershipError\n\n pirateinsurgency.server.campaignServerSnapshot.CampaignServerSnapshot\n \n assetholding.server.inventory.exceptions.HoldItemsFailed\n assetholding.server.inventory.exceptions.SpawnItemsFailed\n\n sovereignty.hub.server.errors.ItemCannotBeAddedToSovHubError\n sovereignty.skyhook.server.errors.CannotActivateError\n sovereignty.skyhook.server.errors.CannotAccessReagentsError\n \n spacecomponents.server.components.mercenaryDen.MercenaryDenNotFound\n spacecomponents.server.components.mercenaryDen.ValidateStartRequestFailed\n \n sovereignty.radius_dungeon_distribution.server.radius_dungeon_distribution_solarsystem.RadiusDungeonDistributionInstance\n evedungeons.server.scan_data.ScanData\n ' if boot.role == 'client': - whitelist += '\n playerprogression.assetnetworthnotifier.AssetNetWorthProgression\n playerprogression.contractprogressionnotifier.ContractProgression\n playerprogression.marketprogressionnotifier.MarketProgression\n\n raffles.common.const.BlueprintType\n campaigns.client.data_model.campaign.CampaignID\n ' + whitelist += '\n playerprogression.assetnetworthnotifier.AssetNetWorthProgression\n playerprogression.contractprogressionnotifier.ContractProgression\n playerprogression.marketprogressionnotifier.MarketProgression\n\n raffles.common.const.BlueprintType\n campaigns.client.v1.data_model.campaign.CampaignID\n campaigns.client.v2.data_model.campaign.CampaignID\n ' def InitWhitelist(): wl = whitelist