Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/workflows/commit-ibflex.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.7, 3.8]
python-version: ["3.11", "3.12"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# - name: Cache pip
# uses: actions/cache@v2
# uses: actions/cache@v4
# with:
# path: ~/.cache/pip # This path is specific to Ubuntu
# # Look to see if there is a cache hit for the corresponding requirements file
Expand All @@ -29,5 +29,5 @@ jobs:
run: pip install -r requirements-development.txt
- name: Static analysis with mypy
run: mypy ibflex tests
- name: Test with nose
run: nosetests -dsv --with-coverage --cover-package ibflex tests/*.py
- name: Test with pytest
run: pytest -v --cov=ibflex tests/
11 changes: 0 additions & 11 deletions ibflex/Types.py
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,6 @@ class EquitySummaryByReportDateInBase(FlexElement):
physDel: Optional[decimal.Decimal] = None
physDelLong: Optional[decimal.Decimal] = None
physDelShort: Optional[decimal.Decimal] = None
currency: Optional[str] = None
Comment thread
vroonhof marked this conversation as resolved.
insuredBankDepositRedemptionCashComponentLong: Optional[decimal.Decimal] = None
insuredBankDepositRedemptionCashComponentShort: Optional[decimal.Decimal] = None
incentiveCouponAccrualsLong: Optional[decimal.Decimal] = None
Expand Down Expand Up @@ -1454,30 +1453,20 @@ class SymbolSummary(FlexElement):
commodityType: Optional[str] = None
cost: Optional[decimal.Decimal] = None
deliveryType: Optional[str] = None
exchOrderId: Optional[str] = None
extExecID: Optional[str] = None
fifoPnlRealized: Optional[decimal.Decimal] = None
fineness: Optional[decimal.Decimal] = None
holdingPeriodDateTime: Optional[datetime.datetime] = None
ibCommission: Optional[decimal.Decimal] = None
ibCommissionCurrency: Optional[str] = None
ibExecID: Optional[str] = None
ibOrderID: Optional[str] = None
initialInvestment: Optional[bool] = None
mtmPnl: Optional[decimal.Decimal] = None
netCash: Optional[decimal.Decimal] = None
netCashInBase: Optional[decimal.Decimal] = None
notes: Optional[str] = None
openCloseIndicator: Optional[enums.OpenClose] = None
openDateTime: Optional[datetime.datetime] = None
origOrderID: Optional[str] = None
rtn: Optional[str] = None
serialNumber: Optional[str] = None
settleDateTarget: Optional[datetime.date] = None
taxes: Optional[decimal.Decimal] = None
tradeMoney: Optional[decimal.Decimal] = None
tradePrice: Optional[decimal.Decimal] = None
transactionID: Optional[str] = None
weight: Optional[str] = None
whenRealized: Optional[datetime.datetime] = None
whenReopened: Optional[datetime.datetime] = None
Expand Down
9 changes: 5 additions & 4 deletions ibflex/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import decimal
import itertools
import functools
from typing import Tuple, Union, Optional, Any, Callable, Iterable
from typing import Tuple, Union, Optional, Any, Callable, Iterable, cast

from ibflex import Types, enums, utils

Expand Down Expand Up @@ -107,7 +107,7 @@ def parse(source) -> Types.FlexQueryResponse:

def parse_element(
elem: ET.Element
) -> Union[Types.FlexElement, Tuple[Types.FlexElement, ...]]:
) -> Optional[Union[Types.FlexElement, Tuple[Types.FlexElement, ...]]]:
"""Distinguish XML data element from container element; dispatch accordingly.

Flex format stores data as XML element attributes, while container elements
Expand Down Expand Up @@ -150,8 +150,8 @@ def parse_element_container(elem: ET.Element) -> Tuple[Types.FlexElement, ...]:

instances = tuple(parse_data_element(child) for child in elem)
if _UNKNOWN_ATTRIBUTE_TOLERANCE:
instances = tuple(inst for inst in instances if inst is not None)
return instances
instances = cast(Tuple[Types.FlexElement, ...], tuple(inst for inst in instances if inst is not None))
return cast(Tuple[Types.FlexElement, ...], instances)


def parse_data_element(
Expand Down Expand Up @@ -194,6 +194,7 @@ def parse_data_element(
if contained_elements:
assert elem.tag in ("FlexQueryResponse", "FlexStatement")
if _UNKNOWN_ATTRIBUTE_TOLERANCE:
assert known is not None
# Filter out unknown or unparseable contained elements
contained_elements = {
k: v for k, v in contained_elements.items()
Expand Down
4 changes: 2 additions & 2 deletions requirements-development.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ requests
types-requests

# test running
nose
coverage
pytest
pytest-cov
pylint
mypy
black
8 changes: 2 additions & 6 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
[nosetests]
verbosity=2
detailed-errors = 1
with-coverage = 1
nocapture = 1
cover-package = ibflex
[tool:pytest]
addopts = -v

[flake8]
max-line-length = 88