Synchronous / Asynchronous HTTPX extension for NationStates
Project description
sans
Synchronous / Asynchronous NationStates
A fully typed extension for HTTPX for the NationStates API.
Installing
python3 -m pip install -U sans
Development version:
python3 -m pip install -U https://github.com/zephyrkul/sans/archive/master.zip#egg=sans
Support
If you need help with using sans, find a bug, or have a feature request, feel free to find me in the NS Coders Discord server, or file an issue.
Examples
Synchronous
import sans
from xml.etree import ElementTree as ET
def main():
sans.set_agent("Darcania")
request = sans.Nation(
"darcania",
"fullname population flag census",
mode="score",
scale="65 66",
)
root = sans.get(request).xml
sans.indent(root)
print(ET.tostring(root, encoding="unicode"))
with sans.stream("GET", sans.RegionsDump()) as response:
for region in response.iter_xml():
sans.indent(region)
print(ET.tostring(region, encoding="unicode"))
if __name__ == "__main__":
main()
Asynchronous
import asyncio
import sans
from xml.etree import ElementTree as ET
async def main():
sans.set_agent("Darcania")
async with sans.AsyncClient() as client:
request = sans.Nation(
"darcania",
"fullname population flag census",
mode="score",
scale="65 66",
)
root = (await client.get(request)).xml
sans.indent(root)
print(ET.tostring(root, encoding="unicode"))
async with client.stream("GET", sans.RegionsDump()) as response:
async for region in response.aiter_xml():
sans.indent(region)
print(ET.tostring(region, encoding="unicode"))
if __name__ == "__main__":
asyncio.run(main())
Authentication
auth = sans.NSAuth(password="hunter2")
sans.get(sans.Nation("testlandia", "ping"), auth=auth)
# X-Autologin is automatically retrieved and stored for when the auth object is re-used
print(auth.autologin)
# X-Pin is cached internally for repeated requests
root = sans.get(sans.Nation("testlandia", "packs"), auth=auth).xml
Telegrams
limiter = sans.TelegramLimiter(recruitment=False)
# The Telegram API can be used without a TelegramLimiter, but marking it ahead of time can save an API call.
response = sans.get(sans.Telegram(client="abcd1234", tgid="1234", key="abcdef1234567890", to="testlandia"), auth=limiter)
assert response.content == b"queued"
Server-Sent Events
for event in sans.serversent_events(
client, "move", "founding", "cte", "member", "endo"
).view(regions=["the north pacific"]):
print(event["str"])
Command Line
sans --nation darcania census --scale "65 66" --mode score --agent Darcania
<NATION id="darcania">
<CENSUS>
<SCALE id="65">
<SCORE>8145.00</SCORE>
</SCALE>
<SCALE id="66">
<SCORE>0.00</SCORE>
</SCALE>
</CENSUS>
</NATION>
sans --nation testlandia fullname
<NATION id="testlandia">
<FULLNAME>The Hive Mind of Testlandia</FULLNAME>
</NATION>
sans --region "the north pacific" numnations lastupdate
<REGION id="the_north_pacific">
<LASTUPDATE>1685681810</LASTUPDATE>
<NUMNATIONS>9535</NUMNATIONS>
</REGION>
sans --quit
No query provided. Exiting...
Requirements
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file sans-1.3.0.tar.gz
.
File metadata
- Download URL: sans-1.3.0.tar.gz
- Upload date:
- Size: 31.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
56d3d22f05bdc9a2e74081cccb86b9a57cf9250e2425b0c761b9926ece931c06
|
|
MD5 |
559691f8e3690b443ce32d60d3a2c4ba
|
|
BLAKE2b-256 |
052ddd1fa8e8a2040a95c7521661fdf82ab15bac2777af9aeea5c8e6c70a1f5e
|
Provenance
The following attestation bundles were made for sans-1.3.0.tar.gz
:
Publisher:
pythonpublish.yml
on Zephyrkul/sans
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
sans-1.3.0.tar.gz
-
Subject digest:
56d3d22f05bdc9a2e74081cccb86b9a57cf9250e2425b0c761b9926ece931c06
- Sigstore transparency entry: 226833398
- Sigstore integration time:
-
Permalink:
Zephyrkul/sans@0dcf83ea254f7aae1fe8343acfd5cae623e92ffb
-
Branch / Tag:
refs/tags/1.3.0
- Owner: https://github.com/Zephyrkul
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
pythonpublish.yml@0dcf83ea254f7aae1fe8343acfd5cae623e92ffb
-
Trigger Event:
release
-
Statement type:
File details
Details for the file sans-1.3.0-py3-none-any.whl
.
File metadata
- Download URL: sans-1.3.0-py3-none-any.whl
- Upload date:
- Size: 27.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
4c55796794ae7a3a00aa5796b60c3fef150141f8f4a25921e11cb39f28163e48
|
|
MD5 |
03a73830d7205df8045f88ac8b7fb701
|
|
BLAKE2b-256 |
b1f9b20a0da1e8376c15c6b5beed39018bda76a2260ad62fd7ee0487c1bfdec9
|
Provenance
The following attestation bundles were made for sans-1.3.0-py3-none-any.whl
:
Publisher:
pythonpublish.yml
on Zephyrkul/sans
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
sans-1.3.0-py3-none-any.whl
-
Subject digest:
4c55796794ae7a3a00aa5796b60c3fef150141f8f4a25921e11cb39f28163e48
- Sigstore transparency entry: 226833399
- Sigstore integration time:
-
Permalink:
Zephyrkul/sans@0dcf83ea254f7aae1fe8343acfd5cae623e92ffb
-
Branch / Tag:
refs/tags/1.3.0
- Owner: https://github.com/Zephyrkul
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
pythonpublish.yml@0dcf83ea254f7aae1fe8343acfd5cae623e92ffb
-
Trigger Event:
release
-
Statement type: