Commit 8ee25338 authored by Yakubov, Sergey's avatar Yakubov, Sergey
Browse files

Merge branch '1-create-python-mvvm-package' into 'main'

Resolve "Create python mvvm package"

Closes #1

See merge request ndip/public-packages/py-mvvm!1
parents 1187fced 8ed1200a
Loading
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+3 −0
Original line number Diff line number Diff line
.idea
dist
__pycache__
 No newline at end of file

.gitlab-ci.yml

0 → 100644
+34 −0
Original line number Diff line number Diff line
stages:
  - package

variables:
  GIT_STRATEGY: clone

# This import is for the func_rse_docker_* functions
before_script:
  - curl https://code.ornl.gov/rse-deployment/rse-sharables/raw/master/rse-bash-modules.sh -O
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  - source rse-bash-modules.sh
  - func_rse_docker_cleanup

after_script:
  - curl https://code.ornl.gov/rse-deployment/rse-sharables/raw/master/rse-bash-modules.sh -O
  - source rse-bash-modules.sh
  - func_rse_docker_cleanup
  - sudo chown -R gitlab-runner .

package-build:
  stage: package
  script:
    - >
      docker run
      -v `pwd`:/src      
      code.ornl.gov:4567/rse/images/python:3.10-slim
      bash -c "cd /src && pip install poetry && poetry build && 
      poetry config repositories.gitlab_repo ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi && 
      poetry publish -u gitlab-ci-token -p ${CI_JOB_TOKEN} -r gitlab_repo
      "
  when: manual
  tags:
    - rse-multi-builder

poetry.lock

0 → 100644
+647 −0

File added.

Preview size limit exceeded, changes collapsed.

py_mvvm/__init__.py

0 → 100644
+0 −0

Empty file added.

py_mvvm/interface.py

0 → 100644
+20 −0
Original line number Diff line number Diff line
import functools
from abc import ABC, abstractmethod


class BindingInterface(ABC):
    @abstractmethod
    def new_bind(self, linked_object=None, linked_object_arguments=None, callback_after_update=None):
        raise Exception("Please implement in a concrete class")


def rsetattr(obj, attr, val):
    pre, _, post = attr.rpartition('.')
    return setattr(rgetattr(obj, pre) if pre else obj, post, val)


def rgetattr(obj, attr, *args):
    def _getattr(obj, attr):
        return getattr(obj, attr, *args)

    return functools.reduce(_getattr, [obj] + attr.split('.'))
Loading