bacommon package¶
Subpackages¶
Submodules¶
bacommon.app module¶
Common high level values/functionality related to apps.
- class bacommon.app.AppArchitecture(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Processor architecture the App is running on.
- ARM = 'arm'¶
- ARM64 = 'arm64'¶
- X86 = 'x86'¶
- X86_64 = 'x86_64'¶
- class bacommon.app.AppExperience(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
A particular experience that can be provided by a Ballistica app.
This is one metric used to isolate different playerbases from each other where there might be no technical barriers doing so. For example, a casual one-hand-playable phone game and an augmented reality tabletop game may both use the same scene-versions and networking-protocols and whatnot, but it would make no sense to allow players of one to join servers of the other. AppExperience can be used to keep these player bases separate.
Generally a single Ballistica app targets a single AppExperience. This is not a technical requirement, however. A single app may support multiple experiences, or there may be multiple apps targeting one experience. Cloud components such as leagues are generally associated with an AppExperience so that they are only visible to client apps designed for that play style.
- EMPTY = 'empty'¶
- MELEE = 'melee'¶
- REMOTE = 'remote'¶
- class bacommon.app.AppInstanceInfo(interface_idiom: ~typing.Annotated[~bacommon.app.AppInterfaceIdiom, <efro.dataclassio.IOAttrs object at 0x7ffa9bdccc50>], locale: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9bdd5400>], device: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9bdd5550>])[source]¶
Bases:
object
General info about an individual running app.
- architecture¶
alias of
Annotated
[AppArchitecture
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5e780>]
- device: IOAttrs object at 0x7ffa9bde5130>]¶
- engine_build¶
alias of
Annotated
[int
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5c380>]
- engine_version¶
alias of
Annotated
[str
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5d580>]
- interface_idiom: IOAttrs object at 0x7ffa9c238830>]¶
- locale: IOAttrs object at 0x7ffa9c437200>]¶
- name¶
alias of
Annotated
[str
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5e300>]
- os_version¶
alias of
Annotated
[str
|None
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5eb40>]
- platform¶
alias of
Annotated
[AppPlatform
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5d2b0>]
- variant¶
alias of
Annotated
[AppVariant
, <efro.dataclassio.IOAttrs object at 0x7ffa9cd5e480>]
- class bacommon.app.AppInterfaceIdiom(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
A general form-factor or method of experiencing a Ballistica app.
Note that it is possible for a running app to switch idioms (for instance if a mobile device or computer is connected to a TV).
- DESKTOP = 'desktop'¶
- PHONE = 'phone'¶
- TABLET = 'tablet'¶
- TV = 'tv'¶
- XR = 'xr'¶
- class bacommon.app.AppPlatform(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Overall platform a Ballistica build is targeting.
Each distinct flavor of an app has a unique combination of AppPlatform and AppVariant. Generally platform describes a set of hardware, while variant describes a destination or purpose for the build.
- ANDROID = 'android'¶
- IOS = 'ios'¶
- LINUX = 'linux'¶
- MAC = 'mac'¶
- TVOS = 'tvos'¶
- WINDOWS = 'windows'¶
- class bacommon.app.AppVariant(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
A unique Ballistica build type within a single platform.
Each distinct flavor of an app has a unique combination of AppPlatform and AppVariant. Generally platform describes a set of hardware, while variant describes a destination or purpose for the build.
- AMAZON_APPSTORE = 'amazon_appstore'¶
- APP_STORE = 'app_store'¶
- ARCADE = 'arcade'¶
- DEMO = 'demo'¶
- EPIC_GAMES_STORE = 'epic_games_store'¶
- GENERIC = 'generic'¶
- GOOGLE_PLAY = 'google_play'¶
- META = 'meta'¶
- STEAM = 'steam'¶
- TEST = 'test'¶
- WINDOWS_STORE = 'windows_store'¶
bacommon.assets module¶
Functionality related to cloud based assets.
- class bacommon.assets.AssetPackageBuildState(in_progress_builds: ~typing.Annotated[list[str], <efro.dataclassio.IOAttrs object at 0x7ffa9b5a82f0>] = <factory>, initial_build_count: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b5a8d70>] = 0, error: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b5a8da0>] = None)[source]¶
Bases:
object
Contains info about an in-progress asset cloud build.
- error: IOAttrs object at 0x7ffa9b5aa000>] = None¶
- in_progress_builds: IOAttrs object at 0x7ffa9b5aa810>]¶
- initial_build_count: IOAttrs object at 0x7ffa9b5aaf00>] = 0¶
- class bacommon.assets.AssetPackageFlavor(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Flavors for asset package outputs for different platforms/etc.
- DESKTOP = 'desktop'¶
- MOBILE = 'mobile'¶
- class bacommon.assets.AssetPackageFlavorManifest(cloudfiles: ~typing.Annotated[dict[str, str], <efro.dataclassio.IOAttrs object at 0x7ffa9b5ab740>] = <factory>)[source]¶
Bases:
object
A manifest of asset info for a specific flavor of an asset package.
- cloudfiles: IOAttrs object at 0x7ffa9b5d03e0>]¶
- class bacommon.assets.AssetType(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Types for individual assets within a package.
- COLLISION_MESH = 'collision_mesh'¶
- CUBE_TEXTURE = 'cube_texture'¶
- DATA = 'data'¶
- MESH = 'mesh'¶
- SOUND = 'sound'¶
- TEXTURE = 'texture'¶
bacommon.bacloud module¶
Functionality related to the bacloud tool.
- class bacommon.bacloud.RequestData(command: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b640ec0>], token: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b640fb0>], payload: ~typing.Annotated[dict, <efro.dataclassio.IOAttrs object at 0x7ffa9b641130>], tzoffset: ~typing.Annotated[float, <efro.dataclassio.IOAttrs object at 0x7ffa9b641190>], isatty: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b641280>])[source]¶
Bases:
object
Request sent to bacloud server.
- command: IOAttrs object at 0x7ffa9b642810>]¶
- isatty: IOAttrs object at 0x7ffa9b643920>]¶
- payload: IOAttrs object at 0x7ffa9b658530>]¶
- token: IOAttrs object at 0x7ffa9b640aa0>]¶
- tzoffset: IOAttrs object at 0x7ffa9bde7ec0>]¶
- class bacommon.bacloud.ResponseData(message: Annotated[str | None, IOAttrs('m', store_default=False)] = None, message_end: Annotated[str, IOAttrs('m_end', store_default=False)] = '\n', error: Annotated[str | None, IOAttrs('e', store_default=False)] = None, delay_seconds: Annotated[float, IOAttrs('d', store_default=False)] = 0.0, login: Annotated[str | None, IOAttrs('l', store_default=False)] = None, logout: Annotated[bool, IOAttrs('lo', store_default=False)] = False, dir_manifest: Annotated[str | None, IOAttrs('man', store_default=False)] = None, uploads: Annotated[tuple[list[str], str, dict] | None, IOAttrs('u', store_default=False)] = None, uploads_inline: Annotated[list[str] | None, IOAttrs('uinl', store_default=False)] = None, deletes: Annotated[list[str] | None, IOAttrs('dlt', store_default=False)] = None, downloads: Annotated[Downloads | None, IOAttrs('dl', store_default=False)] = None, downloads_inline: Annotated[dict[str, bytes] | None, IOAttrs('dinl', store_default=False)] = None, dir_prune_empty: Annotated[str | None, IOAttrs('dpe', store_default=False)] = None, open_url: Annotated[str | None, IOAttrs('url', store_default=False)] = None, input_prompt: Annotated[tuple[str, bool] | None, IOAttrs('inp', store_default=False)] = None, end_message: Annotated[str | None, IOAttrs('em', store_default=False)] = None, end_message_end: Annotated[str, IOAttrs('eme', store_default=False)] = '\n', end_command: Annotated[tuple[str, dict] | None, IOAttrs('ec', store_default=False)] = None)[source]¶
Bases:
object
Response sent from the bacloud server to the client.
- message¶
If present, client should print this message before any other response processing (including error handling) occurs.
- Type:
Annotated[str | None, IOAttrs(‘m’, store_default=False)]
- message_end¶
end arg for message print() call.
- Type:
Annotated[str, IOAttrs(‘m_end’, store_default=False)]
- error¶
If present, client should abort with this error message.
- Type:
Annotated[str | None, IOAttrs(‘e’, store_default=False)]
- delay_seconds¶
How long to wait before proceeding with remaining response (can be useful when waiting for server progress in a loop).
- Type:
Annotated[float, IOAttrs(‘d’, store_default=False)]
- login¶
If present, a token that should be stored client-side and passed with subsequent commands.
- Type:
Annotated[str | None, IOAttrs(‘l’, store_default=False)]
- logout¶
If True, any existing client-side token should be discarded.
- Type:
Annotated[bool, IOAttrs(‘lo’, store_default=False)]
- dir_manifest¶
If present, client should generate a manifest of this dir. It should be added to end_command args as ‘manifest’.
- Type:
Annotated[str | None, IOAttrs(‘man’, store_default=False)]
- uploads¶
If present, client should upload the requested files (arg1) individually to a server command (arg2) with provided args (arg3).
- Type:
Annotated[tuple[list[str], str, dict] | None, IOAttrs(‘u’, store_default=False)]
- uploads_inline¶
If present, a list of pathnames that should be gzipped and uploaded to an ‘uploads_inline’ bytes dict in end_command args. This should be limited to relatively small files.
- Type:
Annotated[list[str] | None, IOAttrs(‘uinl’, store_default=False)]
- deletes¶
If present, file paths that should be deleted on the client.
- Type:
Annotated[list[str] | None, IOAttrs(‘dlt’, store_default=False)]
- downloads¶
If present, describes files the client should individually request from the server if not already present on the client.
- downloads_inline¶
If present, pathnames mapped to gzipped data to be written to the client. This should only be used for relatively small files as they are all included inline as part of the response.
- Type:
Annotated[dict[str, bytes] | None, IOAttrs(‘dinl’, store_default=False)]
- dir_prune_empty¶
If present, all empty dirs under this one should be removed.
- Type:
Annotated[str | None, IOAttrs(‘dpe’, store_default=False)]
- open_url¶
If present, url to display to the user.
- Type:
Annotated[str | None, IOAttrs(‘url’, store_default=False)]
- input_prompt¶
If present, a line of input is read and placed into end_command args as ‘input’. The first value is the prompt printed before reading and the second is whether it should be read as a password (without echoing to the terminal).
- Type:
Annotated[tuple[str, bool] | None, IOAttrs(‘inp’, store_default=False)]
- end_message¶
If present, a message that should be printed after all other response processing is done.
- Type:
Annotated[str | None, IOAttrs(‘em’, store_default=False)]
- end_message_end¶
end arg for end_message print() call.
- Type:
Annotated[str, IOAttrs(‘eme’, store_default=False)]
- end_command¶
If present, this command is run with these args at the end of response processing.
- Type:
Annotated[tuple[str, dict] | None, IOAttrs(‘ec’, store_default=False)]
- class Downloads(basepath: Annotated[str | None, IOAttrs('p')], cmd: Annotated[str, IOAttrs('c')], baseargs: Annotated[dict[str, str], IOAttrs('a')], entries: Annotated[list[Entry], IOAttrs('e')])[source]¶
Bases:
object
Info about downloads included in a response.
- class Entry(path: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b65c4a0>], args: ~typing.Annotated[dict[str, str], <efro.dataclassio.IOAttrs object at 0x7ffa9b65c440>])[source]¶
Bases:
object
Individual download.
- args: IOAttrs object at 0x7ffa9b65d2e0>]¶
- path: IOAttrs object at 0x7ffa9b65d8b0>]¶
bacommon.build module¶
Functionality related to game builds.
- class bacommon.build.BuildInfoSet(builds: Annotated[list[Entry], IOAttrs('builds')] = <factory>)[source]¶
Bases:
object
Set of build infos.
- class Entry(filename: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b448860>], size: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b448830>], version: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b6095b0>], build_number: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9c0b14c0>], checksum: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b609c10>], createtime: ~typing.Annotated[~datetime.datetime, <efro.dataclassio.IOAttrs object at 0x7ffa9c23ad80>])[source]¶
Bases:
object
Info about a particular app build.
- build_number: IOAttrs object at 0x7ffa9b659c40>]¶
- checksum: IOAttrs object at 0x7ffa9b65b9b0>]¶
- createtime: IOAttrs object at 0x7ffa9b65dbe0>]¶
- filename: IOAttrs object at 0x7ffa9b44a2d0>]¶
- size: IOAttrs object at 0x7ffa9b65ef60>]¶
- version: IOAttrs object at 0x7ffa9b6422d0>]¶
bacommon.cloud module¶
Functionality related to cloud functionality.
- class bacommon.cloud.BSPrivatePartyMessage(need_datacode: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b3ac8f0>])[source]¶
Bases:
Message
Message asking about info we need for private-party UI.
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- need_datacode: IOAttrs object at 0x7ffa9b357d10>]¶
- class bacommon.cloud.BSPrivatePartyResponse(success: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b2775c0>], tokens: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b276ff0>], gold_pass: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b642ff0>], datacode: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b678620>])[source]¶
Bases:
Response
Here’s that private party UI info you asked for, boss.
- datacode: IOAttrs object at 0x7ffa9b643f50>]¶
- gold_pass: IOAttrs object at 0x7ffa9b6790a0>]¶
- success: IOAttrs object at 0x7ffa9b2773b0>]¶
- tokens: IOAttrs object at 0x7ffa9b277bf0>]¶
- class bacommon.cloud.LoginProxyCompleteMessage(proxyid: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b6cd760>])[source]¶
Bases:
Message
Just so you know, we’re done with this proxy.
- proxyid: IOAttrs object at 0x7ffa9b2b4410>]¶
- class bacommon.cloud.LoginProxyRequestMessage[source]¶
Bases:
Message
Request send to the cloud to ask for a login-proxy.
- class bacommon.cloud.LoginProxyRequestResponse(url: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b5190>], url_overlay: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b5160>], proxyid: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9c23bcb0>], proxykey: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b448590>])[source]¶
Bases:
Response
Response to a request for a login proxy.
- proxyid: IOAttrs object at 0x7ffa9b659cd0>]¶
- proxykey: IOAttrs object at 0x7ffa9b659250>]¶
- url: IOAttrs object at 0x7ffa9b5aa9c0>]¶
- url_overlay: IOAttrs object at 0x7ffa9b65c3e0>]¶
- class bacommon.cloud.LoginProxyStateQueryMessage(proxyid: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b41a0>], proxykey: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b4170>])[source]¶
Bases:
Message
Soo.. how is that login proxy going?
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- proxyid: IOAttrs object at 0x7ffa9b2b6a20>]¶
- proxykey: IOAttrs object at 0x7ffa9b44a2d0>]¶
- class bacommon.cloud.LoginProxyStateQueryResponse(state: Annotated[State, IOAttrs('s')], credentials: Annotated[str | None, IOAttrs('tk')])[source]¶
Bases:
Response
Here’s the info on that login-proxy you asked about, boss.
- class bacommon.cloud.ManageAccountMessage(weblocation: ~typing.Annotated[~bacommon.cloud.WebLocation, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b7b00>] = WebLocation.ACCOUNT_EDITOR)[source]¶
Bases:
Message
Message asking for a manage-account url.
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- weblocation: IOAttrs object at 0x7ffa9b2d8230>] = 'e'¶
- class bacommon.cloud.ManageAccountResponse(url: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2d85c0>])[source]¶
Bases:
Response
Here’s that sign-in result you asked for, boss.
- url: IOAttrs object at 0x7ffa9b2d8fb0>]¶
- class bacommon.cloud.MerchAvailabilityResponse(url: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2d9430>])[source]¶
Bases:
Response
About that merch…
- url: IOAttrs object at 0x7ffa9b2d9ee0>]¶
- class bacommon.cloud.SendInfoMessage(description: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2dad80>])[source]¶
Bases:
Message
User is using the send-info function
- description: IOAttrs object at 0x7ffa9b2db5f0>]¶
- class bacommon.cloud.SendInfoResponse(handled: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b277a70>], message: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b65ce00>] = None, legacy_code: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b6cc7d0>] = None)[source]¶
Bases:
Response
Response to sending into the server.
- handled: IOAttrs object at 0x7ffa9b2dbef0>]¶
- legacy_code: IOAttrs object at 0x7ffa9b3af170>] = None¶
- message: IOAttrs object at 0x7ffa9b2f0650>] = None¶
- class bacommon.cloud.SignInMessage(login_type: ~typing.Annotated[~bacommon.login.LoginType, <efro.dataclassio.IOAttrs object at 0x7ffa9b2f0b30>], sign_in_token: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2f0b00>], description: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b6430e0>], apptime: ~typing.Annotated[float, <efro.dataclassio.IOAttrs object at 0x7ffa9b67b350>])[source]¶
Bases:
Message
Can I sign in please?
- apptime: IOAttrs object at 0x7ffa9b643f50>]¶
- description: IOAttrs object at 0x7ffa9b274920>]¶
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- login_type: IOAttrs object at 0x7ffa9b678680>]¶
- sign_in_token: IOAttrs object at 0x7ffa9b277bc0>]¶
- class bacommon.cloud.SignInResponse(credentials: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2f04d0>])[source]¶
Bases:
Response
Here’s that sign-in result you asked for, boss.
- credentials: IOAttrs object at 0x7ffa9b2f2270>]¶
- class bacommon.cloud.StoreQueryMessage[source]¶
Bases:
Message
Message asking about purchasable stuff and store related state.
- class bacommon.cloud.StoreQueryResponse(result: Annotated[Result, IOAttrs('r')], tokens: Annotated[int, IOAttrs('t')], gold_pass: Annotated[bool, IOAttrs('g')], available_purchases: Annotated[list[Purchase], IOAttrs('p')], token_info_url: Annotated[str, IOAttrs('tiu')])[source]¶
Bases:
Response
Here’s that store info you asked for, boss.
- class Purchase(purchaseid: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b2f2e10>])[source]¶
Bases:
object
Info about a purchasable thing.
- purchaseid: IOAttrs object at 0x7ffa9b2f37a0>]¶
- class bacommon.cloud.TestMessage(testfoo: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b3108f0>])[source]¶
Bases:
Message
Can I get some of that workspace action?
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- testfoo: IOAttrs object at 0x7ffa9b310bf0>]¶
- class bacommon.cloud.TestResponse(testfoo: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b310f50>])[source]¶
Bases:
Response
Here’s that workspace you asked for, boss.
- testfoo: IOAttrs object at 0x7ffa9b311970>]¶
- class bacommon.cloud.WebLocation(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Set of places we can be directed on ballistica.net.
- ACCOUNT_DELETE_SECTION = 'd'¶
- ACCOUNT_EDITOR = 'e'¶
- class bacommon.cloud.WorkspaceFetchMessage(workspaceid: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b312000>], state: ~typing.Annotated[~bacommon.cloud.WorkspaceFetchState, <efro.dataclassio.IOAttrs object at 0x7ffa9b311fa0>])[source]¶
Bases:
Message
Can I get some of that workspace action?
- classmethod get_response_types() list[type[Response] | None] [source]¶
Return all Response types this Message can return when sent.
The default implementation specifies a None return type.
- state: IOAttrs object at 0x7ffa9b312e70>]¶
- workspaceid: IOAttrs object at 0x7ffa9b313440>]¶
- class bacommon.cloud.WorkspaceFetchResponse(state: ~typing.Annotated[~bacommon.cloud.WorkspaceFetchState, <efro.dataclassio.IOAttrs object at 0x7ffa9b313680>], deletes: ~typing.Annotated[list[str], <efro.dataclassio.IOAttrs object at 0x7ffa9b3136e0>] = <factory>, downloads_inline: ~typing.Annotated[dict[str, bytes], <efro.dataclassio.IOAttrs object at 0x7ffa9b65b620>] = <factory>, done: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9b449430>] = False)[source]¶
Bases:
Response
Here’s that workspace you asked for, boss.
- deletes: IOAttrs object at 0x7ffa9b65c3e0>]¶
- done: IOAttrs object at 0x7ffa9b67a510>] = False¶
- downloads_inline: IOAttrs object at 0x7ffa9b2b6690>]¶
- state: IOAttrs object at 0x7ffa9b2d8530>]¶
- class bacommon.cloud.WorkspaceFetchState(manifest: ~typing.Annotated[~bacommon.transfer.DirectoryManifest, <efro.dataclassio.IOAttrs object at 0x7ffa9b33c680>], iteration: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b2d9d60>] = 0, total_deletes: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b2d9e20>] = 0, total_downloads: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b2d9d00>] = 0, total_up_to_date: ~typing.Annotated[int | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2dacf0>] = None)[source]¶
Bases:
object
Common state data for a workspace fetch.
- iteration: IOAttrs object at 0x7ffa9b33d0d0>] = 0¶
- manifest: IOAttrs object at 0x7ffa9b33d6a0>]¶
- total_deletes: IOAttrs object at 0x7ffa9b2b5c10>] = 0¶
- total_downloads: IOAttrs object at 0x7ffa9b643650>] = 0¶
- total_up_to_date: IOAttrs object at 0x7ffa9b2f16a0>] = None¶
bacommon.loggercontrol module¶
System for managing loggers.
- class bacommon.loggercontrol.LoggerControlConfig(levels: ~typing.Annotated[dict[str, int], <efro.dataclassio.IOAttrs object at 0x7ffa9b13f0e0>] = <factory>)[source]¶
Bases:
object
A logging level configuration that applies to all loggers.
Any loggers not explicitly contained in the configuration will be set to NOTSET.
- apply_diff(diffconfig: LoggerControlConfig) LoggerControlConfig [source]¶
Apply a diff config to ourself.
- diff(baseconfig: LoggerControlConfig) LoggerControlConfig [source]¶
Return a config containing only changes compared to a base config.
Note that this omits all NOTSET values that resolve to NOTSET in the base config.
This diffed config can later be used with apply_diff() against the base config to recreate the state represented by self.
- levels: IOAttrs object at 0x7ffa9b13fb00>]¶
bacommon.logging module¶
Logging functionality.
- bacommon.logging.get_base_logger_control_config_client() LoggerControlConfig [source]¶
Return the logger-control-config used by the ballistica client.
bacommon.login module¶
Functionality related to cloud based assets.
- class bacommon.login.LoginType(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Types of logins available.
- EMAIL = 'email'¶
- GAME_CENTER = 'game_center'¶
- GPGS = 'gpgs'¶
- property displayname: str¶
Human readable name for this value.
- property displaynameshort: str¶
Human readable name for this value.
bacommon.net module¶
Network related data and functionality.
- class bacommon.net.PrivateHostingConfig(session_type: str = 'ffa', playlist_name: str = 'Unknown', randomize: bool = False, tutorial: bool = False, custom_team_names: tuple[str, str] | None = None, custom_team_colors: tuple[tuple[float, float, float], tuple[float, float, float]] | None = None, playlist: list[dict[str, Any]] | None = None, exit_minutes: float = 120.0, exit_minutes_unclean: float = 180.0, exit_minutes_idle: float = 10.0)[source]¶
Bases:
object
Config provided when hosting a private party.
- custom_team_colors: tuple[tuple[float, float, float], tuple[float, float, float]] | None = None¶
- custom_team_names: tuple[str, str] | None = None¶
- exit_minutes: float = 120.0¶
- exit_minutes_idle: float = 10.0¶
- exit_minutes_unclean: float = 180.0¶
- playlist: list[dict[str, Any]] | None = None¶
- playlist_name: str = 'Unknown'¶
- randomize: bool = False¶
- session_type: str = 'ffa'¶
- tutorial: bool = False¶
- class bacommon.net.PrivateHostingState(unavailable_error: str | None = None, party_code: str | None = None, tickets_to_host_now: int = 0, tokens_to_host_now: int = 0, minutes_until_free_host: float | None = None, free_host_minutes_remaining: float | None = None)[source]¶
Bases:
object
Combined state of whether we’re hosting, whether we can, etc.
- free_host_minutes_remaining: float | None = None¶
- minutes_until_free_host: float | None = None¶
- party_code: str | None = None¶
- tickets_to_host_now: int = 0¶
- tokens_to_host_now: int = 0¶
- class bacommon.net.PrivatePartyConnectResult(error: str | None = None, address4: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b02c950>] = None, address6: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b02c830>] = None, port: int | None = None, password: str | None = None)[source]¶
Bases:
object
Info about a server we get back when connecting.
- address4: IOAttrs object at 0x7ffa9afe7b30>] = None¶
- address6: IOAttrs object at 0x7ffa9afe6540>] = None¶
- error: str | None = None¶
- password: str | None = None¶
- port: int | None = None¶
- class bacommon.net.ServerNodeEntry(zone: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b02dd00>], latlong: ~typing.Annotated[tuple[float, float] | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b02dca0>], address: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9b310920>], port: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9b310950>])[source]¶
Bases:
object
Information about a specific server.
- address: IOAttrs object at 0x7ffa9b312d50>]¶
- latlong: IOAttrs object at 0x7ffa9b3131d0>]¶
- port: IOAttrs object at 0x7ffa9b2b4380>]¶
- zone: IOAttrs object at 0x7ffa9b449c10>]¶
- class bacommon.net.ServerNodeQueryResponse(time: ~typing.Annotated[~datetime.datetime, <efro.dataclassio.IOAttrs object at 0x7ffa9b02d370>], latlong: ~typing.Annotated[tuple[float, float] | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b02d310>], ping_per_dist: ~typing.Annotated[float, <efro.dataclassio.IOAttrs object at 0x7ffa9b33c140>], max_dist: ~typing.Annotated[float, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b5c40>], debug_log_seconds: ~typing.Annotated[float | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b69c0>] = None, error: ~typing.Annotated[str | None, <efro.dataclassio.IOAttrs object at 0x7ffa9b2b6c30>] = None, servers: ~typing.Annotated[list[~bacommon.net.ServerNodeEntry], <efro.dataclassio.IOAttrs object at 0x7ffa9b33c320>] = <factory>)[source]¶
Bases:
object
A response to a query about server-nodes.
- debug_log_seconds: IOAttrs object at 0x7ffa9b2d8fe0>] = None¶
- error: IOAttrs object at 0x7ffa9b2d8d40>] = None¶
- latlong: IOAttrs object at 0x7ffa9b33d5b0>]¶
- max_dist: IOAttrs object at 0x7ffa9b449730>]¶
- ping_per_dist: IOAttrs object at 0x7ffa9ae599d0>]¶
- servers: IOAttrs object at 0x7ffa9ae5ab70>]¶
- time: IOAttrs object at 0x7ffa9ae5ac90>]¶
bacommon.servermanager module¶
Functionality related to the server manager script.
- class bacommon.servermanager.ChatMessageCommand(message: str, clients: list[int] | None)[source]¶
Bases:
ServerCommand
Chat message from the server.
- clients: list[int] | None¶
- message: str¶
- class bacommon.servermanager.ClientListCommand[source]¶
Bases:
ServerCommand
Print a list of clients.
- class bacommon.servermanager.KickCommand(client_id: int, ban_time: int | None)[source]¶
Bases:
ServerCommand
Kick a client.
- ban_time: int | None¶
- client_id: int¶
- class bacommon.servermanager.ScreenMessageCommand(message: str, color: tuple[float, float, float] | None, clients: list[int] | None)[source]¶
Bases:
ServerCommand
Screen-message from the server.
- clients: list[int] | None¶
- color: tuple[float, float, float] | None¶
- message: str¶
- class bacommon.servermanager.ServerCommand[source]¶
Bases:
object
Base class for commands that can be sent to the server.
- class bacommon.servermanager.ServerConfig(party_name: str = 'FFA', party_is_public: bool = True, authenticate_clients: bool = True, admins: list[str] = <factory>, enable_default_kick_voting: bool = True, public_ipv4_address: str | None = None, public_ipv6_address: str | None = None, port: int = 43210, max_party_size: int = 6, session_max_players_override: int | None = None, session_type: str = 'ffa', playlist_code: int | None = None, playlist_inline: list[dict[str, ~typing.Any]] | None = None, playlist_shuffle: bool = True, auto_balance_teams: bool = True, coop_campaign: str = 'Easy', coop_level: str = 'Onslaught Training', enable_telnet: bool = False, teams_series_length: int = 7, ffa_series_length: int = 24, stats_url: str | None = None, clean_exit_minutes: float | None = None, unclean_exit_minutes: float | None = None, idle_exit_minutes: float | None = None, show_tutorial: bool = False, team_names: tuple[str, str] | None = None, team_colors: tuple[tuple[float, float, float], tuple[float, float, float]] | None = None, enable_queue: bool = True, protocol_version: int | None = None, stress_test_players: int | None = None, player_rejoin_cooldown: float = 10.0)[source]¶
Bases:
object
Configuration for the server manager app (<appname>_server).
- admins: list[str]¶
- authenticate_clients: bool = True¶
- auto_balance_teams: bool = True¶
- clean_exit_minutes: float | None = None¶
- coop_campaign: str = 'Easy'¶
- coop_level: str = 'Onslaught Training'¶
- enable_default_kick_voting: bool = True¶
- enable_queue: bool = True¶
- enable_telnet: bool = False¶
- ffa_series_length: int = 24¶
- idle_exit_minutes: float | None = None¶
- max_party_size: int = 6¶
- party_is_public: bool = True¶
- party_name: str = 'FFA'¶
- player_rejoin_cooldown: float = 10.0¶
- playlist_code: int | None = None¶
- playlist_inline: list[dict[str, Any]] | None = None¶
- playlist_shuffle: bool = True¶
- port: int = 43210¶
- protocol_version: int | None = None¶
- public_ipv4_address: str | None = None¶
- public_ipv6_address: str | None = None¶
- session_max_players_override: int | None = None¶
- session_type: str = 'ffa'¶
- show_tutorial: bool = False¶
- stats_url: str | None = None¶
- stress_test_players: int | None = None¶
- team_colors: tuple[tuple[float, float, float], tuple[float, float, float]] | None = None¶
- team_names: tuple[str, str] | None = None¶
- teams_series_length: int = 7¶
- unclean_exit_minutes: float | None = None¶
- class bacommon.servermanager.ShutdownCommand(reason: ShutdownReason, immediate: bool)[source]¶
Bases:
ServerCommand
Tells the server to shut down.
- immediate: bool¶
- reason: ShutdownReason¶
- class bacommon.servermanager.ShutdownReason(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
Reason a server is shutting down.
- NONE = 'none'¶
- RESTARTING = 'restarting'¶
- class bacommon.servermanager.StartServerModeCommand(config: ServerConfig)[source]¶
Bases:
ServerCommand
Tells the app to switch into ‘server’ mode.
- config: ServerConfig¶
bacommon.transfer module¶
Functionality related to transferring files/data.
- class bacommon.transfer.DirectoryManifest(files: ~typing.Annotated[dict[str, ~bacommon.transfer.DirectoryManifestFile], <efro.dataclassio.IOAttrs object at 0x7ffa9aca2360>], exists: ~typing.Annotated[bool, <efro.dataclassio.IOAttrs object at 0x7ffa9aca00e0>])[source]¶
Bases:
object
Contains a summary of files in a directory.
- classmethod create_from_disk(path: Path) DirectoryManifest [source]¶
Create a manifest from a directory on disk.
- exists: IOAttrs object at 0x7ffa9acec050>]¶
- files: IOAttrs object at 0x7ffa9acee090>]¶
- class bacommon.transfer.DirectoryManifestFile(hash_sha256: ~typing.Annotated[str, <efro.dataclassio.IOAttrs object at 0x7ffa9aca2fc0>], size: ~typing.Annotated[int, <efro.dataclassio.IOAttrs object at 0x7ffa9aca2120>])[source]¶
Bases:
object
Describes a file in a manifest.
- hash_sha256: IOAttrs object at 0x7ffa9ab82a80>]¶
- size: IOAttrs object at 0x7ffa9b311d30>]¶
Module contents¶
Functionality and data common to ballistica client and server components.